@kaspernj/api-maker 1.0.2160 → 1.0.2161

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 (524) hide show
  1. package/build/api.d.ts +46 -34
  2. package/build/api.d.ts.map +1 -1
  3. package/build/api.js +32 -25
  4. package/build/attribute-not-loaded-error.d.ts.map +1 -1
  5. package/build/attribute-not-loaded-error.js +2 -1
  6. package/build/base-error.d.ts +49 -60
  7. package/build/base-error.d.ts.map +1 -1
  8. package/build/base-error.js +3 -2
  9. package/build/base-model/column.d.ts +2 -2
  10. package/build/base-model/column.d.ts.map +1 -1
  11. package/build/base-model/column.js +3 -2
  12. package/build/base-model/reflection.d.ts +8 -3
  13. package/build/base-model/reflection.d.ts.map +1 -1
  14. package/build/base-model/reflection.js +8 -3
  15. package/build/base-model/scope.d.ts +1 -1
  16. package/build/base-model/scope.d.ts.map +1 -1
  17. package/build/base-model/scope.js +3 -2
  18. package/build/base-model.d.ts +3801 -117
  19. package/build/base-model.d.ts.map +1 -1
  20. package/build/base-model.js +271 -143
  21. package/build/bootstrap/attribute-row.d.ts +12 -0
  22. package/build/bootstrap/attribute-row.d.ts.map +1 -1
  23. package/build/bootstrap/attribute-row.js +23 -5
  24. package/build/bootstrap/attribute-rows.d.ts +8 -0
  25. package/build/bootstrap/attribute-rows.d.ts.map +1 -1
  26. package/build/bootstrap/attribute-rows.js +14 -5
  27. package/build/bootstrap/card.d.ts +17 -0
  28. package/build/bootstrap/card.d.ts.map +1 -1
  29. package/build/bootstrap/card.js +30 -10
  30. package/build/bootstrap/checkbox.d.ts +16 -0
  31. package/build/bootstrap/checkbox.d.ts.map +1 -1
  32. package/build/bootstrap/checkbox.js +20 -2
  33. package/build/bootstrap/checkboxes.d.ts +31 -0
  34. package/build/bootstrap/checkboxes.d.ts.map +1 -1
  35. package/build/bootstrap/checkboxes.js +35 -3
  36. package/build/bootstrap/index.js +2 -1
  37. package/build/bootstrap/input.d.ts +24 -0
  38. package/build/bootstrap/input.d.ts.map +1 -1
  39. package/build/bootstrap/input.js +27 -2
  40. package/build/bootstrap/invalid-feedback.d.ts.map +1 -1
  41. package/build/bootstrap/invalid-feedback.js +2 -1
  42. package/build/bootstrap/paginate.d.ts +5 -0
  43. package/build/bootstrap/paginate.d.ts.map +1 -1
  44. package/build/bootstrap/paginate.js +9 -4
  45. package/build/bootstrap/radio-buttons.js +2 -1
  46. package/build/bootstrap/select.js +2 -1
  47. package/build/bootstrap/sort-link.d.ts +10 -0
  48. package/build/bootstrap/sort-link.d.ts.map +1 -1
  49. package/build/bootstrap/sort-link.js +15 -4
  50. package/build/cable-connection-pool.d.ts +201 -24
  51. package/build/cable-connection-pool.d.ts.map +1 -1
  52. package/build/cable-connection-pool.js +76 -16
  53. package/build/cable-subscription-pool.d.ts +186 -20
  54. package/build/cable-subscription-pool.d.ts.map +1 -1
  55. package/build/cable-subscription-pool.js +61 -22
  56. package/build/cable-subscription.d.ts.map +1 -1
  57. package/build/cable-subscription.js +3 -2
  58. package/build/cache-key-generator.d.ts +194 -20
  59. package/build/cache-key-generator.d.ts.map +1 -1
  60. package/build/cache-key-generator.js +63 -12
  61. package/build/can-can.d.ts +146 -29
  62. package/build/can-can.d.ts.map +1 -1
  63. package/build/can-can.js +105 -19
  64. package/build/channels-consumer.d.ts +23 -1
  65. package/build/channels-consumer.d.ts.map +1 -1
  66. package/build/channels-consumer.js +26 -8
  67. package/build/collection-loader.js +2 -1
  68. package/build/collection.d.ts +361 -370
  69. package/build/collection.d.ts.map +1 -1
  70. package/build/collection.js +59 -19
  71. package/build/command-execution.d.ts +50 -26
  72. package/build/command-execution.d.ts.map +1 -1
  73. package/build/command-execution.js +31 -13
  74. package/build/command-submit-data.d.ts +50 -37
  75. package/build/command-submit-data.d.ts.map +1 -1
  76. package/build/command-submit-data.js +35 -22
  77. package/build/commands-pool.d.ts +65 -27
  78. package/build/commands-pool.d.ts.map +1 -1
  79. package/build/commands-pool.js +67 -20
  80. package/build/compose.d.ts +8 -2
  81. package/build/compose.d.ts.map +1 -1
  82. package/build/compose.js +9 -2
  83. package/build/config.d.ts +31 -15
  84. package/build/config.d.ts.map +1 -1
  85. package/build/config.js +60 -23
  86. package/build/custom-error.d.ts.map +1 -1
  87. package/build/custom-error.js +2 -1
  88. package/build/data-set-to-attributes.d.ts +14 -2
  89. package/build/data-set-to-attributes.d.ts.map +1 -1
  90. package/build/data-set-to-attributes.js +12 -3
  91. package/build/deserializer.d.ts +116 -2
  92. package/build/deserializer.d.ts.map +1 -1
  93. package/build/deserializer.js +13 -2
  94. package/build/destroy-error.d.ts.map +1 -1
  95. package/build/destroy-error.js +2 -1
  96. package/build/devise.d.ts +638 -39
  97. package/build/devise.d.ts.map +1 -1
  98. package/build/devise.js +97 -28
  99. package/build/draggable-sort/controller.d.ts +126 -35
  100. package/build/draggable-sort/controller.d.ts.map +1 -1
  101. package/build/draggable-sort/controller.js +100 -28
  102. package/build/draggable-sort/index.d.ts +55 -0
  103. package/build/draggable-sort/index.d.ts.map +1 -1
  104. package/build/draggable-sort/index.js +71 -3
  105. package/build/draggable-sort/item.d.ts +54 -0
  106. package/build/draggable-sort/item.d.ts.map +1 -1
  107. package/build/draggable-sort/item.js +94 -6
  108. package/build/error-logger.d.ts +30 -14
  109. package/build/error-logger.d.ts.map +1 -1
  110. package/build/error-logger.js +22 -11
  111. package/build/event-connection.d.ts.map +1 -1
  112. package/build/event-connection.js +3 -2
  113. package/build/event-emitter-listener.d.ts.map +1 -1
  114. package/build/event-emitter-listener.js +2 -1
  115. package/build/event-model-class.d.ts.map +1 -1
  116. package/build/event-model-class.js +2 -1
  117. package/build/events.d.ts.map +1 -1
  118. package/build/events.js +2 -1
  119. package/build/form.d.ts +23 -0
  120. package/build/form.d.ts.map +1 -1
  121. package/build/form.js +16 -4
  122. package/build/history-expo.d.ts +6 -2
  123. package/build/history-expo.d.ts.map +1 -1
  124. package/build/history-expo.js +5 -2
  125. package/build/history-react-native.d.ts +6 -2
  126. package/build/history-react-native.d.ts.map +1 -1
  127. package/build/history-react-native.js +5 -2
  128. package/build/history.js +2 -1
  129. package/build/index.d.ts.map +1 -1
  130. package/build/index.js +2 -1
  131. package/build/inputs/attachment.d.ts +11 -0
  132. package/build/inputs/attachment.d.ts.map +1 -1
  133. package/build/inputs/attachment.js +17 -4
  134. package/build/inputs/auto-submit.d.ts +41 -13
  135. package/build/inputs/auto-submit.d.ts.map +1 -1
  136. package/build/inputs/auto-submit.js +16 -4
  137. package/build/inputs/checkbox.d.ts +15 -0
  138. package/build/inputs/checkbox.d.ts.map +1 -1
  139. package/build/inputs/checkbox.js +22 -6
  140. package/build/inputs/checkboxes.d.ts +16 -0
  141. package/build/inputs/checkboxes.d.ts.map +1 -1
  142. package/build/inputs/checkboxes.js +20 -4
  143. package/build/inputs/id-for-component.d.ts +21 -2
  144. package/build/inputs/id-for-component.d.ts.map +1 -1
  145. package/build/inputs/id-for-component.js +9 -2
  146. package/build/inputs/input-wrapper.d.ts.map +1 -1
  147. package/build/inputs/input-wrapper.js +2 -1
  148. package/build/inputs/input.d.ts +36 -0
  149. package/build/inputs/input.d.ts.map +1 -1
  150. package/build/inputs/input.js +26 -7
  151. package/build/inputs/money.d.ts +2 -0
  152. package/build/inputs/money.d.ts.map +1 -1
  153. package/build/inputs/money.js +6 -3
  154. package/build/inputs/name-for-component.d.ts +21 -2
  155. package/build/inputs/name-for-component.d.ts.map +1 -1
  156. package/build/inputs/name-for-component.js +9 -2
  157. package/build/inputs/select.d.ts +33 -0
  158. package/build/inputs/select.d.ts.map +1 -1
  159. package/build/inputs/select.js +21 -4
  160. package/build/instance-of-class-name.d.ts +7 -2
  161. package/build/instance-of-class-name.d.ts.map +1 -1
  162. package/build/instance-of-class-name.js +8 -4
  163. package/build/is-expo.d.ts.map +1 -1
  164. package/build/is-expo.js +2 -1
  165. package/build/key-value-store.d.ts +24 -14
  166. package/build/key-value-store.d.ts.map +1 -1
  167. package/build/key-value-store.js +22 -12
  168. package/build/link.d.ts +30 -0
  169. package/build/link.d.ts.map +1 -1
  170. package/build/link.js +76 -30
  171. package/build/logger.d.ts +10 -6
  172. package/build/logger.d.ts.map +1 -1
  173. package/build/logger.js +7 -4
  174. package/build/merge-styles.d.ts +10 -2
  175. package/build/merge-styles.d.ts.map +1 -1
  176. package/build/merge-styles.js +10 -3
  177. package/build/modal.d.ts +2 -0
  178. package/build/modal.d.ts.map +1 -1
  179. package/build/modal.js +6 -4
  180. package/build/model-class-require.d.ts +4 -2
  181. package/build/model-class-require.d.ts.map +1 -1
  182. package/build/model-class-require.js +4 -2
  183. package/build/model-events.d.ts +139 -346
  184. package/build/model-events.d.ts.map +1 -1
  185. package/build/model-events.js +21 -9
  186. package/build/model-name.d.ts +21 -7
  187. package/build/model-name.d.ts.map +1 -1
  188. package/build/model-name.js +12 -2
  189. package/build/model-prop-type.d.ts +533 -26
  190. package/build/model-prop-type.d.ts.map +1 -1
  191. package/build/model-prop-type.js +69 -11
  192. package/build/model-recipes-loader.d.ts +7 -3
  193. package/build/model-recipes-loader.d.ts.map +1 -1
  194. package/build/model-recipes-loader.js +4 -2
  195. package/build/model-recipes-model-loader.d.ts +189 -1493
  196. package/build/model-recipes-model-loader.d.ts.map +1 -1
  197. package/build/model-recipes-model-loader.js +119 -17
  198. package/build/models-response-reader.d.ts +600 -195
  199. package/build/models-response-reader.d.ts.map +1 -1
  200. package/build/models-response-reader.js +12 -4
  201. package/build/models.d.ts +438 -1
  202. package/build/models.d.ts.map +1 -1
  203. package/build/models.js +2 -1
  204. package/build/money-formatter.d.ts +25 -31
  205. package/build/money-formatter.d.ts.map +1 -1
  206. package/build/money-formatter.js +11 -8
  207. package/build/not-loaded-error.d.ts.map +1 -1
  208. package/build/not-loaded-error.js +2 -1
  209. package/build/params.d.ts +25 -17
  210. package/build/params.d.ts.map +1 -1
  211. package/build/params.js +19 -15
  212. package/build/preloaded.d.ts +61 -64
  213. package/build/preloaded.d.ts.map +1 -1
  214. package/build/preloaded.js +10 -4
  215. package/build/reset-realtime-runtime-state.d.ts.map +1 -1
  216. package/build/reset-realtime-runtime-state.js +2 -1
  217. package/build/resize-observer.d.ts.map +1 -1
  218. package/build/resize-observer.js +2 -1
  219. package/build/rest-props-validator.d.ts +2 -2
  220. package/build/rest-props-validator.d.ts.map +1 -1
  221. package/build/rest-props-validator.js +3 -2
  222. package/build/result.d.ts +142 -175
  223. package/build/result.d.ts.map +1 -1
  224. package/build/result.js +3 -2
  225. package/build/router/route.d.ts +50 -0
  226. package/build/router/route.d.ts.map +1 -1
  227. package/build/router/route.js +39 -10
  228. package/build/router/switch.d.ts +37 -1
  229. package/build/router/switch.d.ts.map +1 -1
  230. package/build/router/switch.js +29 -7
  231. package/build/router.d.ts +20 -0
  232. package/build/router.d.ts.map +1 -1
  233. package/build/router.js +15 -4
  234. package/build/routes-native.d.ts +13 -13
  235. package/build/routes-native.d.ts.map +1 -1
  236. package/build/routes-native.js +23 -11
  237. package/build/routes.d.ts +17 -9
  238. package/build/routes.d.ts.map +1 -1
  239. package/build/routes.js +7 -2
  240. package/build/run-last.d.ts.map +1 -1
  241. package/build/run-last.js +2 -1
  242. package/build/serializer.d.ts +44 -12
  243. package/build/serializer.d.ts.map +1 -1
  244. package/build/serializer.js +36 -7
  245. package/build/services.d.ts +29 -4
  246. package/build/services.d.ts.map +1 -1
  247. package/build/services.js +16 -4
  248. package/build/session-status-updater.d.ts +73 -25
  249. package/build/session-status-updater.d.ts.map +1 -1
  250. package/build/session-status-updater.js +52 -14
  251. package/build/source-maps-loader.d.ts +88 -33
  252. package/build/source-maps-loader.d.ts.map +1 -1
  253. package/build/source-maps-loader.js +74 -18
  254. package/build/super-admin/config-reader.d.ts.map +1 -1
  255. package/build/super-admin/config-reader.js +11 -16
  256. package/build/super-admin/edit-page/edit-attribute-checkbox.d.ts +10 -0
  257. package/build/super-admin/edit-page/edit-attribute-checkbox.d.ts.map +1 -1
  258. package/build/super-admin/edit-page/edit-attribute-checkbox.js +16 -4
  259. package/build/super-admin/edit-page/edit-attribute-content.d.ts +9 -0
  260. package/build/super-admin/edit-page/edit-attribute-content.d.ts.map +1 -1
  261. package/build/super-admin/edit-page/edit-attribute-content.js +15 -4
  262. package/build/super-admin/edit-page/edit-attribute-input.d.ts +8 -0
  263. package/build/super-admin/edit-page/edit-attribute-input.d.ts.map +1 -1
  264. package/build/super-admin/edit-page/edit-attribute-input.js +13 -4
  265. package/build/super-admin/edit-page/edit-attribute.d.ts +6 -0
  266. package/build/super-admin/edit-page/edit-attribute.d.ts.map +1 -1
  267. package/build/super-admin/edit-page/edit-attribute.js +11 -4
  268. package/build/super-admin/edit-page.d.ts +5 -0
  269. package/build/super-admin/edit-page.d.ts.map +1 -1
  270. package/build/super-admin/edit-page.js +11 -5
  271. package/build/super-admin/has-edit-config.d.ts.map +1 -1
  272. package/build/super-admin/has-edit-config.js +2 -1
  273. package/build/super-admin/index-page.d.ts +4 -0
  274. package/build/super-admin/index-page.d.ts.map +1 -1
  275. package/build/super-admin/index-page.js +9 -4
  276. package/build/super-admin/index.d.ts +4 -0
  277. package/build/super-admin/index.d.ts.map +1 -1
  278. package/build/super-admin/index.js +12 -6
  279. package/build/super-admin/layout/header/index.d.ts +4 -0
  280. package/build/super-admin/layout/header/index.d.ts.map +1 -1
  281. package/build/super-admin/layout/header/index.js +13 -8
  282. package/build/super-admin/layout/index.d.ts +24 -0
  283. package/build/super-admin/layout/index.d.ts.map +1 -1
  284. package/build/super-admin/layout/index.js +33 -5
  285. package/build/super-admin/layout/menu/index.d.ts +2 -0
  286. package/build/super-admin/layout/menu/index.d.ts.map +1 -1
  287. package/build/super-admin/layout/menu/index.js +8 -6
  288. package/build/super-admin/layout/menu/menu-content.d.ts +2 -0
  289. package/build/super-admin/layout/menu/menu-content.d.ts.map +1 -1
  290. package/build/super-admin/layout/menu/menu-content.js +6 -4
  291. package/build/super-admin/layout/menu/menu-item.d.ts +9 -0
  292. package/build/super-admin/layout/menu/menu-item.d.ts.map +1 -1
  293. package/build/super-admin/layout/menu/menu-item.js +15 -4
  294. package/build/super-admin/layout/no-access.d.ts +2 -0
  295. package/build/super-admin/layout/no-access.d.ts.map +1 -1
  296. package/build/super-admin/layout/no-access.js +7 -5
  297. package/build/super-admin/model-class-table.d.ts +4 -0
  298. package/build/super-admin/model-class-table.d.ts.map +1 -1
  299. package/build/super-admin/model-class-table.js +9 -4
  300. package/build/super-admin/models.d.ts.map +1 -1
  301. package/build/super-admin/models.js +2 -1
  302. package/build/super-admin/show-nav.d.ts +2 -0
  303. package/build/super-admin/show-nav.d.ts.map +1 -1
  304. package/build/super-admin/show-nav.js +6 -4
  305. package/build/super-admin/show-page/belongs-to-attribute-row.d.ts +17 -1
  306. package/build/super-admin/show-page/belongs-to-attribute-row.d.ts.map +1 -1
  307. package/build/super-admin/show-page/belongs-to-attribute-row.js +14 -5
  308. package/build/super-admin/show-page/index.d.ts +4 -0
  309. package/build/super-admin/show-page/index.d.ts.map +1 -1
  310. package/build/super-admin/show-page/index.js +9 -4
  311. package/build/super-admin/show-reflection-actions.d.ts +6 -0
  312. package/build/super-admin/show-reflection-actions.d.ts.map +1 -1
  313. package/build/super-admin/show-reflection-actions.js +11 -4
  314. package/build/super-admin/show-reflection-link.d.ts +4 -0
  315. package/build/super-admin/show-reflection-link.d.ts.map +1 -1
  316. package/build/super-admin/show-reflection-link.js +9 -4
  317. package/build/super-admin/show-reflection-page.d.ts +5 -0
  318. package/build/super-admin/show-reflection-page.d.ts.map +1 -1
  319. package/build/super-admin/show-reflection-page.js +10 -4
  320. package/build/table/column-content.d.ts +155 -19
  321. package/build/table/column-content.d.ts.map +1 -1
  322. package/build/table/column-content.js +55 -12
  323. package/build/table/column-identifier.d.ts +11 -2
  324. package/build/table/column-identifier.d.ts.map +1 -1
  325. package/build/table/column-identifier.js +7 -2
  326. package/build/table/column-visible.d.ts +11 -2
  327. package/build/table/column-visible.d.ts.map +1 -1
  328. package/build/table/column-visible.js +8 -2
  329. package/build/table/components/column.d.ts +2 -0
  330. package/build/table/components/column.d.ts.map +1 -1
  331. package/build/table/components/column.js +6 -4
  332. package/build/table/components/flat-list.d.ts +2 -0
  333. package/build/table/components/flat-list.d.ts.map +1 -1
  334. package/build/table/components/flat-list.js +6 -4
  335. package/build/table/components/header.d.ts +2 -0
  336. package/build/table/components/header.d.ts.map +1 -1
  337. package/build/table/components/header.js +6 -4
  338. package/build/table/components/row.d.ts +2 -0
  339. package/build/table/components/row.d.ts.map +1 -1
  340. package/build/table/components/row.js +6 -4
  341. package/build/table/filters/attribute-element.d.ts +2 -0
  342. package/build/table/filters/attribute-element.d.ts.map +1 -1
  343. package/build/table/filters/attribute-element.js +7 -7
  344. package/build/table/filters/filter-form.d.ts +58 -0
  345. package/build/table/filters/filter-form.d.ts.map +1 -1
  346. package/build/table/filters/filter-form.js +72 -9
  347. package/build/table/filters/filter.d.ts +2 -0
  348. package/build/table/filters/filter.d.ts.map +1 -1
  349. package/build/table/filters/filter.js +6 -4
  350. package/build/table/filters/index.d.ts +127 -0
  351. package/build/table/filters/index.d.ts.map +1 -1
  352. package/build/table/filters/index.js +21 -4
  353. package/build/table/filters/load-search-modal.d.ts +130 -0
  354. package/build/table/filters/load-search-modal.d.ts.map +1 -1
  355. package/build/table/filters/load-search-modal.js +28 -6
  356. package/build/table/filters/reflection-element.d.ts +2 -0
  357. package/build/table/filters/reflection-element.d.ts.map +1 -1
  358. package/build/table/filters/reflection-element.js +6 -4
  359. package/build/table/filters/save-search-modal.d.ts +134 -0
  360. package/build/table/filters/save-search-modal.d.ts.map +1 -1
  361. package/build/table/filters/save-search-modal.js +36 -5
  362. package/build/table/filters/scope-element.d.ts +6 -0
  363. package/build/table/filters/scope-element.d.ts.map +1 -1
  364. package/build/table/filters/scope-element.js +13 -8
  365. package/build/table/header-column-content.d.ts +7 -0
  366. package/build/table/header-column-content.d.ts.map +1 -1
  367. package/build/table/header-column-content.js +12 -4
  368. package/build/table/header-column.d.ts +50 -0
  369. package/build/table/header-column.d.ts.map +1 -1
  370. package/build/table/header-column.js +32 -5
  371. package/build/table/header-select.d.ts +18 -0
  372. package/build/table/header-select.d.ts.map +1 -1
  373. package/build/table/header-select.js +19 -4
  374. package/build/table/model-callback-args.d.ts +116 -3
  375. package/build/table/model-callback-args.d.ts.map +1 -1
  376. package/build/table/model-callback-args.js +10 -3
  377. package/build/table/model-column.d.ts +136 -0
  378. package/build/table/model-column.d.ts.map +1 -1
  379. package/build/table/model-column.js +27 -4
  380. package/build/table/model-row.d.ts +19 -0
  381. package/build/table/model-row.d.ts.map +1 -1
  382. package/build/table/model-row.js +24 -4
  383. package/build/table/select-calculator.d.ts +37 -2
  384. package/build/table/select-calculator.d.ts.map +1 -1
  385. package/build/table/select-calculator.js +29 -6
  386. package/build/table/settings/column-row.d.ts +6 -0
  387. package/build/table/settings/column-row.d.ts.map +1 -1
  388. package/build/table/settings/column-row.js +13 -12
  389. package/build/table/settings/download-action.d.ts +5 -0
  390. package/build/table/settings/download-action.d.ts.map +1 -1
  391. package/build/table/settings/download-action.js +10 -4
  392. package/build/table/settings/index.d.ts +5 -0
  393. package/build/table/settings/index.d.ts.map +1 -1
  394. package/build/table/settings/index.js +10 -4
  395. package/build/table/should-render-loading-content.d.ts +2 -2
  396. package/build/table/should-render-loading-content.d.ts.map +1 -1
  397. package/build/table/should-render-loading-content.js +3 -2
  398. package/build/table/table-settings.d.ts +236 -43
  399. package/build/table/table-settings.d.ts.map +1 -1
  400. package/build/table/table-settings.js +104 -20
  401. package/build/table/table.d.ts +271 -0
  402. package/build/table/table.d.ts.map +1 -1
  403. package/build/table/table.js +167 -16
  404. package/build/table/use-sorting.d.ts +10 -8
  405. package/build/table/use-sorting.d.ts.map +1 -1
  406. package/build/table/use-sorting.js +16 -8
  407. package/build/table/widths.d.ts +55 -8
  408. package/build/table/widths.d.ts.map +1 -1
  409. package/build/table/widths.js +25 -2
  410. package/build/table/worker-plugins-check-all-checkbox.d.ts +18 -0
  411. package/build/table/worker-plugins-check-all-checkbox.d.ts.map +1 -1
  412. package/build/table/worker-plugins-check-all-checkbox.js +25 -5
  413. package/build/table/worker-plugins-checkbox.d.ts +5 -0
  414. package/build/table/worker-plugins-checkbox.d.ts.map +1 -1
  415. package/build/table/worker-plugins-checkbox.js +10 -4
  416. package/build/translated-attributes.d.ts +7 -2
  417. package/build/translated-attributes.d.ts.map +1 -1
  418. package/build/translated-attributes.js +8 -2
  419. package/build/translated-collections.d.ts +11 -2
  420. package/build/translated-collections.d.ts.map +1 -1
  421. package/build/translated-collections.js +9 -3
  422. package/build/updated-attribute.d.ts.map +1 -1
  423. package/build/updated-attribute.js +2 -1
  424. package/build/url-encode.d.ts.map +1 -1
  425. package/build/url-encode.js +2 -1
  426. package/build/use-can-can.d.ts +2 -2
  427. package/build/use-can-can.d.ts.map +1 -1
  428. package/build/use-can-can.js +27 -12
  429. package/build/use-collection.d.ts +167 -121
  430. package/build/use-collection.d.ts.map +1 -1
  431. package/build/use-collection.js +113 -44
  432. package/build/use-created-event.d.ts +120 -11
  433. package/build/use-created-event.d.ts.map +1 -1
  434. package/build/use-created-event.js +10 -7
  435. package/build/use-current-user-context.d.ts +2 -2
  436. package/build/use-current-user-context.d.ts.map +1 -1
  437. package/build/use-current-user-context.js +3 -2
  438. package/build/use-current-user.d.ts +86 -70
  439. package/build/use-current-user.d.ts.map +1 -1
  440. package/build/use-current-user.js +36 -8
  441. package/build/use-destroyed-event.d.ts +117 -8
  442. package/build/use-destroyed-event.d.ts.map +1 -1
  443. package/build/use-destroyed-event.js +29 -22
  444. package/build/use-input.d.ts +74 -12
  445. package/build/use-input.d.ts.map +1 -1
  446. package/build/use-input.js +33 -5
  447. package/build/use-model-class-event.d.ts +124 -10
  448. package/build/use-model-class-event.d.ts.map +1 -1
  449. package/build/use-model-class-event.js +26 -16
  450. package/build/use-model-event.d.ts +121 -8
  451. package/build/use-model-event.d.ts.map +1 -1
  452. package/build/use-model-event.js +24 -19
  453. package/build/use-model.d.ts +162 -244
  454. package/build/use-model.d.ts.map +1 -1
  455. package/build/use-model.js +85 -32
  456. package/build/use-resize-observer.d.ts.map +1 -1
  457. package/build/use-resize-observer.js +2 -1
  458. package/build/use-router.d.ts.map +1 -1
  459. package/build/use-router.js +2 -1
  460. package/build/use-screen-layout.d.ts +7 -2
  461. package/build/use-screen-layout.d.ts.map +1 -1
  462. package/build/use-screen-layout.js +8 -5
  463. package/build/use-shape.js +2 -1
  464. package/build/use-styles.d.ts +11 -5
  465. package/build/use-styles.d.ts.map +1 -1
  466. package/build/use-styles.js +16 -9
  467. package/build/use-updated-event.d.ts +66 -182
  468. package/build/use-updated-event.d.ts.map +1 -1
  469. package/build/use-updated-event.js +22 -18
  470. package/build/use-validation-errors.d.ts.map +1 -1
  471. package/build/use-validation-errors.js +2 -1
  472. package/build/utils/button.d.ts +14 -0
  473. package/build/utils/button.d.ts.map +1 -1
  474. package/build/utils/button.js +24 -7
  475. package/build/utils/card.d.ts +9 -0
  476. package/build/utils/card.d.ts.map +1 -1
  477. package/build/utils/card.js +13 -2
  478. package/build/utils/checkbox.d.ts +12 -0
  479. package/build/utils/checkbox.d.ts.map +1 -1
  480. package/build/utils/checkbox.js +18 -4
  481. package/build/utils/checkboxes.d.ts +25 -0
  482. package/build/utils/checkboxes.d.ts.map +1 -1
  483. package/build/utils/checkboxes.js +29 -3
  484. package/build/utils/default-style.d.ts +10 -4
  485. package/build/utils/default-style.d.ts.map +1 -1
  486. package/build/utils/default-style.js +12 -4
  487. package/build/utils/header.d.ts +6 -1
  488. package/build/utils/header.d.ts.map +1 -1
  489. package/build/utils/header.js +4 -2
  490. package/build/utils/icon.d.ts +7 -6
  491. package/build/utils/icon.d.ts.map +1 -1
  492. package/build/utils/icon.js +12 -11
  493. package/build/utils/invalid-feedback.d.ts +4 -0
  494. package/build/utils/invalid-feedback.d.ts.map +1 -1
  495. package/build/utils/invalid-feedback.js +8 -2
  496. package/build/utils/modal.d.ts +2 -0
  497. package/build/utils/modal.d.ts.map +1 -1
  498. package/build/utils/modal.js +9 -7
  499. package/build/utils/text.d.ts +8 -1
  500. package/build/utils/text.d.ts.map +1 -1
  501. package/build/utils/text.js +9 -2
  502. package/build/validation-error.d.ts +5 -2
  503. package/build/validation-error.d.ts.map +1 -1
  504. package/build/validation-error.js +5 -2
  505. package/build/validation-errors.d.ts +57 -15
  506. package/build/validation-errors.d.ts.map +1 -1
  507. package/build/validation-errors.js +37 -8
  508. package/build/websocket-request-client.d.ts +61 -15
  509. package/build/websocket-request-client.d.ts.map +1 -1
  510. package/build/websocket-request-client.js +35 -9
  511. package/build/with-api-maker.d.ts.map +1 -1
  512. package/build/with-api-maker.js +2 -1
  513. package/build/with-collection.d.ts.map +1 -1
  514. package/build/with-collection.js +2 -1
  515. package/build/with-current-user.d.ts.map +1 -1
  516. package/build/with-current-user.js +2 -1
  517. package/build/with-model.d.ts.map +1 -1
  518. package/build/with-model.js +2 -1
  519. package/build/with-router.d.ts.map +1 -1
  520. package/build/with-router.js +2 -1
  521. package/package.json +4 -3
  522. package/build/base-component.d.ts +0 -5
  523. package/build/base-component.d.ts.map +0 -1
  524. package/build/base-component.js +0 -4
@@ -1,3 +1,4 @@
1
+ // @ts-check
1
2
  /* eslint-disable no-unused-vars, no-use-before-define, prefer-object-spread, sort-imports */
2
3
  import { ShapeHook, useShapeHook } from "set-state-compare";
3
4
  import debounce from "debounce";
@@ -7,58 +8,108 @@ import ModelEvents from "./model-events.js";
7
8
  import { useEffect } from "react";
8
9
  import useCreatedEvent from "./use-created-event.js";
9
10
  import useQueryParams from "on-location-changed/build/use-query-params.js";
11
+ /** @typedef {typeof import("./base-model.js").default} BaseModelClass */
12
+ /** @typedef {import("./base-model.js").default} BaseModelInstance */
13
+ /** @typedef {BaseModelInstance & {id: () => number | string}} BaseModelWithId */
14
+ /** @typedef {import("./collection.js").default} ModelCollection */
15
+ /** @typedef {import("./result.js").default} CollectionResult */
16
+ /** @typedef {import("./collection.js").CollectionSearchParams} UseCollectionSearchParams */
17
+ /** @typedef {import("./collection.js").CollectionRansackParams} UseCollectionRansackParams */
18
+ /** @typedef {import("./collection.js").QueryParamValueMap} UseCollectionDefaultParams */
19
+ /** @typedef {import("./collection.js").QueryParamValue | undefined} UseCollectionQueryParamValue */
20
+ /** @typedef {Record<string, UseCollectionQueryParamValue | string[]>} UseCollectionQueryParams */
21
+ /** @typedef {(args: {query: ModelCollection}) => Promise<CollectionResult> | CollectionResult} UseCollectionQueryMethod */
22
+ /**
23
+ * @typedef {(args: {
24
+ * models: BaseModelInstance[],
25
+ * qParams: UseCollectionDefaultParams,
26
+ * query: ModelCollection,
27
+ * result: CollectionResult
28
+ * }) => void} OnModelsLoadedCallback
29
+ */
30
+ /** @typedef {{models?: BaseModelInstance[], overallCount?: number}} NoRecordsStateArgs */
31
+ /** @typedef {{qParams?: UseCollectionDefaultParams, searchParams?: string[]}} LoadModelsArgs */
32
+ /**
33
+ * @typedef {UseCollectionResult & Record<
34
+ * string,
35
+ * BaseModelInstance[] | string | number | CollectionResult | ModelCollection | string[] | false | import("react").ReactNode
36
+ * >} UseCollectionReturnValue
37
+ */
38
+ /**
39
+ * @typedef {object} UseCollectionHookProps
40
+ * @property {Record<string, string[]>} [abilities]
41
+ * @property {UseCollectionQueryParamValue[]} [cacheKeys]
42
+ * @property {ModelCollection} [collection]
43
+ * @property {UseCollectionDefaultParams} [defaultParams]
44
+ * @property {string[]} [groupBy]
45
+ * @property {boolean | (() => boolean)} [ifCondition]
46
+ * @property {number} [limit]
47
+ * @property {BaseModelClass} modelClass
48
+ * @property {() => import("react").ReactNode} [noRecordsAvailableContent]
49
+ * @property {() => import("react").ReactNode} [noRecordsFoundContent]
50
+ * @property {OnModelsLoadedCallback} [onModelsLoaded]
51
+ * @property {boolean} [pagination]
52
+ * @property {string[]} [preloads]
53
+ * @property {UseCollectionQueryMethod} [queryMethod]
54
+ * @property {string} [queryName]
55
+ * @property {UseCollectionRansackParams} [ransack]
56
+ * @property {Record<string, string[]>} [select]
57
+ * @property {Record<string, string[]>} [selectColumns]
58
+ */
10
59
  /**
11
60
  * @typedef {object} UseCollectionResult
12
- * @property {Array<import("./base-model.js").default>} models
61
+ * @property {BaseModelInstance[] | undefined} models
13
62
  * @property {string} modelIdsCacheString
14
- * @property {number} overallCount
15
- * @property {import("./collection.js").default} query
16
- * @property {string} queryName
17
- * @property {string} queryPerKey
18
- * @property {string} queryQName
19
- * @property {string} querySName
20
- * @property {string} queryPageName
21
- * @property {import("./result.js").default} result
22
- * @property {string[]} searchParams
23
- * @property {false | import("react").ReactNode} showNoRecordsAvailableContent
24
- * @property {false | import("react").ReactNode} showNoRecordsFoundContent
63
+ * @property {number | undefined} overallCount
64
+ * @property {UseCollectionDefaultParams} qParams
65
+ * @property {ModelCollection | undefined} query
66
+ * @property {string} queryName
67
+ * @property {string} queryPerKey
68
+ * @property {string} queryQName
69
+ * @property {string} querySName
70
+ * @property {string} queryPageName
71
+ * @property {boolean} readyToLoad
72
+ * @property {CollectionResult | undefined} result
73
+ * @property {string[] | undefined} searchParams
74
+ * @property {false | import("react").ReactNode} showNoRecordsAvailableContent
75
+ * @property {false | import("react").ReactNode} showNoRecordsFoundContent
25
76
  */
26
77
  /**
27
78
  * @param {object} props
28
79
  * @param {Record<string, string[]>} props.abilities
29
80
  * @param {import("./collection.js").default} props.collection
30
- * @param {Record<string, any>} props.defaultParams
81
+ * @param {UseCollectionDefaultParams} props.defaultParams
31
82
  * @param {string[]} props.groupBy
32
83
  * @param {function() : boolean} props.ifCondition
33
84
  * @param {number} props.limit
34
- * @param {typeof import("./base-model.js").default} props.modelClass
85
+ * @param {BaseModelClass} props.modelClass
35
86
  * @param {function() : import("react").ReactNode} props.noRecordsAvailableContent
36
87
  * @param {function() : import("react").ReactNode} props.noRecordsFoundContent
37
- * @param {function() : void} props.onModelsLoaded
88
+ * @param {OnModelsLoadedCallback} props.onModelsLoaded
38
89
  * @param {boolean} props.pagination
39
90
  * @param {string[]} props.preloads
40
- * @param {function({query: import("./collection.js").default}) : import("./collection.js").default} props.queryMethod
91
+ * @param {UseCollectionQueryMethod} props.queryMethod
41
92
  * @param {string} props.queryName
42
- * @param {Record<string, any>} props.ransack
93
+ * @param {UseCollectionRansackParams} props.ransack
43
94
  * @param {Record<string, string[]>} props.select
44
95
  * @param {Record<string, string[]>} props.selectColumns
45
- * @param {any[]} cacheKeys
46
- * @returns {UseCollectionResult & Record<string, any>}
96
+ * @param {UseCollectionQueryParamValue[]} cacheKeys
97
+ * @returns {UseCollectionReturnValue}
47
98
  */
48
99
  /**
49
100
  * @typedef {object} UseCollectionState
50
- * @property {any[] | undefined} models
101
+ * @property {BaseModelInstance[] | undefined} models
51
102
  * @property {number | undefined} overallCount
52
- * @property {Record<string, any>} qParams
53
- * @property {import("./collection.js").default | undefined} query
103
+ * @property {UseCollectionDefaultParams} qParams
104
+ * @property {ModelCollection | undefined} query
54
105
  * @property {boolean} readyToLoad
55
- * @property {import("./result.js").default | undefined} result
106
+ * @property {CollectionResult | undefined} result
56
107
  * @property {string[] | undefined} searchParams
57
108
  * @property {false | import("react").ReactNode} showNoRecordsAvailableContent
58
109
  * @property {false | import("react").ReactNode} showNoRecordsFoundContent
59
110
  */
60
111
  /** Hook state container for useCollection. */
61
- /** @augments {ShapeHook<Record<string, any>, UseCollectionState>} */
112
+ /** @augments {ShapeHook<UseCollectionHookProps, UseCollectionState>} */
62
113
  class UseCollectionShapeHook extends ShapeHook {
63
114
  state = /** @type {UseCollectionState} */ ({
64
115
  models: undefined,
@@ -71,7 +122,10 @@ class UseCollectionShapeHook extends ShapeHook {
71
122
  showNoRecordsAvailableContent: false,
72
123
  showNoRecordsFoundContent: false
73
124
  });
74
- /** Constructor. */
125
+ /**
126
+ * Constructor.
127
+ * @param {UseCollectionHookProps} props
128
+ */
75
129
  constructor(props) {
76
130
  super(props);
77
131
  this.loadModelsGeneration = 0;
@@ -114,7 +168,10 @@ class UseCollectionShapeHook extends ShapeHook {
114
168
  loadModelsDebounce() {
115
169
  return this.cache("loadModelsDebounce", () => debounce(() => this.loadModels()));
116
170
  }
117
- /** @param {Record<string, any>} args */
171
+ /**
172
+ * @param {NoRecordsStateArgs} args
173
+ * @returns {boolean}
174
+ */
118
175
  showNoRecordsAvailableContent(args) {
119
176
  let models, overallCount;
120
177
  if (args.models !== undefined) {
@@ -133,8 +190,12 @@ class UseCollectionShapeHook extends ShapeHook {
133
190
  return false;
134
191
  if (models.length === 0 && overallCount === 0 && this.p.noRecordsAvailableContent)
135
192
  return true;
193
+ return false;
136
194
  }
137
- /** @param {Record<string, any>} args */
195
+ /**
196
+ * @param {NoRecordsStateArgs} args
197
+ * @returns {boolean}
198
+ */
138
199
  showNoRecordsFoundContent(args) {
139
200
  let models, overallCount;
140
201
  if (args.models !== undefined) {
@@ -156,6 +217,7 @@ class UseCollectionShapeHook extends ShapeHook {
156
217
  return false;
157
218
  if (models.length === 0 && this.p.noRecordsFoundContent)
158
219
  return true;
220
+ return false;
159
221
  }
160
222
  /** @returns {Promise<void>} */
161
223
  loadOverallCount = async () => {
@@ -172,7 +234,7 @@ class UseCollectionShapeHook extends ShapeHook {
172
234
  showNoRecordsFoundContent: this.showNoRecordsFoundContent({ overallCount })
173
235
  });
174
236
  };
175
- /** @returns {{qParams: Record<string, any>, searchParams: string[]}} */
237
+ /** @returns {{qParams: UseCollectionDefaultParams, searchParams: string[]}} */
176
238
  loadQParams() {
177
239
  let qParamsToSet = Object.assign({}, this.p.defaultParams);
178
240
  const searchParams = [];
@@ -196,9 +258,9 @@ class UseCollectionShapeHook extends ShapeHook {
196
258
  }
197
259
  /**
198
260
  * @param {object} [args]
199
- * @param {Record<string, any>} [args.qParams]
261
+ * @param {UseCollectionDefaultParams} [args.qParams]
200
262
  * @param {string[]} [args.searchParams]
201
- * @returns {{qParams: Record<string, any>, searchParams: string[]}}
263
+ * @returns {{qParams: UseCollectionDefaultParams, searchParams: string[]}}
202
264
  */
203
265
  loadModelsArgs(args = {}) {
204
266
  return {
@@ -208,7 +270,7 @@ class UseCollectionShapeHook extends ShapeHook {
208
270
  }
209
271
  /**
210
272
  * @param {object} [args]
211
- * @param {Record<string, any>} [args.qParams]
273
+ * @param {UseCollectionDefaultParams} [args.qParams]
212
274
  * @param {string[]} [args.searchParams]
213
275
  * @returns {Promise<void>}
214
276
  */
@@ -232,7 +294,7 @@ class UseCollectionShapeHook extends ShapeHook {
232
294
  if (this.p.groupBy)
233
295
  query = query.groupBy(...this.p.groupBy);
234
296
  query = query
235
- .ransack(qParams)
297
+ .ransack(/** @type {import("./collection.js").CollectionRansackParams} */ (qParams))
236
298
  .search(searchParams)
237
299
  .searchKey(this.queryQName())
238
300
  .pageKey(this.queryPageName())
@@ -275,17 +337,17 @@ class UseCollectionShapeHook extends ShapeHook {
275
337
  showNoRecordsFoundContent: this.showNoRecordsFoundContent({ models })
276
338
  });
277
339
  };
278
- /** @param {{model: import("./base-model.js").default}} args */
340
+ /** @param {{model: BaseModelInstance}} args */
279
341
  onModelDestroyed(args) {
280
342
  const destroyedModel = digg(args, "model");
281
343
  this.setState({
282
- models: this.s.models.filter((model) => model.id() != destroyedModel.id())
344
+ models: this.s.models.filter((model) => /** @type {BaseModelWithId} */ (model).id() != /** @type {BaseModelWithId} */ (destroyedModel).id())
283
345
  });
284
346
  }
285
- /** @param {{model: import("./base-model.js").default}} args */
347
+ /** @param {{model: BaseModelInstance}} args */
286
348
  onModelUpdated(args) {
287
349
  const updatedModel = digg(args, "model");
288
- const foundModel = this.s.models.find((model) => model.id() == updatedModel.id());
350
+ const foundModel = this.s.models.find((model) => /** @type {BaseModelWithId} */ (model).id() == /** @type {BaseModelWithId} */ (updatedModel).id());
289
351
  if (foundModel)
290
352
  this.loadModelsDebounce()();
291
353
  }
@@ -359,6 +421,11 @@ class UseCollectionShapeHook extends ShapeHook {
359
421
  }, [this.modelIdsCacheString()]);
360
422
  }
361
423
  }
424
+ /**
425
+ * @param {UseCollectionHookProps} props
426
+ * @param {UseCollectionQueryParamValue[]} [cacheKeys]
427
+ * @returns {UseCollectionReturnValue}
428
+ */
362
429
  const useCollection = (props, cacheKeys = []) => {
363
430
  const { abilities, collection, defaultParams, groupBy, ifCondition, limit, modelClass, noRecordsAvailableContent = undefined, noRecordsFoundContent = undefined, onModelsLoaded, pagination = false, preloads = [], queryMethod, queryName, ransack, select = {}, selectColumns, ...restProps } = props;
364
431
  if (Object.keys(restProps).length > 0) {
@@ -384,16 +451,18 @@ const useCollection = (props, cacheKeys = []) => {
384
451
  select,
385
452
  selectColumns
386
453
  });
387
- const result = /** @type {UseCollectionResult & Record<string, any>} */ ( /** @type {unknown} */(Object.assign({}, shapeHook.state)));
454
+ const result = /** @type {UseCollectionReturnValue} */ ({
455
+ ...shapeHook.state,
456
+ modelIdsCacheString: shapeHook.modelIdsCacheString(),
457
+ queryName: shapeHook.queryName(),
458
+ queryPerKey: shapeHook.queryPerKey(),
459
+ queryQName: shapeHook.queryQName(),
460
+ querySName: shapeHook.querySName(),
461
+ queryPageName: shapeHook.queryPageName()
462
+ });
388
463
  const modelVariableName = inflection.pluralize(inflection.camelize(shapeHook.p.modelClass.modelClassData().name, true));
389
- result.modelIdsCacheString = shapeHook.modelIdsCacheString();
390
- result.queryName = shapeHook.queryName();
391
- result.queryPerKey = shapeHook.queryPerKey();
392
- result.queryQName = shapeHook.queryQName();
393
- result.querySName = shapeHook.querySName();
394
- result.queryPageName = shapeHook.queryPageName();
395
464
  result[modelVariableName] = shapeHook.s.models;
396
465
  return result;
397
466
  };
398
467
  export default useCollection;
399
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNvbGxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInVzZS1jb2xsZWN0aW9uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZGQUE2RjtBQUM3RixPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBQyxNQUFNLG1CQUFtQixDQUFBO0FBQ3pELE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQTtBQUMvQixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQzlCLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sV0FBVyxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFDL0IsT0FBTyxlQUFlLE1BQU0sd0JBQXdCLENBQUE7QUFDcEQsT0FBTyxjQUFjLE1BQU0sK0NBQStDLENBQUE7QUFFMUU7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUVIOzs7Ozs7Ozs7OztHQVdHO0FBRUgsOENBQThDO0FBQzlDLHFFQUFxRTtBQUNyRSxNQUFNLHNCQUF1QixTQUFRLFNBQVM7SUFDNUMsS0FBSyxHQUFHLGlDQUFpQyxDQUFDLENBQUM7UUFDekMsTUFBTSxFQUFFLFNBQVM7UUFDakIsWUFBWSxFQUFFLFNBQVM7UUFDdkIsT0FBTyxFQUFFLEVBQUU7UUFDWCxLQUFLLEVBQUUsU0FBUztRQUNoQixXQUFXLEVBQUUsS0FBSztRQUNsQixNQUFNLEVBQUUsU0FBUztRQUNqQixZQUFZLEVBQUUsU0FBUztRQUN2Qiw2QkFBNkIsRUFBRSxLQUFLO1FBQ3BDLHlCQUF5QixFQUFFLEtBQUs7S0FDakMsQ0FBQyxDQUFBO0lBRUYsbUJBQW1CO0lBQ25CLFlBQVksS0FBSztRQUNmLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNaLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUE7UUFDN0Is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QUFBO0lBRTlDLE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQyxDQUFBO0FBRUQsZUFBZSxhQUFhLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycywgbm8tdXNlLWJlZm9yZS1kZWZpbmUsIHByZWZlci1vYmplY3Qtc3ByZWFkLCBzb3J0LWltcG9ydHMgKi9cbmltcG9ydCB7U2hhcGVIb29rLCB1c2VTaGFwZUhvb2t9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZVwiXG5pbXBvcnQgZGVib3VuY2UgZnJvbSBcImRlYm91bmNlXCJcbmltcG9ydCB7ZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCBNb2RlbEV2ZW50cyBmcm9tIFwiLi9tb2RlbC1ldmVudHMuanNcIlxuaW1wb3J0IHt1c2VFZmZlY3R9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgdXNlQ3JlYXRlZEV2ZW50IGZyb20gXCIuL3VzZS1jcmVhdGVkLWV2ZW50LmpzXCJcbmltcG9ydCB1c2VRdWVyeVBhcmFtcyBmcm9tIFwib24tbG9jYXRpb24tY2hhbmdlZC9idWlsZC91c2UtcXVlcnktcGFyYW1zLmpzXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBVc2VDb2xsZWN0aW9uUmVzdWx0XG4gKiBAcHJvcGVydHkge0FycmF5PGltcG9ydChcIi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0Pn0gbW9kZWxzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbW9kZWxJZHNDYWNoZVN0cmluZ1xuICogQHByb3BlcnR5IHtudW1iZXJ9IG92ZXJhbGxDb3VudFxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL2NvbGxlY3Rpb24uanNcIikuZGVmYXVsdH0gcXVlcnlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBxdWVyeU5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBxdWVyeVBlcktleVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHF1ZXJ5UU5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBxdWVyeVNOYW1lXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcXVlcnlQYWdlTmFtZVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3Jlc3VsdC5qc1wiKS5kZWZhdWx0fSByZXN1bHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHNlYXJjaFBhcmFtc1xuICogQHByb3BlcnR5IHtmYWxzZSB8IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gc2hvd05vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnRcbiAqIEBwcm9wZXJ0eSB7ZmFsc2UgfCBpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IHNob3dOb1JlY29yZHNGb3VuZENvbnRlbnRcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT59IHByb3BzLmFiaWxpdGllc1xuICogQHBhcmFtIHtpbXBvcnQoXCIuL2NvbGxlY3Rpb24uanNcIikuZGVmYXVsdH0gcHJvcHMuY29sbGVjdGlvblxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBwcm9wcy5kZWZhdWx0UGFyYW1zXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wcy5ncm91cEJ5XG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCkgOiBib29sZWFufSBwcm9wcy5pZkNvbmRpdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHByb3BzLmxpbWl0XG4gKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdH0gcHJvcHMubW9kZWxDbGFzc1xuICogQHBhcmFtIHtmdW5jdGlvbigpIDogaW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBwcm9wcy5ub1JlY29yZHNBdmFpbGFibGVDb250ZW50XG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCkgOiBpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IHByb3BzLm5vUmVjb3Jkc0ZvdW5kQ29udGVudFxuICogQHBhcmFtIHtmdW5jdGlvbigpIDogdm9pZH0gcHJvcHMub25Nb2RlbHNMb2FkZWRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJvcHMucGFnaW5hdGlvblxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcHMucHJlbG9hZHNcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oe3F1ZXJ5OiBpbXBvcnQoXCIuL2NvbGxlY3Rpb24uanNcIikuZGVmYXVsdH0pIDogaW1wb3J0KFwiLi9jb2xsZWN0aW9uLmpzXCIpLmRlZmF1bHR9IHByb3BzLnF1ZXJ5TWV0aG9kXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcHMucXVlcnlOYW1lXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IHByb3BzLnJhbnNhY2tcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nW10+fSBwcm9wcy5zZWxlY3RcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nW10+fSBwcm9wcy5zZWxlY3RDb2x1bW5zXG4gKiBAcGFyYW0ge2FueVtdfSBjYWNoZUtleXNcbiAqIEByZXR1cm5zIHtVc2VDb2xsZWN0aW9uUmVzdWx0ICYgUmVjb3JkPHN0cmluZywgYW55Pn1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFVzZUNvbGxlY3Rpb25TdGF0ZVxuICogQHByb3BlcnR5IHthbnlbXSB8IHVuZGVmaW5lZH0gbW9kZWxzXG4gKiBAcHJvcGVydHkge251bWJlciB8IHVuZGVmaW5lZH0gb3ZlcmFsbENvdW50XG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIGFueT59IHFQYXJhbXNcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9jb2xsZWN0aW9uLmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWR9IHF1ZXJ5XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlYWR5VG9Mb2FkXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vcmVzdWx0LmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWR9IHJlc3VsdFxuICogQHByb3BlcnR5IHtzdHJpbmdbXSB8IHVuZGVmaW5lZH0gc2VhcmNoUGFyYW1zXG4gKiBAcHJvcGVydHkge2ZhbHNlIHwgaW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudFxuICogQHByb3BlcnR5IHtmYWxzZSB8IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gc2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudFxuICovXG5cbi8qKiBIb29rIHN0YXRlIGNvbnRhaW5lciBmb3IgdXNlQ29sbGVjdGlvbi4gKi9cbi8qKiBAYXVnbWVudHMge1NoYXBlSG9vazxSZWNvcmQ8c3RyaW5nLCBhbnk+LCBVc2VDb2xsZWN0aW9uU3RhdGU+fSAqL1xuY2xhc3MgVXNlQ29sbGVjdGlvblNoYXBlSG9vayBleHRlbmRzIFNoYXBlSG9vayB7XG4gIHN0YXRlID0gLyoqIEB0eXBlIHtVc2VDb2xsZWN0aW9uU3RhdGV9ICovICh7XG4gICAgbW9kZWxzOiB1bmRlZmluZWQsXG4gICAgb3ZlcmFsbENvdW50OiB1bmRlZmluZWQsXG4gICAgcVBhcmFtczoge30sXG4gICAgcXVlcnk6IHVuZGVmaW5lZCxcbiAgICByZWFkeVRvTG9hZDogZmFsc2UsXG4gICAgcmVzdWx0OiB1bmRlZmluZWQsXG4gICAgc2VhcmNoUGFyYW1zOiB1bmRlZmluZWQsXG4gICAgc2hvd05vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQ6IGZhbHNlLFxuICAgIHNob3dOb1JlY29yZHNGb3VuZENvbnRlbnQ6IGZhbHNlXG4gIH0pXG5cbiAgLyoqIENvbnN0cnVjdG9yLiAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKVxuICAgIHRoaXMubG9hZE1vZGVsc0dlbmVyYXRpb24gPSAwXG4gICAgdGhpcy5sb2FkT3ZlcmFsbENvdW50R2VuZXJhdGlvbiA9IDBcbiAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gdW5kZWZpbmVkXG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gKi9cbiAgcXVlcnlOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnAucXVlcnlOYW1lIHx8IGRpZ2codGhpcy5wLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKSwgXCJjb2xsZWN0aW9uS2V5XCIpXG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gKi9cbiAgcXVlcnlQZXJLZXkoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMucXVlcnlOYW1lKCl9X3BlcmBcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSAqL1xuICBxdWVyeVFOYW1lKCkge1xuICAgIHJldHVybiBgJHt0aGlzLnF1ZXJ5TmFtZSgpfV9xYFxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9ICovXG4gIHF1ZXJ5U05hbWUoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMucXVlcnlOYW1lKCl9X3NgXG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gKi9cbiAgcXVlcnlQYWdlTmFtZSgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5xdWVyeU5hbWUoKX1fcGFnZWBcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSAqL1xuICBtb2RlbElkc0NhY2hlU3RyaW5nKCkge1xuICAgIGlmICh0aGlzLnMubW9kZWxzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBcIm1vZGVscy11bmRlZmluZWRcIlxuICAgIH0gZWxzZSBpZiAodGhpcy5zLm1vZGVscy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBcIm5vLW1vZGVsc1wiXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnMubW9kZWxzLm1hcCgobW9kZWwpID0+IG1vZGVsLmNhY2hlS2V5KCkpPy5qb2luKFwiLS0tXCIpXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtGdW5jdGlvbiAmIHtjbGVhcj86ICgpID0+IHZvaWR9fSAqL1xuICBsb2FkTW9kZWxzRGVib3VuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUoXCJsb2FkTW9kZWxzRGVib3VuY2VcIiwgKCkgPT4gZGVib3VuY2UoKCkgPT4gdGhpcy5sb2FkTW9kZWxzKCkpKVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gYXJncyAqL1xuICBzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudChhcmdzKSB7XG4gICAgbGV0IG1vZGVscywgb3ZlcmFsbENvdW50XG5cbiAgICBpZiAoYXJncy5tb2RlbHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW9kZWxzID0gYXJncy5tb2RlbHNcbiAgICB9IGVsc2UgaWYgKHRoaXMucy5tb2RlbHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW9kZWxzID0gdGhpcy5zLm1vZGVsc1xuICAgIH1cblxuICAgIGlmIChhcmdzLm92ZXJhbGxDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdmVyYWxsQ291bnQgPSBhcmdzLm92ZXJhbGxDb3VudFxuICAgIH0gZWxzZSBpZiAodGhpcy5zLm92ZXJhbGxDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdmVyYWxsQ291bnQgPSB0aGlzLnMub3ZlcmFsbENvdW50XG4gICAgfVxuXG4gICAgaWYgKG1vZGVscyA9PT0gdW5kZWZpbmVkIHx8IG92ZXJhbGxDb3VudCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMucC5ub1JlY29yZHNBdmFpbGFibGVDb250ZW50ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZVxuICAgIGlmIChtb2RlbHMubGVuZ3RoID09PSAwICYmIG92ZXJhbGxDb3VudCA9PT0gMCAmJiB0aGlzLnAubm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCkgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGFyZ3MgKi9cbiAgc2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudChhcmdzKSB7XG4gICAgbGV0IG1vZGVscywgb3ZlcmFsbENvdW50XG5cbiAgICBpZiAoYXJncy5tb2RlbHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW9kZWxzID0gYXJncy5tb2RlbHNcbiAgICB9IGVsc2UgaWYgKHRoaXMucy5tb2RlbHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW9kZWxzID0gdGhpcy5zLm1vZGVsc1xuICAgIH1cblxuICAgIGlmIChhcmdzLm92ZXJhbGxDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdmVyYWxsQ291bnQgPSBhcmdzLm92ZXJhbGxDb3VudFxuICAgIH0gZWxzZSBpZiAodGhpcy5zLm92ZXJhbGxDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdmVyYWxsQ291bnQgPSB0aGlzLnMub3ZlcmFsbENvdW50XG4gICAgfVxuXG4gICAgaWYgKG1vZGVscyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMucC5ub1JlY29yZHNGb3VuZENvbnRlbnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlXG5cbiAgICAvLyBEb250IHNob3cgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCB0b2dldGhlciB3aXRoIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnRcbiAgICBpZiAobW9kZWxzLmxlbmd0aCA9PT0gMCAmJiBvdmVyYWxsQ291bnQgPT09IDAgJiYgdGhpcy5wLm5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQpIHJldHVybiBmYWxzZVxuICAgIGlmIChtb2RlbHMubGVuZ3RoID09PSAwICYmIHRoaXMucC5ub1JlY29yZHNGb3VuZENvbnRlbnQpIHJldHVybiB0cnVlXG4gIH1cblxuICAvKiogQHJldHVybnMge1Byb21pc2U8dm9pZD59ICovXG4gIGxvYWRPdmVyYWxsQ291bnQgPSBhc3luYyAoKSA9PiB7XG4gICAgLy8gSWdub3JlIGxhdGUgb3ZlcmFsbC1jb3VudCByZXNwb25zZXMgb25jZSBhIG5ld2VyIGxvYWQgY3ljbGUgaGFzIHN0YXJ0ZWQgb3IgdGhlIGhvb2sgdW5tb3VudGVkLlxuICAgIGNvbnN0IGxvYWRPdmVyYWxsQ291bnRHZW5lcmF0aW9uID0gdGhpcy5sb2FkT3ZlcmFsbENvdW50R2VuZXJhdGlvbiArIDFcblxuICAgIHRoaXMubG9hZE92ZXJhbGxDb3VudEdlbmVyYXRpb24gPSBsb2FkT3ZlcmFsbENvdW50R2VuZXJhdGlvblxuXG4gICAgY29uc3QgYmFzZVF1ZXJ5ID0gdGhpcy5wLmNvbGxlY3Rpb24gfHwgdGhpcy5wLm1vZGVsQ2xhc3MuYWxsKClcbiAgICBjb25zdCBvdmVyYWxsQ291bnQgPSBhd2FpdCBiYXNlUXVlcnkuY291bnQoKVxuXG4gICAgaWYgKGxvYWRPdmVyYWxsQ291bnRHZW5lcmF0aW9uICE9IHRoaXMubG9hZE92ZXJhbGxDb3VudEdlbmVyYXRpb24pIHJldHVyblxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBvdmVyYWxsQ291bnQsXG4gICAgICBzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudDogdGhpcy5zaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCh7b3ZlcmFsbENvdW50fSksXG4gICAgICBzaG93Tm9SZWNvcmRzRm91bmRDb250ZW50OiB0aGlzLnNob3dOb1JlY29yZHNGb3VuZENvbnRlbnQoe292ZXJhbGxDb3VudH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7e3FQYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4sIHNlYXJjaFBhcmFtczogc3RyaW5nW119fSAqL1xuICBsb2FkUVBhcmFtcygpIHtcbiAgICBsZXQgcVBhcmFtc1RvU2V0ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wLmRlZmF1bHRQYXJhbXMpXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gW11cblxuICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zICYmIHRoaXMucXVlcnlRTmFtZSgpIGluIHRoaXMucXVlcnlQYXJhbXMpIHtcbiAgICAgIHFQYXJhbXNUb1NldCA9IEpTT04ucGFyc2UoZGlnZyh0aGlzLnF1ZXJ5UGFyYW1zLCB0aGlzLnF1ZXJ5UU5hbWUoKSkpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucXVlcnlQYXJhbXM/Llt0aGlzLnF1ZXJ5U05hbWUoKV0pIHtcbiAgICAgIGZvciAoY29uc3QgcmF3U2VhcmNoUGFyYW0gb2YgdGhpcy5xdWVyeVBhcmFtc1t0aGlzLnF1ZXJ5U05hbWUoKV0pIHtcbiAgICAgICAgY29uc3QgcGFyc2VkU2VhcmNoUGFyYW0gPSBKU09OLnBhcnNlKHJhd1NlYXJjaFBhcmFtKVxuXG4gICAgICAgIHNlYXJjaFBhcmFtcy5wdXNoKHBhcnNlZFNlYXJjaFBhcmFtKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgcVBhcmFtczogcVBhcmFtc1RvU2V0LFxuICAgICAgc2VhcmNoUGFyYW1zXG4gICAgfSlcblxuICAgIHJldHVybiB7XG4gICAgICBxUGFyYW1zOiBxUGFyYW1zVG9TZXQsXG4gICAgICBzZWFyY2hQYXJhbXNcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IFthcmdzLnFQYXJhbXNdXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmdzLnNlYXJjaFBhcmFtc11cbiAgICogQHJldHVybnMge3txUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBzZWFyY2hQYXJhbXM6IHN0cmluZ1tdfX1cbiAgICovXG4gIGxvYWRNb2RlbHNBcmdzKGFyZ3MgPSB7fSkge1xuICAgIHJldHVybiB7XG4gICAgICBxUGFyYW1zOiBhcmdzLnFQYXJhbXMgPz8gdGhpcy5zLnFQYXJhbXMsXG4gICAgICBzZWFyY2hQYXJhbXM6IGFyZ3Muc2VhcmNoUGFyYW1zID8/IHRoaXMucy5zZWFyY2hQYXJhbXNcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IFthcmdzLnFQYXJhbXNdXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmdzLnNlYXJjaFBhcmFtc11cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBsb2FkTW9kZWxzID0gYXN5bmMgKGFyZ3MgPSB7fSkgPT4ge1xuICAgIC8vIE9ubHkgdGhlIG5ld2VzdCBjb2xsZWN0aW9uIHJlcXVlc3QgaXMgYWxsb3dlZCB0byB1cGRhdGUgc3RhdGUgYWZ0ZXIgbmF2aWdhdGlvbi9maWx0ZXIgY2hhbmdlcy5cbiAgICBjb25zdCBsb2FkTW9kZWxzR2VuZXJhdGlvbiA9IHRoaXMubG9hZE1vZGVsc0dlbmVyYXRpb24gKyAxXG4gICAgY29uc3Qge3FQYXJhbXMsIHNlYXJjaFBhcmFtc30gPSB0aGlzLmxvYWRNb2RlbHNBcmdzKGFyZ3MpXG5cbiAgICB0aGlzLmxvYWRNb2RlbHNHZW5lcmF0aW9uID0gbG9hZE1vZGVsc0dlbmVyYXRpb25cbiAgICBsZXQgcXVlcnkgPSB0aGlzLnAuY29sbGVjdGlvbj8uY2xvbmUoKSB8fCB0aGlzLnAubW9kZWxDbGFzcy5yYW5zYWNrKClcblxuICAgIGlmICh0aGlzLnAucGFnaW5hdGlvbikge1xuICAgICAgY29uc3QgcGFnZSA9IHRoaXMucXVlcnlQYXJhbXM/Llt0aGlzLnF1ZXJ5UGFnZU5hbWUoKV0gfHwgMVxuICAgICAgbGV0IHBlciA9IHRoaXMucXVlcnlQYXJhbXM/Llt0aGlzLnF1ZXJ5UGVyS2V5KCldIHx8IDMwXG5cbiAgICAgIGlmIChwZXIgPT0gXCJhbGxcIikge1xuICAgICAgICBwZXIgPSA5OTlfOTk5Xzk5OVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVyID0gTnVtYmVyKHBlcilcbiAgICAgIH1cblxuICAgICAgcXVlcnkucGFnZShwYWdlKS5wZXIocGVyKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnAuZ3JvdXBCeSkgcXVlcnkgPSBxdWVyeS5ncm91cEJ5KC4uLnRoaXMucC5ncm91cEJ5KVxuXG4gICAgcXVlcnkgPSBxdWVyeVxuICAgICAgLnJhbnNhY2socVBhcmFtcylcbiAgICAgIC5zZWFyY2goc2VhcmNoUGFyYW1zKVxuICAgICAgLnNlYXJjaEtleSh0aGlzLnF1ZXJ5UU5hbWUoKSlcbiAgICAgIC5wYWdlS2V5KHRoaXMucXVlcnlQYWdlTmFtZSgpKVxuICAgICAgLnBlcktleSh0aGlzLnF1ZXJ5UGVyS2V5KCkpXG5cbiAgICBpZiAodGhpcy5wLmFiaWxpdGllcykgcXVlcnkuYWJpbGl0aWVzKHRoaXMucC5hYmlsaXRpZXMpXG4gICAgaWYgKHRoaXMucC5saW1pdCAhPT0gdW5kZWZpbmVkKSBxdWVyeS5saW1pdCh0aGlzLnAubGltaXQpXG4gICAgaWYgKHRoaXMucC5wcmVsb2FkcykgcXVlcnkucHJlbG9hZCh0aGlzLnAucHJlbG9hZHMpXG4gICAgaWYgKHRoaXMucC5yYW5zYWNrKSBxdWVyeS5yYW5zYWNrKHRoaXMucC5yYW5zYWNrKVxuICAgIGlmICh0aGlzLnAuc2VsZWN0KSBxdWVyeS5zZWxlY3QodGhpcy5wLnNlbGVjdClcbiAgICBpZiAodGhpcy5wLnNlbGVjdENvbHVtbnMpIHF1ZXJ5LnNlbGVjdENvbHVtbnModGhpcy5wLnNlbGVjdENvbHVtbnMpXG5cbiAgICBsZXQgcmVzdWx0XG5cbiAgICBpZiAodGhpcy5wLnF1ZXJ5TWV0aG9kKSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLnAucXVlcnlNZXRob2Qoe3F1ZXJ5fSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgcXVlcnkucmVzdWx0KClcbiAgICB9XG5cbiAgICBjb25zdCBtb2RlbHMgPSByZXN1bHQubW9kZWxzKClcblxuICAgIGlmIChsb2FkTW9kZWxzR2VuZXJhdGlvbiAhPSB0aGlzLmxvYWRNb2RlbHNHZW5lcmF0aW9uKSByZXR1cm5cblxuICAgIGlmICh0aGlzLnAub25Nb2RlbHNMb2FkZWQpIHtcbiAgICAgIHRoaXMucC5vbk1vZGVsc0xvYWRlZCh7XG4gICAgICAgIG1vZGVscyxcbiAgICAgICAgcVBhcmFtczogdGhpcy5zLnFQYXJhbXMsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICByZXN1bHRcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBtb2RlbHMsXG4gICAgICBxdWVyeSxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50OiB0aGlzLnNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50KHttb2RlbHN9KSxcbiAgICAgIHNob3dOb1JlY29yZHNGb3VuZENvbnRlbnQ6IHRoaXMuc2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudCh7bW9kZWxzfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7e21vZGVsOiBpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdH19IGFyZ3MgKi9cbiAgb25Nb2RlbERlc3Ryb3llZChhcmdzKSB7XG4gICAgY29uc3QgZGVzdHJveWVkTW9kZWwgPSBkaWdnKGFyZ3MsIFwibW9kZWxcIilcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgbW9kZWxzOiB0aGlzLnMubW9kZWxzLmZpbHRlcigobW9kZWwpID0+IG1vZGVsLmlkKCkgIT0gZGVzdHJveWVkTW9kZWwuaWQoKSlcbiAgICB9KVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7e21vZGVsOiBpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdH19IGFyZ3MgKi9cbiAgb25Nb2RlbFVwZGF0ZWQoYXJncykge1xuICAgIGNvbnN0IHVwZGF0ZWRNb2RlbCA9IGRpZ2coYXJncywgXCJtb2RlbFwiKVxuICAgIGNvbnN0IGZvdW5kTW9kZWwgPSB0aGlzLnMubW9kZWxzLmZpbmQoKG1vZGVsKSA9PiBtb2RlbC5pZCgpID09IHVwZGF0ZWRNb2RlbC5pZCgpKVxuXG4gICAgaWYgKGZvdW5kTW9kZWwpIHRoaXMubG9hZE1vZGVsc0RlYm91bmNlKCkoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBvbkNyZWF0ZWQoKSB7XG4gICAgdGhpcy5sb2FkTW9kZWxzRGVib3VuY2UoKSgpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuc2V0U3RhdGUoe3JlYWR5VG9Mb2FkOiB0cnVlfSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgc2V0dXAoKSB7XG4gICAgdGhpcy5xdWVyeVBhcmFtcyA9IHVzZVF1ZXJ5UGFyYW1zKClcblxuICAgIC8vIFdhaXQgdW50aWwgY29tcG9uZW50RGlkTW91bnQgaGFzIGZsaXBwZWQgcmVhZHlUb0xvYWQgc28gdGhlIGZpcnN0IGxvYWQgcnVucyBhZnRlciB1c2VTaGFwZUhvb2sgaGFzIG1hcmtlZCB0aGUgaG9vayBtb3VudGVkLlxuICAgIHVzZUVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnMucmVhZHlUb0xvYWQpIHJldHVyblxuICAgICAgICBsZXQgaWZDb25kaXRpb25NZXRcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucC5pZkNvbmRpdGlvbiA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBpZkNvbmRpdGlvbk1ldCA9IHRoaXMucC5pZkNvbmRpdGlvbigpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wLmlmQ29uZGl0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZkNvbmRpdGlvbk1ldCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZkNvbmRpdGlvbk1ldCA9IHRoaXMucC5pZkNvbmRpdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlmQ29uZGl0aW9uTWV0KSB7XG4gICAgICAgICAgY29uc3Qge3FQYXJhbXMsIHNlYXJjaFBhcmFtc30gPSB0aGlzLmxvYWRRUGFyYW1zKClcblxuICAgICAgICAgIHRoaXMubG9hZE1vZGVscyh7cVBhcmFtcywgc2VhcmNoUGFyYW1zfSlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgdGhpcy5wLm1vZGVsQ2xhc3MsXG4gICAgICAgIHRoaXMucC5pZkNvbmRpdGlvbixcbiAgICAgICAgdGhpcy5xdWVyeU5hbWUoKSxcbiAgICAgICAgdGhpcy5xdWVyeVBhcmFtcz8uW3RoaXMucXVlcnlRTmFtZSgpXSxcbiAgICAgICAgdGhpcy5xdWVyeVBhcmFtcz8uW3RoaXMucXVlcnlQYWdlTmFtZSgpXSxcbiAgICAgICAgdGhpcy5xdWVyeVBhcmFtcz8uW3RoaXMucXVlcnlQZXJLZXkoKV0sXG4gICAgICAgIHRoaXMucXVlcnlQYXJhbXM/Llt0aGlzLnF1ZXJ5U05hbWUoKV0sXG4gICAgICAgIHRoaXMucy5yZWFkeVRvTG9hZCxcbiAgICAgICAgdGhpcy5wLmNvbGxlY3Rpb25cbiAgICAgIF0uY29uY2F0KHRoaXMucC5jYWNoZUtleXMpXG4gICAgKVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5zLnJlYWR5VG9Mb2FkKSByZXR1cm5cbiAgICAgIGlmICh0aGlzLnAubm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCkge1xuICAgICAgICB0aGlzLmxvYWRPdmVyYWxsQ291bnQoKVxuICAgICAgfVxuICAgIH0sIFt0aGlzLnAubW9kZWxDbGFzcywgdGhpcy5zLnJlYWR5VG9Mb2FkXSlcblxuICAgIHVzZUNyZWF0ZWRFdmVudCh0aGlzLnAubW9kZWxDbGFzcywgKCkgPT4gdGhpcy5vbkNyZWF0ZWQoKSlcblxuICAgIC8vIEludmFsaWRhdGUgYW55IGluLWZsaWdodCBhc3luYyByZXNwb25zZXMgc28gdW5tb3VudGVkIGhvb2tzIGNhbm5vdCB3cml0ZSBzdGFsZSBzdGF0ZS5cbiAgICB1c2VFZmZlY3QoKCkgPT4gKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkTW9kZWxzR2VuZXJhdGlvbiArPSAxXG4gICAgICB0aGlzLmxvYWRPdmVyYWxsQ291bnRHZW5lcmF0aW9uICs9IDFcbiAgICAgIHRoaXMubG9hZE1vZGVsc0RlYm91bmNlKCkuY2xlYXI/LigpXG4gICAgfSwgW10pXG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY29ubmVjdGlvbnMgPSBbXVxuXG4gICAgICBpZiAodGhpcy5zLm1vZGVscykge1xuICAgICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIHRoaXMucy5tb2RlbHMpIHtcbiAgICAgICAgICBjb25uZWN0aW9ucy5wdXNoKE1vZGVsRXZlbnRzLmNvbm5lY3RVcGRhdGVkKG1vZGVsLCAoYXJncykgPT4gdGhpcy5vbk1vZGVsVXBkYXRlZChhcmdzKSkpXG4gICAgICAgICAgY29ubmVjdGlvbnMucHVzaChNb2RlbEV2ZW50cy5jb25uZWN0RGVzdHJveWVkKG1vZGVsLCAoYXJncykgPT4gdGhpcy5vbk1vZGVsRGVzdHJveWVkKGFyZ3MpKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbm5lY3Rpb24gb2YgY29ubmVjdGlvbnMpIHtcbiAgICAgICAgICBjb25uZWN0aW9uLnVuc3Vic2NyaWJlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIFt0aGlzLm1vZGVsSWRzQ2FjaGVTdHJpbmcoKV0pXG4gIH1cbn1cblxuY29uc3QgdXNlQ29sbGVjdGlvbiA9IChwcm9wcywgY2FjaGVLZXlzID0gW10pID0+IHtcbiAgY29uc3Qge1xuICAgIGFiaWxpdGllcyxcbiAgICBjb2xsZWN0aW9uLFxuICAgIGRlZmF1bHRQYXJhbXMsXG4gICAgZ3JvdXBCeSxcbiAgICBpZkNvbmRpdGlvbixcbiAgICBsaW1pdCxcbiAgICBtb2RlbENsYXNzLFxuICAgIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQgPSB1bmRlZmluZWQsXG4gICAgbm9SZWNvcmRzRm91bmRDb250ZW50ID0gdW5kZWZpbmVkLFxuICAgIG9uTW9kZWxzTG9hZGVkLFxuICAgIHBhZ2luYXRpb24gPSBmYWxzZSxcbiAgICBwcmVsb2FkcyA9IFtdLFxuICAgIHF1ZXJ5TWV0aG9kLFxuICAgIHF1ZXJ5TmFtZSxcbiAgICByYW5zYWNrLFxuICAgIHNlbGVjdCA9IHt9LFxuICAgIHNlbGVjdENvbHVtbnMsXG4gICAgLi4ucmVzdFByb3BzXG4gIH0gPSBwcm9wc1xuXG4gIGlmIChPYmplY3Qua2V5cyhyZXN0UHJvcHMpLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcHJvcHMgZ2l2ZW4gdG8gdXNlQ29sbGVjdGlvbjogJHtPYmplY3Qua2V5cyhyZXN0UHJvcHMpLmpvaW4oXCIsIFwiKX1gKVxuICB9XG5cbiAgY29uc3Qgc2hhcGVIb29rID0gdXNlU2hhcGVIb29rKFVzZUNvbGxlY3Rpb25TaGFwZUhvb2ssIHtcbiAgICBhYmlsaXRpZXMsXG4gICAgY2FjaGVLZXlzLFxuICAgIGNvbGxlY3Rpb24sXG4gICAgZGVmYXVsdFBhcmFtcyxcbiAgICBncm91cEJ5LFxuICAgIGlmQ29uZGl0aW9uLFxuICAgIGxpbWl0LFxuICAgIG1vZGVsQ2xhc3MsXG4gICAgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCxcbiAgICBub1JlY29yZHNGb3VuZENvbnRlbnQsXG4gICAgb25Nb2RlbHNMb2FkZWQsXG4gICAgcGFnaW5hdGlvbixcbiAgICBwcmVsb2FkcyxcbiAgICBxdWVyeU1ldGhvZCxcbiAgICBxdWVyeU5hbWUsXG4gICAgcmFuc2FjayxcbiAgICBzZWxlY3QsXG4gICAgc2VsZWN0Q29sdW1uc1xuICB9KVxuICBjb25zdCByZXN1bHQgPSAvKiogQHR5cGUge1VzZUNvbGxlY3Rpb25SZXN1bHQgJiBSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoT2JqZWN0LmFzc2lnbih7fSwgc2hhcGVIb29rLnN0YXRlKSkpXG4gIGNvbnN0IG1vZGVsVmFyaWFibGVOYW1lID0gaW5mbGVjdGlvbi5wbHVyYWxpemUoaW5mbGVjdGlvbi5jYW1lbGl6ZShzaGFwZUhvb2sucC5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZSwgdHJ1ZSkpXG5cbiAgcmVzdWx0Lm1vZGVsSWRzQ2FjaGVTdHJpbmcgPSBzaGFwZUhvb2subW9kZWxJZHNDYWNoZVN0cmluZygpXG4gIHJlc3VsdC5xdWVyeU5hbWUgPSBzaGFwZUhvb2sucXVlcnlOYW1lKClcbiAgcmVzdWx0LnF1ZXJ5UGVyS2V5ID0gc2hhcGVIb29rLnF1ZXJ5UGVyS2V5KClcbiAgcmVzdWx0LnF1ZXJ5UU5hbWUgPSBzaGFwZUhvb2sucXVlcnlRTmFtZSgpXG4gIHJlc3VsdC5xdWVyeVNOYW1lID0gc2hhcGVIb29rLnF1ZXJ5U05hbWUoKVxuICByZXN1bHQucXVlcnlQYWdlTmFtZSA9IHNoYXBlSG9vay5xdWVyeVBhZ2VOYW1lKClcbiAgcmVzdWx0W21vZGVsVmFyaWFibGVOYW1lXSA9IHNoYXBlSG9vay5zLm1vZGVsc1xuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlQ29sbGVjdGlvblxuIl19
468
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNvbGxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInVzZS1jb2xsZWN0aW9uLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFDWiw2RkFBNkY7QUFDN0YsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQTtBQUN6RCxPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUE7QUFDL0IsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUM5QixPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLFdBQVcsTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sT0FBTyxDQUFBO0FBQy9CLE9BQU8sZUFBZSxNQUFNLHdCQUF3QixDQUFBO0FBQ3BELE9BQU8sY0FBYyxNQUFNLCtDQUErQyxDQUFBO0FBRTFFLHlFQUF5RTtBQUN6RSxxRUFBcUU7QUFDckUsaUZBQWlGO0FBQ2pGLG1FQUFtRTtBQUNuRSxnRUFBZ0U7QUFDaEUsNEZBQTRGO0FBQzVGLDhGQUE4RjtBQUM5Rix5RkFBeUY7QUFDekYsb0dBQW9HO0FBQ3BHLGtHQUFrRztBQUNsRywySEFBMkg7QUFDM0g7Ozs7Ozs7R0FPRztBQUNILDBGQUEwRjtBQUMxRixnR0FBZ0c7QUFDaEc7Ozs7O0dBS0c7QUFDSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUg7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCw4Q0FBOEM7QUFDOUMsd0VBQXdFO0FBQ3hFLE1BQU0sc0JBQXVCLFNBQVEsU0FBUztJQUM1QyxLQUFLLEdBQUcsaUNBQWlDLENBQUMsQ0FBQztRQUN6QyxNQUFNLEVBQUUsU0FBUztRQUNqQixZQUFZLEVBQUUsU0FBUztRQUN2QixPQUFPLEVBQUUsRUFBRTtRQUNYLEtBQUssRUFBRSxTQUFTO1FBQ2hCLFdBQVcsRUFBRSxLQUFLO1FBQ2xCLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLFlBQVksRUFBRSxTQUFTO1FBQ3ZCLDZCQUE2QixFQUFFLEtBQUs7UUFDcEMseUJBQXlCLEVBQUUsS0FBSztLQUNqQyxDQUFDLENBQUE7SUFFRjs7O09BR0c7SUFDSCxZQUFZLEtBQUs7UUFDZixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDWixJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFBO1FBQzdCLElBQUksQ0FBQywwQkFBMEIsR0FBRyxDQUFDLENBQUE7UUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUE7SUFDOUIsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUE7SUFDdEYsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixXQUFXO1FBQ1QsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFBO0lBQ2xDLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsVUFBVTtRQUNSLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQTtJQUNoQyxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLFVBQVU7UUFDUixPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUE7SUFDaEMsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixhQUFhO1FBQ1gsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFBO0lBQ25DLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsbUJBQW1CO1FBQ2pCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEMsT0FBTyxrQkFBa0IsQ0FBQTtRQUMzQixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEMsT0FBTyxXQUFXLENBQUE7UUFDcEIsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3BFLENBQUM7SUFDSCxDQUFDO0lBRUQsaURBQWlEO0lBQ2pELGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDbEYsQ0FBQztJQUVEOzs7T0FHRztJQUNILDZCQUE2QixDQUFDLElBQUk7UUFDaEMsSUFBSSxNQUFNLEVBQUUsWUFBWSxDQUFBO1FBRXhCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQTtRQUN0QixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2QyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUE7UUFDeEIsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQTtRQUNsQyxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM3QyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUE7UUFDcEMsQ0FBQztRQUVELElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxZQUFZLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMseUJBQXlCLEtBQUssU0FBUztZQUFFLE9BQU8sS0FBSyxDQUFBO1FBQ3RILElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksWUFBWSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLHlCQUF5QjtZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRTlGLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNILHlCQUF5QixDQUFDLElBQUk7UUFDNUIsSUFBSSxNQUFNLEVBQUUsWUFBWSxDQUFBO1FBRXhCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQTtRQUN0QixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2QyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUE7UUFDeEIsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQTtRQUNsQyxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM3QyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUE7UUFDcEMsQ0FBQztRQUVELElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixLQUFLLFNBQVM7WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUVwRiw4RUFBOEU7UUFDOUUsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxZQUFZLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMseUJBQXlCO1lBQUUsT0FBTyxLQUFLLENBQUE7UUFDL0YsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRXBFLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELCtCQUErQjtJQUMvQixnQkFBZ0IsR0FBRyxLQUFLLElBQUksRUFBRTtRQUM1QixpR0FBaUc7UUFDakcsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsQ0FBQyxDQUFBO1FBRXRFLElBQUksQ0FBQywwQkFBMEIsR0FBRywwQkFBMEIsQ0FBQTtRQUU1RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUM5RCxNQUFNLFlBQVksR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUU1QyxJQUFJLDBCQUEwQixJQUFJLElBQUksQ0FBQywwQkFBMEI7WUFBRSxPQUFNO1FBRXpFLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDWixZQUFZO1lBQ1osNkJBQTZCLEVBQUUsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEVBQUMsWUFBWSxFQUFDLENBQUM7WUFDakYseUJBQXlCLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEVBQUMsWUFBWSxFQUFDLENBQUM7U0FDMUUsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFBO0lBRUQsK0VBQStFO0lBQy9FLFdBQVc7UUFDVCxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQzFELE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQTtRQUV2QixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM5RCxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ3RFLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzFDLEtBQUssTUFBTSxjQUFjLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNqRSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUE7Z0JBRXBELFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtZQUN0QyxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUM7WUFDWixPQUFPLEVBQUUsWUFBWTtZQUNyQixZQUFZO1NBQ2IsQ0FBQyxDQUFBO1FBRUYsT0FBTztZQUNMLE9BQU8sRUFBRSxZQUFZO1lBQ3JCLFlBQVk7U0FDYixDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsY0FBYyxDQUFDLElBQUksR0FBRyxFQUFFO1FBQ3RCLE9BQU87WUFDTCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU87WUFDdkMsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZO1NBQ3ZELENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxVQUFVLEdBQUcsS0FBSyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRTtRQUMvQixpR0FBaUc7UUFDakcsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFBO1FBQzFELE1BQU0sRUFBQyxPQUFPLEVBQUUsWUFBWSxFQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUV6RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUE7UUFDaEQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUE7UUFFckUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDMUQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUV0RCxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDakIsR0FBRyxHQUFHLFdBQVcsQ0FBQTtZQUNuQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNuQixDQUFDO1lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDM0IsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPO1lBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRTVELEtBQUssR0FBRyxLQUFLO2FBQ1YsT0FBTyxDQUFDLGdFQUFnRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDbkYsTUFBTSxDQUFDLFlBQVksQ0FBQzthQUNwQixTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQzVCLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFBO1FBRTdCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3ZELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUztZQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN6RCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUTtZQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNuRCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTztZQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNqRCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUM5QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYTtZQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUVuRSxJQUFJLE1BQU0sQ0FBQTtRQUVWLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QixNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUE7UUFDNUMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUE7UUFDL0IsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUU5QixJQUFJLG9CQUFvQixJQUFJLElBQUksQ0FBQyxvQkFBb0I7WUFBRSxPQUFNO1FBRTdELElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztnQkFDcEIsTUFBTTtnQkFDTixPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPO2dCQUN2QixLQUFLO2dCQUNMLE1BQU07YUFDUCxDQUFDLENBQUE7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNaLE1BQU07WUFDTixLQUFLO1lBQ0wsTUFBTTtZQUNOLDZCQUE2QixFQUFFLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDO1lBQzNFLHlCQUF5QixFQUFFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDO1NBQ3BFLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQTtJQUVELCtDQUErQztJQUMvQyxnQkFBZ0IsQ0FBQyxJQUFJO1FBQ25CLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFFMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNaLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLDhCQUE4QixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksOEJBQThCLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztTQUM3SSxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsK0NBQStDO0lBQy9DLGNBQWMsQ0FBQyxJQUFJO1FBQ2pCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLDhCQUE4QixDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVuSixJQUFJLFVBQVU7WUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFBO0lBQzdDLENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsU0FBUztRQUNQLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUE7SUFDN0IsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixpQkFBaUI7UUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7SUFDcEMsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixLQUFLO1FBQ0gsSUFBSSxDQUFDLFdBQVcsR0FBRyxjQUFjLEVBQUUsQ0FBQTtRQUVuQyw4SEFBOEg7UUFDOUgsU0FBUyxDQUNQLEdBQUcsRUFBRTtZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVc7Z0JBQUUsT0FBTTtZQUMvQixJQUFJLGNBQWMsQ0FBQTtZQUVsQixJQUFJLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQzVDLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO1lBQ3ZDLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDNUMsY0FBYyxHQUFHLElBQUksQ0FBQTtZQUN2QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sY0FBYyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFBO1lBQ3JDLENBQUM7WUFFRCxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNuQixNQUFNLEVBQUMsT0FBTyxFQUFFLFlBQVksRUFBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtnQkFFbEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFBO1lBQzFDLENBQUM7UUFDSCxDQUFDLEVBQ0Q7WUFDRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVU7WUFDakIsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXO1lBQ2xCLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVc7WUFDbEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVO1NBQ2xCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQzNCLENBQUE7UUFFRCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVztnQkFBRSxPQUFNO1lBQy9CLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUN6QixDQUFDO1FBQ0gsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFBO1FBRTNDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUUxRCx3RkFBd0Y7UUFDeEYsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRTtZQUNuQixJQUFJLENBQUMsb0JBQW9CLElBQUksQ0FBQyxDQUFBO1lBQzlCLElBQUksQ0FBQywwQkFBMEIsSUFBSSxDQUFDLENBQUE7WUFDcEMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQTtRQUNyQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFTixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFBO1lBRXRCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNsQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtvQkFDeEYsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUM5RixDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU8sR0FBRyxFQUFFO2dCQUNWLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFLENBQUM7b0JBQ3JDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtnQkFDMUIsQ0FBQztZQUNILENBQUMsQ0FBQTtRQUNILENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0NBQ0Y7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxHQUFHLEVBQUUsRUFBRSxFQUFFO0lBQzlDLE1BQU0sRUFDSixTQUFTLEVBQ1QsVUFBVSxFQUNWLGFBQWEsRUFDYixPQUFPLEVBQ1AsV0FBVyxFQUNYLEtBQUssRUFDTCxVQUFVLEVBQ1YseUJBQXlCLEdBQUcsU0FBUyxFQUNyQyxxQkFBcUIsR0FBRyxTQUFTLEVBQ2pDLGNBQWMsRUFDZCxVQUFVLEdBQUcsS0FBSyxFQUNsQixRQUFRLEdBQUcsRUFBRSxFQUNiLFdBQVcsRUFDWCxTQUFTLEVBQ1QsT0FBTyxFQUNQLE1BQU0sR0FBRyxFQUFFLEVBQ1gsYUFBYSxFQUNiLEdBQUcsU0FBUyxFQUNiLEdBQUcsS0FBSyxDQUFBO0lBRVQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDL0YsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxzQkFBc0IsRUFBRTtRQUNyRCxTQUFTO1FBQ1QsU0FBUztRQUNULFVBQVU7UUFDVixhQUFhO1FBQ2IsT0FBTztRQUNQLFdBQVc7UUFDWCxLQUFLO1FBQ0wsVUFBVTtRQUNWLHlCQUF5QjtRQUN6QixxQkFBcUI7UUFDckIsY0FBYztRQUNkLFVBQVU7UUFDVixRQUFRO1FBQ1IsV0FBVztRQUNYLFNBQVM7UUFDVCxPQUFPO1FBQ1AsTUFBTTtRQUNOLGFBQWE7S0FDZCxDQUFDLENBQUE7SUFDRixNQUFNLE1BQU0sR0FBRyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQ3RELEdBQUcsU0FBUyxDQUFDLEtBQUs7UUFDbEIsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLG1CQUFtQixFQUFFO1FBQ3BELFNBQVMsRUFBRSxTQUFTLENBQUMsU0FBUyxFQUFFO1FBQ2hDLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFO1FBQ3BDLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFO1FBQ2xDLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFO1FBQ2xDLGFBQWEsRUFBRSxTQUFTLENBQUMsYUFBYSxFQUFFO0tBQ3pDLENBQUMsQ0FBQTtJQUNGLE1BQU0saUJBQWlCLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBRXZILE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO0lBRTlDLE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQyxDQUFBO0FBRUQsZUFBZSxhQUFhLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzLCBuby11c2UtYmVmb3JlLWRlZmluZSwgcHJlZmVyLW9iamVjdC1zcHJlYWQsIHNvcnQtaW1wb3J0cyAqL1xuaW1wb3J0IHtTaGFwZUhvb2ssIHVzZVNoYXBlSG9va30gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlXCJcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwiZGVib3VuY2VcIlxuaW1wb3J0IHtkaWdnfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IE1vZGVsRXZlbnRzIGZyb20gXCIuL21vZGVsLWV2ZW50cy5qc1wiXG5pbXBvcnQge3VzZUVmZmVjdH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB1c2VDcmVhdGVkRXZlbnQgZnJvbSBcIi4vdXNlLWNyZWF0ZWQtZXZlbnQuanNcIlxuaW1wb3J0IHVzZVF1ZXJ5UGFyYW1zIGZyb20gXCJvbi1sb2NhdGlvbi1jaGFuZ2VkL2J1aWxkL3VzZS1xdWVyeS1wYXJhbXMuanNcIlxuXG4vKiogQHR5cGVkZWYge3R5cGVvZiBpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdH0gQmFzZU1vZGVsQ2xhc3MgKi9cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi9iYXNlLW1vZGVsLmpzXCIpLmRlZmF1bHR9IEJhc2VNb2RlbEluc3RhbmNlICovXG4vKiogQHR5cGVkZWYge0Jhc2VNb2RlbEluc3RhbmNlICYge2lkOiAoKSA9PiBudW1iZXIgfCBzdHJpbmd9fSBCYXNlTW9kZWxXaXRoSWQgKi9cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi9jb2xsZWN0aW9uLmpzXCIpLmRlZmF1bHR9IE1vZGVsQ29sbGVjdGlvbiAqL1xuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCIuL3Jlc3VsdC5qc1wiKS5kZWZhdWx0fSBDb2xsZWN0aW9uUmVzdWx0ICovXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4vY29sbGVjdGlvbi5qc1wiKS5Db2xsZWN0aW9uU2VhcmNoUGFyYW1zfSBVc2VDb2xsZWN0aW9uU2VhcmNoUGFyYW1zICovXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4vY29sbGVjdGlvbi5qc1wiKS5Db2xsZWN0aW9uUmFuc2Fja1BhcmFtc30gVXNlQ29sbGVjdGlvblJhbnNhY2tQYXJhbXMgKi9cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi9jb2xsZWN0aW9uLmpzXCIpLlF1ZXJ5UGFyYW1WYWx1ZU1hcH0gVXNlQ29sbGVjdGlvbkRlZmF1bHRQYXJhbXMgKi9cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi9jb2xsZWN0aW9uLmpzXCIpLlF1ZXJ5UGFyYW1WYWx1ZSB8IHVuZGVmaW5lZH0gVXNlQ29sbGVjdGlvblF1ZXJ5UGFyYW1WYWx1ZSAqL1xuLyoqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCBVc2VDb2xsZWN0aW9uUXVlcnlQYXJhbVZhbHVlIHwgc3RyaW5nW10+fSBVc2VDb2xsZWN0aW9uUXVlcnlQYXJhbXMgKi9cbi8qKiBAdHlwZWRlZiB7KGFyZ3M6IHtxdWVyeTogTW9kZWxDb2xsZWN0aW9ufSkgPT4gUHJvbWlzZTxDb2xsZWN0aW9uUmVzdWx0PiB8IENvbGxlY3Rpb25SZXN1bHR9IFVzZUNvbGxlY3Rpb25RdWVyeU1ldGhvZCAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7KGFyZ3M6IHtcbiAqICAgbW9kZWxzOiBCYXNlTW9kZWxJbnN0YW5jZVtdLFxuICogICBxUGFyYW1zOiBVc2VDb2xsZWN0aW9uRGVmYXVsdFBhcmFtcyxcbiAqICAgcXVlcnk6IE1vZGVsQ29sbGVjdGlvbixcbiAqICAgcmVzdWx0OiBDb2xsZWN0aW9uUmVzdWx0XG4gKiB9KSA9PiB2b2lkfSBPbk1vZGVsc0xvYWRlZENhbGxiYWNrXG4gKi9cbi8qKiBAdHlwZWRlZiB7e21vZGVscz86IEJhc2VNb2RlbEluc3RhbmNlW10sIG92ZXJhbGxDb3VudD86IG51bWJlcn19IE5vUmVjb3Jkc1N0YXRlQXJncyAqL1xuLyoqIEB0eXBlZGVmIHt7cVBhcmFtcz86IFVzZUNvbGxlY3Rpb25EZWZhdWx0UGFyYW1zLCBzZWFyY2hQYXJhbXM/OiBzdHJpbmdbXX19IExvYWRNb2RlbHNBcmdzICovXG4vKipcbiAqIEB0eXBlZGVmIHtVc2VDb2xsZWN0aW9uUmVzdWx0ICYgUmVjb3JkPFxuICogICBzdHJpbmcsXG4gKiAgIEJhc2VNb2RlbEluc3RhbmNlW10gfCBzdHJpbmcgfCBudW1iZXIgfCBDb2xsZWN0aW9uUmVzdWx0IHwgTW9kZWxDb2xsZWN0aW9uIHwgc3RyaW5nW10gfCBmYWxzZSB8IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZVxuICogPn0gVXNlQ29sbGVjdGlvblJldHVyblZhbHVlXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gVXNlQ29sbGVjdGlvbkhvb2tQcm9wc1xuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT59IFthYmlsaXRpZXNdXG4gKiBAcHJvcGVydHkge1VzZUNvbGxlY3Rpb25RdWVyeVBhcmFtVmFsdWVbXX0gW2NhY2hlS2V5c11cbiAqIEBwcm9wZXJ0eSB7TW9kZWxDb2xsZWN0aW9ufSBbY29sbGVjdGlvbl1cbiAqIEBwcm9wZXJ0eSB7VXNlQ29sbGVjdGlvbkRlZmF1bHRQYXJhbXN9IFtkZWZhdWx0UGFyYW1zXVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gW2dyb3VwQnldXG4gKiBAcHJvcGVydHkge2Jvb2xlYW4gfCAoKCkgPT4gYm9vbGVhbil9IFtpZkNvbmRpdGlvbl1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbbGltaXRdXG4gKiBAcHJvcGVydHkge0Jhc2VNb2RlbENsYXNzfSBtb2RlbENsYXNzXG4gKiBAcHJvcGVydHkgeygpID0+IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW25vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnRdXG4gKiBAcHJvcGVydHkgeygpID0+IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gW25vUmVjb3Jkc0ZvdW5kQ29udGVudF1cbiAqIEBwcm9wZXJ0eSB7T25Nb2RlbHNMb2FkZWRDYWxsYmFja30gW29uTW9kZWxzTG9hZGVkXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbcGFnaW5hdGlvbl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtwcmVsb2Fkc11cbiAqIEBwcm9wZXJ0eSB7VXNlQ29sbGVjdGlvblF1ZXJ5TWV0aG9kfSBbcXVlcnlNZXRob2RdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3F1ZXJ5TmFtZV1cbiAqIEBwcm9wZXJ0eSB7VXNlQ29sbGVjdGlvblJhbnNhY2tQYXJhbXN9IFtyYW5zYWNrXVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT59IFtzZWxlY3RdXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gW3NlbGVjdENvbHVtbnNdXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gVXNlQ29sbGVjdGlvblJlc3VsdFxuICogQHByb3BlcnR5IHtCYXNlTW9kZWxJbnN0YW5jZVtdIHwgdW5kZWZpbmVkfSBtb2RlbHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtb2RlbElkc0NhY2hlU3RyaW5nXG4gKiBAcHJvcGVydHkge251bWJlciB8IHVuZGVmaW5lZH0gb3ZlcmFsbENvdW50XG4gKiBAcHJvcGVydHkge1VzZUNvbGxlY3Rpb25EZWZhdWx0UGFyYW1zfSBxUGFyYW1zXG4gKiBAcHJvcGVydHkge01vZGVsQ29sbGVjdGlvbiB8IHVuZGVmaW5lZH0gcXVlcnlcbiAgKiBAcHJvcGVydHkge3N0cmluZ30gcXVlcnlOYW1lXG4gICogQHByb3BlcnR5IHtzdHJpbmd9IHF1ZXJ5UGVyS2V5XG4gICogQHByb3BlcnR5IHtzdHJpbmd9IHF1ZXJ5UU5hbWVcbiAgKiBAcHJvcGVydHkge3N0cmluZ30gcXVlcnlTTmFtZVxuICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBxdWVyeVBhZ2VOYW1lXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlYWR5VG9Mb2FkXG4gKiBAcHJvcGVydHkge0NvbGxlY3Rpb25SZXN1bHQgfCB1bmRlZmluZWR9IHJlc3VsdFxuICogQHByb3BlcnR5IHtzdHJpbmdbXSB8IHVuZGVmaW5lZH0gc2VhcmNoUGFyYW1zXG4gICogQHByb3BlcnR5IHtmYWxzZSB8IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gc2hvd05vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnRcbiAgKiBAcHJvcGVydHkge2ZhbHNlIHwgaW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBzaG93Tm9SZWNvcmRzRm91bmRDb250ZW50XG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nW10+fSBwcm9wcy5hYmlsaXRpZXNcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9jb2xsZWN0aW9uLmpzXCIpLmRlZmF1bHR9IHByb3BzLmNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7VXNlQ29sbGVjdGlvbkRlZmF1bHRQYXJhbXN9IHByb3BzLmRlZmF1bHRQYXJhbXNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzLmdyb3VwQnlcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKSA6IGJvb2xlYW59IHByb3BzLmlmQ29uZGl0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gcHJvcHMubGltaXRcbiAqIEBwYXJhbSB7QmFzZU1vZGVsQ2xhc3N9IHByb3BzLm1vZGVsQ2xhc3NcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKSA6IGltcG9ydChcInJlYWN0XCIpLlJlYWN0Tm9kZX0gcHJvcHMubm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudFxuICogQHBhcmFtIHtmdW5jdGlvbigpIDogaW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBwcm9wcy5ub1JlY29yZHNGb3VuZENvbnRlbnRcbiAqIEBwYXJhbSB7T25Nb2RlbHNMb2FkZWRDYWxsYmFja30gcHJvcHMub25Nb2RlbHNMb2FkZWRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJvcHMucGFnaW5hdGlvblxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcHMucHJlbG9hZHNcbiAqIEBwYXJhbSB7VXNlQ29sbGVjdGlvblF1ZXJ5TWV0aG9kfSBwcm9wcy5xdWVyeU1ldGhvZFxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BzLnF1ZXJ5TmFtZVxuICogQHBhcmFtIHtVc2VDb2xsZWN0aW9uUmFuc2Fja1BhcmFtc30gcHJvcHMucmFuc2Fja1xuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT59IHByb3BzLnNlbGVjdFxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT59IHByb3BzLnNlbGVjdENvbHVtbnNcbiAqIEBwYXJhbSB7VXNlQ29sbGVjdGlvblF1ZXJ5UGFyYW1WYWx1ZVtdfSBjYWNoZUtleXNcbiAqIEByZXR1cm5zIHtVc2VDb2xsZWN0aW9uUmV0dXJuVmFsdWV9XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBVc2VDb2xsZWN0aW9uU3RhdGVcbiAqIEBwcm9wZXJ0eSB7QmFzZU1vZGVsSW5zdGFuY2VbXSB8IHVuZGVmaW5lZH0gbW9kZWxzXG4gKiBAcHJvcGVydHkge251bWJlciB8IHVuZGVmaW5lZH0gb3ZlcmFsbENvdW50XG4gKiBAcHJvcGVydHkge1VzZUNvbGxlY3Rpb25EZWZhdWx0UGFyYW1zfSBxUGFyYW1zXG4gKiBAcHJvcGVydHkge01vZGVsQ29sbGVjdGlvbiB8IHVuZGVmaW5lZH0gcXVlcnlcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVhZHlUb0xvYWRcbiAqIEBwcm9wZXJ0eSB7Q29sbGVjdGlvblJlc3VsdCB8IHVuZGVmaW5lZH0gcmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZ1tdIHwgdW5kZWZpbmVkfSBzZWFyY2hQYXJhbXNcbiAqIEBwcm9wZXJ0eSB7ZmFsc2UgfCBpbXBvcnQoXCJyZWFjdFwiKS5SZWFjdE5vZGV9IHNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50XG4gKiBAcHJvcGVydHkge2ZhbHNlIHwgaW1wb3J0KFwicmVhY3RcIikuUmVhY3ROb2RlfSBzaG93Tm9SZWNvcmRzRm91bmRDb250ZW50XG4gKi9cblxuLyoqIEhvb2sgc3RhdGUgY29udGFpbmVyIGZvciB1c2VDb2xsZWN0aW9uLiAqL1xuLyoqIEBhdWdtZW50cyB7U2hhcGVIb29rPFVzZUNvbGxlY3Rpb25Ib29rUHJvcHMsIFVzZUNvbGxlY3Rpb25TdGF0ZT59ICovXG5jbGFzcyBVc2VDb2xsZWN0aW9uU2hhcGVIb29rIGV4dGVuZHMgU2hhcGVIb29rIHtcbiAgc3RhdGUgPSAvKiogQHR5cGUge1VzZUNvbGxlY3Rpb25TdGF0ZX0gKi8gKHtcbiAgICBtb2RlbHM6IHVuZGVmaW5lZCxcbiAgICBvdmVyYWxsQ291bnQ6IHVuZGVmaW5lZCxcbiAgICBxUGFyYW1zOiB7fSxcbiAgICBxdWVyeTogdW5kZWZpbmVkLFxuICAgIHJlYWR5VG9Mb2FkOiBmYWxzZSxcbiAgICByZXN1bHQ6IHVuZGVmaW5lZCxcbiAgICBzZWFyY2hQYXJhbXM6IHVuZGVmaW5lZCxcbiAgICBzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudDogZmFsc2UsXG4gICAgc2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudDogZmFsc2VcbiAgfSlcblxuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7VXNlQ29sbGVjdGlvbkhvb2tQcm9wc30gcHJvcHNcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpXG4gICAgdGhpcy5sb2FkTW9kZWxzR2VuZXJhdGlvbiA9IDBcbiAgICB0aGlzLmxvYWRPdmVyYWxsQ291bnRHZW5lcmF0aW9uID0gMFxuICAgIHRoaXMucXVlcnlQYXJhbXMgPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSAqL1xuICBxdWVyeU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucC5xdWVyeU5hbWUgfHwgZGlnZyh0aGlzLnAubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLCBcImNvbGxlY3Rpb25LZXlcIilcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSAqL1xuICBxdWVyeVBlcktleSgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5xdWVyeU5hbWUoKX1fcGVyYFxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9ICovXG4gIHF1ZXJ5UU5hbWUoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMucXVlcnlOYW1lKCl9X3FgXG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gKi9cbiAgcXVlcnlTTmFtZSgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5xdWVyeU5hbWUoKX1fc2BcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSAqL1xuICBxdWVyeVBhZ2VOYW1lKCkge1xuICAgIHJldHVybiBgJHt0aGlzLnF1ZXJ5TmFtZSgpfV9wYWdlYFxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtzdHJpbmd9ICovXG4gIG1vZGVsSWRzQ2FjaGVTdHJpbmcoKSB7XG4gICAgaWYgKHRoaXMucy5tb2RlbHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFwibW9kZWxzLXVuZGVmaW5lZFwiXG4gICAgfSBlbHNlIGlmICh0aGlzLnMubW9kZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwibm8tbW9kZWxzXCJcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucy5tb2RlbHMubWFwKChtb2RlbCkgPT4gbW9kZWwuY2FjaGVLZXkoKSk/LmpvaW4oXCItLS1cIilcbiAgICB9XG4gIH1cblxuICAvKiogQHJldHVybnMge0Z1bmN0aW9uICYge2NsZWFyPzogKCkgPT4gdm9pZH19ICovXG4gIGxvYWRNb2RlbHNEZWJvdW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZShcImxvYWRNb2RlbHNEZWJvdW5jZVwiLCAoKSA9PiBkZWJvdW5jZSgoKSA9PiB0aGlzLmxvYWRNb2RlbHMoKSkpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb1JlY29yZHNTdGF0ZUFyZ3N9IGFyZ3NcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudChhcmdzKSB7XG4gICAgbGV0IG1vZGVscywgb3ZlcmFsbENvdW50XG5cbiAgICBpZiAoYXJncy5tb2RlbHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW9kZWxzID0gYXJncy5tb2RlbHNcbiAgICB9IGVsc2UgaWYgKHRoaXMucy5tb2RlbHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW9kZWxzID0gdGhpcy5zLm1vZGVsc1xuICAgIH1cblxuICAgIGlmIChhcmdzLm92ZXJhbGxDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdmVyYWxsQ291bnQgPSBhcmdzLm92ZXJhbGxDb3VudFxuICAgIH0gZWxzZSBpZiAodGhpcy5zLm92ZXJhbGxDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdmVyYWxsQ291bnQgPSB0aGlzLnMub3ZlcmFsbENvdW50XG4gICAgfVxuXG4gICAgaWYgKG1vZGVscyA9PT0gdW5kZWZpbmVkIHx8IG92ZXJhbGxDb3VudCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMucC5ub1JlY29yZHNBdmFpbGFibGVDb250ZW50ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZVxuICAgIGlmIChtb2RlbHMubGVuZ3RoID09PSAwICYmIG92ZXJhbGxDb3VudCA9PT0gMCAmJiB0aGlzLnAubm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCkgcmV0dXJuIHRydWVcblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9SZWNvcmRzU3RhdGVBcmdzfSBhcmdzXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudChhcmdzKSB7XG4gICAgbGV0IG1vZGVscywgb3ZlcmFsbENvdW50XG5cbiAgICBpZiAoYXJncy5tb2RlbHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW9kZWxzID0gYXJncy5tb2RlbHNcbiAgICB9IGVsc2UgaWYgKHRoaXMucy5tb2RlbHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW9kZWxzID0gdGhpcy5zLm1vZGVsc1xuICAgIH1cblxuICAgIGlmIChhcmdzLm92ZXJhbGxDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdmVyYWxsQ291bnQgPSBhcmdzLm92ZXJhbGxDb3VudFxuICAgIH0gZWxzZSBpZiAodGhpcy5zLm92ZXJhbGxDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdmVyYWxsQ291bnQgPSB0aGlzLnMub3ZlcmFsbENvdW50XG4gICAgfVxuXG4gICAgaWYgKG1vZGVscyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMucC5ub1JlY29yZHNGb3VuZENvbnRlbnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlXG5cbiAgICAvLyBEb250IHNob3cgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCB0b2dldGhlciB3aXRoIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnRcbiAgICBpZiAobW9kZWxzLmxlbmd0aCA9PT0gMCAmJiBvdmVyYWxsQ291bnQgPT09IDAgJiYgdGhpcy5wLm5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQpIHJldHVybiBmYWxzZVxuICAgIGlmIChtb2RlbHMubGVuZ3RoID09PSAwICYmIHRoaXMucC5ub1JlY29yZHNGb3VuZENvbnRlbnQpIHJldHVybiB0cnVlXG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gKi9cbiAgbG9hZE92ZXJhbGxDb3VudCA9IGFzeW5jICgpID0+IHtcbiAgICAvLyBJZ25vcmUgbGF0ZSBvdmVyYWxsLWNvdW50IHJlc3BvbnNlcyBvbmNlIGEgbmV3ZXIgbG9hZCBjeWNsZSBoYXMgc3RhcnRlZCBvciB0aGUgaG9vayB1bm1vdW50ZWQuXG4gICAgY29uc3QgbG9hZE92ZXJhbGxDb3VudEdlbmVyYXRpb24gPSB0aGlzLmxvYWRPdmVyYWxsQ291bnRHZW5lcmF0aW9uICsgMVxuXG4gICAgdGhpcy5sb2FkT3ZlcmFsbENvdW50R2VuZXJhdGlvbiA9IGxvYWRPdmVyYWxsQ291bnRHZW5lcmF0aW9uXG5cbiAgICBjb25zdCBiYXNlUXVlcnkgPSB0aGlzLnAuY29sbGVjdGlvbiB8fCB0aGlzLnAubW9kZWxDbGFzcy5hbGwoKVxuICAgIGNvbnN0IG92ZXJhbGxDb3VudCA9IGF3YWl0IGJhc2VRdWVyeS5jb3VudCgpXG5cbiAgICBpZiAobG9hZE92ZXJhbGxDb3VudEdlbmVyYXRpb24gIT0gdGhpcy5sb2FkT3ZlcmFsbENvdW50R2VuZXJhdGlvbikgcmV0dXJuXG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIG92ZXJhbGxDb3VudCxcbiAgICAgIHNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50OiB0aGlzLnNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50KHtvdmVyYWxsQ291bnR9KSxcbiAgICAgIHNob3dOb1JlY29yZHNGb3VuZENvbnRlbnQ6IHRoaXMuc2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudCh7b3ZlcmFsbENvdW50fSlcbiAgICB9KVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt7cVBhcmFtczogVXNlQ29sbGVjdGlvbkRlZmF1bHRQYXJhbXMsIHNlYXJjaFBhcmFtczogc3RyaW5nW119fSAqL1xuICBsb2FkUVBhcmFtcygpIHtcbiAgICBsZXQgcVBhcmFtc1RvU2V0ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wLmRlZmF1bHRQYXJhbXMpXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gW11cblxuICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1zICYmIHRoaXMucXVlcnlRTmFtZSgpIGluIHRoaXMucXVlcnlQYXJhbXMpIHtcbiAgICAgIHFQYXJhbXNUb1NldCA9IEpTT04ucGFyc2UoZGlnZyh0aGlzLnF1ZXJ5UGFyYW1zLCB0aGlzLnF1ZXJ5UU5hbWUoKSkpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucXVlcnlQYXJhbXM/Llt0aGlzLnF1ZXJ5U05hbWUoKV0pIHtcbiAgICAgIGZvciAoY29uc3QgcmF3U2VhcmNoUGFyYW0gb2YgdGhpcy5xdWVyeVBhcmFtc1t0aGlzLnF1ZXJ5U05hbWUoKV0pIHtcbiAgICAgICAgY29uc3QgcGFyc2VkU2VhcmNoUGFyYW0gPSBKU09OLnBhcnNlKHJhd1NlYXJjaFBhcmFtKVxuXG4gICAgICAgIHNlYXJjaFBhcmFtcy5wdXNoKHBhcnNlZFNlYXJjaFBhcmFtKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgcVBhcmFtczogcVBhcmFtc1RvU2V0LFxuICAgICAgc2VhcmNoUGFyYW1zXG4gICAgfSlcblxuICAgIHJldHVybiB7XG4gICAgICBxUGFyYW1zOiBxUGFyYW1zVG9TZXQsXG4gICAgICBzZWFyY2hQYXJhbXNcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXVxuICAgKiBAcGFyYW0ge1VzZUNvbGxlY3Rpb25EZWZhdWx0UGFyYW1zfSBbYXJncy5xUGFyYW1zXVxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbYXJncy5zZWFyY2hQYXJhbXNdXG4gICAqIEByZXR1cm5zIHt7cVBhcmFtczogVXNlQ29sbGVjdGlvbkRlZmF1bHRQYXJhbXMsIHNlYXJjaFBhcmFtczogc3RyaW5nW119fVxuICAgKi9cbiAgbG9hZE1vZGVsc0FyZ3MoYXJncyA9IHt9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHFQYXJhbXM6IGFyZ3MucVBhcmFtcyA/PyB0aGlzLnMucVBhcmFtcyxcbiAgICAgIHNlYXJjaFBhcmFtczogYXJncy5zZWFyY2hQYXJhbXMgPz8gdGhpcy5zLnNlYXJjaFBhcmFtc1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdXG4gICAqIEBwYXJhbSB7VXNlQ29sbGVjdGlvbkRlZmF1bHRQYXJhbXN9IFthcmdzLnFQYXJhbXNdXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmdzLnNlYXJjaFBhcmFtc11cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBsb2FkTW9kZWxzID0gYXN5bmMgKGFyZ3MgPSB7fSkgPT4ge1xuICAgIC8vIE9ubHkgdGhlIG5ld2VzdCBjb2xsZWN0aW9uIHJlcXVlc3QgaXMgYWxsb3dlZCB0byB1cGRhdGUgc3RhdGUgYWZ0ZXIgbmF2aWdhdGlvbi9maWx0ZXIgY2hhbmdlcy5cbiAgICBjb25zdCBsb2FkTW9kZWxzR2VuZXJhdGlvbiA9IHRoaXMubG9hZE1vZGVsc0dlbmVyYXRpb24gKyAxXG4gICAgY29uc3Qge3FQYXJhbXMsIHNlYXJjaFBhcmFtc30gPSB0aGlzLmxvYWRNb2RlbHNBcmdzKGFyZ3MpXG5cbiAgICB0aGlzLmxvYWRNb2RlbHNHZW5lcmF0aW9uID0gbG9hZE1vZGVsc0dlbmVyYXRpb25cbiAgICBsZXQgcXVlcnkgPSB0aGlzLnAuY29sbGVjdGlvbj8uY2xvbmUoKSB8fCB0aGlzLnAubW9kZWxDbGFzcy5yYW5zYWNrKClcblxuICAgIGlmICh0aGlzLnAucGFnaW5hdGlvbikge1xuICAgICAgY29uc3QgcGFnZSA9IHRoaXMucXVlcnlQYXJhbXM/Llt0aGlzLnF1ZXJ5UGFnZU5hbWUoKV0gfHwgMVxuICAgICAgbGV0IHBlciA9IHRoaXMucXVlcnlQYXJhbXM/Llt0aGlzLnF1ZXJ5UGVyS2V5KCldIHx8IDMwXG5cbiAgICAgIGlmIChwZXIgPT0gXCJhbGxcIikge1xuICAgICAgICBwZXIgPSA5OTlfOTk5Xzk5OVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVyID0gTnVtYmVyKHBlcilcbiAgICAgIH1cblxuICAgICAgcXVlcnkucGFnZShwYWdlKS5wZXIocGVyKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnAuZ3JvdXBCeSkgcXVlcnkgPSBxdWVyeS5ncm91cEJ5KC4uLnRoaXMucC5ncm91cEJ5KVxuXG4gICAgcXVlcnkgPSBxdWVyeVxuICAgICAgLnJhbnNhY2soLyoqIEB0eXBlIHtpbXBvcnQoXCIuL2NvbGxlY3Rpb24uanNcIikuQ29sbGVjdGlvblJhbnNhY2tQYXJhbXN9ICovIChxUGFyYW1zKSlcbiAgICAgIC5zZWFyY2goc2VhcmNoUGFyYW1zKVxuICAgICAgLnNlYXJjaEtleSh0aGlzLnF1ZXJ5UU5hbWUoKSlcbiAgICAgIC5wYWdlS2V5KHRoaXMucXVlcnlQYWdlTmFtZSgpKVxuICAgICAgLnBlcktleSh0aGlzLnF1ZXJ5UGVyS2V5KCkpXG5cbiAgICBpZiAodGhpcy5wLmFiaWxpdGllcykgcXVlcnkuYWJpbGl0aWVzKHRoaXMucC5hYmlsaXRpZXMpXG4gICAgaWYgKHRoaXMucC5saW1pdCAhPT0gdW5kZWZpbmVkKSBxdWVyeS5saW1pdCh0aGlzLnAubGltaXQpXG4gICAgaWYgKHRoaXMucC5wcmVsb2FkcykgcXVlcnkucHJlbG9hZCh0aGlzLnAucHJlbG9hZHMpXG4gICAgaWYgKHRoaXMucC5yYW5zYWNrKSBxdWVyeS5yYW5zYWNrKHRoaXMucC5yYW5zYWNrKVxuICAgIGlmICh0aGlzLnAuc2VsZWN0KSBxdWVyeS5zZWxlY3QodGhpcy5wLnNlbGVjdClcbiAgICBpZiAodGhpcy5wLnNlbGVjdENvbHVtbnMpIHF1ZXJ5LnNlbGVjdENvbHVtbnModGhpcy5wLnNlbGVjdENvbHVtbnMpXG5cbiAgICBsZXQgcmVzdWx0XG5cbiAgICBpZiAodGhpcy5wLnF1ZXJ5TWV0aG9kKSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLnAucXVlcnlNZXRob2Qoe3F1ZXJ5fSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gYXdhaXQgcXVlcnkucmVzdWx0KClcbiAgICB9XG5cbiAgICBjb25zdCBtb2RlbHMgPSByZXN1bHQubW9kZWxzKClcblxuICAgIGlmIChsb2FkTW9kZWxzR2VuZXJhdGlvbiAhPSB0aGlzLmxvYWRNb2RlbHNHZW5lcmF0aW9uKSByZXR1cm5cblxuICAgIGlmICh0aGlzLnAub25Nb2RlbHNMb2FkZWQpIHtcbiAgICAgIHRoaXMucC5vbk1vZGVsc0xvYWRlZCh7XG4gICAgICAgIG1vZGVscyxcbiAgICAgICAgcVBhcmFtczogdGhpcy5zLnFQYXJhbXMsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICByZXN1bHRcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBtb2RlbHMsXG4gICAgICBxdWVyeSxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50OiB0aGlzLnNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50KHttb2RlbHN9KSxcbiAgICAgIHNob3dOb1JlY29yZHNGb3VuZENvbnRlbnQ6IHRoaXMuc2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudCh7bW9kZWxzfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7e21vZGVsOiBCYXNlTW9kZWxJbnN0YW5jZX19IGFyZ3MgKi9cbiAgb25Nb2RlbERlc3Ryb3llZChhcmdzKSB7XG4gICAgY29uc3QgZGVzdHJveWVkTW9kZWwgPSBkaWdnKGFyZ3MsIFwibW9kZWxcIilcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgbW9kZWxzOiB0aGlzLnMubW9kZWxzLmZpbHRlcigobW9kZWwpID0+IC8qKiBAdHlwZSB7QmFzZU1vZGVsV2l0aElkfSAqLyAobW9kZWwpLmlkKCkgIT0gLyoqIEB0eXBlIHtCYXNlTW9kZWxXaXRoSWR9ICovIChkZXN0cm95ZWRNb2RlbCkuaWQoKSlcbiAgICB9KVxuICB9XG5cbiAgLyoqIEBwYXJhbSB7e21vZGVsOiBCYXNlTW9kZWxJbnN0YW5jZX19IGFyZ3MgKi9cbiAgb25Nb2RlbFVwZGF0ZWQoYXJncykge1xuICAgIGNvbnN0IHVwZGF0ZWRNb2RlbCA9IGRpZ2coYXJncywgXCJtb2RlbFwiKVxuICAgIGNvbnN0IGZvdW5kTW9kZWwgPSB0aGlzLnMubW9kZWxzLmZpbmQoKG1vZGVsKSA9PiAvKiogQHR5cGUge0Jhc2VNb2RlbFdpdGhJZH0gKi8gKG1vZGVsKS5pZCgpID09IC8qKiBAdHlwZSB7QmFzZU1vZGVsV2l0aElkfSAqLyAodXBkYXRlZE1vZGVsKS5pZCgpKVxuXG4gICAgaWYgKGZvdW5kTW9kZWwpIHRoaXMubG9hZE1vZGVsc0RlYm91bmNlKCkoKVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHt2b2lkfSAqL1xuICBvbkNyZWF0ZWQoKSB7XG4gICAgdGhpcy5sb2FkTW9kZWxzRGVib3VuY2UoKSgpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9ICovXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMuc2V0U3RhdGUoe3JlYWR5VG9Mb2FkOiB0cnVlfSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gKi9cbiAgc2V0dXAoKSB7XG4gICAgdGhpcy5xdWVyeVBhcmFtcyA9IHVzZVF1ZXJ5UGFyYW1zKClcblxuICAgIC8vIFdhaXQgdW50aWwgY29tcG9uZW50RGlkTW91bnQgaGFzIGZsaXBwZWQgcmVhZHlUb0xvYWQgc28gdGhlIGZpcnN0IGxvYWQgcnVucyBhZnRlciB1c2VTaGFwZUhvb2sgaGFzIG1hcmtlZCB0aGUgaG9vayBtb3VudGVkLlxuICAgIHVzZUVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnMucmVhZHlUb0xvYWQpIHJldHVyblxuICAgICAgICBsZXQgaWZDb25kaXRpb25NZXRcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucC5pZkNvbmRpdGlvbiA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBpZkNvbmRpdGlvbk1ldCA9IHRoaXMucC5pZkNvbmRpdGlvbigpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wLmlmQ29uZGl0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZkNvbmRpdGlvbk1ldCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZkNvbmRpdGlvbk1ldCA9IHRoaXMucC5pZkNvbmRpdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlmQ29uZGl0aW9uTWV0KSB7XG4gICAgICAgICAgY29uc3Qge3FQYXJhbXMsIHNlYXJjaFBhcmFtc30gPSB0aGlzLmxvYWRRUGFyYW1zKClcblxuICAgICAgICAgIHRoaXMubG9hZE1vZGVscyh7cVBhcmFtcywgc2VhcmNoUGFyYW1zfSlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgdGhpcy5wLm1vZGVsQ2xhc3MsXG4gICAgICAgIHRoaXMucC5pZkNvbmRpdGlvbixcbiAgICAgICAgdGhpcy5xdWVyeU5hbWUoKSxcbiAgICAgICAgdGhpcy5xdWVyeVBhcmFtcz8uW3RoaXMucXVlcnlRTmFtZSgpXSxcbiAgICAgICAgdGhpcy5xdWVyeVBhcmFtcz8uW3RoaXMucXVlcnlQYWdlTmFtZSgpXSxcbiAgICAgICAgdGhpcy5xdWVyeVBhcmFtcz8uW3RoaXMucXVlcnlQZXJLZXkoKV0sXG4gICAgICAgIHRoaXMucXVlcnlQYXJhbXM/Llt0aGlzLnF1ZXJ5U05hbWUoKV0sXG4gICAgICAgIHRoaXMucy5yZWFkeVRvTG9hZCxcbiAgICAgICAgdGhpcy5wLmNvbGxlY3Rpb25cbiAgICAgIF0uY29uY2F0KHRoaXMucC5jYWNoZUtleXMpXG4gICAgKVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5zLnJlYWR5VG9Mb2FkKSByZXR1cm5cbiAgICAgIGlmICh0aGlzLnAubm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCkge1xuICAgICAgICB0aGlzLmxvYWRPdmVyYWxsQ291bnQoKVxuICAgICAgfVxuICAgIH0sIFt0aGlzLnAubW9kZWxDbGFzcywgdGhpcy5zLnJlYWR5VG9Mb2FkXSlcblxuICAgIHVzZUNyZWF0ZWRFdmVudCh0aGlzLnAubW9kZWxDbGFzcywgKCkgPT4gdGhpcy5vbkNyZWF0ZWQoKSlcblxuICAgIC8vIEludmFsaWRhdGUgYW55IGluLWZsaWdodCBhc3luYyByZXNwb25zZXMgc28gdW5tb3VudGVkIGhvb2tzIGNhbm5vdCB3cml0ZSBzdGFsZSBzdGF0ZS5cbiAgICB1c2VFZmZlY3QoKCkgPT4gKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkTW9kZWxzR2VuZXJhdGlvbiArPSAxXG4gICAgICB0aGlzLmxvYWRPdmVyYWxsQ291bnRHZW5lcmF0aW9uICs9IDFcbiAgICAgIHRoaXMubG9hZE1vZGVsc0RlYm91bmNlKCkuY2xlYXI/LigpXG4gICAgfSwgW10pXG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY29ubmVjdGlvbnMgPSBbXVxuXG4gICAgICBpZiAodGhpcy5zLm1vZGVscykge1xuICAgICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIHRoaXMucy5tb2RlbHMpIHtcbiAgICAgICAgICBjb25uZWN0aW9ucy5wdXNoKE1vZGVsRXZlbnRzLmNvbm5lY3RVcGRhdGVkKG1vZGVsLCAoYXJncykgPT4gdGhpcy5vbk1vZGVsVXBkYXRlZChhcmdzKSkpXG4gICAgICAgICAgY29ubmVjdGlvbnMucHVzaChNb2RlbEV2ZW50cy5jb25uZWN0RGVzdHJveWVkKG1vZGVsLCAoYXJncykgPT4gdGhpcy5vbk1vZGVsRGVzdHJveWVkKGFyZ3MpKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbm5lY3Rpb24gb2YgY29ubmVjdGlvbnMpIHtcbiAgICAgICAgICBjb25uZWN0aW9uLnVuc3Vic2NyaWJlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIFt0aGlzLm1vZGVsSWRzQ2FjaGVTdHJpbmcoKV0pXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge1VzZUNvbGxlY3Rpb25Ib29rUHJvcHN9IHByb3BzXG4gKiBAcGFyYW0ge1VzZUNvbGxlY3Rpb25RdWVyeVBhcmFtVmFsdWVbXX0gW2NhY2hlS2V5c11cbiAqIEByZXR1cm5zIHtVc2VDb2xsZWN0aW9uUmV0dXJuVmFsdWV9XG4gKi9cbmNvbnN0IHVzZUNvbGxlY3Rpb24gPSAocHJvcHMsIGNhY2hlS2V5cyA9IFtdKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhYmlsaXRpZXMsXG4gICAgY29sbGVjdGlvbixcbiAgICBkZWZhdWx0UGFyYW1zLFxuICAgIGdyb3VwQnksXG4gICAgaWZDb25kaXRpb24sXG4gICAgbGltaXQsXG4gICAgbW9kZWxDbGFzcyxcbiAgICBub1JlY29yZHNBdmFpbGFibGVDb250ZW50ID0gdW5kZWZpbmVkLFxuICAgIG5vUmVjb3Jkc0ZvdW5kQ29udGVudCA9IHVuZGVmaW5lZCxcbiAgICBvbk1vZGVsc0xvYWRlZCxcbiAgICBwYWdpbmF0aW9uID0gZmFsc2UsXG4gICAgcHJlbG9hZHMgPSBbXSxcbiAgICBxdWVyeU1ldGhvZCxcbiAgICBxdWVyeU5hbWUsXG4gICAgcmFuc2FjayxcbiAgICBzZWxlY3QgPSB7fSxcbiAgICBzZWxlY3RDb2x1bW5zLFxuICAgIC4uLnJlc3RQcm9wc1xuICB9ID0gcHJvcHNcblxuICBpZiAoT2JqZWN0LmtleXMocmVzdFByb3BzKS5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHByb3BzIGdpdmVuIHRvIHVzZUNvbGxlY3Rpb246ICR7T2JqZWN0LmtleXMocmVzdFByb3BzKS5qb2luKFwiLCBcIil9YClcbiAgfVxuXG4gIGNvbnN0IHNoYXBlSG9vayA9IHVzZVNoYXBlSG9vayhVc2VDb2xsZWN0aW9uU2hhcGVIb29rLCB7XG4gICAgYWJpbGl0aWVzLFxuICAgIGNhY2hlS2V5cyxcbiAgICBjb2xsZWN0aW9uLFxuICAgIGRlZmF1bHRQYXJhbXMsXG4gICAgZ3JvdXBCeSxcbiAgICBpZkNvbmRpdGlvbixcbiAgICBsaW1pdCxcbiAgICBtb2RlbENsYXNzLFxuICAgIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQsXG4gICAgbm9SZWNvcmRzRm91bmRDb250ZW50LFxuICAgIG9uTW9kZWxzTG9hZGVkLFxuICAgIHBhZ2luYXRpb24sXG4gICAgcHJlbG9hZHMsXG4gICAgcXVlcnlNZXRob2QsXG4gICAgcXVlcnlOYW1lLFxuICAgIHJhbnNhY2ssXG4gICAgc2VsZWN0LFxuICAgIHNlbGVjdENvbHVtbnNcbiAgfSlcbiAgY29uc3QgcmVzdWx0ID0gLyoqIEB0eXBlIHtVc2VDb2xsZWN0aW9uUmV0dXJuVmFsdWV9ICovICh7XG4gICAgLi4uc2hhcGVIb29rLnN0YXRlLFxuICAgIG1vZGVsSWRzQ2FjaGVTdHJpbmc6IHNoYXBlSG9vay5tb2RlbElkc0NhY2hlU3RyaW5nKCksXG4gICAgcXVlcnlOYW1lOiBzaGFwZUhvb2sucXVlcnlOYW1lKCksXG4gICAgcXVlcnlQZXJLZXk6IHNoYXBlSG9vay5xdWVyeVBlcktleSgpLFxuICAgIHF1ZXJ5UU5hbWU6IHNoYXBlSG9vay5xdWVyeVFOYW1lKCksXG4gICAgcXVlcnlTTmFtZTogc2hhcGVIb29rLnF1ZXJ5U05hbWUoKSxcbiAgICBxdWVyeVBhZ2VOYW1lOiBzaGFwZUhvb2sucXVlcnlQYWdlTmFtZSgpXG4gIH0pXG4gIGNvbnN0IG1vZGVsVmFyaWFibGVOYW1lID0gaW5mbGVjdGlvbi5wbHVyYWxpemUoaW5mbGVjdGlvbi5jYW1lbGl6ZShzaGFwZUhvb2sucC5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZSwgdHJ1ZSkpXG5cbiAgcmVzdWx0W21vZGVsVmFyaWFibGVOYW1lXSA9IHNoYXBlSG9vay5zLm1vZGVsc1xuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlQ29sbGVjdGlvblxuIl19
@@ -1,16 +1,125 @@
1
1
  export default ApiMakerUseCreatedEvent;
2
+ export type ModelClassType = typeof import("./base-model.js").default;
3
+ export type BaseModel = {
4
+ abilities: import("./base-model.js").ModelAbilityMap;
5
+ changes: import("./base-model.js").ModelDataMap;
6
+ collection: import("./collection.js").default<any>;
7
+ _identifierKey: string | number;
8
+ _markedForDestruction: boolean;
9
+ modelData: import("./base-model.js").ModelDataMap;
10
+ newRecord: boolean;
11
+ previousModelData: any;
12
+ preloadedRelationships: import("./base-model.js").PreloadedRelationshipMap;
13
+ relationshipsCache: import("./base-model.js").LoadedRelationshipMap;
14
+ relationships: import("./base-model.js").LoadedRelationshipMap;
15
+ uniqueKeyValue: number;
16
+ assignAttributes(newAttributes: ModelDataMap): void;
17
+ attributes(): ModelDataMap;
18
+ can(givenAbilityName: string): boolean;
19
+ clone(): /*elided*/ any;
20
+ cacheKey(): number | string;
21
+ localCacheKey(): string;
22
+ fullCacheKey(): string;
23
+ create(attributes?: ModelDataMap, options?: ParseValidationErrorsOptions): Promise<{
24
+ model: /*elided*/ any;
25
+ response: ModelCommandResponse;
26
+ }>;
27
+ createRaw(rawData: RawDataInput, options?: ParseValidationErrorsOptions): Promise<{
28
+ model: /*elided*/ any;
29
+ response: ModelCommandResponse;
30
+ }>;
31
+ destroy(): Promise<{
32
+ model: /*elided*/ any;
33
+ response: ModelCommandResponse;
34
+ }>;
35
+ ensureAbilities(listOfAbilities: string[]): Promise<void>;
36
+ getAttributes(): ModelDataMap;
37
+ handleResponseError(response: ModelCommandResponse): never;
38
+ identifierKey(): number | string;
39
+ isAssociationLoaded(associationName: string): boolean;
40
+ isAssociationLoadedUnderscore(associationNameUnderscore: string): boolean;
41
+ isAssociationPresent(associationName: string): boolean;
42
+ ensureAssociationLoaded(associationName: string): Promise<LoadedRelationshipValue>;
43
+ ensureAssociationLoadedUnderscore(associationNameUnderscore: string): Promise<LoadedRelationshipValue>;
44
+ isAttributeChanged(attributeName: string): boolean;
45
+ isChanged(): boolean;
46
+ isNewRecord(): boolean;
47
+ isPersisted(): boolean;
48
+ savedChangeToAttribute(attributeName: string): boolean;
49
+ setNewModel(model: /*elided*/ any): void;
50
+ setNewModelData(model: /*elided*/ any): void;
51
+ _isDateChanged(oldValue: ModelValue | null | undefined, newValue: ModelValue | null | undefined): boolean | void;
52
+ _isIntegerChanged(oldValue: ModelValue | null | undefined, newValue: ModelValue | null | undefined): boolean | void;
53
+ _isStringChanged(oldValue: ModelValue | null | undefined, newValue: ModelValue | null | undefined): boolean | void;
54
+ modelClassData(): ModelClassDataType;
55
+ reload(): Promise<void>;
56
+ save(): Promise<{
57
+ model: /*elided*/ any;
58
+ response?: object;
59
+ }>;
60
+ saveRaw(rawData: RawDataInput, options?: ParseValidationErrorsOptions & {
61
+ simpleModelErrors?: boolean;
62
+ }): Promise<{
63
+ model: /*elided*/ any;
64
+ response: ModelCommandResponse;
65
+ }>;
66
+ update(newAttributes?: ModelDataMap, options?: ParseValidationErrorsOptions): Promise<{
67
+ model: /*elided*/ any;
68
+ response?: object;
69
+ }>;
70
+ _refreshModelFromResponse(response: ModelCommandResponse): void;
71
+ _refreshModelDataFromResponse(response: ModelCommandResponse): void;
72
+ updateRaw(rawData: RawDataInput, options?: ParseValidationErrorsOptions & {
73
+ simpleModelErrors?: boolean;
74
+ }): Promise<{
75
+ response: ModelCommandResponse;
76
+ model: /*elided*/ any;
77
+ }>;
78
+ isValid(): never;
79
+ isValidOnServer(): Promise<{
80
+ valid: boolean;
81
+ errors: ValidationResponseErrors;
82
+ }>;
83
+ modelClass(): BaseModelClassType;
84
+ preloadRelationship(relationshipName: string, model: /*elided*/ any | /*elided*/ any[] | null): void;
85
+ markForDestruction(): void;
86
+ markedForDestruction(): boolean;
87
+ uniqueKey(): number;
88
+ _callMemberCommand(args: ModelCommandDescriptor, commandArgs: ModelCommandOptions): import("./command-execution.js").default;
89
+ readAttribute(attributeName: string): ModelValue | null | undefined;
90
+ readAttributeUnderscore(attributeName: string): ModelValue | null | undefined;
91
+ isAttributeLoaded(attributeName: string): boolean;
92
+ _isPresent(value: ModelValue | null | undefined): boolean;
93
+ _loadBelongsToReflection(args: RelationshipLoadArgs, queryArgs?: import("./collection.js").QueryArgsType): Promise</*elided*/ any | null>;
94
+ _readBelongsToReflection({ reflectionName }: RelationshipLoadArgs): /*elided*/ any | null;
95
+ _loadHasManyReflection(args: RelationshipLoadArgs, queryArgs?: import("./collection.js").QueryArgsType): Promise</*elided*/ any[]>;
96
+ _loadHasOneReflection(args: RelationshipLoadArgs, queryArgs?: import("./collection.js").QueryArgsType): Promise</*elided*/ any | null>;
97
+ _readHasOneReflection({ reflectionName }: RelationshipLoadArgs): /*elided*/ any | null;
98
+ _readModelDataFromArgs(args?: BaseModelArgsObject): void;
99
+ _readPreloadedRelationships(preloaded: {
100
+ getModel: (relationshipType: string, relationshipId: number | string) => /*elided*/ any;
101
+ }): void;
102
+ primaryKey(): number | string;
103
+ };
104
+ export type CreatedEventPayload = {
105
+ model: BaseModel;
106
+ };
107
+ export type UseCreatedEventArgs = {
108
+ active?: boolean;
109
+ debounce?: boolean | number;
110
+ onConnected?: () => void;
111
+ };
112
+ export type EventCallback = (payload: CreatedEventPayload) => void;
113
+ /** @typedef {typeof import("./base-model.js").default} ModelClassType */
114
+ /** @typedef {import("./base-model.js").default} BaseModel */
115
+ /** @typedef {{model: BaseModel}} CreatedEventPayload */
116
+ /** @typedef {{active?: boolean, debounce?: boolean|number, onConnected?: () => void}} UseCreatedEventArgs */
117
+ /** @typedef {(payload: CreatedEventPayload) => void} EventCallback */
2
118
  /**
3
- * @param {Function} modelClass
4
- * @param {Function} onCreated
5
- * @param {object} [args]
6
- * @param {boolean} [args.active]
7
- * @param {number} [args.debounce]
8
- * @param {Function} [args.onConnected]
119
+ * @param {ModelClassType} modelClass
120
+ * @param {EventCallback} onCreated
121
+ * @param {UseCreatedEventArgs} [args]
9
122
  * @returns {void}
10
123
  */
11
- declare function ApiMakerUseCreatedEvent(modelClass: Function, onCreated: Function, args?: {
12
- active?: boolean;
13
- debounce?: number;
14
- onConnected?: Function;
15
- }): void;
124
+ declare function ApiMakerUseCreatedEvent(modelClass: ModelClassType, onCreated: EventCallback, args?: UseCreatedEventArgs): void;
16
125
  //# sourceMappingURL=use-created-event.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-created-event.d.ts","sourceRoot":"/src/","sources":["use-created-event.js"],"names":[],"mappings":";AAEA;;;;;;;;GAQG;AACH,2FALG;IAAuB,MAAM,GAArB,OAAO;IACO,QAAQ,GAAtB,MAAM;IACU,WAAW;CACnC,GAAU,IAAI,CAQhB"}
1
+ {"version":3,"file":"use-created-event.d.ts","sourceRoot":"/src/","sources":["use-created-event.js"],"names":[],"mappings":";6BAGc,cAAc,iBAAiB,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAqByp4B,CAAC;;;yBAA6O,CAAC;;;;;;;gBAAoc,CAAC;;;;;yBAAm7E,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAnBzy+B;IAAC,KAAK,EAAE,SAAS,CAAA;CAAC;kCAClB;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,GAAC,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;CAAC;4BACvE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI;AAJpD,yEAAyE;AACzE,6DAA6D;AAC7D,wDAAwD;AACxD,6GAA6G;AAC7G,sEAAsE;AAEtE;;;;;GAKG;AACH,qDALW,cAAc,aACd,aAAa,SACb,mBAAmB,GACjB,IAAI,CAQhB"}
@@ -1,15 +1,18 @@
1
+ // @ts-check
1
2
  import useModelClassEvent from "./use-model-class-event.js";
3
+ /** @typedef {typeof import("./base-model.js").default} ModelClassType */
4
+ /** @typedef {import("./base-model.js").default} BaseModel */
5
+ /** @typedef {{model: BaseModel}} CreatedEventPayload */
6
+ /** @typedef {{active?: boolean, debounce?: boolean|number, onConnected?: () => void}} UseCreatedEventArgs */
7
+ /** @typedef {(payload: CreatedEventPayload) => void} EventCallback */
2
8
  /**
3
- * @param {Function} modelClass
4
- * @param {Function} onCreated
5
- * @param {object} [args]
6
- * @param {boolean} [args.active]
7
- * @param {number} [args.debounce]
8
- * @param {Function} [args.onConnected]
9
+ * @param {ModelClassType} modelClass
10
+ * @param {EventCallback} onCreated
11
+ * @param {UseCreatedEventArgs} [args]
9
12
  * @returns {void}
10
13
  */
11
14
  const ApiMakerUseCreatedEvent = (modelClass, onCreated, args = { active: true, debounce: 0, onConnected: undefined }) => {
12
15
  useModelClassEvent(modelClass, "creates", onCreated, args);
13
16
  };
14
17
  export default ApiMakerUseCreatedEvent;
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNyZWF0ZWQtZXZlbnQuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInVzZS1jcmVhdGVkLWV2ZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sa0JBQWtCLE1BQU0sNEJBQTRCLENBQUE7QUFFM0Q7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLHVCQUF1QixHQUFHLENBQzlCLFVBQVUsRUFDVixTQUFTLEVBQ1QsSUFBSSxHQUFHLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUMsRUFDMUQsRUFBRTtJQUNGLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFBO0FBQzVELENBQUMsQ0FBQTtBQUVELGVBQWUsdUJBQXVCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdXNlTW9kZWxDbGFzc0V2ZW50IGZyb20gXCIuL3VzZS1tb2RlbC1jbGFzcy1ldmVudC5qc1wiXG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gbW9kZWxDbGFzc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gb25DcmVhdGVkXG4gKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmFjdGl2ZV1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5kZWJvdW5jZV1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFthcmdzLm9uQ29ubmVjdGVkXVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IEFwaU1ha2VyVXNlQ3JlYXRlZEV2ZW50ID0gKFxuICBtb2RlbENsYXNzLFxuICBvbkNyZWF0ZWQsXG4gIGFyZ3MgPSB7YWN0aXZlOiB0cnVlLCBkZWJvdW5jZTogMCwgb25Db25uZWN0ZWQ6IHVuZGVmaW5lZH1cbikgPT4ge1xuICB1c2VNb2RlbENsYXNzRXZlbnQobW9kZWxDbGFzcywgXCJjcmVhdGVzXCIsIG9uQ3JlYXRlZCwgYXJncylcbn1cblxuZXhwb3J0IGRlZmF1bHQgQXBpTWFrZXJVc2VDcmVhdGVkRXZlbnRcbiJdfQ==
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNyZWF0ZWQtZXZlbnQuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInVzZS1jcmVhdGVkLWV2ZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFDWixPQUFPLGtCQUFrQixNQUFNLDRCQUE0QixDQUFBO0FBRTNELHlFQUF5RTtBQUN6RSw2REFBNkQ7QUFDN0Qsd0RBQXdEO0FBQ3hELDZHQUE2RztBQUM3RyxzRUFBc0U7QUFFdEU7Ozs7O0dBS0c7QUFDSCxNQUFNLHVCQUF1QixHQUFHLENBQzlCLFVBQVUsRUFDVixTQUFTLEVBQ1QsSUFBSSxHQUFHLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUMsRUFDMUQsRUFBRTtJQUNGLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFBO0FBQzVELENBQUMsQ0FBQTtBQUVELGVBQWUsdUJBQXVCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcbmltcG9ydCB1c2VNb2RlbENsYXNzRXZlbnQgZnJvbSBcIi4vdXNlLW1vZGVsLWNsYXNzLWV2ZW50LmpzXCJcblxuLyoqIEB0eXBlZGVmIHt0eXBlb2YgaW1wb3J0KFwiLi9iYXNlLW1vZGVsLmpzXCIpLmRlZmF1bHR9IE1vZGVsQ2xhc3NUeXBlICovXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0fSBCYXNlTW9kZWwgKi9cbi8qKiBAdHlwZWRlZiB7e21vZGVsOiBCYXNlTW9kZWx9fSBDcmVhdGVkRXZlbnRQYXlsb2FkICovXG4vKiogQHR5cGVkZWYge3thY3RpdmU/OiBib29sZWFuLCBkZWJvdW5jZT86IGJvb2xlYW58bnVtYmVyLCBvbkNvbm5lY3RlZD86ICgpID0+IHZvaWR9fSBVc2VDcmVhdGVkRXZlbnRBcmdzICovXG4vKiogQHR5cGVkZWYgeyhwYXlsb2FkOiBDcmVhdGVkRXZlbnRQYXlsb2FkKSA9PiB2b2lkfSBFdmVudENhbGxiYWNrICovXG5cbi8qKlxuICogQHBhcmFtIHtNb2RlbENsYXNzVHlwZX0gbW9kZWxDbGFzc1xuICogQHBhcmFtIHtFdmVudENhbGxiYWNrfSBvbkNyZWF0ZWRcbiAqIEBwYXJhbSB7VXNlQ3JlYXRlZEV2ZW50QXJnc30gW2FyZ3NdXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgQXBpTWFrZXJVc2VDcmVhdGVkRXZlbnQgPSAoXG4gIG1vZGVsQ2xhc3MsXG4gIG9uQ3JlYXRlZCxcbiAgYXJncyA9IHthY3RpdmU6IHRydWUsIGRlYm91bmNlOiAwLCBvbkNvbm5lY3RlZDogdW5kZWZpbmVkfVxuKSA9PiB7XG4gIHVzZU1vZGVsQ2xhc3NFdmVudChtb2RlbENsYXNzLCBcImNyZWF0ZXNcIiwgb25DcmVhdGVkLCBhcmdzKVxufVxuXG5leHBvcnQgZGVmYXVsdCBBcGlNYWtlclVzZUNyZWF0ZWRFdmVudFxuIl19
@@ -1,12 +1,12 @@
1
1
  export default UseCurrentUserContext;
2
2
  /**
3
3
  * @param {object} props
4
- * @param {Function} props.children
4
+ * @param {import("react").ReactNode} props.children
5
5
  * @param {string} [props.scope]
6
6
  * @returns {import("react").ReactNode}
7
7
  */
8
8
  declare function UseCurrentUserContext(props: {
9
- children: Function;
9
+ children: import("react").ReactNode;
10
10
  scope?: string;
11
11
  }): import("react").ReactNode;
12
12
  //# sourceMappingURL=use-current-user-context.d.ts.map