velocious 1.0.449 → 1.0.451

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 (636) hide show
  1. package/README.md +1 -1
  2. package/build/application.js +4 -4
  3. package/build/authorization/ability.js +8 -8
  4. package/build/authorization/base-resource.js +4 -4
  5. package/build/background-jobs/cron-expression.js +1 -1
  6. package/build/background-jobs/forked-runner-child.js +1 -1
  7. package/build/background-jobs/job-registry.js +1 -1
  8. package/build/background-jobs/job-runner.js +1 -1
  9. package/build/background-jobs/job.js +1 -1
  10. package/build/background-jobs/json-socket.js +4 -4
  11. package/build/background-jobs/main.js +21 -21
  12. package/build/background-jobs/scheduler.js +7 -7
  13. package/build/background-jobs/store.js +7 -7
  14. package/build/background-jobs/web/controller.js +2 -2
  15. package/build/background-jobs/worker.js +12 -12
  16. package/build/beacon/client.js +11 -8
  17. package/build/beacon/in-process-broker.js +2 -2
  18. package/build/beacon/in-process-client.js +2 -2
  19. package/build/beacon/server.js +3 -3
  20. package/build/cli/browser-cli.js +1 -1
  21. package/build/cli/commands/db/base-command.js +2 -2
  22. package/build/cli/index.js +2 -2
  23. package/build/cli/tenant-database-command-helper.js +3 -3
  24. package/build/cli/use-browser-cli.js +1 -1
  25. package/build/configuration-types.js +3 -1
  26. package/build/configuration.js +38 -38
  27. package/build/controller.js +8 -8
  28. package/build/current-configuration.js +1 -1
  29. package/build/database/annotations-async-hooks.js +2 -2
  30. package/build/database/annotations.js +3 -3
  31. package/build/database/drivers/base-column.js +1 -1
  32. package/build/database/drivers/base-foreign-key.js +1 -1
  33. package/build/database/drivers/base-table.js +1 -1
  34. package/build/database/drivers/base.js +10 -10
  35. package/build/database/drivers/mssql/index.js +1 -1
  36. package/build/database/drivers/mssql/table.js +1 -1
  37. package/build/database/drivers/mysql/index.js +3 -3
  38. package/build/database/drivers/mysql/query.js +1 -1
  39. package/build/database/drivers/mysql/table.js +1 -1
  40. package/build/database/drivers/pgsql/index.js +2 -2
  41. package/build/database/drivers/sqlite/base.js +16 -16
  42. package/build/database/drivers/sqlite/index.js +11 -11
  43. package/build/database/drivers/sqlite/index.native.js +1 -1
  44. package/build/database/drivers/sqlite/index.web.js +3 -3
  45. package/build/database/drivers/sqlite/query.js +1 -1
  46. package/build/database/drivers/sqlite/query.web.js +1 -1
  47. package/build/database/drivers/sqlite/sql/alter-table.js +2 -2
  48. package/build/database/drivers/sqlite/table.js +1 -1
  49. package/build/database/migrator/files-finder.js +1 -1
  50. package/build/database/migrator.js +6 -6
  51. package/build/database/pool/async-tracked-multi-connection.js +27 -27
  52. package/build/database/pool/base-methods-forward.js +4 -4
  53. package/build/database/pool/base.js +8 -8
  54. package/build/database/query/from-base.js +1 -1
  55. package/build/database/query/index.js +10 -10
  56. package/build/database/query/join-object.js +3 -3
  57. package/build/database/query/model-class-query.js +39 -39
  58. package/build/database/query/preloader/belongs-to.js +22 -22
  59. package/build/database/query/preloader/has-many.js +20 -20
  60. package/build/database/query/preloader/has-one.js +8 -8
  61. package/build/database/query/preloader/selection.js +3 -3
  62. package/build/database/query/preloader.js +8 -8
  63. package/build/database/query/query-data.js +9 -9
  64. package/build/database/query/where-model-class-hash.js +7 -7
  65. package/build/database/query/with-count.js +9 -9
  66. package/build/database/record/acts-as-list.js +15 -15
  67. package/build/database/record/attachments/handle.js +2 -2
  68. package/build/database/record/attachments/normalize-input.js +12 -12
  69. package/build/database/record/attachments/storage-drivers/s3.js +6 -6
  70. package/build/database/record/attachments/store.js +13 -13
  71. package/build/database/record/index.js +115 -121
  72. package/build/database/record/instance-relationships/base.js +11 -11
  73. package/build/database/record/instance-relationships/belongs-to.js +3 -3
  74. package/build/database/record/instance-relationships/has-many.js +8 -8
  75. package/build/database/record/instance-relationships/has-one.js +7 -7
  76. package/build/database/record/relationships/base.js +2 -2
  77. package/build/database/record/state-machine.js +7 -7
  78. package/build/database/record/validators/presence.js +1 -1
  79. package/build/database/record/validators/uniqueness.js +5 -5
  80. package/build/database/table-data/index.js +4 -4
  81. package/build/environment-handlers/base.js +2 -2
  82. package/build/environment-handlers/browser.js +7 -7
  83. package/build/environment-handlers/node/cli/commands/cli-command-context.js +1 -1
  84. package/build/environment-handlers/node/cli/commands/console.js +4 -4
  85. package/build/environment-handlers/node/cli/commands/db/schema/dump.js +1 -1
  86. package/build/environment-handlers/node/cli/commands/db/schema/load.js +3 -3
  87. package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +836 -60
  88. package/build/environment-handlers/node.js +6 -6
  89. package/build/frontend-model-controller.js +81 -82
  90. package/build/frontend-model-resource/base-resource.js +78 -115
  91. package/build/frontend-models/base.js +162 -149
  92. package/build/frontend-models/clear-pending-debounced-callback.js +1 -1
  93. package/build/frontend-models/event-hook-models.js +2 -2
  94. package/build/frontend-models/outgoing-event-buffer.js +2 -2
  95. package/build/frontend-models/preloader.js +5 -5
  96. package/build/frontend-models/query.js +43 -38
  97. package/build/frontend-models/resource-definition.js +6 -6
  98. package/build/frontend-models/transport-serialization.js +11 -11
  99. package/build/frontend-models/use-destroyed-event.js +10 -10
  100. package/build/frontend-models/use-model-class-event.js +11 -11
  101. package/build/frontend-models/use-updated-event.js +11 -11
  102. package/build/frontend-models/websocket-channel.js +26 -17
  103. package/build/frontend-models/websocket-publishers.js +9 -9
  104. package/build/http-client/response.js +2 -2
  105. package/build/http-server/client/index.js +8 -8
  106. package/build/http-server/client/params-to-object.js +10 -10
  107. package/build/http-server/client/request-buffer/form-data-part.js +2 -2
  108. package/build/http-server/client/request-buffer/index.js +8 -8
  109. package/build/http-server/client/request-parser.js +3 -3
  110. package/build/http-server/client/request-runner.js +6 -6
  111. package/build/http-server/client/request-timing.js +5 -5
  112. package/build/http-server/client/request.js +1 -1
  113. package/build/http-server/client/response.js +5 -5
  114. package/build/http-server/client/websocket-request.js +4 -4
  115. package/build/http-server/client/websocket-session.js +18 -18
  116. package/build/http-server/development-reloader.js +5 -5
  117. package/build/http-server/index.js +12 -12
  118. package/build/http-server/remote-address.js +4 -4
  119. package/build/http-server/server-client.js +3 -3
  120. package/build/http-server/server-lock.js +4 -4
  121. package/build/http-server/websocket-channel-subscribers.js +3 -3
  122. package/build/http-server/websocket-channel.js +1 -1
  123. package/build/http-server/websocket-connection.js +1 -1
  124. package/build/http-server/websocket-event-log-store.js +6 -6
  125. package/build/http-server/websocket-events-host.js +2 -2
  126. package/build/http-server/worker-handler/in-process.js +7 -7
  127. package/build/http-server/worker-handler/index.js +4 -4
  128. package/build/http-server/worker-handler/worker-thread.js +3 -3
  129. package/build/logger/outputs/array-output.js +3 -3
  130. package/build/logger/outputs/console-output.js +1 -1
  131. package/build/logger/outputs/file-output.js +4 -4
  132. package/build/logger/outputs/stdout-output.js +1 -1
  133. package/build/logger.js +10 -10
  134. package/build/mailer/backends/smtp.js +3 -3
  135. package/build/mailer/base.js +8 -8
  136. package/build/mailer/delivery.js +4 -4
  137. package/build/plugins/sqljs-wasm-route-controller.js +1 -1
  138. package/build/routes/base-route.js +6 -6
  139. package/build/routes/basic-route.js +1 -1
  140. package/build/routes/hooks/frontend-model-command-route-hook.js +1 -1
  141. package/build/routes/index.js +1 -1
  142. package/build/routes/plugin-routes.js +1 -1
  143. package/build/routes/resolver.js +11 -11
  144. package/build/routes/resource-route.js +1 -1
  145. package/build/src/application.d.ts +3 -3
  146. package/build/src/application.d.ts.map +1 -1
  147. package/build/src/application.js +5 -5
  148. package/build/src/authorization/ability.d.ts +7 -7
  149. package/build/src/authorization/ability.d.ts.map +1 -1
  150. package/build/src/authorization/ability.js +9 -9
  151. package/build/src/authorization/base-resource.d.ts +1 -1
  152. package/build/src/authorization/base-resource.d.ts.map +1 -1
  153. package/build/src/authorization/base-resource.js +5 -5
  154. package/build/src/background-jobs/cron-expression.js +2 -2
  155. package/build/src/background-jobs/forked-runner-child.js +2 -2
  156. package/build/src/background-jobs/job-registry.d.ts +1 -1
  157. package/build/src/background-jobs/job-registry.d.ts.map +1 -1
  158. package/build/src/background-jobs/job-registry.js +2 -2
  159. package/build/src/background-jobs/job-runner.js +2 -2
  160. package/build/src/background-jobs/job.js +2 -2
  161. package/build/src/background-jobs/json-socket.d.ts +4 -4
  162. package/build/src/background-jobs/json-socket.d.ts.map +1 -1
  163. package/build/src/background-jobs/json-socket.js +5 -5
  164. package/build/src/background-jobs/main.d.ts +18 -18
  165. package/build/src/background-jobs/main.d.ts.map +1 -1
  166. package/build/src/background-jobs/main.js +22 -22
  167. package/build/src/background-jobs/scheduler.d.ts +5 -5
  168. package/build/src/background-jobs/scheduler.d.ts.map +1 -1
  169. package/build/src/background-jobs/scheduler.js +8 -8
  170. package/build/src/background-jobs/store.js +8 -8
  171. package/build/src/background-jobs/web/controller.js +3 -3
  172. package/build/src/background-jobs/worker.d.ts +6 -6
  173. package/build/src/background-jobs/worker.d.ts.map +1 -1
  174. package/build/src/background-jobs/worker.js +13 -13
  175. package/build/src/beacon/client.d.ts +4 -4
  176. package/build/src/beacon/client.d.ts.map +1 -1
  177. package/build/src/beacon/client.js +12 -9
  178. package/build/src/beacon/in-process-broker.d.ts.map +1 -1
  179. package/build/src/beacon/in-process-broker.js +3 -3
  180. package/build/src/beacon/in-process-client.d.ts +1 -1
  181. package/build/src/beacon/in-process-client.d.ts.map +1 -1
  182. package/build/src/beacon/in-process-client.js +3 -3
  183. package/build/src/beacon/server.d.ts +2 -2
  184. package/build/src/beacon/server.d.ts.map +1 -1
  185. package/build/src/beacon/server.js +4 -4
  186. package/build/src/cli/browser-cli.js +2 -2
  187. package/build/src/cli/commands/db/base-command.d.ts +2 -2
  188. package/build/src/cli/commands/db/base-command.d.ts.map +1 -1
  189. package/build/src/cli/commands/db/base-command.js +3 -3
  190. package/build/src/cli/index.js +3 -3
  191. package/build/src/cli/tenant-database-command-helper.d.ts +1 -1
  192. package/build/src/cli/tenant-database-command-helper.d.ts.map +1 -1
  193. package/build/src/cli/tenant-database-command-helper.js +4 -4
  194. package/build/src/cli/use-browser-cli.js +2 -2
  195. package/build/src/configuration-types.d.ts +12 -2
  196. package/build/src/configuration-types.d.ts.map +1 -1
  197. package/build/src/configuration-types.js +4 -2
  198. package/build/src/configuration.d.ts +14 -14
  199. package/build/src/configuration.d.ts.map +1 -1
  200. package/build/src/configuration.js +39 -39
  201. package/build/src/controller.js +10 -10
  202. package/build/src/current-configuration.js +2 -2
  203. package/build/src/database/annotations-async-hooks.js +3 -3
  204. package/build/src/database/annotations.d.ts.map +1 -1
  205. package/build/src/database/annotations.js +4 -4
  206. package/build/src/database/drivers/base-column.d.ts +1 -1
  207. package/build/src/database/drivers/base-column.d.ts.map +1 -1
  208. package/build/src/database/drivers/base-column.js +2 -2
  209. package/build/src/database/drivers/base-foreign-key.d.ts +1 -1
  210. package/build/src/database/drivers/base-foreign-key.d.ts.map +1 -1
  211. package/build/src/database/drivers/base-foreign-key.js +2 -2
  212. package/build/src/database/drivers/base-table.d.ts +1 -1
  213. package/build/src/database/drivers/base-table.d.ts.map +1 -1
  214. package/build/src/database/drivers/base-table.js +2 -2
  215. package/build/src/database/drivers/base.d.ts +6 -6
  216. package/build/src/database/drivers/base.d.ts.map +1 -1
  217. package/build/src/database/drivers/base.js +11 -11
  218. package/build/src/database/drivers/mssql/index.js +2 -2
  219. package/build/src/database/drivers/mssql/table.js +2 -2
  220. package/build/src/database/drivers/mysql/index.js +4 -4
  221. package/build/src/database/drivers/mysql/query.js +2 -2
  222. package/build/src/database/drivers/mysql/table.js +2 -2
  223. package/build/src/database/drivers/pgsql/index.js +3 -3
  224. package/build/src/database/drivers/sqlite/base.d.ts +3 -3
  225. package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
  226. package/build/src/database/drivers/sqlite/base.js +17 -17
  227. package/build/src/database/drivers/sqlite/index.d.ts +4 -4
  228. package/build/src/database/drivers/sqlite/index.d.ts.map +1 -1
  229. package/build/src/database/drivers/sqlite/index.js +12 -12
  230. package/build/src/database/drivers/sqlite/index.native.js +2 -2
  231. package/build/src/database/drivers/sqlite/index.web.d.ts +2 -2
  232. package/build/src/database/drivers/sqlite/index.web.d.ts.map +1 -1
  233. package/build/src/database/drivers/sqlite/index.web.js +4 -4
  234. package/build/src/database/drivers/sqlite/query.js +2 -2
  235. package/build/src/database/drivers/sqlite/query.web.js +2 -2
  236. package/build/src/database/drivers/sqlite/sql/alter-table.js +3 -3
  237. package/build/src/database/drivers/sqlite/table.js +2 -2
  238. package/build/src/database/migrator/files-finder.js +2 -2
  239. package/build/src/database/migrator.d.ts +1 -1
  240. package/build/src/database/migrator.d.ts.map +1 -1
  241. package/build/src/database/migrator.js +7 -7
  242. package/build/src/database/pool/async-tracked-multi-connection.d.ts +9 -9
  243. package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
  244. package/build/src/database/pool/async-tracked-multi-connection.js +28 -28
  245. package/build/src/database/pool/base-methods-forward.js +7 -7
  246. package/build/src/database/pool/base.d.ts +1 -1
  247. package/build/src/database/pool/base.d.ts.map +1 -1
  248. package/build/src/database/pool/base.js +9 -9
  249. package/build/src/database/query/from-base.d.ts +1 -1
  250. package/build/src/database/query/from-base.d.ts.map +1 -1
  251. package/build/src/database/query/from-base.js +2 -2
  252. package/build/src/database/query/index.d.ts +4 -4
  253. package/build/src/database/query/index.d.ts.map +1 -1
  254. package/build/src/database/query/index.js +11 -11
  255. package/build/src/database/query/join-object.js +4 -4
  256. package/build/src/database/query/model-class-query.d.ts +4 -4
  257. package/build/src/database/query/model-class-query.d.ts.map +1 -1
  258. package/build/src/database/query/model-class-query.js +40 -40
  259. package/build/src/database/query/preloader/belongs-to.js +23 -23
  260. package/build/src/database/query/preloader/has-many.js +21 -21
  261. package/build/src/database/query/preloader/has-one.js +9 -9
  262. package/build/src/database/query/preloader/selection.js +4 -4
  263. package/build/src/database/query/preloader.js +9 -9
  264. package/build/src/database/query/query-data.js +10 -10
  265. package/build/src/database/query/where-model-class-hash.js +8 -8
  266. package/build/src/database/query/with-count.js +10 -10
  267. package/build/src/database/record/acts-as-list.js +20 -20
  268. package/build/src/database/record/attachments/handle.d.ts +1 -1
  269. package/build/src/database/record/attachments/handle.d.ts.map +1 -1
  270. package/build/src/database/record/attachments/handle.js +3 -3
  271. package/build/src/database/record/attachments/normalize-input.js +15 -15
  272. package/build/src/database/record/attachments/storage-drivers/s3.js +7 -7
  273. package/build/src/database/record/attachments/store.d.ts +2 -2
  274. package/build/src/database/record/attachments/store.d.ts.map +1 -1
  275. package/build/src/database/record/attachments/store.js +14 -14
  276. package/build/src/database/record/index.d.ts +18 -25
  277. package/build/src/database/record/index.d.ts.map +1 -1
  278. package/build/src/database/record/index.js +135 -141
  279. package/build/src/database/record/instance-relationships/base.d.ts +3 -3
  280. package/build/src/database/record/instance-relationships/base.d.ts.map +1 -1
  281. package/build/src/database/record/instance-relationships/base.js +13 -13
  282. package/build/src/database/record/instance-relationships/belongs-to.js +4 -4
  283. package/build/src/database/record/instance-relationships/has-many.js +9 -9
  284. package/build/src/database/record/instance-relationships/has-one.d.ts +1 -1
  285. package/build/src/database/record/instance-relationships/has-one.d.ts.map +1 -1
  286. package/build/src/database/record/instance-relationships/has-one.js +8 -8
  287. package/build/src/database/record/relationships/base.js +4 -4
  288. package/build/src/database/record/state-machine.js +8 -8
  289. package/build/src/database/record/validators/presence.js +2 -2
  290. package/build/src/database/record/validators/uniqueness.js +6 -6
  291. package/build/src/database/table-data/index.d.ts +4 -4
  292. package/build/src/database/table-data/index.d.ts.map +1 -1
  293. package/build/src/database/table-data/index.js +5 -5
  294. package/build/src/environment-handlers/base.js +3 -3
  295. package/build/src/environment-handlers/browser.d.ts +3 -3
  296. package/build/src/environment-handlers/browser.d.ts.map +1 -1
  297. package/build/src/environment-handlers/browser.js +8 -8
  298. package/build/src/environment-handlers/node/cli/commands/cli-command-context.js +2 -2
  299. package/build/src/environment-handlers/node/cli/commands/console.d.ts.map +1 -1
  300. package/build/src/environment-handlers/node/cli/commands/console.js +5 -5
  301. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.d.ts +1 -1
  302. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.d.ts.map +1 -1
  303. package/build/src/environment-handlers/node/cli/commands/db/schema/dump.js +2 -2
  304. package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts +1 -1
  305. package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts.map +1 -1
  306. package/build/src/environment-handlers/node/cli/commands/db/schema/load.js +4 -4
  307. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +285 -12
  308. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
  309. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +712 -61
  310. package/build/src/environment-handlers/node.d.ts +2 -2
  311. package/build/src/environment-handlers/node.d.ts.map +1 -1
  312. package/build/src/environment-handlers/node.js +7 -7
  313. package/build/src/frontend-model-controller.d.ts +5 -6
  314. package/build/src/frontend-model-controller.d.ts.map +1 -1
  315. package/build/src/frontend-model-controller.js +88 -89
  316. package/build/src/frontend-model-resource/base-resource.d.ts +36 -27
  317. package/build/src/frontend-model-resource/base-resource.d.ts.map +1 -1
  318. package/build/src/frontend-model-resource/base-resource.js +67 -120
  319. package/build/src/frontend-models/base.d.ts +67 -59
  320. package/build/src/frontend-models/base.d.ts.map +1 -1
  321. package/build/src/frontend-models/base.js +171 -158
  322. package/build/src/frontend-models/clear-pending-debounced-callback.js +2 -2
  323. package/build/src/frontend-models/event-hook-models.d.ts.map +1 -1
  324. package/build/src/frontend-models/event-hook-models.js +3 -3
  325. package/build/src/frontend-models/outgoing-event-buffer.d.ts +1 -1
  326. package/build/src/frontend-models/outgoing-event-buffer.d.ts.map +1 -1
  327. package/build/src/frontend-models/outgoing-event-buffer.js +3 -3
  328. package/build/src/frontend-models/preloader.js +6 -6
  329. package/build/src/frontend-models/query.d.ts +16 -8
  330. package/build/src/frontend-models/query.d.ts.map +1 -1
  331. package/build/src/frontend-models/query.js +43 -39
  332. package/build/src/frontend-models/resource-definition.js +7 -7
  333. package/build/src/frontend-models/transport-serialization.js +12 -12
  334. package/build/src/frontend-models/use-destroyed-event.d.ts.map +1 -1
  335. package/build/src/frontend-models/use-destroyed-event.js +11 -11
  336. package/build/src/frontend-models/use-model-class-event.d.ts.map +1 -1
  337. package/build/src/frontend-models/use-model-class-event.js +12 -12
  338. package/build/src/frontend-models/use-updated-event.d.ts.map +1 -1
  339. package/build/src/frontend-models/use-updated-event.js +12 -12
  340. package/build/src/frontend-models/websocket-channel.d.ts +6 -1
  341. package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
  342. package/build/src/frontend-models/websocket-channel.js +26 -18
  343. package/build/src/frontend-models/websocket-publishers.js +11 -11
  344. package/build/src/http-client/response.d.ts +2 -2
  345. package/build/src/http-client/response.d.ts.map +1 -1
  346. package/build/src/http-client/response.js +3 -3
  347. package/build/src/http-server/client/index.d.ts +1 -1
  348. package/build/src/http-server/client/index.d.ts.map +1 -1
  349. package/build/src/http-server/client/index.js +9 -9
  350. package/build/src/http-server/client/params-to-object.js +11 -11
  351. package/build/src/http-server/client/request-buffer/form-data-part.d.ts +2 -2
  352. package/build/src/http-server/client/request-buffer/form-data-part.d.ts.map +1 -1
  353. package/build/src/http-server/client/request-buffer/form-data-part.js +3 -3
  354. package/build/src/http-server/client/request-buffer/index.d.ts +4 -4
  355. package/build/src/http-server/client/request-buffer/index.d.ts.map +1 -1
  356. package/build/src/http-server/client/request-buffer/index.js +9 -9
  357. package/build/src/http-server/client/request-parser.d.ts +1 -1
  358. package/build/src/http-server/client/request-parser.d.ts.map +1 -1
  359. package/build/src/http-server/client/request-parser.js +4 -4
  360. package/build/src/http-server/client/request-runner.js +7 -7
  361. package/build/src/http-server/client/request-timing.d.ts +5 -5
  362. package/build/src/http-server/client/request-timing.d.ts.map +1 -1
  363. package/build/src/http-server/client/request-timing.js +6 -6
  364. package/build/src/http-server/client/request.js +2 -2
  365. package/build/src/http-server/client/response.d.ts +3 -3
  366. package/build/src/http-server/client/response.d.ts.map +1 -1
  367. package/build/src/http-server/client/response.js +6 -6
  368. package/build/src/http-server/client/websocket-request.d.ts +3 -3
  369. package/build/src/http-server/client/websocket-request.d.ts.map +1 -1
  370. package/build/src/http-server/client/websocket-request.js +5 -5
  371. package/build/src/http-server/client/websocket-session.d.ts +6 -6
  372. package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
  373. package/build/src/http-server/client/websocket-session.js +19 -19
  374. package/build/src/http-server/development-reloader.d.ts +3 -3
  375. package/build/src/http-server/development-reloader.d.ts.map +1 -1
  376. package/build/src/http-server/development-reloader.js +6 -6
  377. package/build/src/http-server/index.d.ts +7 -7
  378. package/build/src/http-server/index.d.ts.map +1 -1
  379. package/build/src/http-server/index.js +13 -13
  380. package/build/src/http-server/remote-address.js +6 -6
  381. package/build/src/http-server/server-client.js +4 -4
  382. package/build/src/http-server/server-lock.js +5 -5
  383. package/build/src/http-server/websocket-channel-subscribers.d.ts +1 -1
  384. package/build/src/http-server/websocket-channel-subscribers.d.ts.map +1 -1
  385. package/build/src/http-server/websocket-channel-subscribers.js +4 -4
  386. package/build/src/http-server/websocket-channel.d.ts +1 -1
  387. package/build/src/http-server/websocket-channel.d.ts.map +1 -1
  388. package/build/src/http-server/websocket-channel.js +2 -2
  389. package/build/src/http-server/websocket-connection.d.ts +1 -1
  390. package/build/src/http-server/websocket-connection.d.ts.map +1 -1
  391. package/build/src/http-server/websocket-connection.js +2 -2
  392. package/build/src/http-server/websocket-event-log-store.d.ts +1 -1
  393. package/build/src/http-server/websocket-event-log-store.d.ts.map +1 -1
  394. package/build/src/http-server/websocket-event-log-store.js +7 -7
  395. package/build/src/http-server/websocket-events-host.d.ts +1 -1
  396. package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
  397. package/build/src/http-server/websocket-events-host.js +3 -3
  398. package/build/src/http-server/worker-handler/in-process.d.ts +3 -3
  399. package/build/src/http-server/worker-handler/in-process.d.ts.map +1 -1
  400. package/build/src/http-server/worker-handler/in-process.js +9 -9
  401. package/build/src/http-server/worker-handler/index.d.ts +4 -4
  402. package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
  403. package/build/src/http-server/worker-handler/index.js +5 -5
  404. package/build/src/http-server/worker-handler/worker-thread.d.ts +2 -2
  405. package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
  406. package/build/src/http-server/worker-handler/worker-thread.js +4 -4
  407. package/build/src/logger/outputs/array-output.d.ts +3 -3
  408. package/build/src/logger/outputs/array-output.d.ts.map +1 -1
  409. package/build/src/logger/outputs/array-output.js +4 -4
  410. package/build/src/logger/outputs/console-output.d.ts +1 -1
  411. package/build/src/logger/outputs/console-output.d.ts.map +1 -1
  412. package/build/src/logger/outputs/console-output.js +2 -2
  413. package/build/src/logger/outputs/file-output.d.ts +4 -4
  414. package/build/src/logger/outputs/file-output.d.ts.map +1 -1
  415. package/build/src/logger/outputs/file-output.js +5 -5
  416. package/build/src/logger/outputs/stdout-output.d.ts.map +1 -1
  417. package/build/src/logger/outputs/stdout-output.js +2 -2
  418. package/build/src/logger.d.ts.map +1 -1
  419. package/build/src/logger.js +11 -11
  420. package/build/src/mailer/backends/smtp.d.ts.map +1 -1
  421. package/build/src/mailer/backends/smtp.js +5 -5
  422. package/build/src/mailer/base.js +11 -11
  423. package/build/src/mailer/delivery.d.ts +3 -3
  424. package/build/src/mailer/delivery.d.ts.map +1 -1
  425. package/build/src/mailer/delivery.js +5 -5
  426. package/build/src/plugins/sqljs-wasm-route-controller.js +2 -2
  427. package/build/src/routes/base-route.d.ts +6 -6
  428. package/build/src/routes/base-route.d.ts.map +1 -1
  429. package/build/src/routes/base-route.js +7 -7
  430. package/build/src/routes/basic-route.js +2 -2
  431. package/build/src/routes/hooks/frontend-model-command-route-hook.js +2 -2
  432. package/build/src/routes/index.js +2 -2
  433. package/build/src/routes/plugin-routes.js +2 -2
  434. package/build/src/routes/resolver.d.ts +1 -1
  435. package/build/src/routes/resolver.d.ts.map +1 -1
  436. package/build/src/routes/resolver.js +13 -13
  437. package/build/src/routes/resource-route.d.ts +1 -1
  438. package/build/src/routes/resource-route.d.ts.map +1 -1
  439. package/build/src/routes/resource-route.js +2 -2
  440. package/build/src/testing/browser-frontend-model-event-hook-scenarios.d.ts.map +1 -1
  441. package/build/src/testing/browser-frontend-model-event-hook-scenarios.js +8 -8
  442. package/build/src/testing/expect-utils.js +13 -13
  443. package/build/src/testing/expect.d.ts +1 -1
  444. package/build/src/testing/expect.d.ts.map +1 -1
  445. package/build/src/testing/expect.js +9 -9
  446. package/build/src/testing/test-files-finder.d.ts +8 -8
  447. package/build/src/testing/test-files-finder.d.ts.map +1 -1
  448. package/build/src/testing/test-files-finder.js +9 -9
  449. package/build/src/testing/test-filter-parser.js +3 -3
  450. package/build/src/testing/test-runner.d.ts +2 -2
  451. package/build/src/testing/test-runner.d.ts.map +1 -1
  452. package/build/src/testing/test-runner.js +17 -17
  453. package/build/src/testing/test-suite-splitter.js +2 -2
  454. package/build/src/testing/test.d.ts +2 -2
  455. package/build/src/testing/test.d.ts.map +1 -1
  456. package/build/src/testing/test.js +16 -16
  457. package/build/src/utils/backtrace-cleaner.d.ts +1 -1
  458. package/build/src/utils/backtrace-cleaner.d.ts.map +1 -1
  459. package/build/src/utils/backtrace-cleaner.js +2 -2
  460. package/build/src/utils/format-value.js +2 -2
  461. package/build/src/utils/model-scope.js +2 -2
  462. package/build/src/utils/ransack.js +27 -27
  463. package/build/src/utils/with-tracked-stack-async-hooks.js +8 -8
  464. package/build/src/utils/with-tracked-stack.js +4 -4
  465. package/build/testing/browser-frontend-model-event-hook-scenarios.js +7 -7
  466. package/build/testing/expect-utils.js +11 -11
  467. package/build/testing/expect.js +7 -7
  468. package/build/testing/test-files-finder.js +8 -8
  469. package/build/testing/test-filter-parser.js +2 -2
  470. package/build/testing/test-runner.js +16 -16
  471. package/build/testing/test-suite-splitter.js +1 -1
  472. package/build/testing/test.js +15 -15
  473. package/build/utils/backtrace-cleaner.js +1 -1
  474. package/build/utils/format-value.js +1 -1
  475. package/build/utils/model-scope.js +1 -1
  476. package/build/utils/ransack.js +26 -26
  477. package/build/utils/with-tracked-stack-async-hooks.js +7 -7
  478. package/build/utils/with-tracked-stack.js +3 -3
  479. package/package.json +2 -1
  480. package/src/application.js +4 -4
  481. package/src/authorization/ability.js +8 -8
  482. package/src/authorization/base-resource.js +4 -4
  483. package/src/background-jobs/cron-expression.js +1 -1
  484. package/src/background-jobs/forked-runner-child.js +1 -1
  485. package/src/background-jobs/job-registry.js +1 -1
  486. package/src/background-jobs/job-runner.js +1 -1
  487. package/src/background-jobs/job.js +1 -1
  488. package/src/background-jobs/json-socket.js +4 -4
  489. package/src/background-jobs/main.js +21 -21
  490. package/src/background-jobs/scheduler.js +7 -7
  491. package/src/background-jobs/store.js +7 -7
  492. package/src/background-jobs/web/controller.js +2 -2
  493. package/src/background-jobs/worker.js +12 -12
  494. package/src/beacon/client.js +11 -8
  495. package/src/beacon/in-process-broker.js +2 -2
  496. package/src/beacon/in-process-client.js +2 -2
  497. package/src/beacon/server.js +3 -3
  498. package/src/cli/browser-cli.js +1 -1
  499. package/src/cli/commands/db/base-command.js +2 -2
  500. package/src/cli/index.js +2 -2
  501. package/src/cli/tenant-database-command-helper.js +3 -3
  502. package/src/cli/use-browser-cli.js +1 -1
  503. package/src/configuration-types.js +3 -1
  504. package/src/configuration.js +38 -38
  505. package/src/controller.js +8 -8
  506. package/src/current-configuration.js +1 -1
  507. package/src/database/annotations-async-hooks.js +2 -2
  508. package/src/database/annotations.js +3 -3
  509. package/src/database/drivers/base-column.js +1 -1
  510. package/src/database/drivers/base-foreign-key.js +1 -1
  511. package/src/database/drivers/base-table.js +1 -1
  512. package/src/database/drivers/base.js +10 -10
  513. package/src/database/drivers/mssql/index.js +1 -1
  514. package/src/database/drivers/mssql/table.js +1 -1
  515. package/src/database/drivers/mysql/index.js +3 -3
  516. package/src/database/drivers/mysql/query.js +1 -1
  517. package/src/database/drivers/mysql/table.js +1 -1
  518. package/src/database/drivers/pgsql/index.js +2 -2
  519. package/src/database/drivers/sqlite/base.js +16 -16
  520. package/src/database/drivers/sqlite/index.js +11 -11
  521. package/src/database/drivers/sqlite/index.native.js +1 -1
  522. package/src/database/drivers/sqlite/index.web.js +3 -3
  523. package/src/database/drivers/sqlite/query.js +1 -1
  524. package/src/database/drivers/sqlite/query.web.js +1 -1
  525. package/src/database/drivers/sqlite/sql/alter-table.js +2 -2
  526. package/src/database/drivers/sqlite/table.js +1 -1
  527. package/src/database/migrator/files-finder.js +1 -1
  528. package/src/database/migrator.js +6 -6
  529. package/src/database/pool/async-tracked-multi-connection.js +27 -27
  530. package/src/database/pool/base-methods-forward.js +4 -4
  531. package/src/database/pool/base.js +8 -8
  532. package/src/database/query/from-base.js +1 -1
  533. package/src/database/query/index.js +10 -10
  534. package/src/database/query/join-object.js +3 -3
  535. package/src/database/query/model-class-query.js +39 -39
  536. package/src/database/query/preloader/belongs-to.js +22 -22
  537. package/src/database/query/preloader/has-many.js +20 -20
  538. package/src/database/query/preloader/has-one.js +8 -8
  539. package/src/database/query/preloader/selection.js +3 -3
  540. package/src/database/query/preloader.js +8 -8
  541. package/src/database/query/query-data.js +9 -9
  542. package/src/database/query/where-model-class-hash.js +7 -7
  543. package/src/database/query/with-count.js +9 -9
  544. package/src/database/record/acts-as-list.js +15 -15
  545. package/src/database/record/attachments/handle.js +2 -2
  546. package/src/database/record/attachments/normalize-input.js +12 -12
  547. package/src/database/record/attachments/storage-drivers/s3.js +6 -6
  548. package/src/database/record/attachments/store.js +13 -13
  549. package/src/database/record/index.js +115 -121
  550. package/src/database/record/instance-relationships/base.js +11 -11
  551. package/src/database/record/instance-relationships/belongs-to.js +3 -3
  552. package/src/database/record/instance-relationships/has-many.js +8 -8
  553. package/src/database/record/instance-relationships/has-one.js +7 -7
  554. package/src/database/record/relationships/base.js +2 -2
  555. package/src/database/record/state-machine.js +7 -7
  556. package/src/database/record/validators/presence.js +1 -1
  557. package/src/database/record/validators/uniqueness.js +5 -5
  558. package/src/database/table-data/index.js +4 -4
  559. package/src/environment-handlers/base.js +2 -2
  560. package/src/environment-handlers/browser.js +7 -7
  561. package/src/environment-handlers/node/cli/commands/cli-command-context.js +1 -1
  562. package/src/environment-handlers/node/cli/commands/console.js +4 -4
  563. package/src/environment-handlers/node/cli/commands/db/schema/dump.js +1 -1
  564. package/src/environment-handlers/node/cli/commands/db/schema/load.js +3 -3
  565. package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +836 -60
  566. package/src/environment-handlers/node.js +6 -6
  567. package/src/frontend-model-controller.js +81 -82
  568. package/src/frontend-model-resource/base-resource.js +78 -115
  569. package/src/frontend-models/base.js +162 -149
  570. package/src/frontend-models/clear-pending-debounced-callback.js +1 -1
  571. package/src/frontend-models/event-hook-models.js +2 -2
  572. package/src/frontend-models/outgoing-event-buffer.js +2 -2
  573. package/src/frontend-models/preloader.js +5 -5
  574. package/src/frontend-models/query.js +43 -38
  575. package/src/frontend-models/resource-definition.js +6 -6
  576. package/src/frontend-models/transport-serialization.js +11 -11
  577. package/src/frontend-models/use-destroyed-event.js +10 -10
  578. package/src/frontend-models/use-model-class-event.js +11 -11
  579. package/src/frontend-models/use-updated-event.js +11 -11
  580. package/src/frontend-models/websocket-channel.js +26 -17
  581. package/src/frontend-models/websocket-publishers.js +9 -9
  582. package/src/http-client/response.js +2 -2
  583. package/src/http-server/client/index.js +8 -8
  584. package/src/http-server/client/params-to-object.js +10 -10
  585. package/src/http-server/client/request-buffer/form-data-part.js +2 -2
  586. package/src/http-server/client/request-buffer/index.js +8 -8
  587. package/src/http-server/client/request-parser.js +3 -3
  588. package/src/http-server/client/request-runner.js +6 -6
  589. package/src/http-server/client/request-timing.js +5 -5
  590. package/src/http-server/client/request.js +1 -1
  591. package/src/http-server/client/response.js +5 -5
  592. package/src/http-server/client/websocket-request.js +4 -4
  593. package/src/http-server/client/websocket-session.js +18 -18
  594. package/src/http-server/development-reloader.js +5 -5
  595. package/src/http-server/index.js +12 -12
  596. package/src/http-server/remote-address.js +4 -4
  597. package/src/http-server/server-client.js +3 -3
  598. package/src/http-server/server-lock.js +4 -4
  599. package/src/http-server/websocket-channel-subscribers.js +3 -3
  600. package/src/http-server/websocket-channel.js +1 -1
  601. package/src/http-server/websocket-connection.js +1 -1
  602. package/src/http-server/websocket-event-log-store.js +6 -6
  603. package/src/http-server/websocket-events-host.js +2 -2
  604. package/src/http-server/worker-handler/in-process.js +7 -7
  605. package/src/http-server/worker-handler/index.js +4 -4
  606. package/src/http-server/worker-handler/worker-thread.js +3 -3
  607. package/src/logger/outputs/array-output.js +3 -3
  608. package/src/logger/outputs/console-output.js +1 -1
  609. package/src/logger/outputs/file-output.js +4 -4
  610. package/src/logger/outputs/stdout-output.js +1 -1
  611. package/src/logger.js +10 -10
  612. package/src/mailer/backends/smtp.js +3 -3
  613. package/src/mailer/base.js +8 -8
  614. package/src/mailer/delivery.js +4 -4
  615. package/src/plugins/sqljs-wasm-route-controller.js +1 -1
  616. package/src/routes/base-route.js +6 -6
  617. package/src/routes/basic-route.js +1 -1
  618. package/src/routes/hooks/frontend-model-command-route-hook.js +1 -1
  619. package/src/routes/index.js +1 -1
  620. package/src/routes/plugin-routes.js +1 -1
  621. package/src/routes/resolver.js +11 -11
  622. package/src/routes/resource-route.js +1 -1
  623. package/src/testing/browser-frontend-model-event-hook-scenarios.js +7 -7
  624. package/src/testing/expect-utils.js +11 -11
  625. package/src/testing/expect.js +7 -7
  626. package/src/testing/test-files-finder.js +8 -8
  627. package/src/testing/test-filter-parser.js +2 -2
  628. package/src/testing/test-runner.js +16 -16
  629. package/src/testing/test-suite-splitter.js +1 -1
  630. package/src/testing/test.js +15 -15
  631. package/src/utils/backtrace-cleaner.js +1 -1
  632. package/src/utils/format-value.js +1 -1
  633. package/src/utils/model-scope.js +1 -1
  634. package/src/utils/ransack.js +26 -26
  635. package/src/utils/with-tracked-stack-async-hooks.js +7 -7
  636. package/src/utils/with-tracked-stack.js +3 -3
@@ -119,9 +119,9 @@ export default class VelociousDatabaseRecordBaseRelationship {
119
119
  return query;
120
120
  const scopedQuery = /**
121
121
  * Narrows the runtime value to the documented type.
122
- @type {T | void} */ (scope.call(query, /**
123
- * Narrows the runtime value to the documented type.
124
- @type {import("../../query/model-class-query.js").default<typeof import("../index.js").default>} */ (query)));
122
+ * @type {T | void} */ (scope.call(query, /**
123
+ * Narrows the runtime value to the documented type.
124
+ * @type {import("../../query/model-class-query.js").default<typeof import("../index.js").default>} */ (query)));
125
125
  return scopedQuery || query;
126
126
  }
127
127
  /**
@@ -178,4 +178,4 @@ export default class VelociousDatabaseRecordBaseRelationship {
178
178
  throw new Error("Couldn't figure out the target model class");
179
179
  }
180
180
  }
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9yZWNvcmQvcmVsYXRpb25zaGlwcy9iYXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGFBQWEsTUFBTSxtQ0FBbUMsQ0FBQTtBQUM3RCxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUV4Qzs7O0dBR0c7QUFDSDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxNQUFNLENBQUMsT0FBTyxPQUFPLHVDQUF1QztJQUMxRDs7O09BR0c7SUFDSCxZQUFZLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQUcsSUFBSSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLFFBQVEsRUFBQztRQUN2TCxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFdkIsSUFBSSxDQUFDLFVBQVU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUE7UUFDckYsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFdBQVc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxVQUFVLENBQUMsSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBQUMsQ0FBQTtRQUVoSixJQUFJLFNBQVMsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixTQUFTLEVBQUUsQ0FBQyxDQUFBO1FBQ3JELENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsS0FBSyxLQUFLLENBQUE7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7UUFD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VSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDbkUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQTtnQkFFekUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEdBQUcsZUFBZSxPQUFPLENBQUE7WUFDekQsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQTtJQUNwQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQSxDQUFDLENBQUM7SUFFM0M7OztPQUdHO0lBQ0gsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQSxDQUFDLENBQUM7SUFFOUI7OztPQUdHO0lBQ0gsbUJBQW1CO1FBQ2pCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksV0FBVyxFQUFFLENBQUM7WUFDdEQsT0FBTyxTQUFTLENBQUE7UUFDbEIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUM5RCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFBO1FBQ25CLENBQUM7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUE7SUFDL0QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi8uLi8uLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5cbi8qKlxuICogUmVsYXRpb25zaGlwU2NvcGVDYWxsYmFjayB0eXBlLlxuICogQHR5cGVkZWYgeyhxdWVyeTogaW1wb3J0KFwiLi4vLi4vcXVlcnkvbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdDx0eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdD4pID0+IChpbXBvcnQoXCIuLi8uLi9xdWVyeS9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0PHR5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0PiB8IHZvaWQpfSBSZWxhdGlvbnNoaXBTY29wZUNhbGxiYWNrXG4gKi9cbi8qKlxuICogUmVsYXRpb25zaGlwQmFzZUFyZ3NUeXBlIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZWxhdGlvbnNoaXBCYXNlQXJnc1R5cGVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2F1dG9sb2FkXSAtIFdoZXRoZXIgdG8gYXV0by1iYXRjaC1wcmVsb2FkIHNpYmxpbmdzIHdoZW4gdGhpcyByZWxhdGlvbnNoaXAgaXMgbGF6eS1sb2FkZWQuIERlZmF1bHQgdHJ1ZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2xhc3NOYW1lXSAtIE5hbWUgb2YgdGhlIHJlbGF0ZWQgbW9kZWwgY2xhc3MuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjb3VudGVyQ2FjaGVdIC0gQXV0by1zeW5jIHBhcmVudCBjb3VudCBjb2x1bW4gb24gY3JlYXRlL3VwZGF0ZS9kZXN0cm95LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkZXBlbmRlbnRdIC0gRGVwZW5kZW50IGFjdGlvbiB3aGVuIHBhcmVudCBpcyBkZXN0cm95ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHVuZGVmaW5lZH0gW2ZvcmVpZ25LZXldIC0gRXhwbGljaXQgZm9yZWlnbiBrZXkgY29sdW1uIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ludmVyc2VPZl0gLSBJbnZlcnNlIHJlbGF0aW9uc2hpcCBuYW1lIG9uIHRoZSByZWxhdGVkIG1vZGVsLlxuICogQHByb3BlcnR5IHt0eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdH0gW2tsYXNzXSAtIFJlbGF0ZWQgbW9kZWwgY2xhc3MuXG4gKiBAcHJvcGVydHkge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBtb2RlbENsYXNzIC0gT3duaW5nIG1vZGVsIGNsYXNzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwcmltYXJ5S2V5XSAtIFByaW1hcnkga2V5IGNvbHVtbiBvbiB0aGUgb3duaW5nIG1vZGVsLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcG9seW1vcnBoaWNdIC0gV2hldGhlciB0aGUgcmVsYXRpb25zaGlwIGlzIHBvbHltb3JwaGljLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbGF0aW9uc2hpcE5hbWUgLSBOYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAgb24gdGhlIG1vZGVsLlxuICogQHByb3BlcnR5IHtSZWxhdGlvbnNoaXBTY29wZUNhbGxiYWNrfSBbc2NvcGVdIC0gT3B0aW9uYWwgc2NvcGUgY2FsbGJhY2sgZm9yIHRoZSByZWxhdGlvbnNoaXAuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Rocm91Z2hdIC0gTmFtZSBvZiB0aGUgdGhyb3VnaCBhc3NvY2lhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIC0gUmVsYXRpb25zaGlwIHR5cGUgKGUuZy4gXCJoYXNNYW55XCIpLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUmVjb3JkQmFzZVJlbGF0aW9uc2hpcCB7XG4gIC8qKlxuICAgKiBSdW5zIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge1JlbGF0aW9uc2hpcEJhc2VBcmdzVHlwZX0gYXJncyAtIFJlbGF0aW9uc2hpcCBkZWZpbml0aW9uIGFyZ3VtZW50cy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHthdXRvbG9hZCwgY2xhc3NOYW1lLCBjb3VudGVyQ2FjaGUsIGRlcGVuZGVudCwgZm9yZWlnbktleSwgaW52ZXJzZU9mLCBrbGFzcywgbW9kZWxDbGFzcywgcHJpbWFyeUtleSA9IFwiaWRcIiwgcG9seW1vcnBoaWMsIHJlbGF0aW9uc2hpcE5hbWUsIHNjb3BlLCB0aHJvdWdoLCB0eXBlLCAuLi5yZXN0QXJnc30pIHtcbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgaWYgKCFtb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoYCdtb2RlbENsYXNzJyB3YXNuJ3QgZ2l2ZW4gZm9yICR7cmVsYXRpb25zaGlwTmFtZX1gKVxuICAgIGlmICghY2xhc3NOYW1lICYmICFrbGFzcyAmJiAhcG9seW1vcnBoaWMpIHRocm93IG5ldyBFcnJvcihgTmVpdGhlciAnY2xhc3NOYW1lJyBvciAna2xhc3MnIHdhcyBnaXZlbiBmb3IgJHttb2RlbENsYXNzLm5hbWV9IyR7cmVsYXRpb25zaGlwTmFtZX1gKVxuXG4gICAgaWYgKGNsYXNzTmFtZSA9PSBcIkV2ZW50U2VyeVwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbW9kZWwgbmFtZTogJHtjbGFzc05hbWV9YClcbiAgICB9XG5cbiAgICB0aGlzLl9hdXRvbG9hZCA9IGF1dG9sb2FkICE9PSBmYWxzZVxuICAgIHRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lXG4gICAgdGhpcy5fY291bnRlckNhY2hlID0gY291bnRlckNhY2hlIHx8IGZhbHNlXG4gICAgdGhpcy5fZGVwZW5kZW50ID0gZGVwZW5kZW50XG4gICAgdGhpcy5mb3JlaWduS2V5ID0gZm9yZWlnbktleVxuICAgIHRoaXMuX2V4cGxpY2l0Rm9yZWlnbktleSA9IGZvcmVpZ25LZXlcbiAgICB0aGlzLl9pbnZlcnNlT2YgPSBpbnZlcnNlT2ZcbiAgICB0aGlzLmtsYXNzID0ga2xhc3NcbiAgICB0aGlzLm1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzXG4gICAgdGhpcy5fcG9seW1vcnBoaWMgPSBwb2x5bW9ycGhpY1xuICAgIHRoaXMuX3ByaW1hcnlLZXkgPSBwcmltYXJ5S2V5XG4gICAgdGhpcy5yZWxhdGlvbnNoaXBOYW1lID0gcmVsYXRpb25zaGlwTmFtZVxuICAgIHRoaXMuX3Njb3BlID0gc2NvcGVcbiAgICB0aGlzLnRocm91Z2ggPSB0aHJvdWdoXG4gICAgdGhpcy50eXBlID0gdHlwZVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGF1dG9sb2FkLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGlzIHJlbGF0aW9uc2hpcCBhdXRvLWJhdGNoLXByZWxvYWRzIHNpYmxpbmdzIG9uIGxhenkgYWNjZXNzLlxuICAgKi9cbiAgZ2V0QXV0b2xvYWQoKSB7IHJldHVybiB0aGlzLl9hdXRvbG9hZCB9XG5cbiAgZ2V0Q29uZmlndXJhdGlvbigpIHsgcmV0dXJuIHRoaXMubW9kZWxDbGFzcy5fZ2V0Q29uZmlndXJhdGlvbigpIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgY291bnRlciBjYWNoZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgYSBjb3VudGVyIGNhY2hlIGNvbHVtbiBpcyBzeW5jZWQgb24gdGhlIHBhcmVudC5cbiAgICovXG4gIGdldENvdW50ZXJDYWNoZSgpIHsgcmV0dXJuIHRoaXMuX2NvdW50ZXJDYWNoZSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGRlcGVuZGVudC5cbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gV2hhdCB3aWxsIGJlIGRvbmUgd2hlbiB0aGUgcGFyZW50IHJlY29yZCBpcyBkZXN0cm95ZWQuIEUuZy4gXCJkZXN0cm95XCIsIFwibnVsbGlmeVwiLCBcInJlc3RyaWN0XCIgZXRjLlxuICAgKi9cbiAgZ2V0RGVwZW5kZW50KCkgeyByZXR1cm4gdGhpcy5fZGVwZW5kZW50IH1cblxuICAvKipcbiAgICogVGhlIGZvcmVpZ24ga2V5IGV4cGxpY2l0bHkgcGFzc2VkIHdoZW4gdGhlIHJlbGF0aW9uc2hpcCB3YXMgZGVjbGFyZWQsIGlmIGFueS4gVW5saWtlXG4gICAqIGBnZXRGb3JlaWduS2V5KClgIHRoaXMgbmV2ZXIgZmFsbHMgYmFjayB0byBhIGNvbXB1dGVkIGRlZmF1bHQsIHNvIGNhbGxlcnMgY2FuIHRlbGwgd2hldGhlciB0aGVcbiAgICogZGV2ZWxvcGVyIG5hbWVkIGEgc3BlY2lmaWMgY29sdW1uIChlLmcuIHRvIGRpc2FtYmlndWF0ZSBtdWx0aXBsZSBiZWxvbmdzLXRvIG9uIGEgdGhyb3VnaCB0YXJnZXQpLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSBleHBsaWNpdGx5IGRlY2xhcmVkIGZvcmVpZ24ga2V5LCBvciB1bmRlZmluZWQuXG4gICAqL1xuICBnZXRFeHBsaWNpdEZvcmVpZ25LZXkoKSB7IHJldHVybiB0aGlzLl9leHBsaWNpdEZvcmVpZ25LZXkgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBmb3JlaWduIGtleS5cbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBmb3JlaWduIGtleSwgZS5nLiBcInVzZXJfaWRcIiwgXCJwb3N0X2lkXCIgZXRjLlxuICAgKi9cbiAgZ2V0Rm9yZWlnbktleSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJnZXRGb3JlaWduS2V5IG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGludmVyc2Ugb2YuXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBUaGUgbmFtZSBvZiB0aGUgaW52ZXJzZSByZWxhdGlvbnNoaXAsIGUuZy4gXCJwb3N0c1wiLCBcImNvbW1lbnRzXCIgZXRjLlxuICAgKi9cbiAgZ2V0SW52ZXJzZU9mKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImdldEludmVyc2VPZiBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBtb2RlbCBjbGFzcy5cbiAgICogQHJldHVybnMge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSAtIFRoZSBtb2RlbCBjbGFzcy5cbiAgICovXG4gIGdldE1vZGVsQ2xhc3MoKSB7IHJldHVybiB0aGlzLm1vZGVsQ2xhc3MgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCByZWxhdGlvbnNoaXAgbmFtZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlbGF0aW9uc2hpcCwgZS5nLiBcInBvc3RzXCIsIFwidXNlclwiLCBcImNvbW1lbnRzXCIgZXRjLlxuICAgKi9cbiAgZ2V0UmVsYXRpb25zaGlwTmFtZSgpIHsgcmV0dXJuIHRoaXMucmVsYXRpb25zaGlwTmFtZSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IHNjb3BlLlxuICAgKiBAcmV0dXJucyB7UmVsYXRpb25zaGlwU2NvcGVDYWxsYmFjayB8IHVuZGVmaW5lZH0gLSBUaGUgc2NvcGUgY2FsbGJhY2suXG4gICAqL1xuICBnZXRTY29wZSgpIHsgcmV0dXJuIHRoaXMuX3Njb3BlIH1cblxuICAvKipcbiAgICogUnVucyBhcHBseSBzY29wZS5cbiAgICogQHRlbXBsYXRlIFRcbiAgICogQHBhcmFtIHtUfSBxdWVyeSAtIFF1ZXJ5IGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7VH0gLSBTY29wZWQgcXVlcnkuXG4gICAqL1xuICBhcHBseVNjb3BlKHF1ZXJ5KSB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLmdldFNjb3BlKClcblxuICAgIGlmICghc2NvcGUpIHJldHVybiBxdWVyeVxuXG4gICAgY29uc3Qgc2NvcGVkUXVlcnkgPSAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQHR5cGUge1QgfCB2b2lkfSAqLyAoc2NvcGUuY2FsbChxdWVyeSwgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHR5cGUge2ltcG9ydChcIi4uLy4uL3F1ZXJ5L21vZGVsLWNsYXNzLXF1ZXJ5LmpzXCIpLmRlZmF1bHQ8dHlwZW9mIGltcG9ydChcIi4uL2luZGV4LmpzXCIpLmRlZmF1bHQ+fSAqLyAocXVlcnkpKSlcblxuICAgIHJldHVybiBzY29wZWRRdWVyeSB8fCBxdWVyeVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IHBvbHltb3JwaGljLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHBvbHltb3JwaGljLlxuICAgKi9cbiAgZ2V0UG9seW1vcnBoaWMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BvbHltb3JwaGljIHx8IGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgcG9seW1vcnBoaWMgdHlwZSBjb2x1bW4uXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIHBvbHltb3JwaGljIHR5cGUgY29sdW1uLlxuICAgKi9cbiAgZ2V0UG9seW1vcnBoaWNUeXBlQ29sdW1uKCkge1xuICAgIGlmICghdGhpcy5nZXRQb2x5bW9ycGhpYygpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5tb2RlbENsYXNzLm5hbWV9IyR7dGhpcy5yZWxhdGlvbnNoaXBOYW1lfSBpc24ndCBwb2x5bW9ycGhpY2ApXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9wb2x5bW9ycGhpY1R5cGVDb2x1bW4pIHtcbiAgICAgIGNvbnN0IGZvcmVpZ25LZXkgPSB0aGlzLmdldEZvcmVpZ25LZXkoKVxuXG4gICAgICBpZiAoZm9yZWlnbktleSAmJiBmb3JlaWduS2V5LmVuZHNXaXRoKFwiX2lkXCIpKSB7XG4gICAgICAgIHRoaXMuX3BvbHltb3JwaGljVHlwZUNvbHVtbiA9IGZvcmVpZ25LZXkucmVwbGFjZSgvX2lkJC8sIFwiX3R5cGVcIilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHVuZGVyc2NvcmVkTmFtZSA9IGluZmxlY3Rpb24udW5kZXJzY29yZSh0aGlzLmdldFJlbGF0aW9uc2hpcE5hbWUoKSlcblxuICAgICAgICB0aGlzLl9wb2x5bW9ycGhpY1R5cGVDb2x1bW4gPSBgJHt1bmRlcnNjb3JlZE5hbWV9X3R5cGVgXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BvbHltb3JwaGljVHlwZUNvbHVtblxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IHByaW1hcnkga2V5LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgZm9yZWlnbiBrZXksIGUuZy4gXCJpZFwiIGV0Yy5cbiAgICovXG4gIGdldFByaW1hcnlLZXkoKSB7IHJldHVybiB0aGlzLl9wcmltYXJ5S2V5IH1cblxuICAvKipcbiAgICogUnVucyBnZXQgdHlwZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIHR5cGUgb2YgdGhlIHJlbGF0aW9uc2hpcCwgZS5nLiBcImhhc19tYW55XCIsIFwiYmVsb25nc190b1wiLCBcImhhc19vbmVcIiwgXCJoYXNfYW5kX2JlbG9uZ3NfdG9fbWFueVwiIGV0Yy5cbiAgICovXG4gIGdldFR5cGUoKSB7IHJldHVybiB0aGlzLnR5cGUgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCB0YXJnZXQgbW9kZWwgY2xhc3MuXG4gICAqIEByZXR1cm5zIHt0eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH0gVGhlIHRhcmdldCBtb2RlbCBjbGFzcyBmb3IgdGhpcyByZWxhdGlvbnNoaXAsIGUuZy4gaWYgdGhlIHJlbGF0aW9uc2hpcCBpcyBcInBvc3RzXCIgdGhlbiB0aGUgdGFyZ2V0IG1vZGVsIGNsYXNzIGlzIHRoZSBQb3N0IGNsYXNzLlxuICAgKi9cbiAgZ2V0VGFyZ2V0TW9kZWxDbGFzcygpIHtcbiAgICBpZiAodGhpcy5nZXRQb2x5bW9ycGhpYygpICYmIHRoaXMudHlwZSA9PSBcImJlbG9uZ3NUb1wiKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfSBlbHNlIGlmICh0aGlzLmNsYXNzTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLmdldE1vZGVsQ2xhc3ModGhpcy5jbGFzc05hbWUpXG4gICAgfSBlbHNlIGlmICh0aGlzLmtsYXNzKSB7XG4gICAgICByZXR1cm4gdGhpcy5rbGFzc1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpZ3VyZSBvdXQgdGhlIHRhcmdldCBtb2RlbCBjbGFzc1wiKVxuICB9XG59XG4iXX0=
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9yZWNvcmQvcmVsYXRpb25zaGlwcy9iYXNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGFBQWEsTUFBTSxtQ0FBbUMsQ0FBQTtBQUM3RCxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUV4Qzs7O0dBR0c7QUFDSDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxNQUFNLENBQUMsT0FBTyxPQUFPLHVDQUF1QztJQUMxRDs7O09BR0c7SUFDSCxZQUFZLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQUcsSUFBSSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLFFBQVEsRUFBQztRQUN2TCxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFdkIsSUFBSSxDQUFDLFVBQVU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUE7UUFDckYsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFdBQVc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxVQUFVLENBQUMsSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBQUMsQ0FBQTtRQUVoSixJQUFJLFNBQVMsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixTQUFTLEVBQUUsQ0FBQyxDQUFBO1FBQ3JELENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsS0FBSyxLQUFLLENBQUE7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7UUFD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VSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDbkUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQTtnQkFFekUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEdBQUcsZUFBZSxPQUFPLENBQUE7WUFDekQsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQTtJQUNwQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYSxLQUFLLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQSxDQUFDLENBQUM7SUFFM0M7OztPQUdHO0lBQ0gsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQSxDQUFDLENBQUM7SUFFOUI7OztPQUdHO0lBQ0gsbUJBQW1CO1FBQ2pCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksV0FBVyxFQUFFLENBQUM7WUFDdEQsT0FBTyxTQUFTLENBQUE7UUFDbEIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUM5RCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFBO1FBQ25CLENBQUM7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUE7SUFDL0QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi8uLi8uLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5cbi8qKlxuICogUmVsYXRpb25zaGlwU2NvcGVDYWxsYmFjayB0eXBlLlxuICogQHR5cGVkZWYgeyhxdWVyeTogaW1wb3J0KFwiLi4vLi4vcXVlcnkvbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdDx0eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdD4pID0+IChpbXBvcnQoXCIuLi8uLi9xdWVyeS9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0PHR5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0PiB8IHZvaWQpfSBSZWxhdGlvbnNoaXBTY29wZUNhbGxiYWNrXG4gKi9cbi8qKlxuICogUmVsYXRpb25zaGlwQmFzZUFyZ3NUeXBlIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZWxhdGlvbnNoaXBCYXNlQXJnc1R5cGVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2F1dG9sb2FkXSAtIFdoZXRoZXIgdG8gYXV0by1iYXRjaC1wcmVsb2FkIHNpYmxpbmdzIHdoZW4gdGhpcyByZWxhdGlvbnNoaXAgaXMgbGF6eS1sb2FkZWQuIERlZmF1bHQgdHJ1ZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2xhc3NOYW1lXSAtIE5hbWUgb2YgdGhlIHJlbGF0ZWQgbW9kZWwgY2xhc3MuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjb3VudGVyQ2FjaGVdIC0gQXV0by1zeW5jIHBhcmVudCBjb3VudCBjb2x1bW4gb24gY3JlYXRlL3VwZGF0ZS9kZXN0cm95LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkZXBlbmRlbnRdIC0gRGVwZW5kZW50IGFjdGlvbiB3aGVuIHBhcmVudCBpcyBkZXN0cm95ZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHVuZGVmaW5lZH0gW2ZvcmVpZ25LZXldIC0gRXhwbGljaXQgZm9yZWlnbiBrZXkgY29sdW1uIG5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2ludmVyc2VPZl0gLSBJbnZlcnNlIHJlbGF0aW9uc2hpcCBuYW1lIG9uIHRoZSByZWxhdGVkIG1vZGVsLlxuICogQHByb3BlcnR5IHt0eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdH0gW2tsYXNzXSAtIFJlbGF0ZWQgbW9kZWwgY2xhc3MuXG4gKiBAcHJvcGVydHkge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBtb2RlbENsYXNzIC0gT3duaW5nIG1vZGVsIGNsYXNzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwcmltYXJ5S2V5XSAtIFByaW1hcnkga2V5IGNvbHVtbiBvbiB0aGUgb3duaW5nIG1vZGVsLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcG9seW1vcnBoaWNdIC0gV2hldGhlciB0aGUgcmVsYXRpb25zaGlwIGlzIHBvbHltb3JwaGljLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbGF0aW9uc2hpcE5hbWUgLSBOYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAgb24gdGhlIG1vZGVsLlxuICogQHByb3BlcnR5IHtSZWxhdGlvbnNoaXBTY29wZUNhbGxiYWNrfSBbc2NvcGVdIC0gT3B0aW9uYWwgc2NvcGUgY2FsbGJhY2sgZm9yIHRoZSByZWxhdGlvbnNoaXAuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Rocm91Z2hdIC0gTmFtZSBvZiB0aGUgdGhyb3VnaCBhc3NvY2lhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIC0gUmVsYXRpb25zaGlwIHR5cGUgKGUuZy4gXCJoYXNNYW55XCIpLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUmVjb3JkQmFzZVJlbGF0aW9uc2hpcCB7XG4gIC8qKlxuICAgKiBSdW5zIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge1JlbGF0aW9uc2hpcEJhc2VBcmdzVHlwZX0gYXJncyAtIFJlbGF0aW9uc2hpcCBkZWZpbml0aW9uIGFyZ3VtZW50cy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHthdXRvbG9hZCwgY2xhc3NOYW1lLCBjb3VudGVyQ2FjaGUsIGRlcGVuZGVudCwgZm9yZWlnbktleSwgaW52ZXJzZU9mLCBrbGFzcywgbW9kZWxDbGFzcywgcHJpbWFyeUtleSA9IFwiaWRcIiwgcG9seW1vcnBoaWMsIHJlbGF0aW9uc2hpcE5hbWUsIHNjb3BlLCB0aHJvdWdoLCB0eXBlLCAuLi5yZXN0QXJnc30pIHtcbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgaWYgKCFtb2RlbENsYXNzKSB0aHJvdyBuZXcgRXJyb3IoYCdtb2RlbENsYXNzJyB3YXNuJ3QgZ2l2ZW4gZm9yICR7cmVsYXRpb25zaGlwTmFtZX1gKVxuICAgIGlmICghY2xhc3NOYW1lICYmICFrbGFzcyAmJiAhcG9seW1vcnBoaWMpIHRocm93IG5ldyBFcnJvcihgTmVpdGhlciAnY2xhc3NOYW1lJyBvciAna2xhc3MnIHdhcyBnaXZlbiBmb3IgJHttb2RlbENsYXNzLm5hbWV9IyR7cmVsYXRpb25zaGlwTmFtZX1gKVxuXG4gICAgaWYgKGNsYXNzTmFtZSA9PSBcIkV2ZW50U2VyeVwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbW9kZWwgbmFtZTogJHtjbGFzc05hbWV9YClcbiAgICB9XG5cbiAgICB0aGlzLl9hdXRvbG9hZCA9IGF1dG9sb2FkICE9PSBmYWxzZVxuICAgIHRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lXG4gICAgdGhpcy5fY291bnRlckNhY2hlID0gY291bnRlckNhY2hlIHx8IGZhbHNlXG4gICAgdGhpcy5fZGVwZW5kZW50ID0gZGVwZW5kZW50XG4gICAgdGhpcy5mb3JlaWduS2V5ID0gZm9yZWlnbktleVxuICAgIHRoaXMuX2V4cGxpY2l0Rm9yZWlnbktleSA9IGZvcmVpZ25LZXlcbiAgICB0aGlzLl9pbnZlcnNlT2YgPSBpbnZlcnNlT2ZcbiAgICB0aGlzLmtsYXNzID0ga2xhc3NcbiAgICB0aGlzLm1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzXG4gICAgdGhpcy5fcG9seW1vcnBoaWMgPSBwb2x5bW9ycGhpY1xuICAgIHRoaXMuX3ByaW1hcnlLZXkgPSBwcmltYXJ5S2V5XG4gICAgdGhpcy5yZWxhdGlvbnNoaXBOYW1lID0gcmVsYXRpb25zaGlwTmFtZVxuICAgIHRoaXMuX3Njb3BlID0gc2NvcGVcbiAgICB0aGlzLnRocm91Z2ggPSB0aHJvdWdoXG4gICAgdGhpcy50eXBlID0gdHlwZVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGF1dG9sb2FkLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGlzIHJlbGF0aW9uc2hpcCBhdXRvLWJhdGNoLXByZWxvYWRzIHNpYmxpbmdzIG9uIGxhenkgYWNjZXNzLlxuICAgKi9cbiAgZ2V0QXV0b2xvYWQoKSB7IHJldHVybiB0aGlzLl9hdXRvbG9hZCB9XG5cbiAgZ2V0Q29uZmlndXJhdGlvbigpIHsgcmV0dXJuIHRoaXMubW9kZWxDbGFzcy5fZ2V0Q29uZmlndXJhdGlvbigpIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgY291bnRlciBjYWNoZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgYSBjb3VudGVyIGNhY2hlIGNvbHVtbiBpcyBzeW5jZWQgb24gdGhlIHBhcmVudC5cbiAgICovXG4gIGdldENvdW50ZXJDYWNoZSgpIHsgcmV0dXJuIHRoaXMuX2NvdW50ZXJDYWNoZSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGRlcGVuZGVudC5cbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gV2hhdCB3aWxsIGJlIGRvbmUgd2hlbiB0aGUgcGFyZW50IHJlY29yZCBpcyBkZXN0cm95ZWQuIEUuZy4gXCJkZXN0cm95XCIsIFwibnVsbGlmeVwiLCBcInJlc3RyaWN0XCIgZXRjLlxuICAgKi9cbiAgZ2V0RGVwZW5kZW50KCkgeyByZXR1cm4gdGhpcy5fZGVwZW5kZW50IH1cblxuICAvKipcbiAgICogVGhlIGZvcmVpZ24ga2V5IGV4cGxpY2l0bHkgcGFzc2VkIHdoZW4gdGhlIHJlbGF0aW9uc2hpcCB3YXMgZGVjbGFyZWQsIGlmIGFueS4gVW5saWtlXG4gICAqIGBnZXRGb3JlaWduS2V5KClgIHRoaXMgbmV2ZXIgZmFsbHMgYmFjayB0byBhIGNvbXB1dGVkIGRlZmF1bHQsIHNvIGNhbGxlcnMgY2FuIHRlbGwgd2hldGhlciB0aGVcbiAgICogZGV2ZWxvcGVyIG5hbWVkIGEgc3BlY2lmaWMgY29sdW1uIChlLmcuIHRvIGRpc2FtYmlndWF0ZSBtdWx0aXBsZSBiZWxvbmdzLXRvIG9uIGEgdGhyb3VnaCB0YXJnZXQpLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSBleHBsaWNpdGx5IGRlY2xhcmVkIGZvcmVpZ24ga2V5LCBvciB1bmRlZmluZWQuXG4gICAqL1xuICBnZXRFeHBsaWNpdEZvcmVpZ25LZXkoKSB7IHJldHVybiB0aGlzLl9leHBsaWNpdEZvcmVpZ25LZXkgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBmb3JlaWduIGtleS5cbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoZSBmb3JlaWduIGtleSwgZS5nLiBcInVzZXJfaWRcIiwgXCJwb3N0X2lkXCIgZXRjLlxuICAgKi9cbiAgZ2V0Rm9yZWlnbktleSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJnZXRGb3JlaWduS2V5IG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGludmVyc2Ugb2YuXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBUaGUgbmFtZSBvZiB0aGUgaW52ZXJzZSByZWxhdGlvbnNoaXAsIGUuZy4gXCJwb3N0c1wiLCBcImNvbW1lbnRzXCIgZXRjLlxuICAgKi9cbiAgZ2V0SW52ZXJzZU9mKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcImdldEludmVyc2VPZiBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBtb2RlbCBjbGFzcy5cbiAgICogQHJldHVybnMge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSAtIFRoZSBtb2RlbCBjbGFzcy5cbiAgICovXG4gIGdldE1vZGVsQ2xhc3MoKSB7IHJldHVybiB0aGlzLm1vZGVsQ2xhc3MgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCByZWxhdGlvbnNoaXAgbmFtZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHJlbGF0aW9uc2hpcCwgZS5nLiBcInBvc3RzXCIsIFwidXNlclwiLCBcImNvbW1lbnRzXCIgZXRjLlxuICAgKi9cbiAgZ2V0UmVsYXRpb25zaGlwTmFtZSgpIHsgcmV0dXJuIHRoaXMucmVsYXRpb25zaGlwTmFtZSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IHNjb3BlLlxuICAgKiBAcmV0dXJucyB7UmVsYXRpb25zaGlwU2NvcGVDYWxsYmFjayB8IHVuZGVmaW5lZH0gLSBUaGUgc2NvcGUgY2FsbGJhY2suXG4gICAqL1xuICBnZXRTY29wZSgpIHsgcmV0dXJuIHRoaXMuX3Njb3BlIH1cblxuICAvKipcbiAgICogUnVucyBhcHBseSBzY29wZS5cbiAgICogQHRlbXBsYXRlIFRcbiAgICogQHBhcmFtIHtUfSBxdWVyeSAtIFF1ZXJ5IGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7VH0gLSBTY29wZWQgcXVlcnkuXG4gICAqL1xuICBhcHBseVNjb3BlKHF1ZXJ5KSB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLmdldFNjb3BlKClcblxuICAgIGlmICghc2NvcGUpIHJldHVybiBxdWVyeVxuXG4gICAgY29uc3Qgc2NvcGVkUXVlcnkgPSAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0eXBlIHtUIHwgdm9pZH0gKi8gKHNjb3BlLmNhbGwocXVlcnksIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEB0eXBlIHtpbXBvcnQoXCIuLi8uLi9xdWVyeS9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0PHR5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0Pn0gKi8gKHF1ZXJ5KSkpXG5cbiAgICByZXR1cm4gc2NvcGVkUXVlcnkgfHwgcXVlcnlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBwb2x5bW9ycGhpYy5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBwb2x5bW9ycGhpYy5cbiAgICovXG4gIGdldFBvbHltb3JwaGljKCkge1xuICAgIHJldHVybiB0aGlzLl9wb2x5bW9ycGhpYyB8fCBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IHBvbHltb3JwaGljIHR5cGUgY29sdW1uLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBwb2x5bW9ycGhpYyB0eXBlIGNvbHVtbi5cbiAgICovXG4gIGdldFBvbHltb3JwaGljVHlwZUNvbHVtbigpIHtcbiAgICBpZiAoIXRoaXMuZ2V0UG9seW1vcnBoaWMoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RoaXMubW9kZWxDbGFzcy5uYW1lfSMke3RoaXMucmVsYXRpb25zaGlwTmFtZX0gaXNuJ3QgcG9seW1vcnBoaWNgKVxuICAgIH1cblxuICAgIGlmICghdGhpcy5fcG9seW1vcnBoaWNUeXBlQ29sdW1uKSB7XG4gICAgICBjb25zdCBmb3JlaWduS2V5ID0gdGhpcy5nZXRGb3JlaWduS2V5KClcblxuICAgICAgaWYgKGZvcmVpZ25LZXkgJiYgZm9yZWlnbktleS5lbmRzV2l0aChcIl9pZFwiKSkge1xuICAgICAgICB0aGlzLl9wb2x5bW9ycGhpY1R5cGVDb2x1bW4gPSBmb3JlaWduS2V5LnJlcGxhY2UoL19pZCQvLCBcIl90eXBlXCIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB1bmRlcnNjb3JlZE5hbWUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUodGhpcy5nZXRSZWxhdGlvbnNoaXBOYW1lKCkpXG5cbiAgICAgICAgdGhpcy5fcG9seW1vcnBoaWNUeXBlQ29sdW1uID0gYCR7dW5kZXJzY29yZWROYW1lfV90eXBlYFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9wb2x5bW9ycGhpY1R5cGVDb2x1bW5cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBwcmltYXJ5IGtleS5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIGZvcmVpZ24ga2V5LCBlLmcuIFwiaWRcIiBldGMuXG4gICAqL1xuICBnZXRQcmltYXJ5S2V5KCkgeyByZXR1cm4gdGhpcy5fcHJpbWFyeUtleSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IHR5cGUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSB0eXBlIG9mIHRoZSByZWxhdGlvbnNoaXAsIGUuZy4gXCJoYXNfbWFueVwiLCBcImJlbG9uZ3NfdG9cIiwgXCJoYXNfb25lXCIsIFwiaGFzX2FuZF9iZWxvbmdzX3RvX21hbnlcIiBldGMuXG4gICAqL1xuICBnZXRUeXBlKCkgeyByZXR1cm4gdGhpcy50eXBlIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgdGFyZ2V0IG1vZGVsIGNsYXNzLlxuICAgKiBAcmV0dXJucyB7dHlwZW9mIGltcG9ydChcIi4uL2luZGV4LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWR9IFRoZSB0YXJnZXQgbW9kZWwgY2xhc3MgZm9yIHRoaXMgcmVsYXRpb25zaGlwLCBlLmcuIGlmIHRoZSByZWxhdGlvbnNoaXAgaXMgXCJwb3N0c1wiIHRoZW4gdGhlIHRhcmdldCBtb2RlbCBjbGFzcyBpcyB0aGUgUG9zdCBjbGFzcy5cbiAgICovXG4gIGdldFRhcmdldE1vZGVsQ2xhc3MoKSB7XG4gICAgaWYgKHRoaXMuZ2V0UG9seW1vcnBoaWMoKSAmJiB0aGlzLnR5cGUgPT0gXCJiZWxvbmdzVG9cIikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAodGhpcy5jbGFzc05hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5nZXRNb2RlbENsYXNzKHRoaXMuY2xhc3NOYW1lKVxuICAgIH0gZWxzZSBpZiAodGhpcy5rbGFzcykge1xuICAgICAgcmV0dXJuIHRoaXMua2xhc3NcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaWd1cmUgb3V0IHRoZSB0YXJnZXQgbW9kZWwgY2xhc3NcIilcbiAgfVxufVxuIl19
@@ -21,7 +21,7 @@
21
21
  */
22
22
  /**
23
23
  * Pending transition key.
24
- @type {string} */
24
+ * @type {string} */
25
25
  const PENDING_TRANSITION_KEY = "_stateMachinePendingTransition";
26
26
  /**
27
27
  * Registers a state machine on a Velocious model class.
@@ -61,7 +61,7 @@ export function stateMachine(ModelClass, definition) {
61
61
  // Store definition on the model class for introspection
62
62
  /**
63
63
  * Dynamic class.
64
- @type {?} */
64
+ * @type {?} */
65
65
  const dynamicClass = ModelClass;
66
66
  dynamicClass._stateMachineDefinition = definition;
67
67
  dynamicClass._stateMachineColumn = column;
@@ -89,7 +89,7 @@ export function stateMachine(ModelClass, definition) {
89
89
  // Register event methods and guard methods on the prototype
90
90
  /**
91
91
  * Proto.
92
- @type {?} */
92
+ * @type {?} */
93
93
  const proto = ModelClass.prototype;
94
94
  for (const [eventName, eventDef] of Object.entries(definition.events)) {
95
95
  const fromStates = Array.isArray(eventDef.from) ? eventDef.from : [eventDef.from];
@@ -126,7 +126,7 @@ export function stateMachine(ModelClass, definition) {
126
126
  proto[eventName] = function () {
127
127
  /**
128
128
  * Self.
129
- @type {?} */
129
+ * @type {?} */
130
130
  const self = this;
131
131
  const currentState = self.readAttribute(column);
132
132
  if (!fromStates.includes(currentState)) {
@@ -151,7 +151,7 @@ export function stateMachine(ModelClass, definition) {
151
151
  proto[`${eventName}AndSave`] = async function () {
152
152
  /**
153
153
  * Self.
154
- @type {?} */
154
+ * @type {?} */
155
155
  const self = this;
156
156
  const currentState = self.readAttribute(column);
157
157
  if (!fromStates.includes(currentState)) {
@@ -174,7 +174,7 @@ export function stateMachine(ModelClass, definition) {
174
174
  ModelClass.beforeSave(async function (model) {
175
175
  /**
176
176
  * Dynamic model.
177
- @type {?} */
177
+ * @type {?} */
178
178
  const dynamicModel = model;
179
179
  const pending = dynamicModel[PENDING_TRANSITION_KEY];
180
180
  if (!pending) {
@@ -195,7 +195,7 @@ export function stateMachine(ModelClass, definition) {
195
195
  ModelClass.afterSave(async function (model) {
196
196
  /**
197
197
  * Dynamic model.
198
- @type {?} */
198
+ * @type {?} */
199
199
  const dynamicModel = model;
200
200
  const pending = dynamicModel[PENDING_TRANSITION_KEY];
201
201
  if (!pending) {
@@ -223,4 +223,4 @@ export function stateMachine(ModelClass, definition) {
223
223
  function columnSetterName(column) {
224
224
  return `set${column.charAt(0).toUpperCase()}${column.slice(1)}`;
225
225
  }
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtbWFjaGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9yZWNvcmQvc3RhdGUtbWFjaGluZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFFSDs7bUJBRW1CO0FBQ25CLE1BQU0sc0JBQXNCLEdBQUcsZ0NBQWdDLENBQUE7QUFFL0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLFVBQVUsRUFBRSxVQUFVO0lBQ2pELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFBO0lBQzNDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRWpELHdEQUF3RDtJQUN4RDs7a0JBRWM7SUFDZCxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUE7SUFFL0IsWUFBWSxDQUFDLHVCQUF1QixHQUFHLFVBQVUsQ0FBQTtJQUNqRCxZQUFZLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFBO0lBRXpDOzs7T0FHRztJQUNILFlBQVksQ0FBQyx5QkFBeUIsR0FBRztRQUN2QyxPQUFPLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQTtJQUM3QyxDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCxZQUFZLENBQUMscUJBQXFCLEdBQUc7UUFDbkMsT0FBTyxZQUFZLENBQUMsbUJBQW1CLENBQUE7SUFDekMsQ0FBQyxDQUFBO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLHlCQUF5QixHQUFHO1FBQ3ZDLE9BQU8sVUFBVSxDQUFBO0lBQ25CLENBQUMsQ0FBQTtJQUVELDREQUE0RDtJQUM1RDs7a0JBRWM7SUFDZCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFBO0lBRWxDLEtBQUssTUFBTSxDQUFDLFNB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QUVjO1FBQ2QsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFBO1FBQzFCLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1FBRXBELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE9BQU07UUFDUixDQUFDO1FBRUQseURBQXlEO1FBQ3pELFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLElBQUksQ0FBQTtRQUUzQyxzQ0FBc0M7UUFDdEMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUE7UUFFckQsSUFBSSxlQUFlLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDaEMsTUFBTSxlQUFlLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3pDLENBQUM7UUFFRCxpQ0FBaUM7UUFDakMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFckQsSUFBSSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDcEIsTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzdCLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxNQUFNO0lBQzlCLE9BQU8sTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUNqRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogRGVmaW5lcyB0aGlzIHR5cGVkZWYuXG4gKiBAdHlwZWRlZiB7e1xuICogICBjb2x1bW4/OiBzdHJpbmcsXG4gKiAgIGluaXRpYWw6IHN0cmluZyxcbiAqICAgc3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBTdGF0ZURlZmluaXRpb24+LFxuICogICBldmVudHM6IFJlY29yZDxzdHJpbmcsIEV2ZW50RGVmaW5pdGlvbj5cbiAqIH19IFN0YXRlTWFjaGluZURlZmluaXRpb25cbiAqIEB0eXBlZGVmIHt7XG4gKiAgIGJlZm9yZUVudGVyPzogKG1vZGVsOiBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+LFxuICogICBhZnRlckVudGVyPzogKG1vZGVsOiBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+XG4gKiB9fSBTdGF0ZURlZmluaXRpb25cbiAqIEB0eXBlZGVmIHt7XG4gKiAgIGZyb206IHN0cmluZyB8IHN0cmluZ1tdLFxuICogICB0bzogc3RyaW5nLFxuICogICBndWFyZD86IChtb2RlbDogaW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0KSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPixcbiAqICAgYmVmb3JlPzogKG1vZGVsOiBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+LFxuICogICBhZnRlcj86IChtb2RlbDogaW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPlxuICogfX0gRXZlbnREZWZpbml0aW9uXG4gKi9cblxuLyoqXG4gKiBQZW5kaW5nIHRyYW5zaXRpb24ga2V5LlxuICBAdHlwZSB7c3RyaW5nfSAqL1xuY29uc3QgUEVORElOR19UUkFOU0lUSU9OX0tFWSA9IFwiX3N0YXRlTWFjaGluZVBlbmRpbmdUcmFuc2l0aW9uXCJcblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBzdGF0ZSBtYWNoaW5lIG9uIGEgVmVsb2Npb3VzIG1vZGVsIGNsYXNzLlxuICpcbiAqIFVzYWdlOlxuICogYGBganNcbiAqIGltcG9ydCB7c3RhdGVNYWNoaW5lfSBmcm9tIFwidmVsb2Npb3VzL2J1aWxkL3NyYy9kYXRhYmFzZS9yZWNvcmQvc3RhdGUtbWFjaGluZS5qc1wiXG4gKlxuICogY2xhc3MgQnVpbGQgZXh0ZW5kcyBCdWlsZEJhc2Uge31cbiAqXG4gKiBzdGF0ZU1hY2hpbmUoQnVpbGQsIHtcbiAqICAgY29sdW1uOiBcInN0YXR1c1wiLFxuICogICBpbml0aWFsOiBcIm5ld1wiLFxuICogICBzdGF0ZXM6IHtcbiAqICAgICBuZXc6IHt9LFxuICogICAgIHF1ZXVlZDoge2JlZm9yZUVudGVyOiAoYnVpbGQpID0+IHsgYnVpbGQuc2V0UXVldWVkQXQobmV3IERhdGUoKSkgfX0sXG4gKiAgICAgcnVubmluZzoge2JlZm9yZUVudGVyOiAoYnVpbGQpID0+IHsgYnVpbGQuc2V0U3RhcnRlZEF0KG5ldyBEYXRlKCkpIH19LFxuICogICAgIGZhaWxlZDoge2JlZm9yZUVudGVyOiAoYnVpbGQpID0+IHsgYnVpbGQuc2V0RW5kZWRBdChuZXcgRGF0ZSgpKSB9fSxcbiAqICAgICBzdWNjZWVkZWQ6IHtiZWZvcmVFbnRlcjogKGJ1aWxkKSA9PiB7IGJ1aWxkLnNldEVuZGVkQXQobmV3IERhdGUoKSkgfX1cbiAqICAgfSxcbiAqICAgZXZlbnRzOiB7XG4gKiAgICAgcXVldWU6IHtmcm9tOiBcIm5ld1wiLCB0bzogXCJxdWV1ZWRcIn0sXG4gKiAgICAgcnVuOiB7ZnJvbTogW1wibmV3XCIsIFwicXVldWVkXCIsIFwiY3Jhc2hlZFwiXSwgdG86IFwicnVubmluZ1wifSxcbiAqICAgICBmYWlsOiB7ZnJvbTogW1wibmV3XCIsIFwicXVldWVkXCIsIFwicnVubmluZ1wiXSwgdG86IFwiZmFpbGVkXCJ9LFxuICogICAgIHN1Y2NlZWQ6IHtmcm9tOiBcInJ1bm5pbmdcIiwgdG86IFwic3VjY2VlZGVkXCJ9LFxuICogICAgIGNhbmNlbDoge2Zyb206IFtcIm5ld1wiLCBcInF1ZXVlZFwiLCBcInJ1bm5pbmdcIl0sIHRvOiBcImNhbmNlbGxlZFwiLCBndWFyZDogKGJ1aWxkKSA9PiAhYnVpbGQuaXNOZXdSZWNvcmQoKX1cbiAqICAgfVxuICogfSlcbiAqIGBgYFxuICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBNb2RlbENsYXNzIC0gVGhlIG1vZGVsIGNsYXNzIHRvIGFkZCBzdGF0ZSBtYWNoaW5lIGJlaGF2aW9yIHRvLlxuICogQHBhcmFtIHtTdGF0ZU1hY2hpbmVEZWZpbml0aW9ufSBkZWZpbml0aW9uIC0gVGhlIHN0YXRlIG1hY2hpbmUgZGVmaW5pdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVNYWNoaW5lKE1vZGVsQ2xhc3MsIGRlZmluaXRpb24pIHtcbiAgY29uc3QgY29sdW1uID0gZGVmaW5pdGlvbi5jb2x1bW4gfHwgXCJzdGF0ZVwiXG4gIGNvbnN0IHN0YXRlTmFtZXMgPSBPYmplY3Qua2V5cyhkZWZpbml0aW9uLnN0YXRlcylcblxuICAvLyBTdG9yZSBkZWZpbml0aW9uIG9uIHRoZSBtb2RlbCBjbGFzcyBmb3IgaW50cm9zcGVjdGlvblxuICAvKipcbiAgICogRHluYW1pYyBjbGFzcy5cbiAgICBAdHlwZSB7P30gKi9cbiAgY29uc3QgZHluYW1pY0NsYXNzID0gTW9kZWxDbGFzc1xuXG4gIGR5bmFtaWNDbGFzcy5fc3RhdGVNYWNoaW5lRGVmaW5pdGlvbiA9IGRlZmluaXRpb25cbiAgZHluYW1pY0NsYXNzLl9zdGF0ZU1hY2hpbmVDb2x1bW4gPSBjb2x1bW5cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBzdGF0ZSBtYWNoaW5lIGRlZmluaXRpb24uXG4gICAqIEByZXR1cm5zIHtTdGF0ZU1hY2hpbmVEZWZpbml0aW9ufSAtIFRoZSByZWdpc3RlcmVkIHN0YXRlIG1hY2hpbmUgZGVmaW5pdGlvbi5cbiAgICovXG4gIGR5bmFtaWNDbGFzcy5nZXRTdGF0ZU1hY2hpbmVEZWZpbml0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkeW5hbWljQ2xhc3MuX3N0YXRlTWFjaGluZURlZmluaXRpb25cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdGF0ZSBjb2x1bW4gbmFtZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgY29sdW1uIG5hbWUgdXNlZCBmb3Igc3RhdGUgc3RvcmFnZS5cbiAgICovXG4gIGR5bmFtaWNDbGFzcy5nZXRTdGF0ZU1hY2hpbmVDb2x1bW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGR5bmFtaWNDbGFzcy5fc3RhdGVNYWNoaW5lQ29sdW1uXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgZGVjbGFyZWQgc3RhdGUgbmFtZXMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gLSBBbGwgZGVjbGFyZWQgc3RhdGUgbmFtZXMuXG4gICAqL1xuICBkeW5hbWljQ2xhc3MuZ2V0U3RhdGVNYWNoaW5lU3RhdGVOYW1lcyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc3RhdGVOYW1lc1xuICB9XG5cbiAgLy8gUmVnaXN0ZXIgZXZlbnQgbWV0aG9kcyBhbmQgZ3VhcmQgbWV0aG9kcyBvbiB0aGUgcHJvdG90eXBlXG4gIC8qKlxuICAgKiBQcm90by5cbiAgICBAdHlwZSB7P30gKi9cbiAgY29uc3QgcHJvdG8gPSBNb2RlbENsYXNzLnByb3RvdHlwZVxuXG4gIGZvciAoY29uc3QgW2V2ZW50TmFtZSwgZXZlbnREZWZdIG9mIE9iamVjdC5lbnRyaWVzKGRlZmluaXRpb24uZXZlbnRzKSkge1xuICAgIGNvbnN0IGZyb21TdGF0ZXMgPSBBcnJheS5pc0FycmF5KGV2ZW50RGVmLmZyb20pID8gZXZlbnREZWYuZnJvbSA6IFtldmVudERlZi5mcm9tXVxuICAgIGNvbnN0IGNhcGl0YWxpemVkRXZlbnQgPSBldmVudE5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBldmVudE5hbWUuc2xpY2UoMSlcbiAgICBjb25zdCBjYW5NZXRob2ROYW1lID0gYGNhbiR7Y2FwaXRhbGl6ZWRFdmVudH1gXG4gICAgY29uc3Qgc2V0dGVyTmFtZSA9IGNvbHVtblNldHRlck5hbWUoY29sdW1uKVxuXG4gICAgLy8gR3VhcmQgbWV0aG9kOiBjYW5RdWV1ZSgpLCBjYW5SdW4oKSwgZXRjLlxuICAgIHByb3RvW2Nhbk1ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy5yZWFkQXR0cmlidXRlKGNvbHVtbilcblxuICAgICAgaWYgKCFmcm9tU3RhdGVzLmluY2x1ZGVzKGN1cnJlbnRTdGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudERlZi5ndWFyZCkge1xuICAgICAgICBjb25zdCBndWFyZFJlc3VsdCA9IGV2ZW50RGVmLmd1YXJkKHRoaXMpXG5cbiAgICAgICAgaWYgKGd1YXJkUmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgR3VhcmQgZm9yIGV2ZW50IFwiJHtldmVudE5hbWV9XCIgcmV0dXJuZWQgYSBQcm9taXNlLiBVc2UgYXdhaXQgbW9kZWwuY2FuJHtjYXBpdGFsaXplZEV2ZW50fUFzeW5jKCkgaW5zdGVhZC5gKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGd1YXJkUmVzdWx0XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gQXN5bmMgZ3VhcmQgbWV0aG9kOiBjYW5RdWV1ZUFzeW5jKCksIGNhblJ1bkFzeW5jKCksIGV0Yy5cbiAgICBwcm90b1tgJHtjYW5NZXRob2ROYW1lfUFzeW5jYF0gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLnJlYWRBdHRyaWJ1dGUoY29sdW1uKVxuXG4gICAgICBpZiAoIWZyb21TdGF0ZXMuaW5jbHVkZXMoY3VycmVudFN0YXRlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50RGVmLmd1YXJkKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBldmVudERlZi5ndWFyZCh0aGlzKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFRyYW5zaXRpb24gbWV0aG9kOiBxdWV1ZSgpLCBydW4oKSwgZXRjLiDigJQgY2hlY2tzIGd1YXJkLCBzZXRzIHRoZSBzdGF0ZSwgc3Rhc2hlcyBldmVudCBuYW1lXG4gICAgcHJvdG9bZXZlbnROYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8qKlxuICAgICAgICogU2VsZi5cbiAgICAgICAgQHR5cGUgez99ICovXG4gICAgICBjb25zdCBzZWxmID0gdGhpc1xuICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gc2VsZi5yZWFkQXR0cmlidXRlKGNvbHVtbilcblxuICAgICAgaWYgKCFmcm9tU3RhdGVzLmluY2x1ZGVzKGN1cnJlbnRTdGF0ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW5ub3QgdHJhbnNpdGlvbiBcIiR7ZXZlbnROYW1lfVwiIGZyb20gXCIke2N1cnJlbnRTdGF0ZX1cIiBvbiAke3NlbGYuZ2V0TW9kZWxDbGFzcygpLm5hbWV9LiBgICtcbiAgICAgICAgICBgQWxsb3dlZCBzb3VyY2Ugc3RhdGVzOiAke2Zyb21TdGF0ZXMuam9pbihcIiwgXCIpfWBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyBFbmZvcmNlIHN5bmNocm9ub3VzIGd1YXJkIGJlZm9yZSBtdXRhdGluZyBzdGF0ZVxuICAgICAgaWYgKGV2ZW50RGVmLmd1YXJkKSB7XG4gICAgICAgIGNvbnN0IGd1YXJkUmVzdWx0ID0gZXZlbnREZWYuZ3VhcmQoc2VsZilcblxuICAgICAgICBpZiAoZ3VhcmRSZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHdWFyZCBmb3IgZXZlbnQgXCIke2V2ZW50TmFtZX1cIiByZXR1cm5lZCBhIFByb21pc2UuIFVzZSBhd2FpdCBtb2RlbC4ke2V2ZW50TmFtZX1BbmRTYXZlKCkgZm9yIGFzeW5jIGd1YXJkcy5gKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFndWFyZFJlc3VsdCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBHdWFyZCByZWplY3RlZCB0cmFuc2l0aW9uIFwiJHtldmVudE5hbWV9XCIgZnJvbSBcIiR7Y3VycmVudFN0YXRlfVwiIG9uICR7c2VsZi5nZXRNb2RlbENsYXNzKCkubmFtZX0uYFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTdGFzaCB0aGUgdHJhbnNpdGlvbiBzbyBiZWZvcmVTYXZlL2FmdGVyU2F2ZSBrbm93IHdoaWNoIGV2ZW50IHdhcyBpbnZva2VkXG4gICAgICBzZWxmW1BFTkRJTkdfVFJBTlNJVElPTl9LRVldID0ge2V2ZW50TmFtZSwgZnJvbTogY3VycmVudFN0YXRlLCB0bzogZXZlbnREZWYudG99XG4gICAgICBzZWxmW3NldHRlck5hbWVdKGV2ZW50RGVmLnRvKVxuICAgIH1cblxuICAgIC8vIEJhbmcgbWV0aG9kOiBxdWV1ZUFuZFNhdmUoKSwgcnVuQW5kU2F2ZSgpLCBldGMuIOKAlCB0cmFuc2l0aW9ucyBBTkQgc2F2ZXMgKHN1cHBvcnRzIGFzeW5jIGd1YXJkcylcbiAgICBwcm90b1tgJHtldmVudE5hbWV9QW5kU2F2ZWBdID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLyoqXG4gICAgICAgKiBTZWxmLlxuICAgICAgICBAdHlwZSB7P30gKi9cbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzXG4gICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBzZWxmLnJlYWRBdHRyaWJ1dGUoY29sdW1uKVxuXG4gICAgICBpZiAoIWZyb21TdGF0ZXMuaW5jbHVkZXMoY3VycmVudFN0YXRlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCB0cmFuc2l0aW9uIFwiJHtldmVudE5hbWV9XCIgZnJvbSBcIiR7Y3VycmVudFN0YXRlfVwiIG9uICR7c2VsZi5nZXRNb2RlbENsYXNzKCkubmFtZX0uIGAgK1xuICAgICAgICAgIGBBbGxvd2VkIHNvdXJjZSBzdGF0ZXM6ICR7ZnJvbVN0YXRlcy5qb2luKFwiLCBcIil9YFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIEVuZm9yY2UgYXN5bmMgZ3VhcmQgYmVmb3JlIG11dGF0aW5nIHN0YXRlXG4gICAgICBpZiAoZXZlbnREZWYuZ3VhcmQpIHtcbiAgICAgICAgY29uc3QgYWxsb3dlZCA9IGF3YWl0IGV2ZW50RGVmLmd1YXJkKHNlbGYpXG5cbiAgICAgICAgaWYgKCFhbGxvd2VkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEd1YXJkIHJlamVjdGVkIHRyYW5zaXRpb24gXCIke2V2ZW50TmFtZX1cIiBmcm9tIFwiJHtjdXJyZW50U3RhdGV9XCIgb24gJHtzZWxmLmdldE1vZGVsQ2xhc3MoKS5uYW1lfS5gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNlbGZbUEVORElOR19UUkFOU0lUSU9OX0tFWV0gPSB7ZXZlbnROYW1lLCBmcm9tOiBjdXJyZW50U3RhdGUsIHRvOiBldmVudERlZi50b31cbiAgICAgIHNlbGZbc2V0dGVyTmFtZV0oZXZlbnREZWYudG8pXG4gICAgICBhd2FpdCBzZWxmLnNhdmUoKVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlZ2lzdGVyIGEgYmVmb3JlU2F2ZSBjYWxsYmFjayB0aGF0IGZpcmVzIHN0YXRlLWVudGVyIGhvb2tzXG4gIE1vZGVsQ2xhc3MuYmVmb3JlU2F2ZShhc3luYyBmdW5jdGlvbiAobW9kZWwpIHtcbiAgICAvKipcbiAgICAgKiBEeW5hbWljIG1vZGVsLlxuICAgICAgQHR5cGUgez99ICovXG4gICAgY29uc3QgZHluYW1pY01vZGVsID0gbW9kZWxcbiAgICBjb25zdCBwZW5kaW5nID0gZHluYW1pY01vZGVsW1BFTkRJTkdfVFJBTlNJVElPTl9LRVldXG5cbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50RGVmID0gZGVmaW5pdGlvbi5ldmVudHNbcGVuZGluZy5ldmVudE5hbWVdXG5cbiAgICAvLyBSdW4gZXZlbnQtbGV2ZWwgYmVmb3JlIGNhbGxiYWNrXG4gICAgaWYgKGV2ZW50RGVmPy5iZWZvcmUpIHtcbiAgICAgIGF3YWl0IGV2ZW50RGVmLmJlZm9yZShtb2RlbClcbiAgICB9XG5cbiAgICAvLyBSdW4gc3RhdGUtbGV2ZWwgYmVmb3JlRW50ZXIgY2FsbGJhY2tcbiAgICBjb25zdCBzdGF0ZURlZmluaXRpb24gPSBkZWZpbml0aW9uLnN0YXRlc1twZW5kaW5nLnRvXVxuXG4gICAgaWYgKHN0YXRlRGVmaW5pdGlvbj8uYmVmb3JlRW50ZXIpIHtcbiAgICAgIGF3YWl0IHN0YXRlRGVmaW5pdGlvbi5iZWZvcmVFbnRlcihtb2RlbClcbiAgICB9XG4gIH0pXG5cbiAgLy8gUmVnaXN0ZXIgYW4gYWZ0ZXJTYXZlIGNhbGxiYWNrIGZvciBhZnRlckVudGVyIGhvb2tzXG4gIE1vZGVsQ2xhc3MuYWZ0ZXJTYXZlKGFzeW5jIGZ1bmN0aW9uIChtb2RlbCkge1xuICAgIC8qKlxuICAgICAqIER5bmFtaWMgbW9kZWwuXG4gICAgICBAdHlwZSB7P30gKi9cbiAgICBjb25zdCBkeW5hbWljTW9kZWwgPSBtb2RlbFxuICAgIGNvbnN0IHBlbmRpbmcgPSBkeW5hbWljTW9kZWxbUEVORElOR19UUkFOU0lUSU9OX0tFWV1cblxuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgdGhlIHBlbmRpbmcgdHJhbnNpdGlvbiBub3cgdGhhdCBzYXZlIGlzIGNvbXBsZXRlXG4gICAgZHluYW1pY01vZGVsW1BFTkRJTkdfVFJBTlNJVElPTl9LRVldID0gbnVsbFxuXG4gICAgLy8gUnVuIHN0YXRlLWxldmVsIGFmdGVyRW50ZXIgY2FsbGJhY2tcbiAgICBjb25zdCBzdGF0ZURlZmluaXRpb24gPSBkZWZpbml0aW9uLnN0YXRlc1twZW5kaW5nLnRvXVxuXG4gICAgaWYgKHN0YXRlRGVmaW5pdGlvbj8uYWZ0ZXJFbnRlcikge1xuICAgICAgYXdhaXQgc3RhdGVEZWZpbml0aW9uLmFmdGVyRW50ZXIobW9kZWwpXG4gICAgfVxuXG4gICAgLy8gUnVuIGV2ZW50LWxldmVsIGFmdGVyIGNhbGxiYWNrXG4gICAgY29uc3QgZXZlbnREZWYgPSBkZWZpbml0aW9uLmV2ZW50c1twZW5kaW5nLmV2ZW50TmFtZV1cblxuICAgIGlmIChldmVudERlZj8uYWZ0ZXIpIHtcbiAgICAgIGF3YWl0IGV2ZW50RGVmLmFmdGVyKG1vZGVsKVxuICAgIH1cbiAgfSlcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzZXR0ZXIgbWV0aG9kIG5hbWUgZm9yIGEgY29sdW1uIChlLmcuLCBcInN0YXR1c1wiIOKGkiBcInNldFN0YXR1c1wiLCBcInN0YXRlXCIg4oaSIFwic2V0U3RhdGVcIikuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uIC0gVGhlIGNvbHVtbiBuYW1lLlxuICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgc2V0dGVyIG1ldGhvZCBuYW1lLlxuICovXG5mdW5jdGlvbiBjb2x1bW5TZXR0ZXJOYW1lKGNvbHVtbikge1xuICByZXR1cm4gYHNldCR7Y29sdW1uLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7Y29sdW1uLnNsaWNlKDEpfWBcbn1cbiJdfQ==
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtbWFjaGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9yZWNvcmQvc3RhdGUtbWFjaGluZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFFSDs7b0JBRW9CO0FBQ3BCLE1BQU0sc0JBQXNCLEdBQUcsZ0NBQWdDLENBQUE7QUFFL0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLFVBQVUsRUFBRSxVQUFVO0lBQ2pELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFBO0lBQzNDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRWpELHdEQUF3RDtJQUN4RDs7bUJBRWU7SUFDZixNQUFNLFlBQVksR0FBRyxVQUFVLENBQUE7SUFFL0IsWUFBWSxDQUFDLHVCQUF1QixHQUFHLFVBQVUsQ0FBQTtJQUNqRCxZQUFZLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFBO0lBRXpDOzs7T0FHRztJQUNILFlBQVksQ0FBQyx5QkFBeUIsR0FBRztRQUN2QyxPQUFPLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQTtJQUM3QyxDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCxZQUFZLENBQUMscUJBQXFCLEdBQUc7UUFDbkMsT0FBTyxZQUFZLENBQUMsbUJBQW1CLENBQUE7SUFDekMsQ0FBQyxDQUFBO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLHlCQUF5QixHQUFHO1FBQ3ZDLE9BQU8sVUFBVSxDQUFBO0lBQ25CLENBQUMsQ0FBQTtJQUVELDREQUE0RDtJQUM1RDs7bUJBRWU7SUFDZixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFBO0lBRWxDLEtBQUssTUFBTSxDQUFDLFNB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QUVlO1FBQ2YsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFBO1FBQzFCLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1FBRXBELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE9BQU07UUFDUixDQUFDO1FBRUQseURBQXlEO1FBQ3pELFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLElBQUksQ0FBQTtRQUUzQyxzQ0FBc0M7UUFDdEMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUE7UUFFckQsSUFBSSxlQUFlLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDaEMsTUFBTSxlQUFlLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3pDLENBQUM7UUFFRCxpQ0FBaUM7UUFDakMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFckQsSUFBSSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDcEIsTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzdCLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxNQUFNO0lBQzlCLE9BQU8sTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUNqRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogRGVmaW5lcyB0aGlzIHR5cGVkZWYuXG4gKiBAdHlwZWRlZiB7e1xuICogICBjb2x1bW4/OiBzdHJpbmcsXG4gKiAgIGluaXRpYWw6IHN0cmluZyxcbiAqICAgc3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBTdGF0ZURlZmluaXRpb24+LFxuICogICBldmVudHM6IFJlY29yZDxzdHJpbmcsIEV2ZW50RGVmaW5pdGlvbj5cbiAqIH19IFN0YXRlTWFjaGluZURlZmluaXRpb25cbiAqIEB0eXBlZGVmIHt7XG4gKiAgIGJlZm9yZUVudGVyPzogKG1vZGVsOiBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+LFxuICogICBhZnRlckVudGVyPzogKG1vZGVsOiBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+XG4gKiB9fSBTdGF0ZURlZmluaXRpb25cbiAqIEB0eXBlZGVmIHt7XG4gKiAgIGZyb206IHN0cmluZyB8IHN0cmluZ1tdLFxuICogICB0bzogc3RyaW5nLFxuICogICBndWFyZD86IChtb2RlbDogaW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0KSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPixcbiAqICAgYmVmb3JlPzogKG1vZGVsOiBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLmRlZmF1bHQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+LFxuICogICBhZnRlcj86IChtb2RlbDogaW1wb3J0KFwiLi9pbmRleC5qc1wiKS5kZWZhdWx0KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPlxuICogfX0gRXZlbnREZWZpbml0aW9uXG4gKi9cblxuLyoqXG4gKiBQZW5kaW5nIHRyYW5zaXRpb24ga2V5LlxuICogQHR5cGUge3N0cmluZ30gKi9cbmNvbnN0IFBFTkRJTkdfVFJBTlNJVElPTl9LRVkgPSBcIl9zdGF0ZU1hY2hpbmVQZW5kaW5nVHJhbnNpdGlvblwiXG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgc3RhdGUgbWFjaGluZSBvbiBhIFZlbG9jaW91cyBtb2RlbCBjbGFzcy5cbiAqXG4gKiBVc2FnZTpcbiAqIGBgYGpzXG4gKiBpbXBvcnQge3N0YXRlTWFjaGluZX0gZnJvbSBcInZlbG9jaW91cy9idWlsZC9zcmMvZGF0YWJhc2UvcmVjb3JkL3N0YXRlLW1hY2hpbmUuanNcIlxuICpcbiAqIGNsYXNzIEJ1aWxkIGV4dGVuZHMgQnVpbGRCYXNlIHt9XG4gKlxuICogc3RhdGVNYWNoaW5lKEJ1aWxkLCB7XG4gKiAgIGNvbHVtbjogXCJzdGF0dXNcIixcbiAqICAgaW5pdGlhbDogXCJuZXdcIixcbiAqICAgc3RhdGVzOiB7XG4gKiAgICAgbmV3OiB7fSxcbiAqICAgICBxdWV1ZWQ6IHtiZWZvcmVFbnRlcjogKGJ1aWxkKSA9PiB7IGJ1aWxkLnNldFF1ZXVlZEF0KG5ldyBEYXRlKCkpIH19LFxuICogICAgIHJ1bm5pbmc6IHtiZWZvcmVFbnRlcjogKGJ1aWxkKSA9PiB7IGJ1aWxkLnNldFN0YXJ0ZWRBdChuZXcgRGF0ZSgpKSB9fSxcbiAqICAgICBmYWlsZWQ6IHtiZWZvcmVFbnRlcjogKGJ1aWxkKSA9PiB7IGJ1aWxkLnNldEVuZGVkQXQobmV3IERhdGUoKSkgfX0sXG4gKiAgICAgc3VjY2VlZGVkOiB7YmVmb3JlRW50ZXI6IChidWlsZCkgPT4geyBidWlsZC5zZXRFbmRlZEF0KG5ldyBEYXRlKCkpIH19XG4gKiAgIH0sXG4gKiAgIGV2ZW50czoge1xuICogICAgIHF1ZXVlOiB7ZnJvbTogXCJuZXdcIiwgdG86IFwicXVldWVkXCJ9LFxuICogICAgIHJ1bjoge2Zyb206IFtcIm5ld1wiLCBcInF1ZXVlZFwiLCBcImNyYXNoZWRcIl0sIHRvOiBcInJ1bm5pbmdcIn0sXG4gKiAgICAgZmFpbDoge2Zyb206IFtcIm5ld1wiLCBcInF1ZXVlZFwiLCBcInJ1bm5pbmdcIl0sIHRvOiBcImZhaWxlZFwifSxcbiAqICAgICBzdWNjZWVkOiB7ZnJvbTogXCJydW5uaW5nXCIsIHRvOiBcInN1Y2NlZWRlZFwifSxcbiAqICAgICBjYW5jZWw6IHtmcm9tOiBbXCJuZXdcIiwgXCJxdWV1ZWRcIiwgXCJydW5uaW5nXCJdLCB0bzogXCJjYW5jZWxsZWRcIiwgZ3VhcmQ6IChidWlsZCkgPT4gIWJ1aWxkLmlzTmV3UmVjb3JkKCl9XG4gKiAgIH1cbiAqIH0pXG4gKiBgYGBcbiAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4vaW5kZXguanNcIikuZGVmYXVsdH0gTW9kZWxDbGFzcyAtIFRoZSBtb2RlbCBjbGFzcyB0byBhZGQgc3RhdGUgbWFjaGluZSBiZWhhdmlvciB0by5cbiAqIEBwYXJhbSB7U3RhdGVNYWNoaW5lRGVmaW5pdGlvbn0gZGVmaW5pdGlvbiAtIFRoZSBzdGF0ZSBtYWNoaW5lIGRlZmluaXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXRlTWFjaGluZShNb2RlbENsYXNzLCBkZWZpbml0aW9uKSB7XG4gIGNvbnN0IGNvbHVtbiA9IGRlZmluaXRpb24uY29sdW1uIHx8IFwic3RhdGVcIlxuICBjb25zdCBzdGF0ZU5hbWVzID0gT2JqZWN0LmtleXMoZGVmaW5pdGlvbi5zdGF0ZXMpXG5cbiAgLy8gU3RvcmUgZGVmaW5pdGlvbiBvbiB0aGUgbW9kZWwgY2xhc3MgZm9yIGludHJvc3BlY3Rpb25cbiAgLyoqXG4gICAqIER5bmFtaWMgY2xhc3MuXG4gICAqIEB0eXBlIHs/fSAqL1xuICBjb25zdCBkeW5hbWljQ2xhc3MgPSBNb2RlbENsYXNzXG5cbiAgZHluYW1pY0NsYXNzLl9zdGF0ZU1hY2hpbmVEZWZpbml0aW9uID0gZGVmaW5pdGlvblxuICBkeW5hbWljQ2xhc3MuX3N0YXRlTWFjaGluZUNvbHVtbiA9IGNvbHVtblxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSByZWdpc3RlcmVkIHN0YXRlIG1hY2hpbmUgZGVmaW5pdGlvbi5cbiAgICogQHJldHVybnMge1N0YXRlTWFjaGluZURlZmluaXRpb259IC0gVGhlIHJlZ2lzdGVyZWQgc3RhdGUgbWFjaGluZSBkZWZpbml0aW9uLlxuICAgKi9cbiAgZHluYW1pY0NsYXNzLmdldFN0YXRlTWFjaGluZURlZmluaXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGR5bmFtaWNDbGFzcy5fc3RhdGVNYWNoaW5lRGVmaW5pdGlvblxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN0YXRlIGNvbHVtbiBuYW1lLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBjb2x1bW4gbmFtZSB1c2VkIGZvciBzdGF0ZSBzdG9yYWdlLlxuICAgKi9cbiAgZHluYW1pY0NsYXNzLmdldFN0YXRlTWFjaGluZUNvbHVtbiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZHluYW1pY0NsYXNzLl9zdGF0ZU1hY2hpbmVDb2x1bW5cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBkZWNsYXJlZCBzdGF0ZSBuYW1lcy5cbiAgICogQHJldHVybnMge3N0cmluZ1tdfSAtIEFsbCBkZWNsYXJlZCBzdGF0ZSBuYW1lcy5cbiAgICovXG4gIGR5bmFtaWNDbGFzcy5nZXRTdGF0ZU1hY2hpbmVTdGF0ZU5hbWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzdGF0ZU5hbWVzXG4gIH1cblxuICAvLyBSZWdpc3RlciBldmVudCBtZXRob2RzIGFuZCBndWFyZCBtZXRob2RzIG9uIHRoZSBwcm90b3R5cGVcbiAgLyoqXG4gICAqIFByb3RvLlxuICAgKiBAdHlwZSB7P30gKi9cbiAgY29uc3QgcHJvdG8gPSBNb2RlbENsYXNzLnByb3RvdHlwZVxuXG4gIGZvciAoY29uc3QgW2V2ZW50TmFtZSwgZXZlbnREZWZdIG9mIE9iamVjdC5lbnRyaWVzKGRlZmluaXRpb24uZXZlbnRzKSkge1xuICAgIGNvbnN0IGZyb21TdGF0ZXMgPSBBcnJheS5pc0FycmF5KGV2ZW50RGVmLmZyb20pID8gZXZlbnREZWYuZnJvbSA6IFtldmVudERlZi5mcm9tXVxuICAgIGNvbnN0IGNhcGl0YWxpemVkRXZlbnQgPSBldmVudE5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBldmVudE5hbWUuc2xpY2UoMSlcbiAgICBjb25zdCBjYW5NZXRob2ROYW1lID0gYGNhbiR7Y2FwaXRhbGl6ZWRFdmVudH1gXG4gICAgY29uc3Qgc2V0dGVyTmFtZSA9IGNvbHVtblNldHRlck5hbWUoY29sdW1uKVxuXG4gICAgLy8gR3VhcmQgbWV0aG9kOiBjYW5RdWV1ZSgpLCBjYW5SdW4oKSwgZXRjLlxuICAgIHByb3RvW2Nhbk1ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy5yZWFkQXR0cmlidXRlKGNvbHVtbilcblxuICAgICAgaWYgKCFmcm9tU3RhdGVzLmluY2x1ZGVzKGN1cnJlbnRTdGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudERlZi5ndWFyZCkge1xuICAgICAgICBjb25zdCBndWFyZFJlc3VsdCA9IGV2ZW50RGVmLmd1YXJkKHRoaXMpXG5cbiAgICAgICAgaWYgKGd1YXJkUmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgR3VhcmQgZm9yIGV2ZW50IFwiJHtldmVudE5hbWV9XCIgcmV0dXJuZWQgYSBQcm9taXNlLiBVc2UgYXdhaXQgbW9kZWwuY2FuJHtjYXBpdGFsaXplZEV2ZW50fUFzeW5jKCkgaW5zdGVhZC5gKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGd1YXJkUmVzdWx0XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gQXN5bmMgZ3VhcmQgbWV0aG9kOiBjYW5RdWV1ZUFzeW5jKCksIGNhblJ1bkFzeW5jKCksIGV0Yy5cbiAgICBwcm90b1tgJHtjYW5NZXRob2ROYW1lfUFzeW5jYF0gPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLnJlYWRBdHRyaWJ1dGUoY29sdW1uKVxuXG4gICAgICBpZiAoIWZyb21TdGF0ZXMuaW5jbHVkZXMoY3VycmVudFN0YXRlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50RGVmLmd1YXJkKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBldmVudERlZi5ndWFyZCh0aGlzKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFRyYW5zaXRpb24gbWV0aG9kOiBxdWV1ZSgpLCBydW4oKSwgZXRjLiDigJQgY2hlY2tzIGd1YXJkLCBzZXRzIHRoZSBzdGF0ZSwgc3Rhc2hlcyBldmVudCBuYW1lXG4gICAgcHJvdG9bZXZlbnROYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8qKlxuICAgICAgICogU2VsZi5cbiAgICAgICAqIEB0eXBlIHs/fSAqL1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHNlbGYucmVhZEF0dHJpYnV0ZShjb2x1bW4pXG5cbiAgICAgIGlmICghZnJvbVN0YXRlcy5pbmNsdWRlcyhjdXJyZW50U3RhdGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IHRyYW5zaXRpb24gXCIke2V2ZW50TmFtZX1cIiBmcm9tIFwiJHtjdXJyZW50U3RhdGV9XCIgb24gJHtzZWxmLmdldE1vZGVsQ2xhc3MoKS5uYW1lfS4gYCArXG4gICAgICAgICAgYEFsbG93ZWQgc291cmNlIHN0YXRlczogJHtmcm9tU3RhdGVzLmpvaW4oXCIsIFwiKX1gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gRW5mb3JjZSBzeW5jaHJvbm91cyBndWFyZCBiZWZvcmUgbXV0YXRpbmcgc3RhdGVcbiAgICAgIGlmIChldmVudERlZi5ndWFyZCkge1xuICAgICAgICBjb25zdCBndWFyZFJlc3VsdCA9IGV2ZW50RGVmLmd1YXJkKHNlbGYpXG5cbiAgICAgICAgaWYgKGd1YXJkUmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgR3VhcmQgZm9yIGV2ZW50IFwiJHtldmVudE5hbWV9XCIgcmV0dXJuZWQgYSBQcm9taXNlLiBVc2UgYXdhaXQgbW9kZWwuJHtldmVudE5hbWV9QW5kU2F2ZSgpIGZvciBhc3luYyBndWFyZHMuYClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZ3VhcmRSZXN1bHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgR3VhcmQgcmVqZWN0ZWQgdHJhbnNpdGlvbiBcIiR7ZXZlbnROYW1lfVwiIGZyb20gXCIke2N1cnJlbnRTdGF0ZX1cIiBvbiAke3NlbGYuZ2V0TW9kZWxDbGFzcygpLm5hbWV9LmBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3Rhc2ggdGhlIHRyYW5zaXRpb24gc28gYmVmb3JlU2F2ZS9hZnRlclNhdmUga25vdyB3aGljaCBldmVudCB3YXMgaW52b2tlZFxuICAgICAgc2VsZltQRU5ESU5HX1RSQU5TSVRJT05fS0VZXSA9IHtldmVudE5hbWUsIGZyb206IGN1cnJlbnRTdGF0ZSwgdG86IGV2ZW50RGVmLnRvfVxuICAgICAgc2VsZltzZXR0ZXJOYW1lXShldmVudERlZi50bylcbiAgICB9XG5cbiAgICAvLyBCYW5nIG1ldGhvZDogcXVldWVBbmRTYXZlKCksIHJ1bkFuZFNhdmUoKSwgZXRjLiDigJQgdHJhbnNpdGlvbnMgQU5EIHNhdmVzIChzdXBwb3J0cyBhc3luYyBndWFyZHMpXG4gICAgcHJvdG9bYCR7ZXZlbnROYW1lfUFuZFNhdmVgXSA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8qKlxuICAgICAgICogU2VsZi5cbiAgICAgICAqIEB0eXBlIHs/fSAqL1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHNlbGYucmVhZEF0dHJpYnV0ZShjb2x1bW4pXG5cbiAgICAgIGlmICghZnJvbVN0YXRlcy5pbmNsdWRlcyhjdXJyZW50U3RhdGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IHRyYW5zaXRpb24gXCIke2V2ZW50TmFtZX1cIiBmcm9tIFwiJHtjdXJyZW50U3RhdGV9XCIgb24gJHtzZWxmLmdldE1vZGVsQ2xhc3MoKS5uYW1lfS4gYCArXG4gICAgICAgICAgYEFsbG93ZWQgc291cmNlIHN0YXRlczogJHtmcm9tU3RhdGVzLmpvaW4oXCIsIFwiKX1gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gRW5mb3JjZSBhc3luYyBndWFyZCBiZWZvcmUgbXV0YXRpbmcgc3RhdGVcbiAgICAgIGlmIChldmVudERlZi5ndWFyZCkge1xuICAgICAgICBjb25zdCBhbGxvd2VkID0gYXdhaXQgZXZlbnREZWYuZ3VhcmQoc2VsZilcblxuICAgICAgICBpZiAoIWFsbG93ZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgR3VhcmQgcmVqZWN0ZWQgdHJhbnNpdGlvbiBcIiR7ZXZlbnROYW1lfVwiIGZyb20gXCIke2N1cnJlbnRTdGF0ZX1cIiBvbiAke3NlbGYuZ2V0TW9kZWxDbGFzcygpLm5hbWV9LmBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2VsZltQRU5ESU5HX1RSQU5TSVRJT05fS0VZXSA9IHtldmVudE5hbWUsIGZyb206IGN1cnJlbnRTdGF0ZSwgdG86IGV2ZW50RGVmLnRvfVxuICAgICAgc2VsZltzZXR0ZXJOYW1lXShldmVudERlZi50bylcbiAgICAgIGF3YWl0IHNlbGYuc2F2ZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gUmVnaXN0ZXIgYSBiZWZvcmVTYXZlIGNhbGxiYWNrIHRoYXQgZmlyZXMgc3RhdGUtZW50ZXIgaG9va3NcbiAgTW9kZWxDbGFzcy5iZWZvcmVTYXZlKGFzeW5jIGZ1bmN0aW9uIChtb2RlbCkge1xuICAgIC8qKlxuICAgICAqIER5bmFtaWMgbW9kZWwuXG4gICAgICogQHR5cGUgez99ICovXG4gICAgY29uc3QgZHluYW1pY01vZGVsID0gbW9kZWxcbiAgICBjb25zdCBwZW5kaW5nID0gZHluYW1pY01vZGVsW1BFTkRJTkdfVFJBTlNJVElPTl9LRVldXG5cbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50RGVmID0gZGVmaW5pdGlvbi5ldmVudHNbcGVuZGluZy5ldmVudE5hbWVdXG5cbiAgICAvLyBSdW4gZXZlbnQtbGV2ZWwgYmVmb3JlIGNhbGxiYWNrXG4gICAgaWYgKGV2ZW50RGVmPy5iZWZvcmUpIHtcbiAgICAgIGF3YWl0IGV2ZW50RGVmLmJlZm9yZShtb2RlbClcbiAgICB9XG5cbiAgICAvLyBSdW4gc3RhdGUtbGV2ZWwgYmVmb3JlRW50ZXIgY2FsbGJhY2tcbiAgICBjb25zdCBzdGF0ZURlZmluaXRpb24gPSBkZWZpbml0aW9uLnN0YXRlc1twZW5kaW5nLnRvXVxuXG4gICAgaWYgKHN0YXRlRGVmaW5pdGlvbj8uYmVmb3JlRW50ZXIpIHtcbiAgICAgIGF3YWl0IHN0YXRlRGVmaW5pdGlvbi5iZWZvcmVFbnRlcihtb2RlbClcbiAgICB9XG4gIH0pXG5cbiAgLy8gUmVnaXN0ZXIgYW4gYWZ0ZXJTYXZlIGNhbGxiYWNrIGZvciBhZnRlckVudGVyIGhvb2tzXG4gIE1vZGVsQ2xhc3MuYWZ0ZXJTYXZlKGFzeW5jIGZ1bmN0aW9uIChtb2RlbCkge1xuICAgIC8qKlxuICAgICAqIER5bmFtaWMgbW9kZWwuXG4gICAgICogQHR5cGUgez99ICovXG4gICAgY29uc3QgZHluYW1pY01vZGVsID0gbW9kZWxcbiAgICBjb25zdCBwZW5kaW5nID0gZHluYW1pY01vZGVsW1BFTkRJTkdfVFJBTlNJVElPTl9LRVldXG5cbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENsZWFyIHRoZSBwZW5kaW5nIHRyYW5zaXRpb24gbm93IHRoYXQgc2F2ZSBpcyBjb21wbGV0ZVxuICAgIGR5bmFtaWNNb2RlbFtQRU5ESU5HX1RSQU5TSVRJT05fS0VZXSA9IG51bGxcblxuICAgIC8vIFJ1biBzdGF0ZS1sZXZlbCBhZnRlckVudGVyIGNhbGxiYWNrXG4gICAgY29uc3Qgc3RhdGVEZWZpbml0aW9uID0gZGVmaW5pdGlvbi5zdGF0ZXNbcGVuZGluZy50b11cblxuICAgIGlmIChzdGF0ZURlZmluaXRpb24/LmFmdGVyRW50ZXIpIHtcbiAgICAgIGF3YWl0IHN0YXRlRGVmaW5pdGlvbi5hZnRlckVudGVyKG1vZGVsKVxuICAgIH1cblxuICAgIC8vIFJ1biBldmVudC1sZXZlbCBhZnRlciBjYWxsYmFja1xuICAgIGNvbnN0IGV2ZW50RGVmID0gZGVmaW5pdGlvbi5ldmVudHNbcGVuZGluZy5ldmVudE5hbWVdXG5cbiAgICBpZiAoZXZlbnREZWY/LmFmdGVyKSB7XG4gICAgICBhd2FpdCBldmVudERlZi5hZnRlcihtb2RlbClcbiAgICB9XG4gIH0pXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc2V0dGVyIG1ldGhvZCBuYW1lIGZvciBhIGNvbHVtbiAoZS5nLiwgXCJzdGF0dXNcIiDihpIgXCJzZXRTdGF0dXNcIiwgXCJzdGF0ZVwiIOKGkiBcInNldFN0YXRlXCIpLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbHVtbiAtIFRoZSBjb2x1bW4gbmFtZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIHNldHRlciBtZXRob2QgbmFtZS5cbiAqL1xuZnVuY3Rpb24gY29sdW1uU2V0dGVyTmFtZShjb2x1bW4pIHtcbiAgcmV0dXJuIGBzZXQke2NvbHVtbi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX0ke2NvbHVtbi5zbGljZSgxKX1gXG59XG4iXX0=
@@ -10,7 +10,7 @@ export default class VelociousDatabaseRecordValidatorsPresence extends Base {
10
10
  async validate({ model, attributeName }) {
11
11
  const rawValue = /**
12
12
  * Narrows the runtime value to the documented type.
13
- @type {string | undefined} */ (model.readAttribute(attributeName));
13
+ * @type {string | undefined} */ (model.readAttribute(attributeName));
14
14
  const attributeValue = rawValue?.trim();
15
15
  if (!attributeValue) {
16
16
  if (!(attributeName in model._validationErrors))
@@ -19,4 +19,4 @@ export default class VelociousDatabaseRecordValidatorsPresence extends Base {
19
19
  }
20
20
  }
21
21
  }
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2VuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcmVjb3JkL3ZhbGlkYXRvcnMvcHJlc2VuY2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUU1QixNQUFNLENBQUMsT0FBTyxPQUFPLHlDQUEwQyxTQUFRLElBQUk7SUFDekU7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUMsS0FBSyxFQUFFLGFBQWEsRUFBQztRQUNuQyxNQUFNLFFBQVEsR0FBRzs7d0RBRStCLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUE7UUFDckYsTUFBTSxjQUFjLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFBO1FBRXZDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDO2dCQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUE7WUFFNUYsS0FBSyxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFDLENBQUMsQ0FBQTtRQUM1RixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCYXNlIGZyb20gXCIuL2Jhc2UuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVJlY29yZFZhbGlkYXRvcnNQcmVzZW5jZSBleHRlbmRzIEJhc2Uge1xuICAvKipcbiAgICogUnVucyB2YWxpZGF0ZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBhcmdzLm1vZGVsIC0gTW9kZWwgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmF0dHJpYnV0ZU5hbWUgLSBBdHRyaWJ1dGUgbmFtZS5cbiAgICovXG4gIGFzeW5jIHZhbGlkYXRlKHttb2RlbCwgYXR0cmlidXRlTmFtZX0pIHtcbiAgICBjb25zdCByYXdWYWx1ZSA9IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfSAqLyAobW9kZWwucmVhZEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSlcbiAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZSA9IHJhd1ZhbHVlPy50cmltKClcblxuICAgIGlmICghYXR0cmlidXRlVmFsdWUpIHtcbiAgICAgIGlmICghKGF0dHJpYnV0ZU5hbWUgaW4gbW9kZWwuX3ZhbGlkYXRpb25FcnJvcnMpKSBtb2RlbC5fdmFsaWRhdGlvbkVycm9yc1thdHRyaWJ1dGVOYW1lXSA9IFtdXG5cbiAgICAgIG1vZGVsLl92YWxpZGF0aW9uRXJyb3JzW2F0dHJpYnV0ZU5hbWVdLnB1c2goe3R5cGU6IFwicHJlc2VuY2VcIiwgbWVzc2FnZTogXCJjYW4ndCBiZSBibGFua1wifSlcbiAgICB9XG4gIH1cbn1cbiJdfQ==
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2VuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcmVjb3JkL3ZhbGlkYXRvcnMvcHJlc2VuY2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUU1QixNQUFNLENBQUMsT0FBTyxPQUFPLHlDQUEwQyxTQUFRLElBQUk7SUFDekU7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUMsS0FBSyxFQUFFLGFBQWEsRUFBQztRQUNuQyxNQUFNLFFBQVEsR0FBRzs7eURBRWdDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUE7UUFDdEYsTUFBTSxjQUFjLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFBO1FBRXZDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDO2dCQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUE7WUFFNUYsS0FBSyxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFDLENBQUMsQ0FBQTtRQUM1RixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCYXNlIGZyb20gXCIuL2Jhc2UuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVJlY29yZFZhbGlkYXRvcnNQcmVzZW5jZSBleHRlbmRzIEJhc2Uge1xuICAvKipcbiAgICogUnVucyB2YWxpZGF0ZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBhcmdzLm1vZGVsIC0gTW9kZWwgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmF0dHJpYnV0ZU5hbWUgLSBBdHRyaWJ1dGUgbmFtZS5cbiAgICovXG4gIGFzeW5jIHZhbGlkYXRlKHttb2RlbCwgYXR0cmlidXRlTmFtZX0pIHtcbiAgICBjb25zdCByYXdWYWx1ZSA9IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH0gKi8gKG1vZGVsLnJlYWRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkpXG4gICAgY29uc3QgYXR0cmlidXRlVmFsdWUgPSByYXdWYWx1ZT8udHJpbSgpXG5cbiAgICBpZiAoIWF0dHJpYnV0ZVZhbHVlKSB7XG4gICAgICBpZiAoIShhdHRyaWJ1dGVOYW1lIGluIG1vZGVsLl92YWxpZGF0aW9uRXJyb3JzKSkgbW9kZWwuX3ZhbGlkYXRpb25FcnJvcnNbYXR0cmlidXRlTmFtZV0gPSBbXVxuXG4gICAgICBtb2RlbC5fdmFsaWRhdGlvbkVycm9yc1thdHRyaWJ1dGVOYW1lXS5wdXNoKHt0eXBlOiBcInByZXNlbmNlXCIsIG1lc3NhZ2U6IFwiY2FuJ3QgYmUgYmxhbmtcIn0pXG4gICAgfVxuICB9XG59XG4iXX0=
@@ -12,16 +12,16 @@ export default class VelociousDatabaseRecordValidatorsUniqueness extends Base {
12
12
  async validate({ model, attributeName }) {
13
13
  const modelClass = /**
14
14
  * Narrows the runtime value to the documented type.
15
- @type {typeof import("../index.js").default} */ (model.constructor);
15
+ * @type {typeof import("../index.js").default} */ (model.constructor);
16
16
  const connection = modelClass.connection();
17
17
  const tableName = modelClass._getTable().getName();
18
18
  const attributeValue = /**
19
19
  * Narrows the runtime value to the documented type.
20
- @type {string | number} */ (model.readAttribute(attributeName));
20
+ * @type {string | number} */ (model.readAttribute(attributeName));
21
21
  const attributeNameUnderscore = inflection.underscore(attributeName);
22
22
  /**
23
23
  * Where args.
24
- @type {Record<string, string | number>} */
24
+ * @type {Record<string, string | number>} */
25
25
  const whereArgs = {};
26
26
  whereArgs[attributeNameUnderscore] = attributeValue;
27
27
  // Rails parity: `validates :attr, uniqueness: {scope: :other}` adds
@@ -42,7 +42,7 @@ export default class VelociousDatabaseRecordValidatorsUniqueness extends Base {
42
42
  return;
43
43
  whereArgs[scopeUnderscore] = /**
44
44
  * Narrows the runtime value to the documented type.
45
- @type {string | number} */
45
+ * @type {string | number} */
46
46
  (scopeValue);
47
47
  }
48
48
  let existingRecordQuery = modelClass
@@ -71,7 +71,7 @@ export default class VelociousDatabaseRecordValidatorsUniqueness extends Base {
71
71
  _resolveScopeValueFromRelationship(model, scopeColumn) {
72
72
  const modelClass = /**
73
73
  * Narrows the runtime value to the documented type.
74
- @type {typeof import("../index.js").default} */ (model.constructor);
74
+ * @type {typeof import("../index.js").default} */ (model.constructor);
75
75
  const relationships = modelClass.getRelationshipsMap();
76
76
  for (const relationshipName in relationships) {
77
77
  const relationship = relationships[relationshipName];
@@ -103,4 +103,4 @@ export default class VelociousDatabaseRecordValidatorsUniqueness extends Base {
103
103
  return [String(scope)];
104
104
  }
105
105
  }
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pcXVlbmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9yZWNvcmQvdmFsaWRhdG9ycy91bmlxdWVuZXNzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLElBQUksTUFBTSxXQUFXLENBQUE7QUFDNUIsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFFeEMsTUFBTSxDQUFDLE9BQU8sT0FBTywyQ0FBNEMsU0FBUSxJQUFJO0lBQzNFOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFDO1FBQ25DLE1BQU0sVUFBVSxHQUFHOzs0RUFFaUQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUV4RixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDMUMsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQ2xELE1BQU0sY0FBYyxHQUFHOzsyREFFNEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQTtRQUN4RixNQUFNLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUE7UUFFcEU7O29EQUU0QztRQUM1QyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUE7UUFFcEIsU0FBUyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsY0FBYyxDQUFBO1FBRW5ELG9FQUFvRTtRQUNwRSxvRUFBb0U7UUFDcEUsNERBQTREO1FBQzVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFBO1FBRWxELEtBQUssTUFBTSxXQUFXLElBQUksWUFBWSxFQUFFLENBQUM7WUFDdkMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxX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QUFJLENBQUMsS0FBSztZQUFFLE9BQU8sRUFBRSxDQUFBO1FBQ3JCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUV0QyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDeEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCYXNlIGZyb20gXCIuL2Jhc2UuanNcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUmVjb3JkVmFsaWRhdG9yc1VuaXF1ZW5lc3MgZXh0ZW5kcyBCYXNlIHtcbiAgLyoqXG4gICAqIFJ1bnMgdmFsaWRhdGUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5tb2RlbCAtIE1vZGVsIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5hdHRyaWJ1dGVOYW1lIC0gQXR0cmlidXRlIG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyB2YWxpZGF0ZSh7bW9kZWwsIGF0dHJpYnV0ZU5hbWV9KSB7XG4gICAgY29uc3QgbW9kZWxDbGFzcyA9IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgQHR5cGUge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSAqLyAobW9kZWwuY29uc3RydWN0b3IpXG5cbiAgICBjb25zdCBjb25uZWN0aW9uID0gbW9kZWxDbGFzcy5jb25uZWN0aW9uKClcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBtb2RlbENsYXNzLl9nZXRUYWJsZSgpLmdldE5hbWUoKVxuICAgIGNvbnN0IGF0dHJpYnV0ZVZhbHVlID0gLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB0eXBlIHtzdHJpbmcgfCBudW1iZXJ9ICovIChtb2RlbC5yZWFkQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKVxuICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWVVbmRlcnNjb3JlID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKGF0dHJpYnV0ZU5hbWUpXG5cbiAgICAvKipcbiAgICAgKiBXaGVyZSBhcmdzLlxuICAgICAgQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj59ICovXG4gICAgY29uc3Qgd2hlcmVBcmdzID0ge31cblxuICAgIHdoZXJlQXJnc1thdHRyaWJ1dGVOYW1lVW5kZXJzY29yZV0gPSBhdHRyaWJ1dGVWYWx1ZVxuXG4gICAgLy8gUmFpbHMgcGFyaXR5OiBgdmFsaWRhdGVzIDphdHRyLCB1bmlxdWVuZXNzOiB7c2NvcGU6IDpvdGhlcn1gIGFkZHNcbiAgICAvLyB0aGUgc2NvcGVkIGNvbHVtbihzKSB0byB0aGUgV0hFUkUgY2xhdXNlIHNvIHVuaXF1ZW5lc3MgaXMgY2hlY2tlZFxuICAgIC8vIHdpdGhpbiB0aGUgZ2l2ZW4gc2NvcGUgKGUuZy4gYHJvbGVgIHVuaXF1ZSBwZXIgYHVzZXJJZGApLlxuICAgIGNvbnN0IHNjb3BlQ29sdW1ucyA9IHRoaXMuX25vcm1hbGl6ZVNjb3BlQ29sdW1ucygpXG5cbiAgICBmb3IgKGNvbnN0IHNjb3BlQ29sdW1uIG9mIHNjb3BlQ29sdW1ucykge1xuICAgICAgY29uc3Qgc2NvcGVVbmRlcnNjb3JlID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKHNjb3BlQ29sdW1uKVxuICAgICAgbGV0IHNjb3BlVmFsdWUgPSBtb2RlbC5yZWFkQXR0cmlidXRlKHNjb3BlQ29sdW1uKVxuXG4gICAgICAvLyBXaGVuIHRoZSBGSyBoYXNuJ3QgYmVlbiBmbHVzaGVkIGZyb20gdGhlIHJlbGF0aW9uc2hpcCBvYmplY3RcbiAgICAgIC8vIG9udG8gdGhlIGF0dHJpYnV0ZSBzdG9yZSB5ZXQgKGUuZy4gYG5ldyBUYXNrKHtwcm9qZWN0fSlgIHdoZXJlXG4gICAgICAvLyBgcHJvamVjdElkYCBpcyBzdGlsbCB1bmRlZmluZWQpLCB0cnkgcmVzb2x2aW5nIGl0IGZyb20gdGhlXG4gICAgICAvLyBsb2FkZWQgYmVsb25nc1RvIHJlbGF0aW9uc2hpcCBpbnN0ZWFkLlxuICAgICAgaWYgKHNjb3BlVmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBzY29wZVZhbHVlID0gdGhpcy5fcmVzb2x2ZVNjb3BlVmFsdWVGcm9tUmVsYXRpb25zaGlwKG1vZGVsLCBzY29wZUNvbHVtbilcbiAgICAgIH1cblxuICAgICAgaWYgKHNjb3BlVmFsdWUgPT0gbnVsbCkgcmV0dXJuXG5cbiAgICAgIHdoZXJlQXJnc1tzY29wZVVuZGVyc2NvcmVdID0gLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAdHlwZSB7c3RyaW5nIHwgbnVtYmVyfSAqLyAoc2NvcGVWYWx1ZSlcbiAgICB9XG5cbiAgICBsZXQgZXhpc3RpbmdSZWNvcmRRdWVyeSA9IG1vZGVsQ2xhc3NcbiAgICAgIC5zZWxlY3QobW9kZWxDbGFzcy5wcmltYXJ5S2V5KCkpXG4gICAgICAud2hlcmUod2hlcmVBcmdzKVxuXG4gICAgaWYgKG1vZGVsLmlzUGVyc2lzdGVkKCkpIHtcbiAgICAgIGV4aXN0aW5nUmVjb3JkUXVlcnkud2hlcmUoYCR7Y29ubmVjdGlvbi5xdW90ZVRhYmxlKHRhYmxlTmFtZSl9LiR7Y29ubmVjdGlvbi5xdW90ZUNvbHVtbihtb2RlbENsYXNzLnByaW1hcnlLZXkoKSl9ICE9ICR7Y29ubmVjdGlvbi5xdW90ZShtb2RlbC5pZCgpKX1gKVxuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0aW5nUmVjb3JkID0gYXdhaXQgZXhpc3RpbmdSZWNvcmRRdWVyeS5maXJzdCgpXG5cbiAgICBpZiAoZXhpc3RpbmdSZWNvcmQpIHtcbiAgICAgIGlmICghKGF0dHJpYnV0ZU5hbWUgaW4gbW9kZWwuX3ZhbGlkYXRpb25FcnJvcnMpKSBtb2RlbC5fdmFsaWRhdGlvbkVycm9yc1thdHRyaWJ1dGVOYW1lXSA9IFtdXG5cbiAgICAgIG1vZGVsLl92YWxpZGF0aW9uRXJyb3JzW2F0dHJpYnV0ZU5hbWVdLnB1c2goe3R5cGU6IFwidW5pcXVlbmVzc1wiLCBtZXNzYWdlOiBcImhhcyBhbHJlYWR5IGJlZW4gdGFrZW5cIn0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byByZXNvbHZlIGEgc2NvcGUgY29sdW1uIHZhbHVlIGZyb20gYSBsb2FkZWQgYmVsb25nc1RvXG4gICAqIHJlbGF0aW9uc2hpcCBvbiB0aGUgbW9kZWwuIFdoZW4gYSBUYXNrIGlzIGNyZWF0ZWQgdmlhXG4gICAqIGBuZXcgVGFzayh7cHJvamVjdH0pYCwgdGhlIEZLIChgcHJvamVjdElkYCkgaXMgb25seSBmbHVzaGVkIG9udG9cbiAgICogdGhlIGF0dHJpYnV0ZSBzdG9yZSBkdXJpbmcgc2F2ZSDigJQgYnV0IHRoZSByZWxhdGlvbnNoaXAgb2JqZWN0IGlzXG4gICAqIGFscmVhZHkgbG9hZGVkIGFuZCBjYXJyaWVzIHRoZSBpZCB3ZSBuZWVkIGZvciB0aGUgV0hFUkUgY2xhdXNlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2luZGV4LmpzXCIpLmRlZmF1bHR9IG1vZGVsXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY29wZUNvbHVtbiAtIGNhbWVsQ2FzZSBhdHRyaWJ1dGUgbmFtZSAoZS5nLiBgXCJwcm9qZWN0SWRcImApLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVtYmVyIHwgbnVsbH1cbiAgICovXG4gIF9yZXNvbHZlU2NvcGVWYWx1ZUZyb21SZWxhdGlvbnNoaXAobW9kZWwsIHNjb3BlQ29sdW1uKSB7XG4gICAgY29uc3QgbW9kZWxDbGFzcyA9IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgQHR5cGUge3R5cGVvZiBpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSAqLyAobW9kZWwuY29uc3RydWN0b3IpXG4gICAgY29uc3QgcmVsYXRpb25zaGlwcyA9IG1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zaGlwc01hcCgpXG5cbiAgICBmb3IgKGNvbnN0IHJlbGF0aW9uc2hpcE5hbWUgaW4gcmVsYXRpb25zaGlwcykge1xuICAgICAgY29uc3QgcmVsYXRpb25zaGlwID0gcmVsYXRpb25zaGlwc1tyZWxhdGlvbnNoaXBOYW1lXVxuXG4gICAgICBpZiAocmVsYXRpb25zaGlwLmdldFR5cGU/LigpICE9PSBcImJlbG9uZ3NUb1wiKSBjb250aW51ZVxuXG4gICAgICBjb25zdCBmb3JlaWduS2V5ID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShyZWxhdGlvbnNoaXAuZ2V0Rm9yZWlnbktleSgpLCB0cnVlKVxuXG4gICAgICBpZiAoZm9yZWlnbktleSAhPT0gc2NvcGVDb2x1bW4pIGNvbnRpbnVlXG5cbiAgICAgIGNvbnN0IGluc3RhbmNlUmVsYXRpb25zaGlwID0gbW9kZWwuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKHJlbGF0aW9uc2hpcE5hbWUpXG4gICAgICBjb25zdCBsb2FkZWQgPSBpbnN0YW5jZVJlbGF0aW9uc2hpcC5sb2FkZWQoKVxuXG4gICAgICBpZiAobG9hZGVkICYmICFBcnJheS5pc0FycmF5KGxvYWRlZCkgJiYgdHlwZW9mIGxvYWRlZC5pZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBsb2FkZWQuaWQoKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplIHRoZSBgc2NvcGVgIG9wdGlvbiBpbnRvIGFuIGFycmF5IG9mIGF0dHJpYnV0ZSBuYW1lcy5cbiAgICogU3VwcG9ydHMgc3RyaW5nIChgXCJ1c2VySWRcImApLCBhcnJheSBvZiBzdHJpbmdzIChgW1widXNlcklkXCIsIFwicHJvamVjdElkXCJdYCksXG4gICAqIG9yIGFic2VudCAoZW1wdHkgYXJyYXkg4oCUIG5vIHNjb3BlLCBvcmlnaW5hbCBzaW5nbGUtY29sdW1uIGJlaGF2aW9yKS5cbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxuICAgKi9cbiAgX25vcm1hbGl6ZVNjb3BlQ29sdW1ucygpIHtcbiAgICBjb25zdCBzY29wZSA9IHRoaXMuYXJncz8uc2NvcGVcblxuICAgIGlmICghc2NvcGUpIHJldHVybiBbXVxuICAgIGlmIChBcnJheS5pc0FycmF5KHNjb3BlKSkgcmV0dXJuIHNjb3BlXG5cbiAgICByZXR1cm4gW1N0cmluZyhzY29wZSldXG4gIH1cbn1cbiJdfQ==
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pcXVlbmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9yZWNvcmQvdmFsaWRhdG9ycy91bmlxdWVuZXNzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLElBQUksTUFBTSxXQUFXLENBQUE7QUFDNUIsT0FBTyxLQUFLLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFFeEMsTUFBTSxDQUFDLE9BQU8sT0FBTywyQ0FBNEMsU0FBUSxJQUFJO0lBQzNFOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFDO1FBQ25DLE1BQU0sVUFBVSxHQUFHOzs2RUFFa0QsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUV6RixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDMUMsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQ2xELE1BQU0sY0FBYyxHQUFHOzs0REFFNkIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQTtRQUN6RixNQUFNLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUE7UUFFcEU7O3FEQUU2QztRQUM3QyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUE7UUFFcEIsU0FBUyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsY0FBYyxDQUFBO1FBRW5ELG9FQUFvRTtRQUNwRSxvRUFBb0U7UUFDcEUsNERBQTREO1FBQzVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFBO1FBRWxELEtBQUssTUFBTSxXQUFXLElBQUksWUFBWSxFQUFFLENBQUM7WUFDdkMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUMxRCxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBRWpELCtEQUErRDtZQUMvRCxpRUFBaUU7WUFDakUsNkRBQTZEO1lBQzdELHlDQUF5QztZQUN6QyxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDdkIsVUFBVSxHQUFHLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUE7WUFDMUUsQ0FBQztZQUVELElBQUksVUFBVSxJQUFJLElBQUk7Z0JBQUUsT0FBTTtZQUU5QixTQUFTLENBQUMsZUFBZSxDQUFDLEdBQUc7O3NFQUU2QjtnQkFBQyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ3pFLENBQUM7UUFFRCxJQUFJLG1CQUFtQixHQUFHLFVBQVU7YUFDakMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUMvQixLQUFLLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFbkIsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUN4QixtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDeEosQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLE1BQU0sbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUE7UUFFeEQsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDO2dCQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUE7WUFFNUYsS0FBSyxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFDLENBQUMsQ0FBQTtRQUN0RyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILGtDQUFrQyxDQUFDLEtBQUssRUFBRSxXQUFXO1FBQ25ELE1BQU0sVUFBVSxHQUFHOzs2RUFFa0QsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUN6RixNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtRQUV0RCxLQUFLLE1BQU0sZ0JBQWdCLElBQUksYUFBYSxFQUFFLENBQUM7WUFDN0MsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUE7WUFFcEQsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxXQUFXO2dCQUFFLFNBQVE7WUFFdEQsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFFMUUsSUFBSSxVQUFVLEtBQUssV0FBVztnQkFBRSxTQUFRO1lBRXhDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLENBQUE7WUFDMUUsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUE7WUFFNUMsSUFBSSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sTUFBTSxDQUFDLEVBQUUsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDeEUsT0FBTyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUE7WUFDcEIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHNCQUFzQjtRQUNwQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQTtRQUU5QixJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sRUFBRSxDQUFBO1FBQ3JCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUV0QyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDeEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCYXNlIGZyb20gXCIuL2Jhc2UuanNcIlxuaW1wb3J0ICogYXMgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUmVjb3JkVmFsaWRhdG9yc1VuaXF1ZW5lc3MgZXh0ZW5kcyBCYXNlIHtcbiAgLyoqXG4gICAqIFJ1bnMgdmFsaWRhdGUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdH0gYXJncy5tb2RlbCAtIE1vZGVsIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5hdHRyaWJ1dGVOYW1lIC0gQXR0cmlidXRlIG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyB2YWxpZGF0ZSh7bW9kZWwsIGF0dHJpYnV0ZU5hbWV9KSB7XG4gICAgY29uc3QgbW9kZWxDbGFzcyA9IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwiLi4vaW5kZXguanNcIikuZGVmYXVsdH0gKi8gKG1vZGVsLmNvbnN0cnVjdG9yKVxuXG4gICAgY29uc3QgY29ubmVjdGlvbiA9IG1vZGVsQ2xhc3MuY29ubmVjdGlvbigpXG4gICAgY29uc3QgdGFibGVOYW1lID0gbW9kZWxDbGFzcy5fZ2V0VGFibGUoKS5nZXROYW1lKClcbiAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZSA9IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUge3N0cmluZyB8IG51bWJlcn0gKi8gKG1vZGVsLnJlYWRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkpXG4gICAgY29uc3QgYXR0cmlidXRlTmFtZVVuZGVyc2NvcmUgPSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoYXR0cmlidXRlTmFtZSlcblxuICAgIC8qKlxuICAgICAqIFdoZXJlIGFyZ3MuXG4gICAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj59ICovXG4gICAgY29uc3Qgd2hlcmVBcmdzID0ge31cblxuICAgIHdoZXJlQXJnc1thdHRyaWJ1dGVOYW1lVW5kZXJzY29yZV0gPSBhdHRyaWJ1dGVWYWx1ZVxuXG4gICAgLy8gUmFpbHMgcGFyaXR5OiBgdmFsaWRhdGVzIDphdHRyLCB1bmlxdWVuZXNzOiB7c2NvcGU6IDpvdGhlcn1gIGFkZHNcbiAgICAvLyB0aGUgc2NvcGVkIGNvbHVtbihzKSB0byB0aGUgV0hFUkUgY2xhdXNlIHNvIHVuaXF1ZW5lc3MgaXMgY2hlY2tlZFxuICAgIC8vIHdpdGhpbiB0aGUgZ2l2ZW4gc2NvcGUgKGUuZy4gYHJvbGVgIHVuaXF1ZSBwZXIgYHVzZXJJZGApLlxuICAgIGNvbnN0IHNjb3BlQ29sdW1ucyA9IHRoaXMuX25vcm1hbGl6ZVNjb3BlQ29sdW1ucygpXG5cbiAgICBmb3IgKGNvbnN0IHNjb3BlQ29sdW1uIG9mIHNjb3BlQ29sdW1ucykge1xuICAgICAgY29uc3Qgc2NvcGVVbmRlcnNjb3JlID0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKHNjb3BlQ29sdW1uKVxuICAgICAgbGV0IHNjb3BlVmFsdWUgPSBtb2RlbC5yZWFkQXR0cmlidXRlKHNjb3BlQ29sdW1uKVxuXG4gICAgICAvLyBXaGVuIHRoZSBGSyBoYXNuJ3QgYmVlbiBmbHVzaGVkIGZyb20gdGhlIHJlbGF0aW9uc2hpcCBvYmplY3RcbiAgICAgIC8vIG9udG8gdGhlIGF0dHJpYnV0ZSBzdG9yZSB5ZXQgKGUuZy4gYG5ldyBUYXNrKHtwcm9qZWN0fSlgIHdoZXJlXG4gICAgICAvLyBgcHJvamVjdElkYCBpcyBzdGlsbCB1bmRlZmluZWQpLCB0cnkgcmVzb2x2aW5nIGl0IGZyb20gdGhlXG4gICAgICAvLyBsb2FkZWQgYmVsb25nc1RvIHJlbGF0aW9uc2hpcCBpbnN0ZWFkLlxuICAgICAgaWYgKHNjb3BlVmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBzY29wZVZhbHVlID0gdGhpcy5fcmVzb2x2ZVNjb3BlVmFsdWVGcm9tUmVsYXRpb25zaGlwKG1vZGVsLCBzY29wZUNvbHVtbilcbiAgICAgIH1cblxuICAgICAgaWYgKHNjb3BlVmFsdWUgPT0gbnVsbCkgcmV0dXJuXG5cbiAgICAgIHdoZXJlQXJnc1tzY29wZVVuZGVyc2NvcmVdID0gLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUge3N0cmluZyB8IG51bWJlcn0gKi8gKHNjb3BlVmFsdWUpXG4gICAgfVxuXG4gICAgbGV0IGV4aXN0aW5nUmVjb3JkUXVlcnkgPSBtb2RlbENsYXNzXG4gICAgICAuc2VsZWN0KG1vZGVsQ2xhc3MucHJpbWFyeUtleSgpKVxuICAgICAgLndoZXJlKHdoZXJlQXJncylcblxuICAgIGlmIChtb2RlbC5pc1BlcnNpc3RlZCgpKSB7XG4gICAgICBleGlzdGluZ1JlY29yZFF1ZXJ5LndoZXJlKGAke2Nvbm5lY3Rpb24ucXVvdGVUYWJsZSh0YWJsZU5hbWUpfS4ke2Nvbm5lY3Rpb24ucXVvdGVDb2x1bW4obW9kZWxDbGFzcy5wcmltYXJ5S2V5KCkpfSAhPSAke2Nvbm5lY3Rpb24ucXVvdGUobW9kZWwuaWQoKSl9YClcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZ1JlY29yZCA9IGF3YWl0IGV4aXN0aW5nUmVjb3JkUXVlcnkuZmlyc3QoKVxuXG4gICAgaWYgKGV4aXN0aW5nUmVjb3JkKSB7XG4gICAgICBpZiAoIShhdHRyaWJ1dGVOYW1lIGluIG1vZGVsLl92YWxpZGF0aW9uRXJyb3JzKSkgbW9kZWwuX3ZhbGlkYXRpb25FcnJvcnNbYXR0cmlidXRlTmFtZV0gPSBbXVxuXG4gICAgICBtb2RlbC5fdmFsaWRhdGlvbkVycm9yc1thdHRyaWJ1dGVOYW1lXS5wdXNoKHt0eXBlOiBcInVuaXF1ZW5lc3NcIiwgbWVzc2FnZTogXCJoYXMgYWxyZWFkeSBiZWVuIHRha2VuXCJ9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gcmVzb2x2ZSBhIHNjb3BlIGNvbHVtbiB2YWx1ZSBmcm9tIGEgbG9hZGVkIGJlbG9uZ3NUb1xuICAgKiByZWxhdGlvbnNoaXAgb24gdGhlIG1vZGVsLiBXaGVuIGEgVGFzayBpcyBjcmVhdGVkIHZpYVxuICAgKiBgbmV3IFRhc2soe3Byb2plY3R9KWAsIHRoZSBGSyAoYHByb2plY3RJZGApIGlzIG9ubHkgZmx1c2hlZCBvbnRvXG4gICAqIHRoZSBhdHRyaWJ1dGUgc3RvcmUgZHVyaW5nIHNhdmUg4oCUIGJ1dCB0aGUgcmVsYXRpb25zaGlwIG9iamVjdCBpc1xuICAgKiBhbHJlYWR5IGxvYWRlZCBhbmQgY2FycmllcyB0aGUgaWQgd2UgbmVlZCBmb3IgdGhlIFdIRVJFIGNsYXVzZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9pbmRleC5qc1wiKS5kZWZhdWx0fSBtb2RlbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGVDb2x1bW4gLSBjYW1lbENhc2UgYXR0cmlidXRlIG5hbWUgKGUuZy4gYFwicHJvamVjdElkXCJgKS5cbiAgICogQHJldHVybnMge3N0cmluZyB8IG51bWJlciB8IG51bGx9XG4gICAqL1xuICBfcmVzb2x2ZVNjb3BlVmFsdWVGcm9tUmVsYXRpb25zaGlwKG1vZGVsLCBzY29wZUNvbHVtbikge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcIi4uL2luZGV4LmpzXCIpLmRlZmF1bHR9ICovIChtb2RlbC5jb25zdHJ1Y3RvcilcbiAgICBjb25zdCByZWxhdGlvbnNoaXBzID0gbW9kZWxDbGFzcy5nZXRSZWxhdGlvbnNoaXBzTWFwKClcblxuICAgIGZvciAoY29uc3QgcmVsYXRpb25zaGlwTmFtZSBpbiByZWxhdGlvbnNoaXBzKSB7XG4gICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSByZWxhdGlvbnNoaXBzW3JlbGF0aW9uc2hpcE5hbWVdXG5cbiAgICAgIGlmIChyZWxhdGlvbnNoaXAuZ2V0VHlwZT8uKCkgIT09IFwiYmVsb25nc1RvXCIpIGNvbnRpbnVlXG5cbiAgICAgIGNvbnN0IGZvcmVpZ25LZXkgPSBpbmZsZWN0aW9uLmNhbWVsaXplKHJlbGF0aW9uc2hpcC5nZXRGb3JlaWduS2V5KCksIHRydWUpXG5cbiAgICAgIGlmIChmb3JlaWduS2V5ICE9PSBzY29wZUNvbHVtbikgY29udGludWVcblxuICAgICAgY29uc3QgaW5zdGFuY2VSZWxhdGlvbnNoaXAgPSBtb2RlbC5nZXRSZWxhdGlvbnNoaXBCeU5hbWUocmVsYXRpb25zaGlwTmFtZSlcbiAgICAgIGNvbnN0IGxvYWRlZCA9IGluc3RhbmNlUmVsYXRpb25zaGlwLmxvYWRlZCgpXG5cbiAgICAgIGlmIChsb2FkZWQgJiYgIUFycmF5LmlzQXJyYXkobG9hZGVkKSAmJiB0eXBlb2YgbG9hZGVkLmlkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGxvYWRlZC5pZCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemUgdGhlIGBzY29wZWAgb3B0aW9uIGludG8gYW4gYXJyYXkgb2YgYXR0cmlidXRlIG5hbWVzLlxuICAgKiBTdXBwb3J0cyBzdHJpbmcgKGBcInVzZXJJZFwiYCksIGFycmF5IG9mIHN0cmluZ3MgKGBbXCJ1c2VySWRcIiwgXCJwcm9qZWN0SWRcIl1gKSxcbiAgICogb3IgYWJzZW50IChlbXB0eSBhcnJheSDigJQgbm8gc2NvcGUsIG9yaWdpbmFsIHNpbmdsZS1jb2x1bW4gYmVoYXZpb3IpLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBfbm9ybWFsaXplU2NvcGVDb2x1bW5zKCkge1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5hcmdzPy5zY29wZVxuXG4gICAgaWYgKCFzY29wZSkgcmV0dXJuIFtdXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2NvcGUpKSByZXR1cm4gc2NvcGVcblxuICAgIHJldHVybiBbU3RyaW5nKHNjb3BlKV1cbiAgfVxufVxuIl19
@@ -12,19 +12,19 @@ export default class TableData {
12
12
  constructor(name: string, args?: TableDataArgsType);
13
13
  /**
14
14
  * Columns.
15
- @type {TableColumn[]} */
15
+ * @type {TableColumn[]} */
16
16
  _columns: TableColumn[];
17
17
  /**
18
18
  * Foreign keys.
19
- @type {import("./table-foreign-key.js").default[]} */
19
+ * @type {import("./table-foreign-key.js").default[]} */
20
20
  _foreignKeys: import("./table-foreign-key.js").default[];
21
21
  /**
22
22
  * Indexes.
23
- @type {TableIndex[]} */
23
+ * @type {TableIndex[]} */
24
24
  _indexes: TableIndex[];
25
25
  /**
26
26
  * References.
27
- @type {TableReference[]} */
27
+ * @type {TableReference[]} */
28
28
  _references: TableReference[];
29
29
  args: TableDataArgsType | undefined;
30
30
  _name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/database/table-data/index.js"],"names":[],"mappings":"AAMA;;;;GAIG;AAEH;IAqBE;;;;OAIG;IACH,kBAHW,MAAM,SACN,iBAAiB,EAO3B;IA9BD;;8BAE0B;IAC1B,UADS,WAAW,EAAE,CACT;IAEb;;2DAEuD;IACvD,cADS,OAAO,wBAAwB,EAAE,OAAO,EAAE,CAClC;IAEjB;;6BAEyB;IACzB,UADS,UAAU,EAAE,CACR;IAEb;;iCAE6B;IAC7B,aADS,cAAc,EAAE,CACT;IAUd,oCAAgB;IAChB,cAAiB;IAGnB;;;;OAIG;IACH,gBAHW,MAAM,GAAC,WAAW,SAClB,OAAO,mBAAmB,EAAE,mBAAmB,QAUzD;IAED;;;OAGG;IACH,cAFa,WAAW,EAAE,CAEW;IAErC;;;OAGG;IACH,0BAFW,OAAO,wBAAwB,EAAE,OAAO,QAEa;IAEhE;;;OAGG;IACH,kBAFa,OAAO,wBAAwB,EAAE,OAAO,EAAE,CAEV;IAE7C;;;OAGG;IACH,gBAFW,UAAU,QAEwB;IAE7C;;;OAGG;IACH,cAFa,UAAU,EAAE,CAEY;IAErC;;;OAGG;IACH,WAFa,MAAM,CAEY;IAE/B;;;;OAIG;IACH,iBAHW,MAAM,GACJ,IAAI,CAEwB;IAEzC;;;OAGG;IACH,kBAFa,OAAO,CAEuC;IAE3D;;;OAGG;IACH,iBAFa,cAAc,EAAE,CAEc;IAE3C;;;;;OAKG;IACH,aAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEoF;IAErG;;;;;OAKG;IACH,WAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEgF;IAEjG;;;;;OAKG;IACH,cAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEsF;IAEvG;;;;;OAKG;IACH,eAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEwF;IAEzG;;;;;OAKG;IACH,cAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEsF;IAEvG;;;;;OAKG;IACH,cAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEsF;IAEvG;;;;;OAKG;IACH,WAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEgF;IAEjG;;;;;OAKG;IACH,cAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEsF;IAEvG;;;;;OAKG;IACH,iBAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAsBhB;IAED;;;;;OAKG;IACH,aAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEoF;IAErG;;;;;OAKG;IACH,WAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEgF;IAEjG;;;;OAIG;IACH,kBAHW,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAKhB;IAED;;;;;OAKG;IACH,WAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEgF;CAClG;;;;;;;;iBAvOa,OAAO;;wBAPG,mBAAmB;uBACpB,kBAAkB;2BACd,sBAAsB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/database/table-data/index.js"],"names":[],"mappings":"AAMA;;;;GAIG;AAEH;IAqBE;;;;OAIG;IACH,kBAHW,MAAM,SACN,iBAAiB,EAO3B;IA9BD;;+BAE2B;IAC3B,UADU,WAAW,EAAE,CACV;IAEb;;4DAEwD;IACxD,cADU,OAAO,wBAAwB,EAAE,OAAO,EAAE,CACnC;IAEjB;;8BAE0B;IAC1B,UADU,UAAU,EAAE,CACT;IAEb;;kCAE8B;IAC9B,aADU,cAAc,EAAE,CACV;IAUd,oCAAgB;IAChB,cAAiB;IAGnB;;;;OAIG;IACH,gBAHW,MAAM,GAAC,WAAW,SAClB,OAAO,mBAAmB,EAAE,mBAAmB,QAUzD;IAED;;;OAGG;IACH,cAFa,WAAW,EAAE,CAEW;IAErC;;;OAGG;IACH,0BAFW,OAAO,wBAAwB,EAAE,OAAO,QAEa;IAEhE;;;OAGG;IACH,kBAFa,OAAO,wBAAwB,EAAE,OAAO,EAAE,CAEV;IAE7C;;;OAGG;IACH,gBAFW,UAAU,QAEwB;IAE7C;;;OAGG;IACH,cAFa,UAAU,EAAE,CAEY;IAErC;;;OAGG;IACH,WAFa,MAAM,CAEY;IAE/B;;;;OAIG;IACH,iBAHW,MAAM,GACJ,IAAI,CAEwB;IAEzC;;;OAGG;IACH,kBAFa,OAAO,CAEuC;IAE3D;;;OAGG;IACH,iBAFa,cAAc,EAAE,CAEc;IAE3C;;;;;OAKG;IACH,aAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEoF;IAErG;;;;;OAKG;IACH,WAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEgF;IAEjG;;;;;OAKG;IACH,cAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEsF;IAEvG;;;;;OAKG;IACH,eAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEwF;IAEzG;;;;;OAKG;IACH,cAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEsF;IAEvG;;;;;OAKG;IACH,cAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEsF;IAEvG;;;;;OAKG;IACH,WAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEgF;IAEjG;;;;;OAKG;IACH,cAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEsF;IAEvG;;;;;OAKG;IACH,iBAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAsBhB;IAED;;;;;OAKG;IACH,aAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEoF;IAErG;;;;;OAKG;IACH,WAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEgF;IAEjG;;;;OAIG;IACH,kBAHW,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAKhB;IAED;;;;;OAKG;IACH,WAJW,MAAM,SACN,OAAO,mBAAmB,EAAE,mBAAmB,GAC7C,IAAI,CAEgF;CAClG;;;;;;;;iBAvOa,OAAO;;wBAPG,mBAAmB;uBACpB,kBAAkB;2BACd,sBAAsB"}
@@ -10,19 +10,19 @@ import TableReference from "./table-reference.js";
10
10
  export default class TableData {
11
11
  /**
12
12
  * Columns.
13
- @type {TableColumn[]} */
13
+ * @type {TableColumn[]} */
14
14
  _columns = [];
15
15
  /**
16
16
  * Foreign keys.
17
- @type {import("./table-foreign-key.js").default[]} */
17
+ * @type {import("./table-foreign-key.js").default[]} */
18
18
  _foreignKeys = [];
19
19
  /**
20
20
  * Indexes.
21
- @type {TableIndex[]} */
21
+ * @type {TableIndex[]} */
22
22
  _indexes = [];
23
23
  /**
24
24
  * References.
25
- @type {TableReference[]} */
25
+ * @type {TableReference[]} */
26
26
  _references = [];
27
27
  /**
28
28
  * Runs constructor.
@@ -206,4 +206,4 @@ export default class TableData {
206
206
  */
207
207
  uuid(name, args) { this.addColumn(name, Object.assign({ isNewColumn: true, type: "uuid" }, args)); }
208
208
  }
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvdGFibGUtZGF0YS9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxXQUFXLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxjQUFjLE1BQU0sc0JBQXNCLENBQUE7QUFFakQ7Ozs7R0FJRztBQUVILE1BQU0sQ0FBQyxPQUFPLE9BQU8sU0FBUztJQUM1Qjs7OEJBRTBCO0lBQzFCLFFBQVEsR0FBRyxFQUFFLENBQUE7SUFFYjs7MkRBRXVEO0lBQ3ZELFlBQVksR0FBRyxFQUFFLENBQUE7SUFFakI7OzZCQUV5QjtJQUN6QixRQUFRLEdBQUcsRUFBRSxDQUFBO0lBRWI7O2lDQUU2QjtJQUM3QixXQUFXLEdBQUcsRUFBRSxDQUFBO0lBRWhCOzs7O09BSUc7SUFDSCxZQUFZLElBQUksRUFBRSxJQUFJO1FBQ3BCLElBQUksQ0FBQyxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUV6RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQTtJQUNuQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSTtRQUNsQixJQUFJLElBQUksWUFBWSxXQUFXLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzlCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO1lBRTFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVLEtBQUssT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFBLENBQUMsQ0FBQztJQUVyQzs7O09BR0c7SUFDSCxhQUFhLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUVoRTs7O09BR0c7SUFDSCxjQUFjLEtBQUssT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFBLENBQUMsQ0FBQztJQUU3Qzs7O09BR0c7SUFDSCxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUU3Qzs7O09BR0c7SUFDSCxVQUFVLEtBQUssT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFBLENBQUMsQ0FBQztJQUVyQzs7O09BR0c7SUFDSCxPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQztJQUUvQjs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQSxDQUFDLENBQUM7SUFFekM7OztPQUdHO0lBQ0gsY0FBYyxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLElBQUksS0FBSyxDQUFBLENBQUMsQ0FBQztJQUUzRDs7O09BR0c7SUFDSCxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFBLENBQUMsQ0FBQztJQUUzQzs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUVyRzs7Ozs7T0FLRztJQUNILElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUVqRzs7Ozs7T0FLRztJQUNILE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUV2Rzs7Ozs7T0FLRztJQUNILFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUV6Rzs7Ozs7T0FLRztJQUNILE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUV2Rzs7Ozs7T0FLRztJQUNILE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUV2Rzs7Ozs7T0FLRztJQUNILElBQUksQ0FBQyxJ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QUE7UUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDbkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0NBQ2xHIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBUYWJsZUNvbHVtbiBmcm9tIFwiLi90YWJsZS1jb2x1bW4uanNcIlxuaW1wb3J0IFRhYmxlSW5kZXggZnJvbSBcIi4vdGFibGUtaW5kZXguanNcIlxuaW1wb3J0IFRhYmxlUmVmZXJlbmNlIGZyb20gXCIuL3RhYmxlLXJlZmVyZW5jZS5qc1wiXG5cbi8qKlxuICogVGFibGVEYXRhQXJnc1R5cGUgdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFRhYmxlRGF0YUFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlmTm90RXhpc3RzIC0gV2hldGhlciB0byBjcmVhdGUgdGhlIHRhYmxlIG9ubHkgaWYgaXQgZG9lcyBub3QgZXhpc3QuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGVEYXRhIHtcbiAgLyoqXG4gICAqIENvbHVtbnMuXG4gICAgQHR5cGUge1RhYmxlQ29sdW1uW119ICovXG4gIF9jb2x1bW5zID0gW11cblxuICAvKipcbiAgICogRm9yZWlnbiBrZXlzLlxuICAgIEB0eXBlIHtpbXBvcnQoXCIuL3RhYmxlLWZvcmVpZ24ta2V5LmpzXCIpLmRlZmF1bHRbXX0gKi9cbiAgX2ZvcmVpZ25LZXlzID0gW11cblxuICAvKipcbiAgICogSW5kZXhlcy5cbiAgICBAdHlwZSB7VGFibGVJbmRleFtdfSAqL1xuICBfaW5kZXhlcyA9IFtdXG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZXMuXG4gICAgQHR5cGUge1RhYmxlUmVmZXJlbmNlW119ICovXG4gIF9yZWZlcmVuY2VzID0gW11cblxuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge1RhYmxlRGF0YUFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG5hbWUsIGFyZ3MpIHtcbiAgICBpZiAoIW5hbWUpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0YWJsZSBuYW1lOiAke25hbWV9YClcblxuICAgIHRoaXMuYXJncyA9IGFyZ3NcbiAgICB0aGlzLl9uYW1lID0gbmFtZVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYWRkIGNvbHVtbi5cbiAgICogQHBhcmFtIHtzdHJpbmd8VGFibGVDb2x1bW59IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKi9cbiAgYWRkQ29sdW1uKG5hbWUsIGFyZ3MpIHtcbiAgICBpZiAobmFtZSBpbnN0YW5jZW9mIFRhYmxlQ29sdW1uKSB7XG4gICAgICB0aGlzLmdldENvbHVtbnMoKS5wdXNoKG5hbWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbihuYW1lLCBhcmdzKVxuXG4gICAgICB0aGlzLmdldENvbHVtbnMoKS5wdXNoKGNvbHVtbilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgY29sdW1ucy5cbiAgICogQHJldHVybnMge1RhYmxlQ29sdW1uW119IC0gVGhlIGNvbHVtbnMuXG4gICAqL1xuICBnZXRDb2x1bW5zKCkgeyByZXR1cm4gdGhpcy5fY29sdW1ucyB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYWRkIGZvcmVpZ24ga2V5LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtZm9yZWlnbi1rZXkuanNcIikuZGVmYXVsdH0gZm9yZWlnbktleSAtIEZvcmVpZ24ga2V5LlxuICAgKi9cbiAgYWRkRm9yZWlnbktleShmb3JlaWduS2V5KSB7IHRoaXMuX2ZvcmVpZ25LZXlzLnB1c2goZm9yZWlnbktleSkgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBmb3JlaWduIGtleXMuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3RhYmxlLWZvcmVpZ24ta2V5LmpzXCIpLmRlZmF1bHRbXX0gLSBUaGUgZm9yZWlnbiBrZXlzLlxuICAgKi9cbiAgZ2V0Rm9yZWlnbktleXMoKSB7IHJldHVybiB0aGlzLl9mb3JlaWduS2V5cyB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYWRkIGluZGV4LlxuICAgKiBAcGFyYW0ge1RhYmxlSW5kZXh9IGluZGV4IC0gSW5kZXggdmFsdWUuXG4gICAqL1xuICBhZGRJbmRleChpbmRleCkgeyB0aGlzLl9pbmRleGVzLnB1c2goaW5kZXgpIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgaW5kZXhlcy5cbiAgICogQHJldHVybnMge1RhYmxlSW5kZXhbXX0gLSBUaGUgaW5kZXhlcy5cbiAgICovXG4gIGdldEluZGV4ZXMoKSB7IHJldHVybiB0aGlzLl9pbmRleGVzIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgbmFtZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgbmFtZS5cbiAgICovXG4gIGdldE5hbWUoKSB7IHJldHVybiB0aGlzLl9uYW1lIH1cblxuICAvKipcbiAgICogUnVucyBzZXQgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOZXcgbmFtZS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0TmFtZShuZXdOYW1lKSB7IHRoaXMuX25hbWUgPSBuZXdOYW1lIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgaWYgbm90IGV4aXN0cy5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBpZiBub3QgZXhpc3RzLlxuICAgKi9cbiAgZ2V0SWZOb3RFeGlzdHMoKSB7IHJldHVybiB0aGlzLmFyZ3M/LmlmTm90RXhpc3RzIHx8IGZhbHNlIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgcmVmZXJlbmNlcy5cbiAgICogQHJldHVybnMge1RhYmxlUmVmZXJlbmNlW119IC0gVGhlIHJlZmVyZW5jZXMuXG4gICAqL1xuICBnZXRSZWZlcmVuY2VzKCkgeyByZXR1cm4gdGhpcy5fcmVmZXJlbmNlcyB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYmlnaW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90YWJsZS1jb2x1bW4uanNcIikuVGFibGVDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGJpZ2ludChuYW1lLCBhcmdzKSB7IHRoaXMuYWRkQ29sdW1uKG5hbWUsIE9iamVjdC5hc3NpZ24oe2lzTmV3Q29sdW1uOiB0cnVlLCB0eXBlOiBcImJpZ2ludFwifSwgYXJncykpIH1cblxuICAvKipcbiAgICogUnVucyBibG9iLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90YWJsZS1jb2x1bW4uanNcIikuVGFibGVDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGJsb2IobmFtZSwgYXJncykgeyB0aGlzLmFkZENvbHVtbihuYW1lLCBPYmplY3QuYXNzaWduKHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJibG9iXCJ9LCBhcmdzKSkgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGJvb2xlYW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3RhYmxlLWNvbHVtbi5qc1wiKS5UYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgYm9vbGVhbihuYW1lLCBhcmdzKSB7IHRoaXMuYWRkQ29sdW1uKG5hbWUsIE9iamVjdC5hc3NpZ24oe2lzTmV3Q29sdW1uOiB0cnVlLCB0eXBlOiBcImJvb2xlYW5cIn0sIGFyZ3MpKSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZGF0ZXRpbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3RhYmxlLWNvbHVtbi5qc1wiKS5UYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgZGF0ZXRpbWUobmFtZSwgYXJncykgeyB0aGlzLmFkZENvbHVtbihuYW1lLCBPYmplY3QuYXNzaWduKHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJkYXRldGltZVwifSwgYXJncykpIH1cblxuICAvKipcbiAgICogUnVucyBkZWNpbWFsLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90YWJsZS1jb2x1bW4uanNcIikuVGFibGVDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGRlY2ltYWwobmFtZSwgYXJncykgeyB0aGlzLmFkZENvbHVtbihuYW1lLCBPYmplY3QuYXNzaWduKHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJkZWNpbWFsXCJ9LCBhcmdzKSkgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGludGVnZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3RhYmxlLWNvbHVtbi5qc1wiKS5UYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgaW50ZWdlcihuYW1lLCBhcmdzKSB7IHRoaXMuYWRkQ29sdW1uKG5hbWUsIE9iamVjdC5hc3NpZ24oe2lzTmV3Q29sdW1uOiB0cnVlLCB0eXBlOiBcImludGVnZXJcIn0sIGFyZ3MpKSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMganNvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBqc29uKG5hbWUsIGFyZ3MpIHsgdGhpcy5hZGRDb2x1bW4obmFtZSwgT2JqZWN0LmFzc2lnbih7aXNOZXdDb2x1bW46IHRydWUsIHR5cGU6IFwianNvblwifSwgYXJncykpIH1cblxuICAvKipcbiAgICogUnVucyB0aW55aW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90YWJsZS1jb2x1bW4uanNcIikuVGFibGVDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHRpbnlpbnQobmFtZSwgYXJncykgeyB0aGlzLmFkZENvbHVtbihuYW1lLCBPYmplY3QuYXNzaWduKHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJ0aW55aW50XCJ9LCBhcmdzKSkgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHJlZmVyZW5jZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3RhYmxlLWNvbHVtbi5qc1wiKS5UYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgcmVmZXJlbmNlcyhuYW1lLCBhcmdzKSB7XG4gICAgY29uc3QgY29sdW1uTmFtZSA9IGAke25hbWV9X2lkYFxuICAgIGNvbnN0IHJlZmVyZW5jZUFyZ3MgPSBhcmdzIHx8IHt9XG4gICAgY29uc3QgcmVmZXJlbmNlID0gbmV3IFRhYmxlUmVmZXJlbmNlKG5hbWUsIHJlZmVyZW5jZUFyZ3MpXG4gICAgY29uc3Qge2luZGV4LCBwb2x5bW9ycGhpYywgLi4ucmVzdEFyZ3N9ID0gcmVmZXJlbmNlQXJnc1xuICAgIGNvbnN0IGNvbHVtbkFyZ3MgPSBPYmplY3QuYXNzaWduKHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJiaWdpbnRcIn0sIHJlc3RBcmdzKVxuICAgIGNvbnN0IGNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbihjb2x1bW5OYW1lLCBjb2x1bW5BcmdzKVxuICAgIGNvbnN0IGluZGV4QXJncyA9IHR5cGVvZiBpbmRleCA9PSBcIm9iamVjdFwiID8ge3VuaXF1ZTogaW5kZXgudW5pcXVlID09PSB0cnVlfSA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IHRhYmxlSW5kZXggPSBuZXcgVGFibGVJbmRleChbY29sdW1uXSwgaW5kZXhBcmdzKVxuXG4gICAgdGhpcy5nZXRDb2x1bW5zKCkucHVzaChjb2x1bW4pXG4gICAgdGhpcy5nZXRJbmRleGVzKCkucHVzaCh0YWJsZUluZGV4KVxuICAgIHRoaXMuZ2V0UmVmZXJlbmNlcygpLnB1c2gocmVmZXJlbmNlKVxuXG4gICAgaWYgKHBvbHltb3JwaGljKSB7XG4gICAgICBjb25zdCB0eXBlQ29sdW1uTmFtZSA9IGAke25hbWV9X3R5cGVgXG4gICAgICBjb25zdCB0eXBlQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKHR5cGVDb2x1bW5OYW1lLCB7aXNOZXdDb2x1bW46IHRydWUsIHR5cGU6IFwic3RyaW5nXCJ9KVxuXG4gICAgICB0aGlzLmdldENvbHVtbnMoKS5wdXNoKHR5cGVDb2x1bW4pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90YWJsZS1jb2x1bW4uanNcIikuVGFibGVDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHN0cmluZyhuYW1lLCBhcmdzKSB7IHRoaXMuYWRkQ29sdW1uKG5hbWUsIE9iamVjdC5hc3NpZ24oe2lzTmV3Q29sdW1uOiB0cnVlLCB0eXBlOiBcInN0cmluZ1wifSwgYXJncykpIH1cblxuICAvKipcbiAgICogUnVucyB0ZXh0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90YWJsZS1jb2x1bW4uanNcIikuVGFibGVDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHRleHQobmFtZSwgYXJncykgeyB0aGlzLmFkZENvbHVtbihuYW1lLCBPYmplY3QuYXNzaWduKHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJ0ZXh0XCJ9LCBhcmdzKSkgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRpbWVzdGFtcHMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90YWJsZS1jb2x1bW4uanNcIikuVGFibGVDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHRpbWVzdGFtcHMoYXJncykge1xuICAgIHRoaXMuZGF0ZXRpbWUoXCJjcmVhdGVkX2F0XCIsIGFyZ3MpXG4gICAgdGhpcy5kYXRldGltZShcInVwZGF0ZWRfYXRcIiwgYXJncylcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHV1aWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3RhYmxlLWNvbHVtbi5qc1wiKS5UYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgdXVpZChuYW1lLCBhcmdzKSB7IHRoaXMuYWRkQ29sdW1uKG5hbWUsIE9iamVjdC5hc3NpZ24oe2lzTmV3Q29sdW1uOiB0cnVlLCB0eXBlOiBcInV1aWRcIn0sIGFyZ3MpKSB9XG59XG4iXX0=
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvdGFibGUtZGF0YS9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxXQUFXLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxVQUFVLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxjQUFjLE1BQU0sc0JBQXNCLENBQUE7QUFFakQ7Ozs7R0FJRztBQUVILE1BQU0sQ0FBQyxPQUFPLE9BQU8sU0FBUztJQUM1Qjs7K0JBRTJCO0lBQzNCLFFBQVEsR0FBRyxFQUFFLENBQUE7SUFFYjs7NERBRXdEO0lBQ3hELFlBQVksR0FBRyxFQUFFLENBQUE7SUFFakI7OzhCQUUwQjtJQUMxQixRQUFRLEdBQUcsRUFBRSxDQUFBO0lBRWI7O2tDQUU4QjtJQUM5QixXQUFXLEdBQUcsRUFBRSxDQUFBO0lBRWhCOzs7O09BSUc7SUFDSCxZQUFZLElBQUksRUFBRSxJQUFJO1FBQ3BCLElBQUksQ0FBQyxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUV6RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQTtJQUNuQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSTtRQUNsQixJQUFJLElBQUksWUFBWSxXQUFXLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzlCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO1lBRTFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVLEtBQUssT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFBLENBQUMsQ0FBQztJQUVyQzs7O09BR0c7SUFDSCxhQUFhLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUVoRTs7O09BR0c7SUFDSCxjQUFjLEtBQUssT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFBLENBQUMsQ0FBQztJQUU3Qzs7O09BR0c7SUFDSCxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUU3Qzs7O09BR0c7SUFDSCxVQUFVLEtBQUssT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFBLENBQUMsQ0FBQztJQUVyQzs7O09BR0c7SUFDSCxPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQztJQUUvQjs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQSxDQUFDLENBQUM7SUFFekM7OztPQUdHO0lBQ0gsY0FBYyxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLElBQUksS0FBSyxDQUFBLENBQUMsQ0FBQztJQUUzRDs7O09BR0c7SUFDSCxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFBLENBQUMsQ0FBQztJQUUzQzs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUVyRzs7Ozs7T0FLRztJQUNILElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUVqRzs7Ozs7T0FLRztJQUNILE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUV2Rzs7Ozs7T0FLRztJQUNILFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUV6Rzs7Ozs7T0FLRztJQUNILE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUV2Rzs7Ozs7T0FLRztJQUNILE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUV2Rzs7Ozs7T0FLRztJQUNILElBQUksQ0FBQyxJ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QUE7UUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDbkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFDO0NBQ2xHIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBUYWJsZUNvbHVtbiBmcm9tIFwiLi90YWJsZS1jb2x1bW4uanNcIlxuaW1wb3J0IFRhYmxlSW5kZXggZnJvbSBcIi4vdGFibGUtaW5kZXguanNcIlxuaW1wb3J0IFRhYmxlUmVmZXJlbmNlIGZyb20gXCIuL3RhYmxlLXJlZmVyZW5jZS5qc1wiXG5cbi8qKlxuICogVGFibGVEYXRhQXJnc1R5cGUgdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFRhYmxlRGF0YUFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlmTm90RXhpc3RzIC0gV2hldGhlciB0byBjcmVhdGUgdGhlIHRhYmxlIG9ubHkgaWYgaXQgZG9lcyBub3QgZXhpc3QuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGVEYXRhIHtcbiAgLyoqXG4gICAqIENvbHVtbnMuXG4gICAqIEB0eXBlIHtUYWJsZUNvbHVtbltdfSAqL1xuICBfY29sdW1ucyA9IFtdXG5cbiAgLyoqXG4gICAqIEZvcmVpZ24ga2V5cy5cbiAgICogQHR5cGUge2ltcG9ydChcIi4vdGFibGUtZm9yZWlnbi1rZXkuanNcIikuZGVmYXVsdFtdfSAqL1xuICBfZm9yZWlnbktleXMgPSBbXVxuXG4gIC8qKlxuICAgKiBJbmRleGVzLlxuICAgKiBAdHlwZSB7VGFibGVJbmRleFtdfSAqL1xuICBfaW5kZXhlcyA9IFtdXG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZXMuXG4gICAqIEB0eXBlIHtUYWJsZVJlZmVyZW5jZVtdfSAqL1xuICBfcmVmZXJlbmNlcyA9IFtdXG5cbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtUYWJsZURhdGFBcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihuYW1lLCBhcmdzKSB7XG4gICAgaWYgKCFuYW1lKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGFibGUgbmFtZTogJHtuYW1lfWApXG5cbiAgICB0aGlzLmFyZ3MgPSBhcmdzXG4gICAgdGhpcy5fbmFtZSA9IG5hbWVcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGFkZCBjb2x1bW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfFRhYmxlQ29sdW1ufSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3RhYmxlLWNvbHVtbi5qc1wiKS5UYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICovXG4gIGFkZENvbHVtbihuYW1lLCBhcmdzKSB7XG4gICAgaWYgKG5hbWUgaW5zdGFuY2VvZiBUYWJsZUNvbHVtbikge1xuICAgICAgdGhpcy5nZXRDb2x1bW5zKCkucHVzaChuYW1lKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4obmFtZSwgYXJncylcblxuICAgICAgdGhpcy5nZXRDb2x1bW5zKCkucHVzaChjb2x1bW4pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGNvbHVtbnMuXG4gICAqIEByZXR1cm5zIHtUYWJsZUNvbHVtbltdfSAtIFRoZSBjb2x1bW5zLlxuICAgKi9cbiAgZ2V0Q29sdW1ucygpIHsgcmV0dXJuIHRoaXMuX2NvbHVtbnMgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGFkZCBmb3JlaWduIGtleS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3RhYmxlLWZvcmVpZ24ta2V5LmpzXCIpLmRlZmF1bHR9IGZvcmVpZ25LZXkgLSBGb3JlaWduIGtleS5cbiAgICovXG4gIGFkZEZvcmVpZ25LZXkoZm9yZWlnbktleSkgeyB0aGlzLl9mb3JlaWduS2V5cy5wdXNoKGZvcmVpZ25LZXkpIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgZm9yZWlnbiBrZXlzLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi90YWJsZS1mb3JlaWduLWtleS5qc1wiKS5kZWZhdWx0W119IC0gVGhlIGZvcmVpZ24ga2V5cy5cbiAgICovXG4gIGdldEZvcmVpZ25LZXlzKCkgeyByZXR1cm4gdGhpcy5fZm9yZWlnbktleXMgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGFkZCBpbmRleC5cbiAgICogQHBhcmFtIHtUYWJsZUluZGV4fSBpbmRleCAtIEluZGV4IHZhbHVlLlxuICAgKi9cbiAgYWRkSW5kZXgoaW5kZXgpIHsgdGhpcy5faW5kZXhlcy5wdXNoKGluZGV4KSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGluZGV4ZXMuXG4gICAqIEByZXR1cm5zIHtUYWJsZUluZGV4W119IC0gVGhlIGluZGV4ZXMuXG4gICAqL1xuICBnZXRJbmRleGVzKCkgeyByZXR1cm4gdGhpcy5faW5kZXhlcyB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IG5hbWUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIG5hbWUuXG4gICAqL1xuICBnZXROYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc2V0IG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmV3IG5hbWUuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldE5hbWUobmV3TmFtZSkgeyB0aGlzLl9uYW1lID0gbmV3TmFtZSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGlmIG5vdCBleGlzdHMuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgaWYgbm90IGV4aXN0cy5cbiAgICovXG4gIGdldElmTm90RXhpc3RzKCkgeyByZXR1cm4gdGhpcy5hcmdzPy5pZk5vdEV4aXN0cyB8fCBmYWxzZSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IHJlZmVyZW5jZXMuXG4gICAqIEByZXR1cm5zIHtUYWJsZVJlZmVyZW5jZVtdfSAtIFRoZSByZWZlcmVuY2VzLlxuICAgKi9cbiAgZ2V0UmVmZXJlbmNlcygpIHsgcmV0dXJuIHRoaXMuX3JlZmVyZW5jZXMgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGJpZ2ludC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBiaWdpbnQobmFtZSwgYXJncykgeyB0aGlzLmFkZENvbHVtbihuYW1lLCBPYmplY3QuYXNzaWduKHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJiaWdpbnRcIn0sIGFyZ3MpKSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYmxvYi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBibG9iKG5hbWUsIGFyZ3MpIHsgdGhpcy5hZGRDb2x1bW4obmFtZSwgT2JqZWN0LmFzc2lnbih7aXNOZXdDb2x1bW46IHRydWUsIHR5cGU6IFwiYmxvYlwifSwgYXJncykpIH1cblxuICAvKipcbiAgICogUnVucyBib29sZWFuLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90YWJsZS1jb2x1bW4uanNcIikuVGFibGVDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGJvb2xlYW4obmFtZSwgYXJncykgeyB0aGlzLmFkZENvbHVtbihuYW1lLCBPYmplY3QuYXNzaWduKHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJib29sZWFuXCJ9LCBhcmdzKSkgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGRhdGV0aW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90YWJsZS1jb2x1bW4uanNcIikuVGFibGVDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGRhdGV0aW1lKG5hbWUsIGFyZ3MpIHsgdGhpcy5hZGRDb2x1bW4obmFtZSwgT2JqZWN0LmFzc2lnbih7aXNOZXdDb2x1bW46IHRydWUsIHR5cGU6IFwiZGF0ZXRpbWVcIn0sIGFyZ3MpKSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZGVjaW1hbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBkZWNpbWFsKG5hbWUsIGFyZ3MpIHsgdGhpcy5hZGRDb2x1bW4obmFtZSwgT2JqZWN0LmFzc2lnbih7aXNOZXdDb2x1bW46IHRydWUsIHR5cGU6IFwiZGVjaW1hbFwifSwgYXJncykpIH1cblxuICAvKipcbiAgICogUnVucyBpbnRlZ2VyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90YWJsZS1jb2x1bW4uanNcIikuVGFibGVDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGludGVnZXIobmFtZSwgYXJncykgeyB0aGlzLmFkZENvbHVtbihuYW1lLCBPYmplY3QuYXNzaWduKHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJpbnRlZ2VyXCJ9LCBhcmdzKSkgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGpzb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gTmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3RhYmxlLWNvbHVtbi5qc1wiKS5UYWJsZUNvbHVtbkFyZ3NUeXBlfSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAganNvbihuYW1lLCBhcmdzKSB7IHRoaXMuYWRkQ29sdW1uKG5hbWUsIE9iamVjdC5hc3NpZ24oe2lzTmV3Q29sdW1uOiB0cnVlLCB0eXBlOiBcImpzb25cIn0sIGFyZ3MpKSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGlueWludC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB0aW55aW50KG5hbWUsIGFyZ3MpIHsgdGhpcy5hZGRDb2x1bW4obmFtZSwgT2JqZWN0LmFzc2lnbih7aXNOZXdDb2x1bW46IHRydWUsIHR5cGU6IFwidGlueWludFwifSwgYXJncykpIH1cblxuICAvKipcbiAgICogUnVucyByZWZlcmVuY2VzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90YWJsZS1jb2x1bW4uanNcIikuVGFibGVDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHJlZmVyZW5jZXMobmFtZSwgYXJncykge1xuICAgIGNvbnN0IGNvbHVtbk5hbWUgPSBgJHtuYW1lfV9pZGBcbiAgICBjb25zdCByZWZlcmVuY2VBcmdzID0gYXJncyB8fCB7fVxuICAgIGNvbnN0IHJlZmVyZW5jZSA9IG5ldyBUYWJsZVJlZmVyZW5jZShuYW1lLCByZWZlcmVuY2VBcmdzKVxuICAgIGNvbnN0IHtpbmRleCwgcG9seW1vcnBoaWMsIC4uLnJlc3RBcmdzfSA9IHJlZmVyZW5jZUFyZ3NcbiAgICBjb25zdCBjb2x1bW5BcmdzID0gT2JqZWN0LmFzc2lnbih7aXNOZXdDb2x1bW46IHRydWUsIHR5cGU6IFwiYmlnaW50XCJ9LCByZXN0QXJncylcbiAgICBjb25zdCBjb2x1bW4gPSBuZXcgVGFibGVDb2x1bW4oY29sdW1uTmFtZSwgY29sdW1uQXJncylcbiAgICBjb25zdCBpbmRleEFyZ3MgPSB0eXBlb2YgaW5kZXggPT0gXCJvYmplY3RcIiA/IHt1bmlxdWU6IGluZGV4LnVuaXF1ZSA9PT0gdHJ1ZX0gOiB1bmRlZmluZWRcbiAgICBjb25zdCB0YWJsZUluZGV4ID0gbmV3IFRhYmxlSW5kZXgoW2NvbHVtbl0sIGluZGV4QXJncylcblxuICAgIHRoaXMuZ2V0Q29sdW1ucygpLnB1c2goY29sdW1uKVxuICAgIHRoaXMuZ2V0SW5kZXhlcygpLnB1c2godGFibGVJbmRleClcbiAgICB0aGlzLmdldFJlZmVyZW5jZXMoKS5wdXNoKHJlZmVyZW5jZSlcblxuICAgIGlmIChwb2x5bW9ycGhpYykge1xuICAgICAgY29uc3QgdHlwZUNvbHVtbk5hbWUgPSBgJHtuYW1lfV90eXBlYFxuICAgICAgY29uc3QgdHlwZUNvbHVtbiA9IG5ldyBUYWJsZUNvbHVtbih0eXBlQ29sdW1uTmFtZSwge2lzTmV3Q29sdW1uOiB0cnVlLCB0eXBlOiBcInN0cmluZ1wifSlcblxuICAgICAgdGhpcy5nZXRDb2x1bW5zKCkucHVzaCh0eXBlQ29sdW1uKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzdHJpbmcobmFtZSwgYXJncykgeyB0aGlzLmFkZENvbHVtbihuYW1lLCBPYmplY3QuYXNzaWduKHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJzdHJpbmdcIn0sIGFyZ3MpKSB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGV4dC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB0ZXh0KG5hbWUsIGFyZ3MpIHsgdGhpcy5hZGRDb2x1bW4obmFtZSwgT2JqZWN0LmFzc2lnbih7aXNOZXdDb2x1bW46IHRydWUsIHR5cGU6IFwidGV4dFwifSwgYXJncykpIH1cblxuICAvKipcbiAgICogUnVucyB0aW1lc3RhbXBzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vdGFibGUtY29sdW1uLmpzXCIpLlRhYmxlQ29sdW1uQXJnc1R5cGV9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB0aW1lc3RhbXBzKGFyZ3MpIHtcbiAgICB0aGlzLmRhdGV0aW1lKFwiY3JlYXRlZF9hdFwiLCBhcmdzKVxuICAgIHRoaXMuZGF0ZXRpbWUoXCJ1cGRhdGVkX2F0XCIsIGFyZ3MpXG4gIH1cblxuICAvKipcbiAgICogUnVucyB1dWlkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi90YWJsZS1jb2x1bW4uanNcIikuVGFibGVDb2x1bW5BcmdzVHlwZX0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHV1aWQobmFtZSwgYXJncykgeyB0aGlzLmFkZENvbHVtbihuYW1lLCBPYmplY3QuYXNzaWduKHtpc05ld0NvbHVtbjogdHJ1ZSwgdHlwZTogXCJ1dWlkXCJ9LCBhcmdzKSkgfVxufVxuIl19