payload 3.0.0-alpha.3 → 3.0.0-alpha.30

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 (774) hide show
  1. package/auth.d.ts +5 -5
  2. package/auth.js +5 -44
  3. package/bin.js +40 -1
  4. package/components.d.ts +14 -0
  5. package/components.js +71 -0
  6. package/config.d.ts +10 -10
  7. package/config.js +10 -59
  8. package/database.d.ts +22 -22
  9. package/database.js +21 -108
  10. package/dist/admin/RichText.d.ts +4 -4
  11. package/dist/admin/RichText.d.ts.map +1 -1
  12. package/dist/admin/RichText.js +2 -5
  13. package/dist/admin/elements/Cell.d.ts +2 -2
  14. package/dist/admin/elements/Cell.d.ts.map +1 -1
  15. package/dist/admin/elements/Cell.js +2 -5
  16. package/dist/admin/elements/DatePicker.js +2 -5
  17. package/dist/admin/elements/PreviewButton.js +2 -5
  18. package/dist/admin/elements/PublishButton.js +2 -5
  19. package/dist/admin/elements/SaveButton.js +2 -5
  20. package/dist/admin/elements/SaveDraftButton.js +2 -5
  21. package/dist/admin/elements/Tab.d.ts +3 -3
  22. package/dist/admin/elements/Tab.d.ts.map +1 -1
  23. package/dist/admin/elements/Tab.js +2 -5
  24. package/dist/admin/forms/Error.js +2 -5
  25. package/dist/admin/forms/FieldDescription.js +2 -5
  26. package/dist/admin/forms/FieldTypes.js +2 -5
  27. package/dist/admin/forms/Form.d.ts +22 -0
  28. package/dist/admin/forms/Form.d.ts.map +1 -1
  29. package/dist/admin/forms/Form.js +2 -5
  30. package/dist/admin/forms/Label.js +2 -5
  31. package/dist/admin/forms/RowLabel.d.ts +1 -1
  32. package/dist/admin/forms/RowLabel.d.ts.map +1 -1
  33. package/dist/admin/forms/RowLabel.js +2 -5
  34. package/dist/admin/types.d.ts +19 -18
  35. package/dist/admin/types.d.ts.map +1 -1
  36. package/dist/admin/types.js +2 -5
  37. package/dist/admin/views/types.d.ts +41 -0
  38. package/dist/admin/views/types.d.ts.map +1 -0
  39. package/dist/admin/views/types.js +3 -0
  40. package/dist/assets/assets.d.js +0 -1
  41. package/dist/auth/baseFields/accountLock.d.ts +1 -1
  42. package/dist/auth/baseFields/accountLock.d.ts.map +1 -1
  43. package/dist/auth/baseFields/accountLock.js +6 -16
  44. package/dist/auth/baseFields/apiKey.d.ts +1 -1
  45. package/dist/auth/baseFields/apiKey.d.ts.map +1 -1
  46. package/dist/auth/baseFields/apiKey.js +6 -21
  47. package/dist/auth/baseFields/auth.d.ts +1 -1
  48. package/dist/auth/baseFields/auth.d.ts.map +1 -1
  49. package/dist/auth/baseFields/auth.js +6 -16
  50. package/dist/auth/baseFields/verification.d.ts +1 -1
  51. package/dist/auth/baseFields/verification.d.ts.map +1 -1
  52. package/dist/auth/baseFields/verification.js +8 -18
  53. package/dist/auth/cookies.d.ts +2 -2
  54. package/dist/auth/cookies.d.ts.map +1 -1
  55. package/dist/auth/cookies.js +6 -33
  56. package/dist/auth/crypto.js +7 -30
  57. package/dist/auth/defaultAccess.d.ts +1 -1
  58. package/dist/auth/defaultAccess.d.ts.map +1 -1
  59. package/dist/auth/defaultAccess.js +2 -12
  60. package/dist/auth/defaultUser.d.ts +1 -1
  61. package/dist/auth/defaultUser.d.ts.map +1 -1
  62. package/dist/auth/defaultUser.js +6 -16
  63. package/dist/auth/executeAccess.d.ts +2 -2
  64. package/dist/auth/executeAccess.d.ts.map +1 -1
  65. package/dist/auth/executeAccess.js +5 -15
  66. package/dist/auth/extractJWT.d.ts +1 -1
  67. package/dist/auth/extractJWT.d.ts.map +1 -1
  68. package/dist/auth/extractJWT.js +4 -14
  69. package/dist/auth/getAccessResults.d.ts +2 -2
  70. package/dist/auth/getAccessResults.d.ts.map +1 -1
  71. package/dist/auth/getAccessResults.js +9 -19
  72. package/dist/auth/getAuthenticatedUser.d.ts +1 -1
  73. package/dist/auth/getAuthenticatedUser.d.ts.map +1 -1
  74. package/dist/auth/getAuthenticatedUser.js +2 -12
  75. package/dist/auth/getFieldsToSign.d.ts +2 -2
  76. package/dist/auth/getFieldsToSign.d.ts.map +1 -1
  77. package/dist/auth/getFieldsToSign.js +5 -15
  78. package/dist/auth/index.d.ts +3 -3
  79. package/dist/auth/index.d.ts.map +1 -1
  80. package/dist/auth/index.js +4 -27
  81. package/dist/auth/isLocked.js +2 -12
  82. package/dist/auth/operations/access.d.ts +2 -2
  83. package/dist/auth/operations/access.d.ts.map +1 -1
  84. package/dist/auth/operations/access.js +12 -22
  85. package/dist/auth/operations/forgotPassword.d.ts +2 -2
  86. package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
  87. package/dist/auth/operations/forgotPassword.js +17 -32
  88. package/dist/auth/operations/init.d.ts +1 -1
  89. package/dist/auth/operations/init.d.ts.map +1 -1
  90. package/dist/auth/operations/init.js +2 -12
  91. package/dist/auth/operations/local/forgotPassword.d.ts +3 -3
  92. package/dist/auth/operations/local/forgotPassword.d.ts.map +1 -1
  93. package/dist/auth/operations/local/forgotPassword.js +8 -18
  94. package/dist/auth/operations/local/index.d.ts +5 -5
  95. package/dist/auth/operations/local/index.d.ts.map +1 -1
  96. package/dist/auth/operations/local/index.js +12 -27
  97. package/dist/auth/operations/local/login.d.ts +4 -4
  98. package/dist/auth/operations/local/login.d.ts.map +1 -1
  99. package/dist/auth/operations/local/login.js +8 -18
  100. package/dist/auth/operations/local/resetPassword.d.ts +4 -4
  101. package/dist/auth/operations/local/resetPassword.d.ts.map +1 -1
  102. package/dist/auth/operations/local/resetPassword.js +8 -18
  103. package/dist/auth/operations/local/unlock.d.ts +3 -3
  104. package/dist/auth/operations/local/unlock.d.ts.map +1 -1
  105. package/dist/auth/operations/local/unlock.js +8 -18
  106. package/dist/auth/operations/local/verifyEmail.d.ts +3 -3
  107. package/dist/auth/operations/local/verifyEmail.d.ts.map +1 -1
  108. package/dist/auth/operations/local/verifyEmail.js +8 -18
  109. package/dist/auth/operations/login.d.ts +7 -7
  110. package/dist/auth/operations/login.d.ts.map +1 -1
  111. package/dist/auth/operations/login.js +32 -47
  112. package/dist/auth/operations/logout.d.ts +2 -2
  113. package/dist/auth/operations/logout.d.ts.map +1 -1
  114. package/dist/auth/operations/logout.js +6 -21
  115. package/dist/auth/operations/me.d.ts +3 -3
  116. package/dist/auth/operations/me.d.ts.map +1 -1
  117. package/dist/auth/operations/me.js +4 -19
  118. package/dist/auth/operations/refresh.d.ts +3 -3
  119. package/dist/auth/operations/refresh.d.ts.map +1 -1
  120. package/dist/auth/operations/refresh.js +19 -34
  121. package/dist/auth/operations/registerFirstUser.d.ts +9 -9
  122. package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
  123. package/dist/auth/operations/registerFirstUser.js +11 -21
  124. package/dist/auth/operations/resetPassword.d.ts +2 -2
  125. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  126. package/dist/auth/operations/resetPassword.js +20 -43
  127. package/dist/auth/operations/unlock.d.ts +2 -2
  128. package/dist/auth/operations/unlock.d.ts.map +1 -1
  129. package/dist/auth/operations/unlock.js +16 -39
  130. package/dist/auth/operations/verifyEmail.d.ts +2 -2
  131. package/dist/auth/operations/verifyEmail.d.ts.map +1 -1
  132. package/dist/auth/operations/verifyEmail.js +14 -37
  133. package/dist/auth/sendVerificationEmail.d.ts +5 -5
  134. package/dist/auth/sendVerificationEmail.d.ts.map +1 -1
  135. package/dist/auth/sendVerificationEmail.js +4 -14
  136. package/dist/auth/strategies/apiKey.d.ts +2 -2
  137. package/dist/auth/strategies/apiKey.d.ts.map +1 -1
  138. package/dist/auth/strategies/apiKey.js +4 -19
  139. package/dist/auth/strategies/jwt.d.ts +1 -1
  140. package/dist/auth/strategies/jwt.d.ts.map +1 -1
  141. package/dist/auth/strategies/jwt.js +6 -21
  142. package/dist/auth/strategies/local/authenticate.d.ts +1 -1
  143. package/dist/auth/strategies/local/authenticate.d.ts.map +1 -1
  144. package/dist/auth/strategies/local/authenticate.js +6 -21
  145. package/dist/auth/strategies/local/generatePasswordSaltHash.js +7 -22
  146. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts +3 -3
  147. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts.map +1 -1
  148. package/dist/auth/strategies/local/incrementLoginAttempts.js +2 -12
  149. package/dist/auth/strategies/local/register.d.ts +3 -3
  150. package/dist/auth/strategies/local/register.d.ts.map +1 -1
  151. package/dist/auth/strategies/local/register.js +6 -16
  152. package/dist/auth/strategies/local/resetLoginAttempts.d.ts +3 -3
  153. package/dist/auth/strategies/local/resetLoginAttempts.d.ts.map +1 -1
  154. package/dist/auth/strategies/local/resetLoginAttempts.js +2 -12
  155. package/dist/auth/types.d.ts +2 -2
  156. package/dist/auth/types.d.ts.map +1 -1
  157. package/dist/auth/types.js +2 -12
  158. package/dist/bin/generateTypes.d.ts +1 -1
  159. package/dist/bin/generateTypes.d.ts.map +1 -1
  160. package/dist/bin/generateTypes.js +12 -27
  161. package/dist/bin/index.js +11 -53
  162. package/dist/bin/loadEnv.js +13 -26
  163. package/dist/bin/migrate.js +15 -30
  164. package/dist/collections/config/build.d.ts +1 -1
  165. package/dist/collections/config/build.d.ts.map +1 -1
  166. package/dist/collections/config/build.js +2 -12
  167. package/dist/collections/config/defaults.d.ts +5 -5
  168. package/dist/collections/config/defaults.js +9 -32
  169. package/dist/collections/config/sanitize.d.ts +2 -2
  170. package/dist/collections/config/sanitize.d.ts.map +1 -1
  171. package/dist/collections/config/sanitize.js +34 -49
  172. package/dist/collections/config/schema.js +157 -172
  173. package/dist/collections/config/types.d.ts +13 -13
  174. package/dist/collections/config/types.d.ts.map +1 -1
  175. package/dist/collections/config/types.js +2 -5
  176. package/dist/collections/dataloader.d.ts +2 -2
  177. package/dist/collections/dataloader.d.ts.map +1 -1
  178. package/dist/collections/dataloader.js +8 -23
  179. package/dist/collections/operations/create.d.ts +9 -9
  180. package/dist/collections/operations/create.d.ts.map +1 -1
  181. package/dist/collections/operations/create.js +38 -53
  182. package/dist/collections/operations/delete.d.ts +9 -10
  183. package/dist/collections/operations/delete.d.ts.map +1 -1
  184. package/dist/collections/operations/delete.js +27 -42
  185. package/dist/collections/operations/deleteByID.d.ts +2 -3
  186. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  187. package/dist/collections/operations/deleteByID.js +27 -42
  188. package/dist/collections/operations/docAccess.d.ts +3 -3
  189. package/dist/collections/operations/docAccess.d.ts.map +1 -1
  190. package/dist/collections/operations/docAccess.js +12 -22
  191. package/dist/collections/operations/find.d.ts +3 -4
  192. package/dist/collections/operations/find.d.ts.map +1 -1
  193. package/dist/collections/operations/find.js +25 -40
  194. package/dist/collections/operations/findByID.d.ts +2 -2
  195. package/dist/collections/operations/findByID.d.ts.map +1 -1
  196. package/dist/collections/operations/findByID.js +21 -36
  197. package/dist/collections/operations/findVersionByID.d.ts +3 -3
  198. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  199. package/dist/collections/operations/findVersionByID.js +19 -34
  200. package/dist/collections/operations/findVersions.d.ts +4 -5
  201. package/dist/collections/operations/findVersions.d.ts.map +1 -1
  202. package/dist/collections/operations/findVersions.js +20 -35
  203. package/dist/collections/operations/local/create.d.ts +4 -5
  204. package/dist/collections/operations/local/create.d.ts.map +1 -1
  205. package/dist/collections/operations/local/create.js +10 -25
  206. package/dist/collections/operations/local/delete.d.ts +5 -5
  207. package/dist/collections/operations/local/delete.d.ts.map +1 -1
  208. package/dist/collections/operations/local/delete.js +10 -20
  209. package/dist/collections/operations/local/find.d.ts +3 -4
  210. package/dist/collections/operations/local/find.d.ts.map +1 -1
  211. package/dist/collections/operations/local/find.js +8 -18
  212. package/dist/collections/operations/local/findByID.d.ts +2 -4
  213. package/dist/collections/operations/local/findByID.d.ts.map +1 -1
  214. package/dist/collections/operations/local/findByID.js +8 -18
  215. package/dist/collections/operations/local/findVersionByID.d.ts +3 -4
  216. package/dist/collections/operations/local/findVersionByID.d.ts.map +1 -1
  217. package/dist/collections/operations/local/findVersionByID.js +8 -18
  218. package/dist/collections/operations/local/findVersions.d.ts +4 -5
  219. package/dist/collections/operations/local/findVersions.d.ts.map +1 -1
  220. package/dist/collections/operations/local/findVersions.js +8 -18
  221. package/dist/collections/operations/local/index.d.ts +13 -13
  222. package/dist/collections/operations/local/index.d.ts.map +1 -1
  223. package/dist/collections/operations/local/index.js +20 -35
  224. package/dist/collections/operations/local/restoreVersion.d.ts +2 -3
  225. package/dist/collections/operations/local/restoreVersion.d.ts.map +1 -1
  226. package/dist/collections/operations/local/restoreVersion.js +8 -18
  227. package/dist/collections/operations/local/update.d.ts +4 -5
  228. package/dist/collections/operations/local/update.d.ts.map +1 -1
  229. package/dist/collections/operations/local/update.js +12 -27
  230. package/dist/collections/operations/restoreVersion.d.ts +2 -2
  231. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  232. package/dist/collections/operations/restoreVersion.js +26 -41
  233. package/dist/collections/operations/update.d.ts +7 -8
  234. package/dist/collections/operations/update.d.ts.map +1 -1
  235. package/dist/collections/operations/update.js +43 -58
  236. package/dist/collections/operations/updateByID.d.ts +9 -9
  237. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  238. package/dist/collections/operations/updateByID.js +44 -59
  239. package/dist/collections/operations/utils.d.ts +12 -12
  240. package/dist/collections/operations/utils.d.ts.map +1 -1
  241. package/dist/collections/operations/utils.js +3 -12
  242. package/dist/config/build.d.ts +1 -1
  243. package/dist/config/build.d.ts.map +1 -1
  244. package/dist/config/build.js +9 -15
  245. package/dist/config/clientFiles.js +2 -12
  246. package/dist/config/createClientConfig.d.ts +2 -2
  247. package/dist/config/createClientConfig.d.ts.map +1 -1
  248. package/dist/config/createClientConfig.js +12 -25
  249. package/dist/config/defaults.d.ts +1 -1
  250. package/dist/config/defaults.d.ts.map +1 -1
  251. package/dist/config/defaults.js +4 -19
  252. package/dist/config/find.js +18 -33
  253. package/dist/config/load.d.ts +2 -4
  254. package/dist/config/load.d.ts.map +1 -1
  255. package/dist/config/load.js +8 -37
  256. package/dist/config/sanitize.d.ts +1 -1
  257. package/dist/config/sanitize.d.ts.map +1 -1
  258. package/dist/config/sanitize.js +25 -40
  259. package/dist/config/schema.d.ts.map +1 -1
  260. package/dist/config/schema.js +116 -133
  261. package/dist/config/shared/adminViewSchema.js +9 -24
  262. package/dist/config/shared/componentSchema.js +21 -50
  263. package/dist/config/types.d.ts +21 -30
  264. package/dist/config/types.d.ts.map +1 -1
  265. package/dist/config/types.js +9 -21
  266. package/dist/config/validate.d.ts +1 -1
  267. package/dist/config/validate.d.ts.map +1 -1
  268. package/dist/config/validate.js +15 -71
  269. package/dist/database/combineQueries.d.ts +1 -1
  270. package/dist/database/combineQueries.d.ts.map +1 -1
  271. package/dist/database/combineQueries.js +4 -14
  272. package/dist/database/createDatabaseAdapter.d.ts +1 -1
  273. package/dist/database/createDatabaseAdapter.d.ts.map +1 -1
  274. package/dist/database/createDatabaseAdapter.js +14 -24
  275. package/dist/database/flattenWhereToOperators.d.ts +1 -1
  276. package/dist/database/flattenWhereToOperators.d.ts.map +1 -1
  277. package/dist/database/flattenWhereToOperators.js +2 -12
  278. package/dist/database/getLocalizedPaths.d.ts +3 -3
  279. package/dist/database/getLocalizedPaths.d.ts.map +1 -1
  280. package/dist/database/getLocalizedPaths.js +7 -22
  281. package/dist/database/migrations/createMigration.d.ts +1 -1
  282. package/dist/database/migrations/createMigration.d.ts.map +1 -1
  283. package/dist/database/migrations/createMigration.js +7 -22
  284. package/dist/database/migrations/getMigrations.d.ts +2 -2
  285. package/dist/database/migrations/getMigrations.d.ts.map +1 -1
  286. package/dist/database/migrations/getMigrations.js +4 -12
  287. package/dist/database/migrations/migrate.d.ts +1 -1
  288. package/dist/database/migrations/migrate.d.ts.map +1 -1
  289. package/dist/database/migrations/migrate.js +12 -22
  290. package/dist/database/migrations/migrateDown.d.ts +1 -1
  291. package/dist/database/migrations/migrateDown.d.ts.map +1 -1
  292. package/dist/database/migrations/migrateDown.js +12 -22
  293. package/dist/database/migrations/migrateRefresh.d.ts +1 -1
  294. package/dist/database/migrations/migrateRefresh.d.ts.map +1 -1
  295. package/dist/database/migrations/migrateRefresh.js +16 -24
  296. package/dist/database/migrations/migrateReset.d.ts +1 -1
  297. package/dist/database/migrations/migrateReset.d.ts.map +1 -1
  298. package/dist/database/migrations/migrateReset.js +12 -22
  299. package/dist/database/migrations/migrateStatus.d.ts +1 -1
  300. package/dist/database/migrations/migrateStatus.d.ts.map +1 -1
  301. package/dist/database/migrations/migrateStatus.js +8 -18
  302. package/dist/database/migrations/migrationTemplate.js +2 -12
  303. package/dist/database/migrations/migrationsCollection.d.ts +1 -1
  304. package/dist/database/migrations/migrationsCollection.d.ts.map +1 -1
  305. package/dist/database/migrations/migrationsCollection.js +2 -12
  306. package/dist/database/migrations/readMigrationFiles.d.ts +2 -2
  307. package/dist/database/migrations/readMigrationFiles.d.ts.map +1 -1
  308. package/dist/database/migrations/readMigrationFiles.js +12 -24
  309. package/dist/database/queryValidation/types.d.ts +2 -2
  310. package/dist/database/queryValidation/types.d.ts.map +1 -1
  311. package/dist/database/queryValidation/types.js +2 -5
  312. package/dist/database/queryValidation/validateQueryPaths.d.ts +5 -5
  313. package/dist/database/queryValidation/validateQueryPaths.d.ts.map +1 -1
  314. package/dist/database/queryValidation/validateQueryPaths.js +13 -28
  315. package/dist/database/queryValidation/validateSearchParams.d.ts +5 -5
  316. package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
  317. package/dist/database/queryValidation/validateSearchParams.js +17 -25
  318. package/dist/database/types.d.ts +9 -7
  319. package/dist/database/types.d.ts.map +1 -1
  320. package/dist/database/types.js +2 -5
  321. package/dist/email/build.d.ts +2 -2
  322. package/dist/email/build.d.ts.map +1 -1
  323. package/dist/email/build.js +11 -26
  324. package/dist/email/defaults.d.ts +1 -1
  325. package/dist/email/defaults.d.ts.map +1 -1
  326. package/dist/email/defaults.js +2 -12
  327. package/dist/email/mockHandler.d.ts +2 -2
  328. package/dist/email/mockHandler.d.ts.map +1 -1
  329. package/dist/email/mockHandler.js +8 -23
  330. package/dist/email/sendEmail.js +2 -12
  331. package/dist/email/types.js +2 -5
  332. package/dist/errors/APIError.js +4 -19
  333. package/dist/errors/AuthenticationError.d.ts +1 -1
  334. package/dist/errors/AuthenticationError.d.ts.map +1 -1
  335. package/dist/errors/AuthenticationError.js +7 -22
  336. package/dist/errors/DuplicateCollection.d.ts +1 -1
  337. package/dist/errors/DuplicateCollection.d.ts.map +1 -1
  338. package/dist/errors/DuplicateCollection.js +4 -19
  339. package/dist/errors/DuplicateFieldName.d.ts +1 -1
  340. package/dist/errors/DuplicateFieldName.d.ts.map +1 -1
  341. package/dist/errors/DuplicateFieldName.js +4 -19
  342. package/dist/errors/DuplicateGlobal.d.ts +2 -2
  343. package/dist/errors/DuplicateGlobal.d.ts.map +1 -1
  344. package/dist/errors/DuplicateGlobal.js +4 -19
  345. package/dist/errors/ErrorDeletingFile.d.ts +1 -1
  346. package/dist/errors/ErrorDeletingFile.d.ts.map +1 -1
  347. package/dist/errors/ErrorDeletingFile.js +7 -22
  348. package/dist/errors/FileUploadError.d.ts +1 -1
  349. package/dist/errors/FileUploadError.d.ts.map +1 -1
  350. package/dist/errors/FileUploadError.js +7 -22
  351. package/dist/errors/Forbidden.d.ts +1 -1
  352. package/dist/errors/Forbidden.d.ts.map +1 -1
  353. package/dist/errors/Forbidden.js +7 -22
  354. package/dist/errors/InvalidConfiguration.d.ts +1 -1
  355. package/dist/errors/InvalidConfiguration.d.ts.map +1 -1
  356. package/dist/errors/InvalidConfiguration.js +6 -21
  357. package/dist/errors/InvalidFieldName.d.ts +2 -2
  358. package/dist/errors/InvalidFieldName.d.ts.map +1 -1
  359. package/dist/errors/InvalidFieldName.js +4 -19
  360. package/dist/errors/InvalidFieldRelationship.d.ts +2 -2
  361. package/dist/errors/InvalidFieldRelationship.d.ts.map +1 -1
  362. package/dist/errors/InvalidFieldRelationship.js +4 -19
  363. package/dist/errors/InvalidSchema.d.ts +1 -1
  364. package/dist/errors/InvalidSchema.d.ts.map +1 -1
  365. package/dist/errors/InvalidSchema.js +6 -21
  366. package/dist/errors/LockedAuth.d.ts +1 -1
  367. package/dist/errors/LockedAuth.d.ts.map +1 -1
  368. package/dist/errors/LockedAuth.js +7 -22
  369. package/dist/errors/MissingCollectionLabel.d.ts +1 -1
  370. package/dist/errors/MissingCollectionLabel.d.ts.map +1 -1
  371. package/dist/errors/MissingCollectionLabel.js +4 -19
  372. package/dist/errors/MissingFieldInputOptions.d.ts +2 -2
  373. package/dist/errors/MissingFieldInputOptions.d.ts.map +1 -1
  374. package/dist/errors/MissingFieldInputOptions.js +4 -19
  375. package/dist/errors/MissingFieldType.d.ts +2 -2
  376. package/dist/errors/MissingFieldType.d.ts.map +1 -1
  377. package/dist/errors/MissingFieldType.js +6 -21
  378. package/dist/errors/MissingFile.d.ts +1 -1
  379. package/dist/errors/MissingFile.d.ts.map +1 -1
  380. package/dist/errors/MissingFile.js +7 -22
  381. package/dist/errors/NotFound.d.ts +1 -1
  382. package/dist/errors/NotFound.d.ts.map +1 -1
  383. package/dist/errors/NotFound.js +7 -22
  384. package/dist/errors/QueryError.d.ts +1 -1
  385. package/dist/errors/QueryError.d.ts.map +1 -1
  386. package/dist/errors/QueryError.js +6 -21
  387. package/dist/errors/TimestampsRequired.d.ts +2 -2
  388. package/dist/errors/TimestampsRequired.d.ts.map +1 -1
  389. package/dist/errors/TimestampsRequired.js +4 -19
  390. package/dist/errors/UnathorizedError.d.ts +1 -1
  391. package/dist/errors/UnathorizedError.d.ts.map +1 -1
  392. package/dist/errors/UnathorizedError.js +7 -22
  393. package/dist/errors/ValidationError.d.ts +1 -1
  394. package/dist/errors/ValidationError.d.ts.map +1 -1
  395. package/dist/errors/ValidationError.js +8 -23
  396. package/dist/errors/index.d.ts +19 -19
  397. package/dist/errors/index.d.ts.map +1 -1
  398. package/dist/errors/index.js +20 -94
  399. package/dist/errors/types.d.ts +1 -1
  400. package/dist/errors/types.d.ts.map +1 -1
  401. package/dist/errors/types.js +2 -19
  402. package/dist/exports/auth.d.ts +5 -5
  403. package/dist/exports/auth.d.ts.map +1 -1
  404. package/dist/exports/auth.js +5 -44
  405. package/dist/exports/components/utilities.js +0 -1
  406. package/dist/exports/config.d.ts +10 -10
  407. package/dist/exports/config.d.ts.map +1 -1
  408. package/dist/exports/config.js +10 -59
  409. package/dist/exports/database.d.ts +22 -22
  410. package/dist/exports/database.d.ts.map +1 -1
  411. package/dist/exports/database.js +21 -108
  412. package/dist/exports/errors.d.ts +1 -1
  413. package/dist/exports/errors.d.ts.map +1 -1
  414. package/dist/exports/errors.js +2 -68
  415. package/dist/exports/fields/index.d.ts +2 -2
  416. package/dist/exports/fields/index.d.ts.map +1 -1
  417. package/dist/exports/fields/index.js +3 -26
  418. package/dist/exports/fields/validations.d.ts +1 -1
  419. package/dist/exports/fields/validations.d.ts.map +1 -1
  420. package/dist/exports/fields/validations.js +2 -19
  421. package/dist/exports/operations.d.ts +28 -28
  422. package/dist/exports/operations.d.ts.map +1 -1
  423. package/dist/exports/operations.js +29 -125
  424. package/dist/exports/types.d.ts +11 -11
  425. package/dist/exports/types.d.ts.map +1 -1
  426. package/dist/exports/types.js +4 -74
  427. package/dist/exports/utilities.d.ts +27 -27
  428. package/dist/exports/utilities.d.ts.map +1 -1
  429. package/dist/exports/utilities.js +28 -141
  430. package/dist/exports/versions.d.ts +9 -9
  431. package/dist/exports/versions.d.ts.map +1 -1
  432. package/dist/exports/versions.js +9 -45
  433. package/dist/fields/baseFields/baseBlockFields.d.ts +1 -1
  434. package/dist/fields/baseFields/baseBlockFields.d.ts.map +1 -1
  435. package/dist/fields/baseFields/baseBlockFields.js +6 -16
  436. package/dist/fields/baseFields/baseIDField.d.ts +1 -1
  437. package/dist/fields/baseFields/baseIDField.d.ts.map +1 -1
  438. package/dist/fields/baseFields/baseIDField.js +7 -21
  439. package/dist/fields/config/sanitize.d.ts +2 -2
  440. package/dist/fields/config/sanitize.d.ts.map +1 -1
  441. package/dist/fields/config/sanitize.js +28 -43
  442. package/dist/fields/config/sanitize.spec.js +25 -29
  443. package/dist/fields/config/schema.js +336 -431
  444. package/dist/fields/config/types.d.ts +5 -6
  445. package/dist/fields/config/types.d.ts.map +1 -1
  446. package/dist/fields/config/types.js +15 -69
  447. package/dist/fields/getDefaultValue.d.ts +1 -1
  448. package/dist/fields/getDefaultValue.d.ts.map +1 -1
  449. package/dist/fields/getDefaultValue.js +2 -12
  450. package/dist/fields/hooks/afterChange/index.d.ts +3 -3
  451. package/dist/fields/hooks/afterChange/index.d.ts.map +1 -1
  452. package/dist/fields/hooks/afterChange/index.js +6 -16
  453. package/dist/fields/hooks/afterChange/promise.d.ts +4 -4
  454. package/dist/fields/hooks/afterChange/promise.d.ts.map +1 -1
  455. package/dist/fields/hooks/afterChange/promise.js +14 -22
  456. package/dist/fields/hooks/afterChange/traverseFields.d.ts +4 -4
  457. package/dist/fields/hooks/afterChange/traverseFields.d.ts.map +1 -1
  458. package/dist/fields/hooks/afterChange/traverseFields.js +4 -14
  459. package/dist/fields/hooks/afterRead/index.d.ts +3 -3
  460. package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
  461. package/dist/fields/hooks/afterRead/index.js +6 -16
  462. package/dist/fields/hooks/afterRead/promise.d.ts +4 -4
  463. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  464. package/dist/fields/hooks/afterRead/promise.js +28 -38
  465. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts +2 -2
  466. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
  467. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js +5 -15
  468. package/dist/fields/hooks/afterRead/traverseFields.d.ts +4 -4
  469. package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
  470. package/dist/fields/hooks/afterRead/traverseFields.js +4 -14
  471. package/dist/fields/hooks/beforeChange/cloneDataFromOriginalDoc.js +2 -12
  472. package/dist/fields/hooks/beforeChange/getExistingRowDoc.js +2 -12
  473. package/dist/fields/hooks/beforeChange/index.d.ts +3 -4
  474. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  475. package/dist/fields/hooks/beforeChange/index.js +8 -18
  476. package/dist/fields/hooks/beforeChange/promise.d.ts +4 -5
  477. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  478. package/dist/fields/hooks/beforeChange/promise.js +26 -35
  479. package/dist/fields/hooks/beforeChange/traverseFields.d.ts +4 -5
  480. package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
  481. package/dist/fields/hooks/beforeChange/traverseFields.js +4 -14
  482. package/dist/fields/hooks/beforeValidate/index.d.ts +3 -3
  483. package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
  484. package/dist/fields/hooks/beforeValidate/index.js +6 -16
  485. package/dist/fields/hooks/beforeValidate/promise.d.ts +4 -4
  486. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  487. package/dist/fields/hooks/beforeValidate/promise.js +30 -39
  488. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts +4 -4
  489. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
  490. package/dist/fields/hooks/beforeValidate/traverseFields.js +4 -14
  491. package/dist/fields/mergeBaseFields.d.ts +1 -1
  492. package/dist/fields/mergeBaseFields.d.ts.map +1 -1
  493. package/dist/fields/mergeBaseFields.js +8 -23
  494. package/dist/fields/sortableFieldTypes.js +2 -12
  495. package/dist/fields/validations.d.ts +6 -6
  496. package/dist/fields/validations.d.ts.map +1 -1
  497. package/dist/fields/validations.js +31 -97
  498. package/dist/fields/validations.spec.js +93 -87
  499. package/dist/globals/config/sanitize.d.ts +2 -2
  500. package/dist/globals/config/sanitize.d.ts.map +1 -1
  501. package/dist/globals/config/sanitize.js +19 -34
  502. package/dist/globals/config/schema.js +55 -70
  503. package/dist/globals/config/types.d.ts +11 -11
  504. package/dist/globals/config/types.d.ts.map +1 -1
  505. package/dist/globals/config/types.js +2 -5
  506. package/dist/globals/operations/docAccess.d.ts +3 -3
  507. package/dist/globals/operations/docAccess.d.ts.map +1 -1
  508. package/dist/globals/operations/docAccess.js +12 -22
  509. package/dist/globals/operations/findOne.d.ts +2 -2
  510. package/dist/globals/operations/findOne.d.ts.map +1 -1
  511. package/dist/globals/operations/findOne.js +14 -29
  512. package/dist/globals/operations/findVersionByID.d.ts +3 -3
  513. package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
  514. package/dist/globals/operations/findVersionByID.js +18 -33
  515. package/dist/globals/operations/findVersions.d.ts +4 -5
  516. package/dist/globals/operations/findVersions.d.ts.map +1 -1
  517. package/dist/globals/operations/findVersions.js +20 -35
  518. package/dist/globals/operations/local/findOne.d.ts +2 -4
  519. package/dist/globals/operations/local/findOne.d.ts.map +1 -1
  520. package/dist/globals/operations/local/findOne.js +11 -21
  521. package/dist/globals/operations/local/findVersionByID.d.ts +3 -5
  522. package/dist/globals/operations/local/findVersionByID.d.ts.map +1 -1
  523. package/dist/globals/operations/local/findVersionByID.js +9 -19
  524. package/dist/globals/operations/local/findVersions.d.ts +4 -6
  525. package/dist/globals/operations/local/findVersions.d.ts.map +1 -1
  526. package/dist/globals/operations/local/findVersions.js +9 -19
  527. package/dist/globals/operations/local/index.d.ts +5 -5
  528. package/dist/globals/operations/local/index.d.ts.map +1 -1
  529. package/dist/globals/operations/local/index.js +12 -27
  530. package/dist/globals/operations/local/restoreVersion.d.ts +2 -4
  531. package/dist/globals/operations/local/restoreVersion.d.ts.map +1 -1
  532. package/dist/globals/operations/local/restoreVersion.js +9 -19
  533. package/dist/globals/operations/local/update.d.ts +2 -4
  534. package/dist/globals/operations/local/update.d.ts.map +1 -1
  535. package/dist/globals/operations/local/update.js +9 -19
  536. package/dist/globals/operations/restoreVersion.d.ts +3 -3
  537. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  538. package/dist/globals/operations/restoreVersion.js +16 -31
  539. package/dist/globals/operations/update.d.ts +9 -9
  540. package/dist/globals/operations/update.d.ts.map +1 -1
  541. package/dist/globals/operations/update.js +23 -38
  542. package/dist/index.d.ts +29 -29
  543. package/dist/index.d.ts.map +1 -1
  544. package/dist/index.js +50 -70
  545. package/dist/localization/middleware.js +2 -12
  546. package/dist/localization/sanitizeFallbackLocale.js +2 -12
  547. package/dist/preferences/deleteUserPreferences.d.ts +3 -3
  548. package/dist/preferences/deleteUserPreferences.d.ts.map +1 -1
  549. package/dist/preferences/deleteUserPreferences.js +2 -12
  550. package/dist/preferences/operations/delete.d.ts +2 -2
  551. package/dist/preferences/operations/delete.d.ts.map +1 -1
  552. package/dist/preferences/operations/delete.js +10 -25
  553. package/dist/preferences/operations/findOne.d.ts +2 -2
  554. package/dist/preferences/operations/findOne.d.ts.map +1 -1
  555. package/dist/preferences/operations/findOne.js +2 -12
  556. package/dist/preferences/operations/update.d.ts +1 -1
  557. package/dist/preferences/operations/update.d.ts.map +1 -1
  558. package/dist/preferences/operations/update.js +8 -23
  559. package/dist/preferences/preferencesCollection.d.ts +2 -2
  560. package/dist/preferences/preferencesCollection.d.ts.map +1 -1
  561. package/dist/preferences/preferencesCollection.js +8 -18
  562. package/dist/preferences/requestHandlers/delete.d.ts +1 -1
  563. package/dist/preferences/requestHandlers/delete.d.ts.map +1 -1
  564. package/dist/preferences/requestHandlers/delete.js +6 -21
  565. package/dist/preferences/requestHandlers/findOne.d.ts +1 -1
  566. package/dist/preferences/requestHandlers/findOne.d.ts.map +1 -1
  567. package/dist/preferences/requestHandlers/findOne.js +6 -21
  568. package/dist/preferences/requestHandlers/update.d.ts +1 -1
  569. package/dist/preferences/requestHandlers/update.d.ts.map +1 -1
  570. package/dist/preferences/requestHandlers/update.js +6 -21
  571. package/dist/preferences/types.d.ts +2 -2
  572. package/dist/preferences/types.d.ts.map +1 -1
  573. package/dist/preferences/types.js +2 -5
  574. package/dist/translations/extractTranslations.js +4 -14
  575. package/dist/translations/getLocalI18n.d.ts +1 -1
  576. package/dist/translations/getLocalI18n.d.ts.map +1 -1
  577. package/dist/translations/getLocalI18n.js +5 -15
  578. package/dist/types/constants.js +2 -12
  579. package/dist/types/index.d.ts +8 -6
  580. package/dist/types/index.d.ts.map +1 -1
  581. package/dist/types/index.js +2 -12
  582. package/dist/uploads/canResizeImage.js +2 -12
  583. package/dist/uploads/cropImage.d.ts +3 -7
  584. package/dist/uploads/cropImage.d.ts.map +1 -1
  585. package/dist/uploads/cropImage.js +4 -28
  586. package/dist/uploads/deleteAssociatedFiles.d.ts +4 -4
  587. package/dist/uploads/deleteAssociatedFiles.d.ts.map +1 -1
  588. package/dist/uploads/deleteAssociatedFiles.js +11 -26
  589. package/dist/uploads/docWithFilenameExists.d.ts +1 -1
  590. package/dist/uploads/docWithFilenameExists.d.ts.map +1 -1
  591. package/dist/uploads/docWithFilenameExists.js +2 -12
  592. package/dist/uploads/fileExists.js +4 -19
  593. package/dist/uploads/formatFilesize.js +2 -12
  594. package/dist/uploads/generateFileData.d.ts +4 -4
  595. package/dist/uploads/generateFileData.d.ts.map +1 -1
  596. package/dist/uploads/generateFileData.js +42 -55
  597. package/dist/uploads/getBaseFields.d.ts +3 -3
  598. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  599. package/dist/uploads/getBaseFields.js +6 -16
  600. package/dist/uploads/getExternalFile.d.ts +2 -2
  601. package/dist/uploads/getExternalFile.d.ts.map +1 -1
  602. package/dist/uploads/getExternalFile.js +5 -15
  603. package/dist/uploads/getFileByPath.d.ts +1 -1
  604. package/dist/uploads/getFileByPath.d.ts.map +1 -1
  605. package/dist/uploads/getFileByPath.js +11 -25
  606. package/dist/uploads/getImageSize.d.ts +2 -2
  607. package/dist/uploads/getImageSize.d.ts.map +1 -1
  608. package/dist/uploads/getImageSize.js +7 -22
  609. package/dist/uploads/getSafeFilename.d.ts +1 -1
  610. package/dist/uploads/getSafeFilename.d.ts.map +1 -1
  611. package/dist/uploads/getSafeFilename.js +8 -23
  612. package/dist/uploads/imageResizer.d.ts +6 -5
  613. package/dist/uploads/imageResizer.d.ts.map +1 -1
  614. package/dist/uploads/imageResizer.js +29 -44
  615. package/dist/uploads/isImage.js +2 -12
  616. package/dist/uploads/mimeTypeValidator.d.ts +1 -1
  617. package/dist/uploads/mimeTypeValidator.d.ts.map +1 -1
  618. package/dist/uploads/mimeTypeValidator.js +2 -12
  619. package/dist/uploads/mimeTypeValidator.spec.js +11 -15
  620. package/dist/uploads/saveBufferToFile.d.ts +1 -1
  621. package/dist/uploads/saveBufferToFile.js +6 -21
  622. package/dist/uploads/types.d.ts +8 -2
  623. package/dist/uploads/types.d.ts.map +1 -1
  624. package/dist/uploads/types.js +2 -5
  625. package/dist/uploads/unlinkTempFiles.d.ts +3 -3
  626. package/dist/uploads/unlinkTempFiles.d.ts.map +1 -1
  627. package/dist/uploads/unlinkTempFiles.js +9 -22
  628. package/dist/uploads/uploadFiles.d.ts +3 -3
  629. package/dist/uploads/uploadFiles.d.ts.map +1 -1
  630. package/dist/uploads/uploadFiles.js +6 -21
  631. package/dist/utilities/checkDuplicateCollections.d.ts +1 -1
  632. package/dist/utilities/checkDuplicateCollections.d.ts.map +1 -1
  633. package/dist/utilities/checkDuplicateCollections.js +4 -14
  634. package/dist/utilities/combineMerge.js +4 -19
  635. package/dist/utilities/commitTransaction.d.ts +1 -1
  636. package/dist/utilities/commitTransaction.d.ts.map +1 -1
  637. package/dist/utilities/commitTransaction.js +4 -12
  638. package/dist/utilities/configToJSONSchema.d.ts +4 -4
  639. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  640. package/dist/utilities/configToJSONSchema.js +63 -81
  641. package/dist/utilities/configToJSONSchema.spec.js +5 -9
  642. package/dist/utilities/convertData.js +3 -23
  643. package/dist/utilities/createArrayFromCommaDelineated.js +2 -12
  644. package/dist/utilities/createLocalReq.d.ts +3 -3
  645. package/dist/utilities/createLocalReq.d.ts.map +1 -1
  646. package/dist/utilities/createLocalReq.js +7 -16
  647. package/dist/utilities/deepCopyObject.js +2 -12
  648. package/dist/utilities/deepMerge.js +2 -12
  649. package/dist/utilities/fieldSchemaToJSON.d.ts +2 -2
  650. package/dist/utilities/fieldSchemaToJSON.d.ts.map +1 -1
  651. package/dist/utilities/fieldSchemaToJSON.js +2 -12
  652. package/dist/utilities/flattenTopLevelFields.d.ts +1 -1
  653. package/dist/utilities/flattenTopLevelFields.d.ts.map +1 -1
  654. package/dist/utilities/flattenTopLevelFields.js +6 -16
  655. package/dist/utilities/formatLabels.d.ts +2 -1
  656. package/dist/utilities/formatLabels.d.ts.map +1 -1
  657. package/dist/utilities/formatLabels.js +10 -70
  658. package/dist/utilities/formatLabels.spec.js +8 -12
  659. package/dist/utilities/getCSSVariable.js +2 -12
  660. package/dist/utilities/getEntityPolicies.d.ts +4 -4
  661. package/dist/utilities/getEntityPolicies.d.ts.map +1 -1
  662. package/dist/utilities/getEntityPolicies.js +4 -14
  663. package/dist/utilities/getIDType.d.ts +2 -2
  664. package/dist/utilities/getIDType.d.ts.map +1 -1
  665. package/dist/utilities/getIDType.js +2 -12
  666. package/dist/utilities/getObjectDotNotation.js +2 -12
  667. package/dist/utilities/getUniqueListBy.js +2 -12
  668. package/dist/utilities/initTransaction.d.ts +1 -1
  669. package/dist/utilities/initTransaction.d.ts.map +1 -1
  670. package/dist/utilities/initTransaction.js +5 -12
  671. package/dist/utilities/isEntityHidden.d.ts +2 -2
  672. package/dist/utilities/isEntityHidden.d.ts.map +1 -1
  673. package/dist/utilities/isEntityHidden.js +2 -12
  674. package/dist/utilities/isNumber.js +2 -12
  675. package/dist/utilities/isPlainObject.d.ts +2 -0
  676. package/dist/utilities/isPlainObject.d.ts.map +1 -0
  677. package/dist/utilities/isPlainObject.js +25 -0
  678. package/dist/utilities/isValidID.d.ts.map +1 -1
  679. package/dist/utilities/isValidID.js +6 -20
  680. package/dist/utilities/isolateObjectProperty.js +2 -12
  681. package/dist/utilities/killTransaction.d.ts +1 -1
  682. package/dist/utilities/killTransaction.d.ts.map +1 -1
  683. package/dist/utilities/killTransaction.js +4 -12
  684. package/dist/utilities/logger.d.ts +6 -6
  685. package/dist/utilities/logger.d.ts.map +1 -1
  686. package/dist/utilities/logger.js +18 -37
  687. package/dist/utilities/mapAsync.js +2 -12
  688. package/dist/utilities/overwriteMerge.js +2 -12
  689. package/dist/utilities/parseCookies.js +4 -14
  690. package/dist/utilities/sanitizeInternalFields.js +2 -12
  691. package/dist/utilities/setsAreEqual.js +2 -12
  692. package/dist/utilities/telemetry/events/adminInit.d.ts +2 -2
  693. package/dist/utilities/telemetry/events/adminInit.d.ts.map +1 -1
  694. package/dist/utilities/telemetry/events/adminInit.js +7 -17
  695. package/dist/utilities/telemetry/events/serverInit.d.ts +1 -1
  696. package/dist/utilities/telemetry/events/serverInit.d.ts.map +1 -1
  697. package/dist/utilities/telemetry/events/serverInit.js +4 -14
  698. package/dist/utilities/telemetry/index.d.ts +3 -3
  699. package/dist/utilities/telemetry/index.d.ts.map +1 -1
  700. package/dist/utilities/telemetry/index.js +18 -40
  701. package/dist/utilities/telemetry/oneWayHash.js +4 -14
  702. package/dist/utilities/timestamp.js +2 -12
  703. package/dist/utilities/toKebabCase.js +2 -12
  704. package/dist/utilities/wait.js +2 -12
  705. package/dist/utilities/wordBoundariesRegex.js +3 -13
  706. package/dist/versions/baseFields.d.ts +1 -1
  707. package/dist/versions/baseFields.d.ts.map +1 -1
  708. package/dist/versions/baseFields.js +7 -25
  709. package/dist/versions/buildCollectionFields.d.ts +2 -2
  710. package/dist/versions/buildCollectionFields.d.ts.map +1 -1
  711. package/dist/versions/buildCollectionFields.js +2 -12
  712. package/dist/versions/buildGlobalFields.d.ts +2 -2
  713. package/dist/versions/buildGlobalFields.d.ts.map +1 -1
  714. package/dist/versions/buildGlobalFields.js +12 -22
  715. package/dist/versions/deleteCollectionVersions.d.ts +3 -3
  716. package/dist/versions/deleteCollectionVersions.d.ts.map +1 -1
  717. package/dist/versions/deleteCollectionVersions.js +2 -12
  718. package/dist/versions/drafts/appendVersionToQueryKey.d.ts +1 -1
  719. package/dist/versions/drafts/appendVersionToQueryKey.d.ts.map +1 -1
  720. package/dist/versions/drafts/appendVersionToQueryKey.js +2 -12
  721. package/dist/versions/drafts/getQueryDraftsSort.js +2 -12
  722. package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts +4 -4
  723. package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
  724. package/dist/versions/drafts/replaceWithDraftIfAvailable.js +12 -27
  725. package/dist/versions/enforceMaxVersions.d.ts +3 -3
  726. package/dist/versions/enforceMaxVersions.d.ts.map +1 -1
  727. package/dist/versions/enforceMaxVersions.js +2 -12
  728. package/dist/versions/getLatestCollectionVersion.d.ts +3 -3
  729. package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
  730. package/dist/versions/getLatestCollectionVersion.js +4 -14
  731. package/dist/versions/getLatestGlobalVersion.d.ts +3 -3
  732. package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
  733. package/dist/versions/getLatestGlobalVersion.js +5 -15
  734. package/dist/versions/getVersionsModelName.d.ts +2 -2
  735. package/dist/versions/getVersionsModelName.d.ts.map +1 -1
  736. package/dist/versions/getVersionsModelName.js +2 -12
  737. package/dist/versions/saveVersion.d.ts +4 -4
  738. package/dist/versions/saveVersion.d.ts.map +1 -1
  739. package/dist/versions/saveVersion.js +8 -23
  740. package/dist/versions/types.js +2 -5
  741. package/errors.d.ts +1 -1
  742. package/errors.js +2 -68
  743. package/graphql.d.ts +3 -0
  744. package/graphql.js +27 -0
  745. package/operations.d.ts +28 -28
  746. package/operations.js +29 -125
  747. package/package.json +17 -6
  748. package/types.d.ts +11 -11
  749. package/types.js +4 -74
  750. package/utilities.d.ts +27 -27
  751. package/utilities.js +28 -141
  752. package/versions.d.ts +9 -9
  753. package/versions.js +9 -45
  754. package/.eslintrc.js +0 -58
  755. package/dist/bundlers/mocks/db-mongodb.js +0 -3
  756. package/dist/bundlers/mocks/db-postgres.js +0 -13
  757. package/dist/bundlers/mocks/dotENV.js +0 -15
  758. package/dist/bundlers/mocks/emptyModule.js +0 -13
  759. package/dist/bundlers/mocks/fileMock.js +0 -13
  760. package/dist/bundlers/types.d.ts +0 -8
  761. package/dist/bundlers/types.d.ts.map +0 -1
  762. package/dist/bundlers/types.js +0 -6
  763. package/dist/express/middleware/errorHandler.d.ts +0 -2
  764. package/dist/express/middleware/errorHandler.d.ts.map +0 -1
  765. package/dist/express/middleware/errorHandler.js +0 -3
  766. package/dist/express/middleware/index.d.ts +0 -2
  767. package/dist/express/middleware/index.d.ts.map +0 -1
  768. package/dist/express/middleware/index.js +0 -3
  769. package/dist/globals/config/build.d.ts +0 -2
  770. package/dist/globals/config/build.d.ts.map +0 -1
  771. package/dist/globals/config/build.js +0 -3
  772. package/dist/globals/graphql/resolvers/docAccess.d.ts +0 -2
  773. package/dist/globals/graphql/resolvers/docAccess.d.ts.map +0 -1
  774. package/dist/globals/graphql/resolvers/docAccess.js +0 -3
@@ -1,25 +1,27 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- const _validations = require("./validations");
1
+ import { number, password, point, relationship, select, text, textarea } from './validations.js';
6
2
  const t = jest.fn((string)=>string);
7
3
  let options = {
8
4
  data: undefined,
9
5
  operation: 'create',
10
6
  siblingData: undefined,
11
- t
7
+ req: {
8
+ t,
9
+ context: {},
10
+ payload: {
11
+ config: {}
12
+ }
13
+ }
12
14
  };
13
15
  describe('Field Validations', ()=>{
14
16
  describe('text', ()=>{
15
17
  it('should validate', ()=>{
16
18
  const val = 'test';
17
- const result = (0, _validations.text)(val, options);
19
+ const result = text(val, options);
18
20
  expect(result).toBe(true);
19
21
  });
20
22
  it('should show required message', ()=>{
21
23
  const val = undefined;
22
- const result = (0, _validations.text)(val, {
24
+ const result = text(val, {
23
25
  ...options,
24
26
  required: true
25
27
  });
@@ -27,12 +29,12 @@ describe('Field Validations', ()=>{
27
29
  });
28
30
  it('should handle undefined', ()=>{
29
31
  const val = undefined;
30
- const result = (0, _validations.text)(val, options);
32
+ const result = text(val, options);
31
33
  expect(result).toBe(true);
32
34
  });
33
35
  it('should validate maxLength', ()=>{
34
36
  const val = 'toolong';
35
- const result = (0, _validations.text)(val, {
37
+ const result = text(val, {
36
38
  ...options,
37
39
  maxLength: 5
38
40
  });
@@ -40,7 +42,7 @@ describe('Field Validations', ()=>{
40
42
  });
41
43
  it('should validate minLength', ()=>{
42
44
  const val = 'short';
43
- const result = (0, _validations.text)(val, {
45
+ const result = text(val, {
44
46
  ...options,
45
47
  minLength: 10
46
48
  });
@@ -48,7 +50,7 @@ describe('Field Validations', ()=>{
48
50
  });
49
51
  it('should validate maxLength with no value', ()=>{
50
52
  const val = undefined;
51
- const result = (0, _validations.text)(val, {
53
+ const result = text(val, {
52
54
  ...options,
53
55
  maxLength: 5
54
56
  });
@@ -56,7 +58,7 @@ describe('Field Validations', ()=>{
56
58
  });
57
59
  it('should validate minLength with no value', ()=>{
58
60
  const val = undefined;
59
- const result = (0, _validations.text)(val, {
61
+ const result = text(val, {
60
62
  ...options,
61
63
  minLength: 10
62
64
  });
@@ -66,7 +68,7 @@ describe('Field Validations', ()=>{
66
68
  const val = [
67
69
  'test'
68
70
  ];
69
- const result = (0, _validations.text)(val, {
71
+ const result = text(val, {
70
72
  ...options,
71
73
  hasMany: true
72
74
  });
@@ -76,7 +78,7 @@ describe('Field Validations', ()=>{
76
78
  const val = [
77
79
  'test'
78
80
  ];
79
- const result = (0, _validations.text)(val, {
81
+ const result = text(val, {
80
82
  ...options,
81
83
  hasMany: true,
82
84
  required: true
@@ -94,12 +96,12 @@ describe('Field Validations', ()=>{
94
96
  };
95
97
  it('should validate', ()=>{
96
98
  const val = 'test';
97
- const result = (0, _validations.textarea)(val, options);
99
+ const result = textarea(val, options);
98
100
  expect(result).toBe(true);
99
101
  });
100
102
  it('should show required message', ()=>{
101
103
  const val = undefined;
102
- const result = (0, _validations.textarea)(val, {
104
+ const result = textarea(val, {
103
105
  ...options,
104
106
  required: true
105
107
  });
@@ -107,12 +109,12 @@ describe('Field Validations', ()=>{
107
109
  });
108
110
  it('should handle undefined', ()=>{
109
111
  const val = undefined;
110
- const result = (0, _validations.textarea)(val, options);
112
+ const result = textarea(val, options);
111
113
  expect(result).toBe(true);
112
114
  });
113
115
  it('should validate maxLength', ()=>{
114
116
  const val = 'toolong';
115
- const result = (0, _validations.textarea)(val, {
117
+ const result = textarea(val, {
116
118
  ...options,
117
119
  maxLength: 5
118
120
  });
@@ -120,7 +122,7 @@ describe('Field Validations', ()=>{
120
122
  });
121
123
  it('should validate minLength', ()=>{
122
124
  const val = 'short';
123
- const result = (0, _validations.textarea)(val, {
125
+ const result = textarea(val, {
124
126
  ...options,
125
127
  minLength: 10
126
128
  });
@@ -128,7 +130,7 @@ describe('Field Validations', ()=>{
128
130
  });
129
131
  it('should validate maxLength with no value', ()=>{
130
132
  const val = undefined;
131
- const result = (0, _validations.textarea)(val, {
133
+ const result = textarea(val, {
132
134
  ...options,
133
135
  maxLength: 5
134
136
  });
@@ -136,7 +138,7 @@ describe('Field Validations', ()=>{
136
138
  });
137
139
  it('should validate minLength with no value', ()=>{
138
140
  const val = undefined;
139
- const result = (0, _validations.textarea)(val, {
141
+ const result = textarea(val, {
140
142
  ...options,
141
143
  minLength: 10
142
144
  });
@@ -151,12 +153,12 @@ describe('Field Validations', ()=>{
151
153
  };
152
154
  it('should validate', ()=>{
153
155
  const val = 'test';
154
- const result = (0, _validations.password)(val, passwordOptions);
156
+ const result = password(val, passwordOptions);
155
157
  expect(result).toBe(true);
156
158
  });
157
159
  it('should show required message', ()=>{
158
160
  const val = undefined;
159
- const result = (0, _validations.password)(val, {
161
+ const result = password(val, {
160
162
  ...passwordOptions,
161
163
  required: true
162
164
  });
@@ -164,12 +166,12 @@ describe('Field Validations', ()=>{
164
166
  });
165
167
  it('should handle undefined', ()=>{
166
168
  const val = undefined;
167
- const result = (0, _validations.password)(val, passwordOptions);
169
+ const result = password(val, passwordOptions);
168
170
  expect(result).toBe(true);
169
171
  });
170
172
  it('should validate maxLength', ()=>{
171
173
  const val = 'toolong';
172
- const result = (0, _validations.password)(val, {
174
+ const result = password(val, {
173
175
  ...passwordOptions,
174
176
  maxLength: 5
175
177
  });
@@ -177,7 +179,7 @@ describe('Field Validations', ()=>{
177
179
  });
178
180
  it('should validate minLength', ()=>{
179
181
  const val = 'short';
180
- const result = (0, _validations.password)(val, {
182
+ const result = password(val, {
181
183
  ...passwordOptions,
182
184
  minLength: 10
183
185
  });
@@ -185,7 +187,7 @@ describe('Field Validations', ()=>{
185
187
  });
186
188
  it('should validate maxLength with no value', ()=>{
187
189
  const val = undefined;
188
- const result = (0, _validations.password)(val, {
190
+ const result = password(val, {
189
191
  ...passwordOptions,
190
192
  maxLength: 5
191
193
  });
@@ -193,7 +195,7 @@ describe('Field Validations', ()=>{
193
195
  });
194
196
  it('should validate minLength with no value', ()=>{
195
197
  const val = undefined;
196
- const result = (0, _validations.password)(val, {
198
+ const result = password(val, {
197
199
  ...passwordOptions,
198
200
  minLength: 10
199
201
  });
@@ -211,7 +213,7 @@ describe('Field Validations', ()=>{
211
213
  '0.1',
212
214
  '0.2'
213
215
  ];
214
- const result = (0, _validations.point)(val, pointOptions);
216
+ const result = point(val, pointOptions);
215
217
  expect(result).toBe(true);
216
218
  });
217
219
  it('should validate strings that could be numbers', ()=>{
@@ -219,12 +221,12 @@ describe('Field Validations', ()=>{
219
221
  '0.1',
220
222
  '0.2'
221
223
  ];
222
- const result = (0, _validations.point)(val, pointOptions);
224
+ const result = point(val, pointOptions);
223
225
  expect(result).toBe(true);
224
226
  });
225
227
  it('should show required message when undefined', ()=>{
226
228
  const val = undefined;
227
- const result = (0, _validations.point)(val, {
229
+ const result = point(val, {
228
230
  ...pointOptions,
229
231
  required: true
230
232
  });
@@ -232,7 +234,7 @@ describe('Field Validations', ()=>{
232
234
  });
233
235
  it('should show required message when array', ()=>{
234
236
  const val = [];
235
- const result = (0, _validations.point)(val, {
237
+ const result = point(val, {
236
238
  ...pointOptions,
237
239
  required: true
238
240
  });
@@ -243,7 +245,7 @@ describe('Field Validations', ()=>{
243
245
  undefined,
244
246
  undefined
245
247
  ];
246
- const result = (0, _validations.point)(val, {
248
+ const result = point(val, {
247
249
  ...pointOptions,
248
250
  required: true
249
251
  });
@@ -251,12 +253,12 @@ describe('Field Validations', ()=>{
251
253
  });
252
254
  it('should handle undefined not required', ()=>{
253
255
  const val = undefined;
254
- const result = (0, _validations.password)(val, pointOptions);
256
+ const result = password(val, pointOptions);
255
257
  expect(result).toBe(true);
256
258
  });
257
259
  it('should handle empty array not required', ()=>{
258
260
  const val = [];
259
- const result = (0, _validations.point)(val, pointOptions);
261
+ const result = point(val, pointOptions);
260
262
  expect(result).toBe(true);
261
263
  });
262
264
  it('should handle array of undefined not required', ()=>{
@@ -264,7 +266,7 @@ describe('Field Validations', ()=>{
264
266
  undefined,
265
267
  undefined
266
268
  ];
267
- const result = (0, _validations.point)(val, pointOptions);
269
+ const result = point(val, pointOptions);
268
270
  expect(result).toBe(true);
269
271
  });
270
272
  it('should prevent text input', ()=>{
@@ -272,14 +274,14 @@ describe('Field Validations', ()=>{
272
274
  'bad',
273
275
  'input'
274
276
  ];
275
- const result = (0, _validations.point)(val, pointOptions);
277
+ const result = point(val, pointOptions);
276
278
  expect(result).not.toBe(true);
277
279
  });
278
280
  it('should prevent missing value', ()=>{
279
281
  const val = [
280
282
  0.1
281
283
  ];
282
- const result = (0, _validations.point)(val, pointOptions);
284
+ const result = point(val, pointOptions);
283
285
  expect(result).not.toBe(true);
284
286
  });
285
287
  });
@@ -295,15 +297,19 @@ describe('Field Validations', ()=>{
295
297
  };
296
298
  const relationshipOptions = {
297
299
  ...options,
298
- config: {
299
- collections: [
300
- relationCollection
301
- ]
302
- },
303
- payload: {
304
- collections: {
305
- relation: {
306
- config: relationCollection
300
+ req: {
301
+ ...options.req,
302
+ payload: {
303
+ ...options.req.payload,
304
+ config: {
305
+ collections: [
306
+ relationCollection
307
+ ]
308
+ },
309
+ collections: {
310
+ relation: {
311
+ config: relationCollection
312
+ }
307
313
  }
308
314
  }
309
315
  },
@@ -311,7 +317,7 @@ describe('Field Validations', ()=>{
311
317
  };
312
318
  it('should handle required', async ()=>{
313
319
  const val = undefined;
314
- const result = await (0, _validations.relationship)(val, {
320
+ const result = await relationship(val, {
315
321
  ...relationshipOptions,
316
322
  required: true
317
323
  });
@@ -319,7 +325,7 @@ describe('Field Validations', ()=>{
319
325
  });
320
326
  it('should handle required with hasMany', async ()=>{
321
327
  const val = [];
322
- const result = await (0, _validations.relationship)(val, {
328
+ const result = await relationship(val, {
323
329
  ...relationshipOptions,
324
330
  hasMany: true,
325
331
  required: true
@@ -335,9 +341,9 @@ describe('Field Validations', ()=>{
335
341
  const val = [
336
342
  'a'
337
343
  ];
338
- const result = await (0, _validations.relationship)(val, minOptions);
344
+ const result = await relationship(val, minOptions);
339
345
  expect(result).not.toBe(true);
340
- const allowed = await (0, _validations.relationship)([
346
+ const allowed = await relationship([
341
347
  'a',
342
348
  'b'
343
349
  ], minOptions);
@@ -354,12 +360,12 @@ describe('Field Validations', ()=>{
354
360
  'b',
355
361
  'c'
356
362
  ];
357
- const result = await (0, _validations.relationship)(val, maxOptions);
363
+ const result = await relationship(val, maxOptions);
358
364
  expect(result).not.toBe(true);
359
365
  val = [
360
366
  'a'
361
367
  ];
362
- const allowed = await (0, _validations.relationship)(val, maxOptions);
368
+ const allowed = await relationship(val, maxOptions);
363
369
  expect(allowed).toStrictEqual(true);
364
370
  });
365
371
  });
@@ -406,52 +412,52 @@ describe('Field Validations', ()=>{
406
412
  };
407
413
  it('should allow valid input', ()=>{
408
414
  const val = 'one';
409
- const result = (0, _validations.select)(val, selectOptions);
415
+ const result = select(val, selectOptions);
410
416
  expect(result).toStrictEqual(true);
411
417
  });
412
418
  it('should prevent invalid input', ()=>{
413
419
  const val = 'bad';
414
- const result = (0, _validations.select)(val, selectOptions);
420
+ const result = select(val, selectOptions);
415
421
  expect(result).not.toStrictEqual(true);
416
422
  });
417
423
  it('should allow null input', ()=>{
418
424
  const val = null;
419
- const result = (0, _validations.select)(val, selectOptions);
425
+ const result = select(val, selectOptions);
420
426
  expect(result).toStrictEqual(true);
421
427
  });
422
428
  it('should allow undefined input', ()=>{
423
429
  let val;
424
- const result = (0, _validations.select)(val, selectOptions);
430
+ const result = select(val, selectOptions);
425
431
  expect(result).toStrictEqual(true);
426
432
  });
427
433
  it('should prevent empty string input', ()=>{
428
434
  const val = '';
429
- const result = (0, _validations.select)(val, selectOptions);
435
+ const result = select(val, selectOptions);
430
436
  expect(result).not.toStrictEqual(true);
431
437
  });
432
438
  it('should prevent undefined input with required', ()=>{
433
439
  let val;
434
- const result = (0, _validations.select)(val, optionsRequired);
440
+ const result = select(val, optionsRequired);
435
441
  expect(result).not.toStrictEqual(true);
436
442
  });
437
443
  it('should prevent empty string input with required', ()=>{
438
- const result = (0, _validations.select)('', optionsRequired);
444
+ const result = select('', optionsRequired);
439
445
  expect(result).not.toStrictEqual(true);
440
446
  });
441
447
  it('should prevent undefined input with required and hasMany', ()=>{
442
448
  let val;
443
449
  options.hasMany = true;
444
- const result = (0, _validations.select)(val, optionsRequired);
450
+ const result = select(val, optionsRequired);
445
451
  expect(result).not.toStrictEqual(true);
446
452
  });
447
453
  it('should prevent empty array input with required and hasMany', ()=>{
448
454
  optionsRequired.hasMany = true;
449
- const result = (0, _validations.select)([], optionsRequired);
455
+ const result = select([], optionsRequired);
450
456
  expect(result).not.toStrictEqual(true);
451
457
  });
452
458
  it('should prevent empty string array input with required and hasMany', ()=>{
453
459
  options.hasMany = true;
454
- const result = (0, _validations.select)([
460
+ const result = select([
455
461
  ''
456
462
  ], optionsRequired);
457
463
  expect(result).not.toStrictEqual(true);
@@ -459,30 +465,30 @@ describe('Field Validations', ()=>{
459
465
  it('should prevent null input with required and hasMany', ()=>{
460
466
  const val = null;
461
467
  options.hasMany = true;
462
- const result = (0, _validations.select)(val, optionsRequired);
468
+ const result = select(val, optionsRequired);
463
469
  expect(result).not.toStrictEqual(true);
464
470
  });
465
471
  it('should allow valid input with option objects', ()=>{
466
472
  const val = 'one';
467
473
  options.hasMany = false;
468
- const result = (0, _validations.select)(val, optionsRequired);
474
+ const result = select(val, optionsRequired);
469
475
  expect(result).toStrictEqual(true);
470
476
  });
471
477
  it('should prevent invalid input with option objects', ()=>{
472
478
  const val = 'bad';
473
479
  options.hasMany = false;
474
- const result = (0, _validations.select)(val, optionsRequired);
480
+ const result = select(val, optionsRequired);
475
481
  expect(result).not.toStrictEqual(true);
476
482
  });
477
483
  it('should allow empty string input with option object', ()=>{
478
484
  const val = '';
479
- const result = (0, _validations.select)(val, optionsWithEmptyString);
485
+ const result = select(val, optionsWithEmptyString);
480
486
  expect(result).toStrictEqual(true);
481
487
  });
482
488
  it('should allow empty string input with option object and required', ()=>{
483
489
  const val = '';
484
490
  optionsWithEmptyString.required = true;
485
- const result = (0, _validations.select)(val, optionsWithEmptyString);
491
+ const result = select(val, optionsWithEmptyString);
486
492
  expect(result).toStrictEqual(true);
487
493
  });
488
494
  it('should allow valid input with hasMany', ()=>{
@@ -490,7 +496,7 @@ describe('Field Validations', ()=>{
490
496
  'one',
491
497
  'two'
492
498
  ];
493
- const result = (0, _validations.select)(val, selectOptions);
499
+ const result = select(val, selectOptions);
494
500
  expect(result).toStrictEqual(true);
495
501
  });
496
502
  it('should prevent invalid input with hasMany', ()=>{
@@ -498,7 +504,7 @@ describe('Field Validations', ()=>{
498
504
  'one',
499
505
  'bad'
500
506
  ];
501
- const result = (0, _validations.select)(val, selectOptions);
507
+ const result = select(val, selectOptions);
502
508
  expect(result).not.toStrictEqual(true);
503
509
  });
504
510
  it('should allow valid input with hasMany option objects', ()=>{
@@ -507,7 +513,7 @@ describe('Field Validations', ()=>{
507
513
  'three'
508
514
  ];
509
515
  optionsRequired.hasMany = true;
510
- const result = (0, _validations.select)(val, optionsRequired);
516
+ const result = select(val, optionsRequired);
511
517
  expect(result).toStrictEqual(true);
512
518
  });
513
519
  it('should prevent invalid input with hasMany option objects', ()=>{
@@ -516,7 +522,7 @@ describe('Field Validations', ()=>{
516
522
  'bad'
517
523
  ];
518
524
  optionsRequired.hasMany = true;
519
- const result = (0, _validations.select)(val, optionsRequired);
525
+ const result = select(val, optionsRequired);
520
526
  expect(result).not.toStrictEqual(true);
521
527
  });
522
528
  });
@@ -528,12 +534,12 @@ describe('Field Validations', ()=>{
528
534
  };
529
535
  it('should validate', ()=>{
530
536
  const val = 1;
531
- const result = (0, _validations.number)(val, numberOptions);
537
+ const result = number(val, numberOptions);
532
538
  expect(result).toBe(true);
533
539
  });
534
540
  it('should validate 0', ()=>{
535
541
  const val = 0;
536
- const result = (0, _validations.number)(val, {
542
+ const result = number(val, {
537
543
  ...numberOptions,
538
544
  required: true
539
545
  });
@@ -541,26 +547,26 @@ describe('Field Validations', ()=>{
541
547
  });
542
548
  it('should validate 2', ()=>{
543
549
  const val = 1.5;
544
- const result = (0, _validations.number)(val, numberOptions);
550
+ const result = number(val, numberOptions);
545
551
  expect(result).toBe(true);
546
552
  });
547
553
  it('should show invalid number message', ()=>{
548
554
  const val = 'test';
549
- const result = (0, _validations.number)(val, {
555
+ const result = number(val, {
550
556
  ...numberOptions
551
557
  });
552
558
  expect(result).toBe('validation:enterNumber');
553
559
  });
554
560
  it('should handle empty value', ()=>{
555
561
  const val = '';
556
- const result = (0, _validations.number)(val, {
562
+ const result = number(val, {
557
563
  ...numberOptions
558
564
  });
559
565
  expect(result).toBe(true);
560
566
  });
561
567
  it('should handle required value', ()=>{
562
568
  const val = '';
563
- const result = (0, _validations.number)(val, {
569
+ const result = number(val, {
564
570
  ...numberOptions,
565
571
  required: true
566
572
  });
@@ -568,7 +574,7 @@ describe('Field Validations', ()=>{
568
574
  });
569
575
  it('should validate minValue', ()=>{
570
576
  const val = 2.4;
571
- const result = (0, _validations.number)(val, {
577
+ const result = number(val, {
572
578
  ...numberOptions,
573
579
  min: 2.5
574
580
  });
@@ -576,7 +582,7 @@ describe('Field Validations', ()=>{
576
582
  });
577
583
  it('should validate maxValue', ()=>{
578
584
  const val = 1.25;
579
- const result = (0, _validations.number)(val, {
585
+ const result = number(val, {
580
586
  ...numberOptions,
581
587
  max: 1
582
588
  });
@@ -587,7 +593,7 @@ describe('Field Validations', ()=>{
587
593
  1.25,
588
594
  2.5
589
595
  ];
590
- const result = (0, _validations.number)(val, {
596
+ const result = number(val, {
591
597
  ...numberOptions,
592
598
  hasMany: true
593
599
  });
@@ -598,7 +604,7 @@ describe('Field Validations', ()=>{
598
604
  1.25,
599
605
  2.5
600
606
  ];
601
- const result = (0, _validations.number)(val, {
607
+ const result = number(val, {
602
608
  ...numberOptions,
603
609
  hasMany: true,
604
610
  min: 3
@@ -610,7 +616,7 @@ describe('Field Validations', ()=>{
610
616
  1.25,
611
617
  2.5
612
618
  ];
613
- const result = (0, _validations.number)(val, {
619
+ const result = number(val, {
614
620
  ...numberOptions,
615
621
  hasMany: true,
616
622
  max: 1
@@ -622,7 +628,7 @@ describe('Field Validations', ()=>{
622
628
  1.25,
623
629
  2.5
624
630
  ];
625
- const result = (0, _validations.number)(val, {
631
+ const result = number(val, {
626
632
  ...numberOptions,
627
633
  hasMany: true,
628
634
  minRows: 4
@@ -635,7 +641,7 @@ describe('Field Validations', ()=>{
635
641
  2.5,
636
642
  3.5
637
643
  ];
638
- const result = (0, _validations.number)(val, {
644
+ const result = number(val, {
639
645
  ...numberOptions,
640
646
  hasMany: true,
641
647
  maxRows: 2
@@ -645,4 +651,4 @@ describe('Field Validations', ()=>{
645
651
  });
646
652
  });
647
653
 
648
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maWVsZHMvdmFsaWRhdGlvbnMuc3BlYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFZhbGlkYXRlT3B0aW9ucyB9IGZyb20gJy4vY29uZmlnL3R5cGVzJ1xuXG5pbXBvcnQgeyBudW1iZXIsIHBhc3N3b3JkLCBwb2ludCwgcmVsYXRpb25zaGlwLCBzZWxlY3QsIHRleHQsIHRleHRhcmVhIH0gZnJvbSAnLi92YWxpZGF0aW9ucydcblxuY29uc3QgdCA9IGplc3QuZm4oKHN0cmluZykgPT4gc3RyaW5nKVxuXG5sZXQgb3B0aW9uczogVmFsaWRhdGVPcHRpb25zPGFueSwgYW55LCBhbnk+ID0ge1xuICBkYXRhOiB1bmRlZmluZWQsXG4gIG9wZXJhdGlvbjogJ2NyZWF0ZScsXG4gIHNpYmxpbmdEYXRhOiB1bmRlZmluZWQsXG4gIHQsXG59XG5cbmRlc2NyaWJlKCdGaWVsZCBWYWxpZGF0aW9ucycsICgpID0+IHtcbiAgZGVzY3JpYmUoJ3RleHQnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9ICd0ZXN0J1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGV4dCh2YWwsIG9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHNob3cgcmVxdWlyZWQgbWVzc2FnZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcmVzdWx0ID0gdGV4dCh2YWwsIHsgLi4ub3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gdW5kZWZpbmVkXG4gICAgICBjb25zdCByZXN1bHQgPSB0ZXh0KHZhbCwgb3B0aW9ucylcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgbWF4TGVuZ3RoJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gJ3Rvb2xvbmcnXG4gICAgICBjb25zdCByZXN1bHQgPSB0ZXh0KHZhbCwgeyAuLi5vcHRpb25zLCBtYXhMZW5ndGg6IDUgfSlcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3ZhbGlkYXRpb246c2hvcnRlclRoYW5NYXgnKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBtaW5MZW5ndGgnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSAnc2hvcnQnXG4gICAgICBjb25zdCByZXN1bHQgPSB0ZXh0KHZhbCwgeyAuLi5vcHRpb25zLCBtaW5MZW5ndGg6IDEwIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCd2YWxpZGF0aW9uOmxvbmdlclRoYW5NaW4nKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBtYXhMZW5ndGggd2l0aCBubyB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcmVzdWx0ID0gdGV4dCh2YWwsIHsgLi4ub3B0aW9ucywgbWF4TGVuZ3RoOiA1IH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIG1pbkxlbmd0aCB3aXRoIG5vIHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gdW5kZWZpbmVkXG4gICAgICBjb25zdCByZXN1bHQgPSB0ZXh0KHZhbCwgeyAuLi5vcHRpb25zLCBtaW5MZW5ndGg6IDEwIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFuIGFycmF5IG9mIHRleHRzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gWyd0ZXN0J11cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRleHQodmFsLCB7IC4uLm9wdGlvbnMsIGhhc01hbnk6IHRydWUgfSlcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHJlcXVpcmVkIGFycmF5IG9mIHRleHRzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gWyd0ZXN0J11cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRleHQodmFsLCB7IC4uLm9wdGlvbnMsIGhhc01hbnk6IHRydWUsIHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgfSlcblxuICBkZXNjcmliZSgndGV4dGFyZWEnLCAoKSA9PiB7XG4gICAgb3B0aW9ucyA9IHsgLi4ub3B0aW9ucywgZmllbGQ6IHsgbmFtZTogJ3Rlc3QnLCB0eXBlOiAndGV4dGFyZWEnIH0gfVxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSAndGVzdCdcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRleHRhcmVhKHZhbCwgb3B0aW9ucylcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgc2hvdyByZXF1aXJlZCBtZXNzYWdlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gdW5kZWZpbmVkXG4gICAgICBjb25zdCByZXN1bHQgPSB0ZXh0YXJlYSh2YWwsIHsgLi4ub3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3ZhbGlkYXRpb246cmVxdWlyZWQnKVxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRleHRhcmVhKHZhbCwgb3B0aW9ucylcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgbWF4TGVuZ3RoJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gJ3Rvb2xvbmcnXG4gICAgICBjb25zdCByZXN1bHQgPSB0ZXh0YXJlYSh2YWwsIHsgLi4ub3B0aW9ucywgbWF4TGVuZ3RoOiA1IH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCd2YWxpZGF0aW9uOnNob3J0ZXJUaGFuTWF4JylcbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBtaW5MZW5ndGgnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSAnc2hvcnQnXG4gICAgICBjb25zdCByZXN1bHQgPSB0ZXh0YXJlYSh2YWwsIHsgLi4ub3B0aW9ucywgbWluTGVuZ3RoOiAxMCB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsaWRhdGlvbjpsb25nZXJUaGFuTWluJylcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgbWF4TGVuZ3RoIHdpdGggbm8gdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRleHRhcmVhKHZhbCwgeyAuLi5vcHRpb25zLCBtYXhMZW5ndGg6IDUgfSlcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgbWluTGVuZ3RoIHdpdGggbm8gdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRleHRhcmVhKHZhbCwgeyAuLi5vcHRpb25zLCBtaW5MZW5ndGg6IDEwIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgfSlcblxuICBkZXNjcmliZSgncGFzc3dvcmQnLCAoKSA9PiB7XG4gICAgY29uc3QgcGFzc3dvcmRPcHRpb25zID0ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG5hbWU6ICd0ZXN0JyxcbiAgICAgIHR5cGU6ICdwYXNzd29yZCcsXG4gICAgfVxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSAndGVzdCdcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHBhc3N3b3JkKHZhbCwgcGFzc3dvcmRPcHRpb25zKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBzaG93IHJlcXVpcmVkIG1lc3NhZ2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHBhc3N3b3JkKHZhbCwgeyAuLi5wYXNzd29yZE9wdGlvbnMsIHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCd2YWxpZGF0aW9uOnJlcXVpcmVkJylcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcmVzdWx0ID0gcGFzc3dvcmQodmFsLCBwYXNzd29yZE9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIG1heExlbmd0aCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9ICd0b29sb25nJ1xuICAgICAgY29uc3QgcmVzdWx0ID0gcGFzc3dvcmQodmFsLCB7IC4uLnBhc3N3b3JkT3B0aW9ucywgbWF4TGVuZ3RoOiA1IH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCd2YWxpZGF0aW9uOnNob3J0ZXJUaGFuTWF4JylcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgbWluTGVuZ3RoJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gJ3Nob3J0J1xuICAgICAgY29uc3QgcmVzdWx0ID0gcGFzc3dvcmQodmFsLCB7IC4uLnBhc3N3b3JkT3B0aW9ucywgbWluTGVuZ3RoOiAxMCB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsaWRhdGlvbjpsb25nZXJUaGFuTWluJylcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgbWF4TGVuZ3RoIHdpdGggbm8gdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHBhc3N3b3JkKHZhbCwgeyAuLi5wYXNzd29yZE9wdGlvbnMsIG1heExlbmd0aDogNSB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBtaW5MZW5ndGggd2l0aCBubyB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcmVzdWx0ID0gcGFzc3dvcmQodmFsLCB7IC4uLnBhc3N3b3JkT3B0aW9ucywgbWluTGVuZ3RoOiAxMCB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKVxuICAgIH0pXG4gIH0pXG5cbiAgZGVzY3JpYmUoJ3BvaW50JywgKCkgPT4ge1xuICAgIGNvbnN0IHBvaW50T3B0aW9ucyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBuYW1lOiAncG9pbnQnLFxuICAgICAgdHlwZTogJ3BvaW50JyxcbiAgICB9XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBudW1iZXJzJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gWycwLjEnLCAnMC4yJ11cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHBvaW50KHZhbCwgcG9pbnRPcHRpb25zKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBzdHJpbmdzIHRoYXQgY291bGQgYmUgbnVtYmVycycsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IFsnMC4xJywgJzAuMiddXG4gICAgICBjb25zdCByZXN1bHQgPSBwb2ludCh2YWwsIHBvaW50T3B0aW9ucylcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgc2hvdyByZXF1aXJlZCBtZXNzYWdlIHdoZW4gdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gdW5kZWZpbmVkXG4gICAgICBjb25zdCByZXN1bHQgPSBwb2ludCh2YWwsIHsgLi4ucG9pbnRPcHRpb25zLCByZXF1aXJlZDogdHJ1ZSB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQmUodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgc2hvdyByZXF1aXJlZCBtZXNzYWdlIHdoZW4gYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBbXVxuICAgICAgY29uc3QgcmVzdWx0ID0gcG9pbnQodmFsLCB7IC4uLnBvaW50T3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHNob3cgcmVxdWlyZWQgbWVzc2FnZSB3aGVuIGFycmF5IG9mIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHBvaW50KHZhbCwgeyAuLi5wb2ludE9wdGlvbnMsIHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9CZSh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgdW5kZWZpbmVkIG5vdCByZXF1aXJlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcmVzdWx0ID0gcGFzc3dvcmQodmFsLCBwb2ludE9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBlbXB0eSBhcnJheSBub3QgcmVxdWlyZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBbXVxuICAgICAgY29uc3QgcmVzdWx0ID0gcG9pbnQodmFsLCBwb2ludE9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBhcnJheSBvZiB1bmRlZmluZWQgbm90IHJlcXVpcmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXVxuICAgICAgY29uc3QgcmVzdWx0ID0gcG9pbnQodmFsLCBwb2ludE9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHByZXZlbnQgdGV4dCBpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IFsnYmFkJywgJ2lucHV0J11cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHBvaW50KHZhbCwgcG9pbnRPcHRpb25zKVxuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQmUodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgcHJldmVudCBtaXNzaW5nIHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gWzAuMV1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHBvaW50KHZhbCwgcG9pbnRPcHRpb25zKVxuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQmUodHJ1ZSlcbiAgICB9KVxuICB9KVxuXG4gIGRlc2NyaWJlKCdyZWxhdGlvbnNoaXAnLCAoKSA9PiB7XG4gICAgY29uc3QgcmVsYXRpb25Db2xsZWN0aW9uID0ge1xuICAgICAgZmllbGRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBzbHVnOiAncmVsYXRpb24nLFxuICAgIH1cblxuICAgIGNvbnN0IHJlbGF0aW9uc2hpcE9wdGlvbnMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGNvbGxlY3Rpb25zOiBbcmVsYXRpb25Db2xsZWN0aW9uXSxcbiAgICAgIH0sXG4gICAgICBwYXlsb2FkOiB7XG4gICAgICAgIGNvbGxlY3Rpb25zOiB7XG4gICAgICAgICAgcmVsYXRpb246IHtcbiAgICAgICAgICAgIGNvbmZpZzogcmVsYXRpb25Db2xsZWN0aW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcmVsYXRpb25UbzogJ3JlbGF0aW9uJyxcbiAgICB9XG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgcmVxdWlyZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlbGF0aW9uc2hpcCh2YWwsIHsgLi4ucmVsYXRpb25zaGlwT3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIGhhbmRsZSByZXF1aXJlZCB3aXRoIGhhc01hbnknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBbXVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVsYXRpb25zaGlwKHZhbCwge1xuICAgICAgICAuLi5yZWxhdGlvbnNoaXBPcHRpb25zLFxuICAgICAgICBoYXNNYW55OiB0cnVlLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9CZSh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBlbmZvcmNlIGhhc01hbnkgbWluJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbWluT3B0aW9ucyA9IHtcbiAgICAgICAgLi4ucmVsYXRpb25zaGlwT3B0aW9ucyxcbiAgICAgICAgaGFzTWFueTogdHJ1ZSxcbiAgICAgICAgbWluUm93czogMixcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsID0gWydhJ11cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVsYXRpb25zaGlwKHZhbCwgbWluT3B0aW9ucylcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0JlKHRydWUpXG5cbiAgICAgIGNvbnN0IGFsbG93ZWQgPSBhd2FpdCByZWxhdGlvbnNoaXAoWydhJywgJ2InXSwgbWluT3B0aW9ucylcbiAgICAgIGV4cGVjdChhbGxvd2VkKS50b1N0cmljdEVxdWFsKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIGVuZm9yY2UgaGFzTWFueSBtYXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBtYXhPcHRpb25zID0ge1xuICAgICAgICAuLi5yZWxhdGlvbnNoaXBPcHRpb25zLFxuICAgICAgICBoYXNNYW55OiB0cnVlLFxuICAgICAgICBtYXhSb3dzOiAyLFxuICAgICAgfVxuICAgICAgbGV0IHZhbCA9IFsnYScsICdiJywgJ2MnXVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWxhdGlvbnNoaXAodmFsLCBtYXhPcHRpb25zKVxuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQmUodHJ1ZSlcblxuICAgICAgdmFsID0gWydhJ11cbiAgICAgIGNvbnN0IGFsbG93ZWQgPSBhd2FpdCByZWxhdGlvbnNoaXAodmFsLCBtYXhPcHRpb25zKVxuICAgICAgZXhwZWN0KGFsbG93ZWQpLnRvU3RyaWN0RXF1YWwodHJ1ZSlcbiAgICB9KVxuICB9KVxuXG4gIGRlc2NyaWJlKCdzZWxlY3QnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0T3B0aW9ucyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBvcHRpb25zOiBbJ29uZScsICd0d28nLCAndGhyZWUnXSxcbiAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIH1cbiAgICBjb25zdCBvcHRpb25zUmVxdWlyZWQgPSB7XG4gICAgICAuLi5zZWxlY3RPcHRpb25zLFxuICAgICAgb3B0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdPbmUnLFxuICAgICAgICAgIHZhbHVlOiAnb25lJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAndHdvJyxcbiAgICAgICAgICB2YWx1ZTogJ3R3bycsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ3RocmVlJyxcbiAgICAgICAgICB2YWx1ZTogJ3RocmVlJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9uc1dpdGhFbXB0eVN0cmluZyA9IHtcbiAgICAgIC4uLnNlbGVjdE9wdGlvbnMsXG4gICAgICBvcHRpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ05vbmUnLFxuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnT3B0aW9uJyxcbiAgICAgICAgICB2YWx1ZTogJ29wdGlvbicsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cbiAgICBpdCgnc2hvdWxkIGFsbG93IHZhbGlkIGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gJ29uZSdcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHNlbGVjdCh2YWwsIHNlbGVjdE9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b1N0cmljdEVxdWFsKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHByZXZlbnQgaW52YWxpZCBpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9ICdiYWQnXG4gICAgICBjb25zdCByZXN1bHQgPSBzZWxlY3QodmFsLCBzZWxlY3RPcHRpb25zKVxuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvU3RyaWN0RXF1YWwodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgYWxsb3cgbnVsbCBpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IG51bGxcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHNlbGVjdCh2YWwsIHNlbGVjdE9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b1N0cmljdEVxdWFsKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIGFsbG93IHVuZGVmaW5lZCBpbnB1dCcsICgpID0+IHtcbiAgICAgIGxldCB2YWxcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHNlbGVjdCh2YWwsIHNlbGVjdE9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b1N0cmljdEVxdWFsKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHByZXZlbnQgZW1wdHkgc3RyaW5nIGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gJydcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHNlbGVjdCh2YWwsIHNlbGVjdE9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9TdHJpY3RFcXVhbCh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBwcmV2ZW50IHVuZGVmaW5lZCBpbnB1dCB3aXRoIHJlcXVpcmVkJywgKCkgPT4ge1xuICAgICAgbGV0IHZhbFxuICAgICAgY29uc3QgcmVzdWx0ID0gc2VsZWN0KHZhbCwgb3B0aW9uc1JlcXVpcmVkKVxuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvU3RyaWN0RXF1YWwodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgcHJldmVudCBlbXB0eSBzdHJpbmcgaW5wdXQgd2l0aCByZXF1aXJlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHNlbGVjdCgnJywgb3B0aW9uc1JlcXVpcmVkKVxuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvU3RyaWN0RXF1YWwodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgcHJldmVudCB1bmRlZmluZWQgaW5wdXQgd2l0aCByZXF1aXJlZCBhbmQgaGFzTWFueScsICgpID0+IHtcbiAgICAgIGxldCB2YWxcbiAgICAgIG9wdGlvbnMuaGFzTWFueSA9IHRydWVcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHNlbGVjdCh2YWwsIG9wdGlvbnNSZXF1aXJlZClcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b1N0cmljdEVxdWFsKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHByZXZlbnQgZW1wdHkgYXJyYXkgaW5wdXQgd2l0aCByZXF1aXJlZCBhbmQgaGFzTWFueScsICgpID0+IHtcbiAgICAgIG9wdGlvbnNSZXF1aXJlZC5oYXNNYW55ID0gdHJ1ZVxuICAgICAgY29uc3QgcmVzdWx0ID0gc2VsZWN0KFtdLCBvcHRpb25zUmVxdWlyZWQpXG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9TdHJpY3RFcXVhbCh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBwcmV2ZW50IGVtcHR5IHN0cmluZyBhcnJheSBpbnB1dCB3aXRoIHJlcXVpcmVkIGFuZCBoYXNNYW55JywgKCkgPT4ge1xuICAgICAgb3B0aW9ucy5oYXNNYW55ID0gdHJ1ZVxuICAgICAgY29uc3QgcmVzdWx0ID0gc2VsZWN0KFsnJ10sIG9wdGlvbnNSZXF1aXJlZClcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b1N0cmljdEVxdWFsKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHByZXZlbnQgbnVsbCBpbnB1dCB3aXRoIHJlcXVpcmVkIGFuZCBoYXNNYW55JywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gbnVsbFxuICAgICAgb3B0aW9ucy5oYXNNYW55ID0gdHJ1ZVxuICAgICAgY29uc3QgcmVzdWx0ID0gc2VsZWN0KHZhbCwgb3B0aW9uc1JlcXVpcmVkKVxuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvU3RyaWN0RXF1YWwodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgYWxsb3cgdmFsaWQgaW5wdXQgd2l0aCBvcHRpb24gb2JqZWN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9ICdvbmUnXG4gICAgICBvcHRpb25zLmhhc01hbnkgPSBmYWxzZVxuICAgICAgY29uc3QgcmVzdWx0ID0gc2VsZWN0KHZhbCwgb3B0aW9uc1JlcXVpcmVkKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9TdHJpY3RFcXVhbCh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBwcmV2ZW50IGludmFsaWQgaW5wdXQgd2l0aCBvcHRpb24gb2JqZWN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9ICdiYWQnXG4gICAgICBvcHRpb25zLmhhc01hbnkgPSBmYWxzZVxuICAgICAgY29uc3QgcmVzdWx0ID0gc2VsZWN0KHZhbCwgb3B0aW9uc1JlcXVpcmVkKVxuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvU3RyaWN0RXF1YWwodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgYWxsb3cgZW1wdHkgc3RyaW5nIGlucHV0IHdpdGggb3B0aW9uIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9ICcnXG4gICAgICBjb25zdCByZXN1bHQgPSBzZWxlY3QodmFsLCBvcHRpb25zV2l0aEVtcHR5U3RyaW5nKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9TdHJpY3RFcXVhbCh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBhbGxvdyBlbXB0eSBzdHJpbmcgaW5wdXQgd2l0aCBvcHRpb24gb2JqZWN0IGFuZCByZXF1aXJlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9ICcnXG4gICAgICBvcHRpb25zV2l0aEVtcHR5U3RyaW5nLnJlcXVpcmVkID0gdHJ1ZVxuICAgICAgY29uc3QgcmVzdWx0ID0gc2VsZWN0KHZhbCwgb3B0aW9uc1dpdGhFbXB0eVN0cmluZylcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvU3RyaWN0RXF1YWwodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgYWxsb3cgdmFsaWQgaW5wdXQgd2l0aCBoYXNNYW55JywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gWydvbmUnLCAndHdvJ11cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHNlbGVjdCh2YWwsIHNlbGVjdE9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b1N0cmljdEVxdWFsKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHByZXZlbnQgaW52YWxpZCBpbnB1dCB3aXRoIGhhc01hbnknLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBbJ29uZScsICdiYWQnXVxuICAgICAgY29uc3QgcmVzdWx0ID0gc2VsZWN0KHZhbCwgc2VsZWN0T3B0aW9ucylcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b1N0cmljdEVxdWFsKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIGFsbG93IHZhbGlkIGlucHV0IHdpdGggaGFzTWFueSBvcHRpb24gb2JqZWN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IFsnb25lJywgJ3RocmVlJ11cbiAgICAgIG9wdGlvbnNSZXF1aXJlZC5oYXNNYW55ID0gdHJ1ZVxuICAgICAgY29uc3QgcmVzdWx0ID0gc2VsZWN0KHZhbCwgb3B0aW9uc1JlcXVpcmVkKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9TdHJpY3RFcXVhbCh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBwcmV2ZW50IGludmFsaWQgaW5wdXQgd2l0aCBoYXNNYW55IG9wdGlvbiBvYmplY3RzJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gWyd0aHJlZScsICdiYWQnXVxuICAgICAgb3B0aW9uc1JlcXVpcmVkLmhhc01hbnkgPSB0cnVlXG4gICAgICBjb25zdCByZXN1bHQgPSBzZWxlY3QodmFsLCBvcHRpb25zUmVxdWlyZWQpXG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9TdHJpY3RFcXVhbCh0cnVlKVxuICAgIH0pXG4gIH0pXG4gIGRlc2NyaWJlKCdudW1iZXInLCAoKSA9PiB7XG4gICAgY29uc3QgbnVtYmVyT3B0aW9ucyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBuYW1lOiAndGVzdCcsXG4gICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICB9XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IDFcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG51bWJlcih2YWwsIG51bWJlck9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIDAnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSAwXG4gICAgICBjb25zdCByZXN1bHQgPSBudW1iZXIodmFsLCB7IC4uLm51bWJlck9wdGlvbnMsIHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIDInLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSAxLjVcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG51bWJlcih2YWwsIG51bWJlck9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHNob3cgaW52YWxpZCBudW1iZXIgbWVzc2FnZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9ICd0ZXN0J1xuICAgICAgY29uc3QgcmVzdWx0ID0gbnVtYmVyKHZhbCwgeyAuLi5udW1iZXJPcHRpb25zIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCd2YWxpZGF0aW9uOmVudGVyTnVtYmVyJylcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGVtcHR5IHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gJydcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG51bWJlcih2YWwsIHsgLi4ubnVtYmVyT3B0aW9ucyB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgcmVxdWlyZWQgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSAnJ1xuICAgICAgY29uc3QgcmVzdWx0ID0gbnVtYmVyKHZhbCwgeyAuLi5udW1iZXJPcHRpb25zLCByZXF1aXJlZDogdHJ1ZSB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsaWRhdGlvbjpyZXF1aXJlZCcpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIG1pblZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gMi40XG4gICAgICBjb25zdCByZXN1bHQgPSBudW1iZXIodmFsLCB7IC4uLm51bWJlck9wdGlvbnMsIG1pbjogMi41IH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCd2YWxpZGF0aW9uOmxlc3NUaGFuTWluJylcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgbWF4VmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSAxLjI1XG4gICAgICBjb25zdCByZXN1bHQgPSBudW1iZXIodmFsLCB7IC4uLm51bWJlck9wdGlvbnMsIG1heDogMSB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsaWRhdGlvbjpncmVhdGVyVGhhbk1heCcpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFuIGFycmF5IG9mIG51bWJlcnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBbMS4yNSwgMi41XVxuICAgICAgY29uc3QgcmVzdWx0ID0gbnVtYmVyKHZhbCwgeyAuLi5udW1iZXJPcHRpb25zLCBoYXNNYW55OiB0cnVlIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFuIGFycmF5IG9mIG51bWJlcnMgdXNpbmcgbWluJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gWzEuMjUsIDIuNV1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IG51bWJlcih2YWwsIHsgLi4ubnVtYmVyT3B0aW9ucywgaGFzTWFueTogdHJ1ZSwgbWluOiAzIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCd2YWxpZGF0aW9uOmxlc3NUaGFuTWluJylcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYW4gYXJyYXkgb2YgbnVtYmVycyB1c2luZyBtYXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBbMS4yNSwgMi41XVxuICAgICAgY29uc3QgcmVzdWx0ID0gbnVtYmVyKHZhbCwgeyAuLi5udW1iZXJPcHRpb25zLCBoYXNNYW55OiB0cnVlLCBtYXg6IDEgfSlcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3ZhbGlkYXRpb246Z3JlYXRlclRoYW5NYXgnKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhbiBhcnJheSBvZiBudW1iZXJzIHVzaW5nIG1pblJvd3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBbMS4yNSwgMi41XVxuICAgICAgY29uc3QgcmVzdWx0ID0gbnVtYmVyKHZhbCwgeyAuLi5udW1iZXJPcHRpb25zLCBoYXNNYW55OiB0cnVlLCBtaW5Sb3dzOiA0IH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCd2YWxpZGF0aW9uOnJlcXVpcmVzQXRMZWFzdCcpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFuIGFycmF5IG9mIG51bWJlcnMgdXNpbmcgbWF4Um93cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IFsxLjI1LCAyLjUsIDMuNV1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IG51bWJlcih2YWwsIHsgLi4ubnVtYmVyT3B0aW9ucywgaGFzTWFueTogdHJ1ZSwgbWF4Um93czogMiB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsaWRhdGlvbjpyZXF1aXJlc05vTW9yZVRoYW4nKVxuICAgIH0pXG4gIH0pXG59KVxuIl0sIm5hbWVzIjpbInQiLCJqZXN0IiwiZm4iLCJzdHJpbmciLCJvcHRpb25zIiwiZGF0YSIsInVuZGVmaW5lZCIsIm9wZXJhdGlvbiIsInNpYmxpbmdEYXRhIiwiZGVzY3JpYmUiLCJpdCIsInZhbCIsInJlc3VsdCIsInRleHQiLCJleHBlY3QiLCJ0b0JlIiwicmVxdWlyZWQiLCJtYXhMZW5ndGgiLCJtaW5MZW5ndGgiLCJoYXNNYW55IiwiZmllbGQiLCJuYW1lIiwidHlwZSIsInRleHRhcmVhIiwicGFzc3dvcmRPcHRpb25zIiwicGFzc3dvcmQiLCJwb2ludE9wdGlvbnMiLCJwb2ludCIsIm5vdCIsInJlbGF0aW9uQ29sbGVjdGlvbiIsImZpZWxkcyIsInNsdWciLCJyZWxhdGlvbnNoaXBPcHRpb25zIiwiY29uZmlnIiwiY29sbGVjdGlvbnMiLCJwYXlsb2FkIiwicmVsYXRpb24iLCJyZWxhdGlvblRvIiwicmVsYXRpb25zaGlwIiwibWluT3B0aW9ucyIsIm1pblJvd3MiLCJhbGxvd2VkIiwidG9TdHJpY3RFcXVhbCIsIm1heE9wdGlvbnMiLCJtYXhSb3dzIiwic2VsZWN0T3B0aW9ucyIsIm9wdGlvbnNSZXF1aXJlZCIsImxhYmVsIiwidmFsdWUiLCJvcHRpb25zV2l0aEVtcHR5U3RyaW5nIiwic2VsZWN0IiwibnVtYmVyT3B0aW9ucyIsIm51bWJlciIsIm1pbiIsIm1heCJdLCJtYXBwaW5ncyI6Ijs7Ozs2QkFFOEU7QUFFOUUsTUFBTUEsSUFBSUMsS0FBS0MsRUFBRSxDQUFDLENBQUNDLFNBQVdBO0FBRTlCLElBQUlDLFVBQTBDO0lBQzVDQyxNQUFNQztJQUNOQyxXQUFXO0lBQ1hDLGFBQWFGO0lBQ2JOO0FBQ0Y7QUFFQVMsU0FBUyxxQkFBcUI7SUFDNUJBLFNBQVMsUUFBUTtR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
654
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maWVsZHMvdmFsaWRhdGlvbnMuc3BlYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFZhbGlkYXRlT3B0aW9ucyB9IGZyb20gJy4vY29uZmlnL3R5cGVzLmQudHMnXG5cbmltcG9ydCB7IG51bWJlciwgcGFzc3dvcmQsIHBvaW50LCByZWxhdGlvbnNoaXAsIHNlbGVjdCwgdGV4dCwgdGV4dGFyZWEgfSBmcm9tICcuL3ZhbGlkYXRpb25zLmpzJ1xuXG5jb25zdCB0ID0gamVzdC5mbigoc3RyaW5nKSA9PiBzdHJpbmcpXG5cbmxldCBvcHRpb25zOiBWYWxpZGF0ZU9wdGlvbnM8YW55LCBhbnk+ID0ge1xuICBkYXRhOiB1bmRlZmluZWQsXG4gIG9wZXJhdGlvbjogJ2NyZWF0ZScsXG4gIHNpYmxpbmdEYXRhOiB1bmRlZmluZWQsXG4gIHJlcToge1xuICAgIHQsXG4gICAgY29udGV4dDoge30sXG4gICAgcGF5bG9hZDoge1xuICAgICAgY29uZmlnOiB7fSxcbiAgICB9LFxuICB9LFxufVxuXG5kZXNjcmliZSgnRmllbGQgVmFsaWRhdGlvbnMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCd0ZXh0JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSAndGVzdCdcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRleHQodmFsLCBvcHRpb25zKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBzaG93IHJlcXVpcmVkIG1lc3NhZ2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRleHQodmFsLCB7IC4uLm9wdGlvbnMsIHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCd2YWxpZGF0aW9uOnJlcXVpcmVkJylcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcmVzdWx0ID0gdGV4dCh2YWwsIG9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIG1heExlbmd0aCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9ICd0b29sb25nJ1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGV4dCh2YWwsIHsgLi4ub3B0aW9ucywgbWF4TGVuZ3RoOiA1IH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCd2YWxpZGF0aW9uOnNob3J0ZXJUaGFuTWF4JylcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgbWluTGVuZ3RoJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gJ3Nob3J0J1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGV4dCh2YWwsIHsgLi4ub3B0aW9ucywgbWluTGVuZ3RoOiAxMCB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsaWRhdGlvbjpsb25nZXJUaGFuTWluJylcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgbWF4TGVuZ3RoIHdpdGggbm8gdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRleHQodmFsLCB7IC4uLm9wdGlvbnMsIG1heExlbmd0aDogNSB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBtaW5MZW5ndGggd2l0aCBubyB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcmVzdWx0ID0gdGV4dCh2YWwsIHsgLi4ub3B0aW9ucywgbWluTGVuZ3RoOiAxMCB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhbiBhcnJheSBvZiB0ZXh0cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IFsndGVzdCddXG4gICAgICBjb25zdCByZXN1bHQgPSB0ZXh0KHZhbCwgeyAuLi5vcHRpb25zLCBoYXNNYW55OiB0cnVlIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIGhhbmRsZSByZXF1aXJlZCBhcnJheSBvZiB0ZXh0cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IFsndGVzdCddXG4gICAgICBjb25zdCByZXN1bHQgPSB0ZXh0KHZhbCwgeyAuLi5vcHRpb25zLCBoYXNNYW55OiB0cnVlLCByZXF1aXJlZDogdHJ1ZSB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKVxuICAgIH0pXG4gIH0pXG5cbiAgZGVzY3JpYmUoJ3RleHRhcmVhJywgKCkgPT4ge1xuICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIGZpZWxkOiB7IG5hbWU6ICd0ZXN0JywgdHlwZTogJ3RleHRhcmVhJyB9IH1cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gJ3Rlc3QnXG4gICAgICBjb25zdCByZXN1bHQgPSB0ZXh0YXJlYSh2YWwsIG9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHNob3cgcmVxdWlyZWQgbWVzc2FnZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcmVzdWx0ID0gdGV4dGFyZWEodmFsLCB7IC4uLm9wdGlvbnMsIHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCd2YWxpZGF0aW9uOnJlcXVpcmVkJylcbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gdW5kZWZpbmVkXG4gICAgICBjb25zdCByZXN1bHQgPSB0ZXh0YXJlYSh2YWwsIG9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIG1heExlbmd0aCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9ICd0b29sb25nJ1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGV4dGFyZWEodmFsLCB7IC4uLm9wdGlvbnMsIG1heExlbmd0aDogNSB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsaWRhdGlvbjpzaG9ydGVyVGhhbk1heCcpXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgbWluTGVuZ3RoJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gJ3Nob3J0J1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGV4dGFyZWEodmFsLCB7IC4uLm9wdGlvbnMsIG1pbkxlbmd0aDogMTAgfSlcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3ZhbGlkYXRpb246bG9uZ2VyVGhhbk1pbicpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIG1heExlbmd0aCB3aXRoIG5vIHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gdW5kZWZpbmVkXG4gICAgICBjb25zdCByZXN1bHQgPSB0ZXh0YXJlYSh2YWwsIHsgLi4ub3B0aW9ucywgbWF4TGVuZ3RoOiA1IH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIG1pbkxlbmd0aCB3aXRoIG5vIHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gdW5kZWZpbmVkXG4gICAgICBjb25zdCByZXN1bHQgPSB0ZXh0YXJlYSh2YWwsIHsgLi4ub3B0aW9ucywgbWluTGVuZ3RoOiAxMCB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKVxuICAgIH0pXG4gIH0pXG5cbiAgZGVzY3JpYmUoJ3Bhc3N3b3JkJywgKCkgPT4ge1xuICAgIGNvbnN0IHBhc3N3b3JkT3B0aW9ucyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBuYW1lOiAndGVzdCcsXG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxuICAgIH1cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gJ3Rlc3QnXG4gICAgICBjb25zdCByZXN1bHQgPSBwYXNzd29yZCh2YWwsIHBhc3N3b3JkT3B0aW9ucylcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgc2hvdyByZXF1aXJlZCBtZXNzYWdlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gdW5kZWZpbmVkXG4gICAgICBjb25zdCByZXN1bHQgPSBwYXNzd29yZCh2YWwsIHsgLi4ucGFzc3dvcmRPcHRpb25zLCByZXF1aXJlZDogdHJ1ZSB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsaWRhdGlvbjpyZXF1aXJlZCcpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIGhhbmRsZSB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHBhc3N3b3JkKHZhbCwgcGFzc3dvcmRPcHRpb25zKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBtYXhMZW5ndGgnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSAndG9vbG9uZydcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHBhc3N3b3JkKHZhbCwgeyAuLi5wYXNzd29yZE9wdGlvbnMsIG1heExlbmd0aDogNSB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsaWRhdGlvbjpzaG9ydGVyVGhhbk1heCcpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIG1pbkxlbmd0aCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9ICdzaG9ydCdcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHBhc3N3b3JkKHZhbCwgeyAuLi5wYXNzd29yZE9wdGlvbnMsIG1pbkxlbmd0aDogMTAgfSlcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3ZhbGlkYXRpb246bG9uZ2VyVGhhbk1pbicpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIG1heExlbmd0aCB3aXRoIG5vIHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gdW5kZWZpbmVkXG4gICAgICBjb25zdCByZXN1bHQgPSBwYXNzd29yZCh2YWwsIHsgLi4ucGFzc3dvcmRPcHRpb25zLCBtYXhMZW5ndGg6IDUgfSlcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgbWluTGVuZ3RoIHdpdGggbm8gdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHBhc3N3b3JkKHZhbCwgeyAuLi5wYXNzd29yZE9wdGlvbnMsIG1pbkxlbmd0aDogMTAgfSlcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSlcbiAgICB9KVxuICB9KVxuXG4gIGRlc2NyaWJlKCdwb2ludCcsICgpID0+IHtcbiAgICBjb25zdCBwb2ludE9wdGlvbnMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbmFtZTogJ3BvaW50JyxcbiAgICAgIHR5cGU6ICdwb2ludCcsXG4gICAgfVxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgbnVtYmVycycsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IFsnMC4xJywgJzAuMiddXG4gICAgICBjb25zdCByZXN1bHQgPSBwb2ludCh2YWwsIHBvaW50T3B0aW9ucylcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgc3RyaW5ncyB0aGF0IGNvdWxkIGJlIG51bWJlcnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBbJzAuMScsICcwLjInXVxuICAgICAgY29uc3QgcmVzdWx0ID0gcG9pbnQodmFsLCBwb2ludE9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHNob3cgcmVxdWlyZWQgbWVzc2FnZSB3aGVuIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IHVuZGVmaW5lZFxuICAgICAgY29uc3QgcmVzdWx0ID0gcG9pbnQodmFsLCB7IC4uLnBvaW50T3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHNob3cgcmVxdWlyZWQgbWVzc2FnZSB3aGVuIGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gW11cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHBvaW50KHZhbCwgeyAuLi5wb2ludE9wdGlvbnMsIHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9CZSh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBzaG93IHJlcXVpcmVkIG1lc3NhZ2Ugd2hlbiBhcnJheSBvZiB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBbdW5kZWZpbmVkLCB1bmRlZmluZWRdXG4gICAgICBjb25zdCByZXN1bHQgPSBwb2ludCh2YWwsIHsgLi4ucG9pbnRPcHRpb25zLCByZXF1aXJlZDogdHJ1ZSB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQmUodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHVuZGVmaW5lZCBub3QgcmVxdWlyZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHBhc3N3b3JkKHZhbCwgcG9pbnRPcHRpb25zKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZW1wdHkgYXJyYXkgbm90IHJlcXVpcmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gW11cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHBvaW50KHZhbCwgcG9pbnRPcHRpb25zKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgYXJyYXkgb2YgdW5kZWZpbmVkIG5vdCByZXF1aXJlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHBvaW50KHZhbCwgcG9pbnRPcHRpb25zKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBwcmV2ZW50IHRleHQgaW5wdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBbJ2JhZCcsICdpbnB1dCddXG4gICAgICBjb25zdCByZXN1bHQgPSBwb2ludCh2YWwsIHBvaW50T3B0aW9ucylcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHByZXZlbnQgbWlzc2luZyB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IFswLjFdXG4gICAgICBjb25zdCByZXN1bHQgPSBwb2ludCh2YWwsIHBvaW50T3B0aW9ucylcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0JlKHRydWUpXG4gICAgfSlcbiAgfSlcblxuICBkZXNjcmliZSgncmVsYXRpb25zaGlwJywgKCkgPT4ge1xuICAgIGNvbnN0IHJlbGF0aW9uQ29sbGVjdGlvbiA9IHtcbiAgICAgIGZpZWxkczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgc2x1ZzogJ3JlbGF0aW9uJyxcbiAgICB9XG5cbiAgICBjb25zdCByZWxhdGlvbnNoaXBPcHRpb25zID0ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHJlcToge1xuICAgICAgICAuLi5vcHRpb25zLnJlcSxcbiAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgIC4uLm9wdGlvbnMucmVxLnBheWxvYWQsXG4gICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uczogW3JlbGF0aW9uQ29sbGVjdGlvbl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb2xsZWN0aW9uczoge1xuICAgICAgICAgICAgcmVsYXRpb246IHtcbiAgICAgICAgICAgICAgY29uZmlnOiByZWxhdGlvbkNvbGxlY3Rpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcmVsYXRpb25UbzogJ3JlbGF0aW9uJyxcbiAgICB9XG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgcmVxdWlyZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlbGF0aW9uc2hpcCh2YWwsIHsgLi4ucmVsYXRpb25zaGlwT3B0aW9ucywgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIGhhbmRsZSByZXF1aXJlZCB3aXRoIGhhc01hbnknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBbXVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVsYXRpb25zaGlwKHZhbCwge1xuICAgICAgICAuLi5yZWxhdGlvbnNoaXBPcHRpb25zLFxuICAgICAgICBoYXNNYW55OiB0cnVlLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9CZSh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBlbmZvcmNlIGhhc01hbnkgbWluJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbWluT3B0aW9ucyA9IHtcbiAgICAgICAgLi4ucmVsYXRpb25zaGlwT3B0aW9ucyxcbiAgICAgICAgaGFzTWFueTogdHJ1ZSxcbiAgICAgICAgbWluUm93czogMixcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsID0gWydhJ11cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVsYXRpb25zaGlwKHZhbCwgbWluT3B0aW9ucylcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0JlKHRydWUpXG5cbiAgICAgIGNvbnN0IGFsbG93ZWQgPSBhd2FpdCByZWxhdGlvbnNoaXAoWydhJywgJ2InXSwgbWluT3B0aW9ucylcbiAgICAgIGV4cGVjdChhbGxvd2VkKS50b1N0cmljdEVxdWFsKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIGVuZm9yY2UgaGFzTWFueSBtYXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBtYXhPcHRpb25zID0ge1xuICAgICAgICAuLi5yZWxhdGlvbnNoaXBPcHRpb25zLFxuICAgICAgICBoYXNNYW55OiB0cnVlLFxuICAgICAgICBtYXhSb3dzOiAyLFxuICAgICAgfVxuICAgICAgbGV0IHZhbCA9IFsnYScsICdiJywgJ2MnXVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWxhdGlvbnNoaXAodmFsLCBtYXhPcHRpb25zKVxuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQmUodHJ1ZSlcblxuICAgICAgdmFsID0gWydhJ11cbiAgICAgIGNvbnN0IGFsbG93ZWQgPSBhd2FpdCByZWxhdGlvbnNoaXAodmFsLCBtYXhPcHRpb25zKVxuICAgICAgZXhwZWN0KGFsbG93ZWQpLnRvU3RyaWN0RXF1YWwodHJ1ZSlcbiAgICB9KVxuICB9KVxuXG4gIGRlc2NyaWJlKCdzZWxlY3QnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0T3B0aW9ucyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBvcHRpb25zOiBbJ29uZScsICd0d28nLCAndGhyZWUnXSxcbiAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIH1cbiAgICBjb25zdCBvcHRpb25zUmVxdWlyZWQgPSB7XG4gICAgICAuLi5zZWxlY3RPcHRpb25zLFxuICAgICAgb3B0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdPbmUnLFxuICAgICAgICAgIHZhbHVlOiAnb25lJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAndHdvJyxcbiAgICAgICAgICB2YWx1ZTogJ3R3bycsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ3RocmVlJyxcbiAgICAgICAgICB2YWx1ZTogJ3RocmVlJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9uc1dpdGhFbXB0eVN0cmluZyA9IHtcbiAgICAgIC4uLnNlbGVjdE9wdGlvbnMsXG4gICAgICBvcHRpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ05vbmUnLFxuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnT3B0aW9uJyxcbiAgICAgICAgICB2YWx1ZTogJ29wdGlvbicsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cbiAgICBpdCgnc2hvdWxkIGFsbG93IHZhbGlkIGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gJ29uZSdcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHNlbGVjdCh2YWwsIHNlbGVjdE9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b1N0cmljdEVxdWFsKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHByZXZlbnQgaW52YWxpZCBpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9ICdiYWQnXG4gICAgICBjb25zdCByZXN1bHQgPSBzZWxlY3QodmFsLCBzZWxlY3RPcHRpb25zKVxuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvU3RyaWN0RXF1YWwodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgYWxsb3cgbnVsbCBpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IG51bGxcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHNlbGVjdCh2YWwsIHNlbGVjdE9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b1N0cmljdEVxdWFsKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIGFsbG93IHVuZGVmaW5lZCBpbnB1dCcsICgpID0+IHtcbiAgICAgIGxldCB2YWxcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHNlbGVjdCh2YWwsIHNlbGVjdE9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b1N0cmljdEVxdWFsKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHByZXZlbnQgZW1wdHkgc3RyaW5nIGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gJydcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHNlbGVjdCh2YWwsIHNlbGVjdE9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9TdHJpY3RFcXVhbCh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBwcmV2ZW50IHVuZGVmaW5lZCBpbnB1dCB3aXRoIHJlcXVpcmVkJywgKCkgPT4ge1xuICAgICAgbGV0IHZhbFxuICAgICAgY29uc3QgcmVzdWx0ID0gc2VsZWN0KHZhbCwgb3B0aW9uc1JlcXVpcmVkKVxuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvU3RyaWN0RXF1YWwodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgcHJldmVudCBlbXB0eSBzdHJpbmcgaW5wdXQgd2l0aCByZXF1aXJlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHNlbGVjdCgnJywgb3B0aW9uc1JlcXVpcmVkKVxuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvU3RyaWN0RXF1YWwodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgcHJldmVudCB1bmRlZmluZWQgaW5wdXQgd2l0aCByZXF1aXJlZCBhbmQgaGFzTWFueScsICgpID0+IHtcbiAgICAgIGxldCB2YWxcbiAgICAgIG9wdGlvbnMuaGFzTWFueSA9IHRydWVcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHNlbGVjdCh2YWwsIG9wdGlvbnNSZXF1aXJlZClcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b1N0cmljdEVxdWFsKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHByZXZlbnQgZW1wdHkgYXJyYXkgaW5wdXQgd2l0aCByZXF1aXJlZCBhbmQgaGFzTWFueScsICgpID0+IHtcbiAgICAgIG9wdGlvbnNSZXF1aXJlZC5oYXNNYW55ID0gdHJ1ZVxuICAgICAgY29uc3QgcmVzdWx0ID0gc2VsZWN0KFtdLCBvcHRpb25zUmVxdWlyZWQpXG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9TdHJpY3RFcXVhbCh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBwcmV2ZW50IGVtcHR5IHN0cmluZyBhcnJheSBpbnB1dCB3aXRoIHJlcXVpcmVkIGFuZCBoYXNNYW55JywgKCkgPT4ge1xuICAgICAgb3B0aW9ucy5oYXNNYW55ID0gdHJ1ZVxuICAgICAgY29uc3QgcmVzdWx0ID0gc2VsZWN0KFsnJ10sIG9wdGlvbnNSZXF1aXJlZClcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b1N0cmljdEVxdWFsKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHByZXZlbnQgbnVsbCBpbnB1dCB3aXRoIHJlcXVpcmVkIGFuZCBoYXNNYW55JywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gbnVsbFxuICAgICAgb3B0aW9ucy5oYXNNYW55ID0gdHJ1ZVxuICAgICAgY29uc3QgcmVzdWx0ID0gc2VsZWN0KHZhbCwgb3B0aW9uc1JlcXVpcmVkKVxuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvU3RyaWN0RXF1YWwodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgYWxsb3cgdmFsaWQgaW5wdXQgd2l0aCBvcHRpb24gb2JqZWN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9ICdvbmUnXG4gICAgICBvcHRpb25zLmhhc01hbnkgPSBmYWxzZVxuICAgICAgY29uc3QgcmVzdWx0ID0gc2VsZWN0KHZhbCwgb3B0aW9uc1JlcXVpcmVkKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9TdHJpY3RFcXVhbCh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBwcmV2ZW50IGludmFsaWQgaW5wdXQgd2l0aCBvcHRpb24gb2JqZWN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9ICdiYWQnXG4gICAgICBvcHRpb25zLmhhc01hbnkgPSBmYWxzZVxuICAgICAgY29uc3QgcmVzdWx0ID0gc2VsZWN0KHZhbCwgb3B0aW9uc1JlcXVpcmVkKVxuICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvU3RyaWN0RXF1YWwodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgYWxsb3cgZW1wdHkgc3RyaW5nIGlucHV0IHdpdGggb3B0aW9uIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9ICcnXG4gICAgICBjb25zdCByZXN1bHQgPSBzZWxlY3QodmFsLCBvcHRpb25zV2l0aEVtcHR5U3RyaW5nKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9TdHJpY3RFcXVhbCh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBhbGxvdyBlbXB0eSBzdHJpbmcgaW5wdXQgd2l0aCBvcHRpb24gb2JqZWN0IGFuZCByZXF1aXJlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9ICcnXG4gICAgICBvcHRpb25zV2l0aEVtcHR5U3RyaW5nLnJlcXVpcmVkID0gdHJ1ZVxuICAgICAgY29uc3QgcmVzdWx0ID0gc2VsZWN0KHZhbCwgb3B0aW9uc1dpdGhFbXB0eVN0cmluZylcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvU3RyaWN0RXF1YWwodHJ1ZSlcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgYWxsb3cgdmFsaWQgaW5wdXQgd2l0aCBoYXNNYW55JywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gWydvbmUnLCAndHdvJ11cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHNlbGVjdCh2YWwsIHNlbGVjdE9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b1N0cmljdEVxdWFsKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHByZXZlbnQgaW52YWxpZCBpbnB1dCB3aXRoIGhhc01hbnknLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBbJ29uZScsICdiYWQnXVxuICAgICAgY29uc3QgcmVzdWx0ID0gc2VsZWN0KHZhbCwgc2VsZWN0T3B0aW9ucylcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b1N0cmljdEVxdWFsKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIGFsbG93IHZhbGlkIGlucHV0IHdpdGggaGFzTWFueSBvcHRpb24gb2JqZWN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IFsnb25lJywgJ3RocmVlJ11cbiAgICAgIG9wdGlvbnNSZXF1aXJlZC5oYXNNYW55ID0gdHJ1ZVxuICAgICAgY29uc3QgcmVzdWx0ID0gc2VsZWN0KHZhbCwgb3B0aW9uc1JlcXVpcmVkKVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9TdHJpY3RFcXVhbCh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBwcmV2ZW50IGludmFsaWQgaW5wdXQgd2l0aCBoYXNNYW55IG9wdGlvbiBvYmplY3RzJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gWyd0aHJlZScsICdiYWQnXVxuICAgICAgb3B0aW9uc1JlcXVpcmVkLmhhc01hbnkgPSB0cnVlXG4gICAgICBjb25zdCByZXN1bHQgPSBzZWxlY3QodmFsLCBvcHRpb25zUmVxdWlyZWQpXG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9TdHJpY3RFcXVhbCh0cnVlKVxuICAgIH0pXG4gIH0pXG4gIGRlc2NyaWJlKCdudW1iZXInLCAoKSA9PiB7XG4gICAgY29uc3QgbnVtYmVyT3B0aW9ucyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBuYW1lOiAndGVzdCcsXG4gICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICB9XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IDFcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG51bWJlcih2YWwsIG51bWJlck9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIDAnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSAwXG4gICAgICBjb25zdCByZXN1bHQgPSBudW1iZXIodmFsLCB7IC4uLm51bWJlck9wdGlvbnMsIHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIDInLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSAxLjVcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG51bWJlcih2YWwsIG51bWJlck9wdGlvbnMpXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHNob3cgaW52YWxpZCBudW1iZXIgbWVzc2FnZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9ICd0ZXN0J1xuICAgICAgY29uc3QgcmVzdWx0ID0gbnVtYmVyKHZhbCwgeyAuLi5udW1iZXJPcHRpb25zIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCd2YWxpZGF0aW9uOmVudGVyTnVtYmVyJylcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGVtcHR5IHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gJydcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG51bWJlcih2YWwsIHsgLi4ubnVtYmVyT3B0aW9ucyB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgcmVxdWlyZWQgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSAnJ1xuICAgICAgY29uc3QgcmVzdWx0ID0gbnVtYmVyKHZhbCwgeyAuLi5udW1iZXJPcHRpb25zLCByZXF1aXJlZDogdHJ1ZSB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsaWRhdGlvbjpyZXF1aXJlZCcpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIG1pblZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gMi40XG4gICAgICBjb25zdCByZXN1bHQgPSBudW1iZXIodmFsLCB7IC4uLm51bWJlck9wdGlvbnMsIG1pbjogMi41IH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCd2YWxpZGF0aW9uOmxlc3NUaGFuTWluJylcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgbWF4VmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSAxLjI1XG4gICAgICBjb25zdCByZXN1bHQgPSBudW1iZXIodmFsLCB7IC4uLm51bWJlck9wdGlvbnMsIG1heDogMSB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsaWRhdGlvbjpncmVhdGVyVGhhbk1heCcpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFuIGFycmF5IG9mIG51bWJlcnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBbMS4yNSwgMi41XVxuICAgICAgY29uc3QgcmVzdWx0ID0gbnVtYmVyKHZhbCwgeyAuLi5udW1iZXJPcHRpb25zLCBoYXNNYW55OiB0cnVlIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFuIGFycmF5IG9mIG51bWJlcnMgdXNpbmcgbWluJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gWzEuMjUsIDIuNV1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IG51bWJlcih2YWwsIHsgLi4ubnVtYmVyT3B0aW9ucywgaGFzTWFueTogdHJ1ZSwgbWluOiAzIH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCd2YWxpZGF0aW9uOmxlc3NUaGFuTWluJylcbiAgICB9KVxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYW4gYXJyYXkgb2YgbnVtYmVycyB1c2luZyBtYXgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBbMS4yNSwgMi41XVxuICAgICAgY29uc3QgcmVzdWx0ID0gbnVtYmVyKHZhbCwgeyAuLi5udW1iZXJPcHRpb25zLCBoYXNNYW55OiB0cnVlLCBtYXg6IDEgfSlcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3ZhbGlkYXRpb246Z3JlYXRlclRoYW5NYXgnKVxuICAgIH0pXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhbiBhcnJheSBvZiBudW1iZXJzIHVzaW5nIG1pblJvd3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSBbMS4yNSwgMi41XVxuICAgICAgY29uc3QgcmVzdWx0ID0gbnVtYmVyKHZhbCwgeyAuLi5udW1iZXJPcHRpb25zLCBoYXNNYW55OiB0cnVlLCBtaW5Sb3dzOiA0IH0pXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCd2YWxpZGF0aW9uOnJlcXVpcmVzQXRMZWFzdCcpXG4gICAgfSlcbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFuIGFycmF5IG9mIG51bWJlcnMgdXNpbmcgbWF4Um93cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IFsxLjI1LCAyLjUsIDMuNV1cbiAgICAgIGNvbnN0IHJlc3VsdCA9IG51bWJlcih2YWwsIHsgLi4ubnVtYmVyT3B0aW9ucywgaGFzTWFueTogdHJ1ZSwgbWF4Um93czogMiB9KVxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsaWRhdGlvbjpyZXF1aXJlc05vTW9yZVRoYW4nKVxuICAgIH0pXG4gIH0pXG59KVxuIl0sIm5hbWVzIjpbIm51bWJlciIsInBhc3N3b3JkIiwicG9pbnQiLCJyZWxhdGlvbnNoaXAiLCJzZWxlY3QiLCJ0ZXh0IiwidGV4dGFyZWEiLCJ0IiwiamVzdCIsImZuIiwic3RyaW5nIiwib3B0aW9ucyIsImRhdGEiLCJ1bmRlZmluZWQiLCJvcGVyYXRpb24iLCJzaWJsaW5nRGF0YSIsInJlcSIsImNvbnRleHQiLCJwYXlsb2FkIiwiY29uZmlnIiwiZGVzY3JpYmUiLCJpdCIsInZhbCIsInJlc3VsdCIsImV4cGVjdCIsInRvQmUiLCJyZXF1aXJlZCIsIm1heExlbmd0aCIsIm1pbkxlbmd0aCIsImhhc01hbnkiLCJmaWVsZCIsIm5hbWUiLCJ0eXBlIiwicGFzc3dvcmRPcHRpb25zIiwicG9pbnRPcHRpb25zIiwibm90IiwicmVsYXRpb25Db2xsZWN0aW9uIiwiZmllbGRzIiwic2x1ZyIsInJlbGF0aW9uc2hpcE9wdGlvbnMiLCJjb2xsZWN0aW9ucyIsInJlbGF0aW9uIiwicmVsYXRpb25UbyIsIm1pbk9wdGlvbnMiLCJtaW5Sb3dzIiwiYWxsb3dlZCIsInRvU3RyaWN0RXF1YWwiLCJtYXhPcHRpb25zIiwibWF4Um93cyIsInNlbGVjdE9wdGlvbnMiLCJvcHRpb25zUmVxdWlyZWQiLCJsYWJlbCIsInZhbHVlIiwib3B0aW9uc1dpdGhFbXB0eVN0cmluZyIsIm51bWJlck9wdGlvbnMiLCJtaW4iLCJtYXgiXSwibWFwcGluZ3MiOiJBQUVBLFNBQVNBLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxLQUFLLEVBQUVDLFlBQVksRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFFBQVEsUUFBUSxtQkFBa0I7QUFFaEcsTUFBTUMsSUFBSUMsS0FBS0MsRUFBRSxDQUFDLENBQUNDLFNBQVdBO0FBRTlCLElBQUlDLFVBQXFDO0lBQ3ZDQyxNQUFNQztJQUNOQyxXQUFXO0lBQ1hDLGFBQWFGO0lBQ2JHLEtBQUs7UUFDSFQ7UUFDQVUsU0FBUyxDQUFDO1FBQ1ZDLFNBQVM7WUFDUEMsUUFBUSxDQUFDO1FBQ1g7SUFDRjtBQUNGO0FBRUFDLFNBQVMscUJBQXFCO0lBQzVCQSxTQUFTLFFBQVE7UUFDZkMsR0FBRyxtQkFBbUI7WUFDcEIsTUFBTUMsTUFBTTtZQUNaLE1BQU1DLFNBQVNsQixLQUFLaUIsS0FBS1g7WUFDekJhLE9BQU9ELFFBQVFFLElBQUksQ0FBQztRQUN0QjtRQUNBSixHQUFHLGdDQUFnQztZQUNqQyxNQUFNQyxNQUFNVDtZQUNaLE1BQU1VLFNBQVNsQixLQUFLaUIsS0FBSztnQkFBRSxHQUFHWCxPQUFPO2dCQUFFZSxVQUFVO1lBQUs7WUFDdERGLE9BQU9ELFFBQVFFLElBQUksQ0FBQztRQUN0QjtRQUNBSixHQUFHLDJCQUEyQjtZQUM1QixNQUFNQyxNQUFNVDtZQUNaLE1BQU1VLFNBQVNsQixLQUFLaUIsS0FBS1g7WUFDekJhLE9BQU9ELFFBQVFFLElBQUksQ0FBQztRQUN0QjtRQUNBSixHQUFHLDZCQUE2QjtZQUM5QixNQUFNQyxNQUFNO1lBQ1osTUFBTUMsU0FBU2xCLEtBQUtpQixLQUFLO2dCQUFFLEdBQUdYLE9BQU87Z0JBQUVnQixXQUFXO1lBQUU7WUFDcERILE9BQU9ELFFBQVFFLElBQUksQ0FBQztRQUN0QjtRQUNBSixHQUFHLDZCQUE2QjtZQUM5QixNQUFNQyxNQUFNO1lBQ1osTUFBTUMsU0FBU2xCLEtBQUtpQixLQUFLO2dCQUFFLEdBQUdYLE9BQU87Z0JBQUVpQixXQUFXO1lBQUc7WUFDckRKLE9BQU9ELFFBQVFFLElBQUksQ0FBQztRQUN0QjtRQUNBSixHQUFHLDJDQUEyQztZQUM1QyxNQUFNQyxNQUFNVDtZQUNaLE1BQU1VLFNBQVNsQixLQUFLaUIsS0FBSztnQkFBRSxHQUFHWCxPQUFPO2dCQUFFZ0IsV0FBVztZQUFFO1lBQ3BESCxPQUFPRCxRQUFRRSxJQUFJLENBQUM7UUFDdEI7UUFDQUosR0FBRywyQ0FBMkM7WUFDNUMsTUFBTUMsTUFBTVQ7WUFDWixNQUFNVSxTQUFTbEIsS0FBS2lCLEtBQUs7Z0JBQUUsR0FBR1gsT0FBTztnQkFBRWlCLFdBQVc7WUFBRztZQUNyREosT0FBT0QsUUFBUUUsSUFBSSxDQUFDO1FBQ3RCO1FBQ0FKLEdBQUcscUNBQXFDO1lBQ3RDLE1BQU1DLE1BQU07Z0JBQUM7YUFBTztZQUNwQixNQUFNQyxTQUFTbEIsS0FBS2lCLEtBQUs7Z0JBQUUsR0FBR1gsT0FBTztnQkFBRWtCLFNBQVM7WUFBSztZQUNyREwsT0FBT0QsUUFBUUUsSUFBSSxDQUFDO1FBQ3RCO1FBQ0FKLEdBQUcseUNBQXlDO1lBQzFDLE1BQU1DLE1BQU07Z0JBQUM7YUFBTztZQUNwQixNQUFNQyxTQUFTbEIsS0FBS2lCLEtBQUs7Z0JBQUUsR0FBR1gsT0FBTztnQkFBRWtCLFNBQVM7Z0JBQU1ILFVBQVU7WUFBSztZQUNyRUYsT0FBT0QsUUFBUUUsSUFBSSxDQUFDO1FBQ3RCO0lBQ0Y7SUFFQUwsU0FBUyxZQUFZO1FBQ25CVCxVQUFVO1lBQUUsR0FBR0EsT0FBTztZQUFFbUIsT0FBTztnQkFBRUMsTUFBTTtnQkFBUUMsTUFBTTtZQUFXO1FBQUU7UUFDbEVYLEdBQUcsbUJBQW1CO1lBQ3BCLE1BQU1DLE1BQU07WUFDWixNQUFNQyxTQUFTakIsU0FBU2dCLEtBQUtYO1lBQzdCYSxPQUFPRCxRQUFRRSxJQUFJLENBQUM7UUFDdEI7UUFDQUosR0FBRyxnQ0FBZ0M7WUFDakMsTUFBTUMsTUFBTVQ7WUFDWixNQUFNVSxTQUFTakIsU0FBU2dCLEtBQUs7Z0JBQUUsR0FBR1gsT0FBTztnQkFBRWUsVUFBVTtZQUFLO1lBQzFERixPQUFPRCxRQUFRRSxJQUFJLENBQUM7UUFDdEI7UUFFQUosR0FBRywyQkFBMkI7WUFDNUIsTUFBTUMsTUFBTVQ7WUFDWixNQUFNVSxTQUFTakIsU0FBU2dCLEtBQUtYO1lBQzdCYSxPQUFPRCxRQUFRRSxJQUFJLENBQUM7UUFDdEI7UUFDQUosR0FBRyw2QkFBNkI7WUFDOUIsTUFBTUMsTUFBTTtZQUNaLE1BQU1DLFNBQVNqQixTQUFTZ0IsS0FBSztnQkFBRSxHQUFHWCxPQUFPO2dCQUFFZ0IsV0FBVztZQUFFO1lBQ3hESCxPQUFPRCxRQUFRRSxJQUFJLENBQUM7UUFDdEI7UUFFQUosR0FBRyw2QkFBNkI7WUFDOUIsTUFBTUMsTUFBTTtZQUNaLE1BQU1DLFNBQVNqQixTQUFTZ0IsS0FBSztnQkFBRSxHQUFHWCxPQUFPO2dCQUFFaUIsV0FBVztZQUFHO1lBQ3pESixPQUFPRCxRQUFRRSxJQUFJLENBQUM7UUFDdEI7UUFDQUosR0FBRywyQ0FBMkM7WUFDNUMsTUFBTUMsTUFBTVQ7WUFDWixNQUFNVSxTQUFTakIsU0FBU2dCLEtBQUs7Z0JBQUUsR0FBR1gsT0FBTztnQkFBRWdCLFdBQVc7WUFBRTtZQUN4REgsT0FBT0QsUUFBUUUsSUFBSSxDQUFDO1FBQ3RCO1FBQ0FKLEdBQUcsMkNBQTJDO1lBQzVDLE1BQU1DLE1BQU1UO1lBQ1osTUFBTVUsU0FBU2pCLFNBQVNnQixLQUFLO2dCQUFFLEdBQUdYLE9BQU87Z0JBQUVpQixXQUFXO1lBQUc7WUFDekRKLE9BQU9ELFFBQVFFLElBQUksQ0FBQztRQUN0QjtJQUNGO0lBRUFMLFNBQVMsWUFBWTtRQUNuQixNQUFNYSxrQkFBa0I7WUFDdEIsR0FBR3RCLE9BQU87WUFDVm9CLE1BQU07WUFDTkMsTUFBTTtRQUNSO1FBQ0FYLEdBQUcsbUJBQW1CO1lBQ3BCLE1BQU1DLE1BQU07WUFDWixNQUFNQyxTQUFTdEIsU0FBU3FCLEtBQUtXO1lBQzdCVCxPQUFPRCxRQUFRRSxJQUFJLENBQUM7UUFDdEI7UUFDQUosR0FBRyxnQ0FBZ0M7WUFDakMsTUFBTUMsTUFBTVQ7WUFDWixNQUFNVSxTQUFTdEIsU0FBU3FCLEtBQUs7Z0JBQUUsR0FBR1csZUFBZTtnQkFBRVAsVUFBVTtZQUFLO1lBQ2xFRixPQUFPRCxRQUFRRSxJQUFJLENBQUM7UUFDdEI7UUFDQUosR0FBRywyQkFBMkI7WUFDNUIsTUFBTUMsTUFBTVQ7WUFDWixNQUFNVSxTQUFTdEIsU0FBU3FCLEtBQUtXO1lBQzdCVCxPQUFPRCxRQUFRRSxJQUFJLENBQUM7UUFDdEI7UUFDQUosR0FBRyw2QkFBNkI7WUFDOUIsTUFBTUMsTUFBTTtZQUNaLE1BQU1DLFNBQVN0QixTQUFTcUIsS0FBSztnQkFBRSxHQUFHVyxlQUFlO2dCQUFFTixXQUFXO1lBQUU7WUFDaEVILE9BQU9ELFFBQVFFLElBQUksQ0FBQztRQUN0QjtRQUNBSixHQUFHLDZCQUE2QjtZQUM5QixNQUFNQyxNQUFNO1lBQ1osTUFBTUMsU0FBU3RCLFNBQVNxQixLQUFLO2dCQUFFLEdBQUdXLGVBQWU7Z0JBQUVMLFdBQVc7WUFBRztZQUNqRUosT0FBT0QsUUFBUUUsSUFBSSxDQUFDO1FBQ3RCO1FBQ0FKLEdBQUcsMkNBQTJDO1lBQzVDLE1BQU1DLE1BQU1UO1lBQ1osTUFBTVUsU0FBU3RCLFNBQVNxQixLQUFLO2dCQUFFLEdBQUdXLGVBQWU7Z0JBQUVOLFdBQVc7WUFBRTtZQUNoRUgsT0FBT0QsUUFBUUUsSUFBSSxDQUFDO1FBQ3RCO1FBQ0FKLEdBQUcsMkNBQTJDO1lBQzVDLE1BQU1DLE1BQU1UO1lBQ1osTUFBTVUsU0FBU3RCLFNBQVNxQixLQUFLO2dCQUFFLEdBQUdXLGVBQWU7Z0JBQUVMLFdBQVc7WUFBRztZQUNqRUosT0FBT0QsUUFBUUUsSUFBSSxDQUFDO1FBQ3RCO0lBQ0Y7SUFFQUwsU0FBUyxTQUFTO1FBQ2hCLE1BQU1jLGVBQWU7WUFDbkIsR0FBR3ZCLE9BQU87WUFDVm9CLE1BQU07WUFDTkMsTUFBTTtRQUNSO1FBQ0FYLEdBQUcsMkJBQTJCO1lBQzVCLE1BQU1DLE1BQU07Z0JBQUM7Z0JBQU87YUFBTTtZQUMxQixNQUFNQyxTQUFTckIsTUFBTW9CLEtBQUtZO1lBQzFCVixPQUFPRCxRQUFRRSxJQUFJLENBQUM7UUFDdEI7UUFDQUosR0FBRyxpREFBaUQ7WUFDbEQsTUFBTUMsTUFBTTtnQkFBQztnQkFBTzthQUFNO1lBQzFCLE1BQU1DLFNBQVNyQixNQUFNb0IsS0FBS1k7WUFDMUJWLE9BQU9ELFFBQVFFLElBQUksQ0FBQztRQUN0QjtRQUNBSixHQUFHLCtDQUErQztZQUNoRCxNQUFNQyxNQUFNVDtZQUNaLE1BQU1VLFNBQVNyQixNQUFNb0IsS0FBSztnQkFBRSxHQUFHWSxZQUFZO2dCQUFFUixVQUFVO1lBQUs7WUFDNURGLE9BQU9ELFFBQVFZLEdBQUcsQ0FBQ1YsSUFBSSxDQUFDO1FBQzFCO1FBQ0FKLEdBQUcsMkNBQTJDO1lBQzVDLE1BQU1DLE1BQU0sRUFBRTtZQUNkLE1BQU1DLFNBQVNyQixNQUFNb0IsS0FBSztnQkFBRSxHQUFHWSxZQUFZO2dCQUFFUixVQUFVO1lBQUs7WUFDNURGLE9BQU9ELFFBQVFZLEdBQUcsQ0FBQ1YsSUFBSSxDQUFDO1FBQzFCO1FBQ0FKLEdBQUcsd0RBQXdEO1lBQ3pELE1BQU1DLE1BQU07Z0JBQUNUO2dCQUFXQTthQUFVO1lBQ2xDLE1BQU1VLFNBQVNyQixNQUFNb0IsS0FBSztnQkFBRSxHQUFHWSxZQUFZO2dCQUFFUixVQUFVO1lBQUs7WUFDNURGLE9BQU9ELFFBQVFZLEdBQUcsQ0FBQ1YsSUFBSSxDQUFDO1FBQzFCO1FBQ0FKLEdBQUcsd0NBQXdDO1lBQ3pDLE1BQU1DLE1BQU1UO1lBQ1osTUFBTVUsU0FBU3RCLFNBQVNxQixLQUFLWTtZQUM3QlYsT0FBT0QsUUFBUUUsSUFBSSxDQUFDO1FBQ3RCO1FBQ0FKLEdBQUcsMENBQTBDO1lBQzNDLE1BQU1DLE1BQU0sRUFBRTtZQUNkLE1BQU1DLFNBQVNyQixNQUFNb0IsS0FBS1k7WUFDMUJWLE9BQU9ELFFBQVFFLElBQUksQ0FBQztRQUN0QjtRQUNBSixHQUFHLGlEQUFpRDtZQUNsRCxNQUFNQyxNQUFNO2dCQUFDVDtnQkFBV0E7YUFBVTtZQUNsQyxNQUFNVSxTQUFTckIsTUFBTW9CLEtBQUtZO1lBQzFCVixPQUFPRCxRQUFRRSxJQUFJLENBQUM7UUFDdEI7UUFDQUosR0FBRyw2QkFBNkI7WUFDOUIsTUFBTUMsTUFBTTtnQkFBQztnQkFBTzthQUFRO1lBQzVCLE1BQU1DLFNBQVNyQixNQUFNb0IsS0FBS1k7WUFDMUJWLE9BQU9ELFFBQVFZLEdBQUcsQ0FBQ1YsSUFBSSxDQUFDO1FBQzFCO1FBQ0FKLEdBQUcsZ0NBQWdDO1lBQ2pDLE1BQU1DLE1BQU07Z0JBQUM7YUFBSTtZQUNqQixNQUFNQyxTQUFTckIsTUFBTW9CLEtBQUtZO1lBQzFCVixPQUFPRCxRQUFRWSxHQUFHLENBQUNWLElBQUksQ0FBQztRQUMxQjtJQUNGO0lBRUFMLFNBQVMsZ0JBQWdCO1FBQ3ZCLE1BQU1nQixxQkFBcUI7WUFDekJDLFFBQVE7Z0JBQ047b0JBQ0VOLE1BQU07b0JBQ05DLE1BQU07Z0JBQ1I7YUFDRDtZQUNETSxNQUFNO1FBQ1I7UUFFQSxNQUFNQyxzQkFBc0I7WUFDMUIsR0FBRzVCLE9BQU87WUFDVkssS0FBSztnQkFDSCxHQUFHTCxRQUFRSyxHQUFHO2dCQUNkRSxTQUFTO29CQUNQLEdBQUdQLFFBQVFLLEdBQUcsQ0FBQ0UsT0FBTztvQkFDdEJDLFFBQVE7d0JBQ05xQixhQUFhOzRCQUFDSjt5QkFBbUI7b0JBQ25DO29CQUNBSSxhQUFhO3dCQUNYQyxVQUFVOzRCQUNSdEIsUUFBUWlCO3dCQUNWO29CQUNGO2dCQUNGO1lBQ0Y7WUFDQU0sWUFBWTtRQUNkO1FBQ0FyQixHQUFHLDBCQUEwQjtZQUMzQixNQUFNQyxNQUFNVDtZQUNaLE1BQU1VLFNBQVMsTUFBTXBCLGFBQWFtQixLQUFLO2dCQUFFLEdBQUdpQixtQkFBbUI7Z0JBQUViLFVBQVU7WUFBSztZQUNoRkYsT0FBT0QsUUFBUVksR0FBRyxDQUFDVixJQUFJLENBQUM7UUFDMUI7UUFDQUosR0FBRyx1Q0FBdUM7WUFDeEMsTUFBTUMsTUFBTSxFQUFFO1lBQ2QsTUFBTUMsU0FBUyxNQUFNcEIsYUFBYW1CLEtBQUs7Z0JBQ3JDLEdBQUdpQixtQkFBbUI7Z0JBQ3RCVixTQUFTO2dCQUNUSCxVQUFVO1lBQ1o7WUFDQUYsT0FBT0QsUUFBUVksR0FBRyxDQUFDVixJQUFJLENBQUM7UUFDMUI7UUFDQUosR0FBRyw4QkFBOEI7WUFDL0IsTUFBTXNCLGFBQWE7Z0JBQ2pCLEdBQUdKLG1CQUFtQjtnQkFDdEJWLFNBQVM7Z0JBQ1RlLFNBQVM7WUFDWDtZQUVBLE1BQU10QixNQUFNO2dCQUFDO2FBQUk7WUFFakIsTUFBTUMsU0FBUyxNQUFNcEIsYUFBYW1CLEtBQUtxQjtZQUN2Q25CLE9BQU9ELFFBQVFZLEdBQUcsQ0FBQ1YsSUFBSSxDQUFDO1lBRXhCLE1BQU1vQixVQUFVLE1BQU0xQyxhQUFhO2dCQUFDO2dCQUFLO2FBQUksRUFBRXdDO1lBQy9DbkIsT0FBT3FCLFNBQVNDLGFBQWEsQ0FBQztRQUNoQztRQUNBekIsR0FBRyw4QkFBOEI7WUFDL0IsTUFBTTBCLGFBQWE7Z0JBQ2pCLEdBQUdSLG1CQUFtQjtnQkFDdEJWLFNBQVM7Z0JBQ1RtQixTQUFTO1lBQ1g7WUFDQSxJQUFJMUIsTUFBTTtnQkFBQztnQkFBSztnQkFBSzthQUFJO1lBRXpCLE1BQU1DLFNBQVMsTUFBTXBCLGFBQWFtQixLQUFLeUI7WUFDdkN2QixPQUFPRCxRQUFRWSxHQUFHLENBQUNWLElBQUksQ0FBQztZQUV4QkgsTUFBTTtnQkFBQzthQUFJO1lBQ1gsTUFBTXVCLFVBQVUsTUFBTTFDLGFBQWFtQixLQUFLeUI7WUFDeEN2QixPQUFPcUIsU0FBU0MsYUFBYSxDQUFDO1FBQ2hDO0lBQ0Y7SUFFQTFCLFNBQVMsVUFBVTtRQUNqQixNQUFNNkIsZ0JBQWdCO1lBQ3BCLEdBQUd0QyxPQUFPO1lBQ1ZBLFNBQVM7Z0JBQUM7Z0JBQU87Z0JBQU87YUFBUTtZQUNoQ3FCLE1BQU07UUFDUjtRQUNBLE1BQU1rQixrQkFBa0I7WUFDdEIsR0FBR0QsYUFBYTtZQUNoQnRDLFNBQVM7Z0JBQ1A7b0JBQ0V3QyxPQUFPO29CQUNQQyxPQUFPO2dCQUNUO2dCQUNBO29CQUNFRCxPQUFPO29CQUNQQyxPQUFPO2dCQUNUO2dCQUNBO29CQUNFRCxPQUFPO29CQUNQQyxPQUFPO2dCQUNUO2FBQ0Q7WUFDRDFCLFVBQVU7UUFDWjtRQUNBLE1BQU0yQix5QkFBeUI7WUFDN0IsR0FBR0osYUFBYTtZQUNoQnRDLFNBQVM7Z0JBQ1A7b0JBQ0V3QyxPQUFPO29CQUNQQyxPQUFPO2dCQUNUO2dCQUNBO29CQUNFRCxPQUFPO29CQUNQQyxPQUFPO2dCQUNUO2FBQ0Q7UUFDSDtRQUNBL0IsR0FBRyw0QkFBNEI7WUFDN0IsTUFBTUMsTUFBTTtZQUNaLE1BQU1DLFNBQVNuQixPQUFPa0IsS0FBSzJCO1lBQzNCekIsT0FBT0QsUUFBUXVCLGFBQWEsQ0FBQztRQUMvQjtRQUNBekIsR0FBRyxnQ0FBZ0M7WUFDakMsTUFBTUMsTUFBTTtZQUNaLE1BQU1DLFNBQVNuQixPQUFPa0IsS0FBSzJCO1lBQzNCekIsT0FBT0QsUUFBUVksR0FBRyxDQUFDVyxhQUFhLENBQUM7UUFDbkM7UUFDQXpCLEdBQUcsMkJBQTJCO1lBQzVCLE1BQU1DLE1BQU07WUFDWixNQUFNQyxTQUFTbkIsT0FBT2tCLEtBQUsyQjtZQUMzQnpCLE9BQU9ELFFBQVF1QixhQUFhLENBQUM7UUFDL0I7UUFDQXpCLEdBQUcsZ0NBQWdDO1lBQ2pDLElBQUlDO1lBQ0osTUFBTUMsU0FBU25CLE9BQU9rQixLQUFLMkI7WUFDM0J6QixPQUFPRCxRQUFRdUIsYUFBYSxDQUFDO1FBQy9CO1FBQ0F6QixHQUFHLHFDQUFxQztZQUN0QyxNQUFNQyxNQUFNO1lBQ1osTUFBTUMsU0FBU25CLE9BQU9rQixLQUFLMkI7WUFDM0J6QixPQUFPRCxRQUFRWSxHQUFHLENBQUNXLGFBQWEsQ0FBQztRQUNuQztRQUNBekIsR0FBRyxnREFBZ0Q7WUFDakQsSUFBSUM7WUFDSixNQUFNQyxTQUFTbkIsT0FBT2tCLEtBQUs0QjtZQUMzQjFCLE9BQU9ELFFBQVFZLEdBQUcsQ0FBQ1csYUFBYSxDQUFDO1FBQ25DO1FBQ0F6QixHQUFHLG1EQUFtRDtZQUNwRCxNQUFNRSxTQUFTbkIsT0FBTyxJQUFJOEM7WUFDMUIxQixPQUFPRCxRQUFRWSxHQUFHLENBQUNXLGFBQWEsQ0FBQztRQUNuQztRQUNBekIsR0FBRyw0REFBNEQ7WUFDN0QsSUFBSUM7WUFDSlgsUUFBUWtCLE9BQU8sR0FBRztZQUNsQixNQUFNTixTQUFTbkIsT0FBT2tCLEtBQUs0QjtZQUMzQjFCLE9BQU9ELFFBQVFZLEdBQUcsQ0FBQ1csYUFBYSxDQUFDO1FBQ25DO1FBQ0F6QixHQUFHLDhEQUE4RDtZQUMvRDZCLGdCQUFnQnJCLE9BQU8sR0FBRztZQUMxQixNQUFNTixTQUFTbkIsT0FBTyxFQUFFLEVBQUU4QztZQUMxQjFCLE9BQU9ELFFBQVFZLEdBQUcsQ0FBQ1csYUFBYSxDQUFDO1FBQ25DO1FBQ0F6QixHQUFHLHFFQUFxRTtZQUN0RVYsUUFBUWtCLE9BQU8sR0FBRztZQUNsQixNQUFNTixTQUFTbkIsT0FBTztnQkFBQzthQUFHLEVBQUU4QztZQUM1QjFCLE9BQU9ELFFBQVFZLEdBQUcsQ0FBQ1csYUFBYSxDQUFDO1FBQ25DO1FBQ0F6QixHQUFHLHVEQUF1RDtZQUN4RCxNQUFNQyxNQUFNO1lBQ1pYLFFBQVFrQixPQUFPLEdBQUc7WUFDbEIsTUFBTU4sU0FBU25CLE9BQU9rQixLQUFLNEI7WUFDM0IxQixPQUFPRCxRQUFRWSxHQUFHLENBQUNXLGFBQWEsQ0FBQztRQUNuQztRQUNBekIsR0FBRyxnREFBZ0Q7WUFDakQsTUFBTUMsTUFBTTtZQUNaWCxRQUFRa0IsT0FBTyxHQUFHO1lBQ2xCLE1BQU1OLFNBQVNuQixPQUFPa0IsS0FBSzRCO1lBQzNCMUIsT0FBT0QsUUFBUXVCLGFBQWEsQ0FBQztRQUMvQjtRQUNBekIsR0FBRyxvREFBb0Q7WUFDckQsTUFBTUMsTUFBTTtZQUNaWCxRQUFRa0IsT0FBTyxHQUFHO1lBQ2xCLE1BQU1OLFNBQVNuQixPQUFPa0IsS0FBSzRCO1lBQzNCMUIsT0FBT0QsUUFBUVksR0FBRyxDQUFDVyxhQUFhLENBQUM7UUFDbkM7UUFDQXpCLEdBQUcsc0RBQXNEO1lBQ3ZELE1BQU1DLE1BQU07WUFDWixNQUFNQyxTQUFTbkIsT0FBT2tCLEtBQUsrQjtZQUMzQjdCLE9BQU9ELFFBQVF1QixhQUFhLENBQUM7UUFDL0I7UUFDQXpCLEdBQUcsbUVBQW1FO1lBQ3BFLE1BQU1DLE1BQU07WUFDWitCLHVCQUF1QjNCLFFBQVEsR0FBRztZQUNsQyxNQUFNSCxTQUFTbkIsT0FBT2tCLEtBQUsrQjtZQUMzQjdCLE9BQU9ELFFBQVF1QixhQUFhLENBQUM7UUFDL0I7UUFDQXpCLEdBQUcseUNBQXlDO1lBQzFDLE1BQU1DLE1BQU07Z0JBQUM7Z0JBQU87YUFBTTtZQUMxQixNQUFNQyxTQUFTbkIsT0FBT2tCLEtBQUsyQjtZQUMzQnpCLE9BQU9ELFFBQVF1QixhQUFhLENBQUM7UUFDL0I7UUFDQXpCLEdBQUcsNkNBQTZDO1lBQzlDLE1BQU1DLE1BQU07Z0JBQUM7Z0JBQU87YUFBTTtZQUMxQixNQUFNQyxTQUFTbkIsT0FBT2tCLEtBQUsyQjtZQUMzQnpCLE9BQU9ELFFBQVFZLEdBQUcsQ0FBQ1csYUFBYSxDQUFDO1FBQ25DO1FBQ0F6QixHQUFHLHdEQUF3RDtZQUN6RCxNQUFNQyxNQUFNO2dCQUFDO2dCQUFPO2FBQVE7WUFDNUI0QixnQkFBZ0JyQixPQUFPLEdBQUc7WUFDMUIsTUFBTU4sU0FBU25CLE9BQU9rQixLQUFLNEI7WUFDM0IxQixPQUFPRCxRQUFRdUIsYUFBYSxDQUFDO1FBQy9CO1FBQ0F6QixHQUFHLDREQUE0RDtZQUM3RCxNQUFNQyxNQUFNO2dCQUFDO2dCQUFTO2FBQU07WUFDNUI0QixnQkFBZ0JyQixPQUFPLEdBQUc7WUFDMUIsTUFBTU4sU0FBU25CLE9BQU9rQixLQUFLNEI7WUFDM0IxQixPQUFPRCxRQUFRWSxHQUFHLENBQUNXLGFBQWEsQ0FBQztRQUNuQztJQUNGO0lBQ0ExQixTQUFTLFVBQVU7UUFDakIsTUFBTWtDLGdCQUFnQjtZQUNwQixHQUFHM0MsT0FBTztZQUNWb0IsTUFBTTtZQUNOQyxNQUFNO1FBQ1I7UUFDQVgsR0FBRyxtQkFBbUI7WUFDcEIsTUFBTUMsTUFBTTtZQUNaLE1BQU1DLFNBQVN2QixPQUFPc0IsS0FBS2dDO1lBQzNCOUIsT0FBT0QsUUFBUUUsSUFBSSxDQUFDO1FBQ3RCO1FBQ0FKLEdBQUcscUJBQXFCO1lBQ3RCLE1BQU1DLE1BQU07WUFDWixNQUFNQyxTQUFTdkIsT0FBT3NCLEtBQUs7Z0JBQUUsR0FBR2dDLGFBQWE7Z0JBQUU1QixVQUFVO1lBQUs7WUFDOURGLE9BQU9ELFFBQVFFLElBQUksQ0FBQztRQUN0QjtRQUNBSixHQUFHLHFCQUFxQjtZQUN0QixNQUFNQyxNQUFNO1lBQ1osTUFBTUMsU0FBU3ZCLE9BQU9zQixLQUFLZ0M7WUFDM0I5QixPQUFPRCxRQUFRRSxJQUFJLENBQUM7UUFDdEI7UUFDQUosR0FBRyxzQ0FBc0M7WUFDdkMsTUFBTUMsTUFBTTtZQUNaLE1BQU1DLFNBQVN2QixPQUFPc0IsS0FBSztnQkFBRSxHQUFHZ0MsYUFBYTtZQUFDO1lBQzlDOUIsT0FBT0QsUUFBUUUsSUFBSSxDQUFDO1FBQ3RCO1FBQ0FKLEdBQUcsNkJBQTZCO1lBQzlCLE1BQU1DLE1BQU07WUFDWixNQUFNQyxTQUFTdkIsT0FBT3NCLEtBQUs7Z0JBQUUsR0FBR2dDLGFBQWE7WUFBQztZQUM5QzlCLE9BQU9ELFFBQVFFLElBQUksQ0FBQztRQUN0QjtRQUNBSixHQUFHLGdDQUFnQztZQUNqQyxNQUFNQyxNQUFNO1lBQ1osTUFBTUMsU0FBU3ZCLE9BQU9zQixLQUFLO2dCQUFFLEdBQUdnQyxhQUFhO2dCQUFFNUIsVUFBVTtZQUFLO1lBQzlERixPQUFPRCxRQUFRRSxJQUFJLENBQUM7UUFDdEI7UUFDQUosR0FBRyw0QkFBNEI7WUFDN0IsTUFBTUMsTUFBTTtZQUNaLE1BQU1DLFNBQVN2QixPQUFPc0IsS0FBSztnQkFBRSxHQUFHZ0MsYUFBYTtnQkFBRUMsS0FBSztZQUFJO1lBQ3hEL0IsT0FBT0QsUUFBUUUsSUFBSSxDQUFDO1FBQ3RCO1FBQ0FKLEdBQUcsNEJBQTRCO1lBQzdCLE1BQU1DLE1BQU07WUFDWixNQUFNQyxTQUFTdkIsT0FBT3NCLEtBQUs7Z0JBQUUsR0FBR2dDLGFBQWE7Z0JBQUVFLEtBQUs7WUFBRTtZQUN0RGhDLE9BQU9ELFFBQVFFLElBQUksQ0FBQztRQUN0QjtRQUNBSixHQUFHLHVDQUF1QztZQUN4QyxNQUFNQyxNQUFNO2dCQUFDO2dCQUFNO2FBQUk7WUFDdkIsTUFBTUMsU0FBU3ZCLE9BQU9zQixLQUFLO2dCQUFFLEdBQUdnQyxhQUFhO2dCQUFFekIsU0FBUztZQUFLO1lBQzdETCxPQUFPRCxRQUFRRSxJQUFJLENBQUM7UUFDdEI7UUFDQUosR0FBRyxpREFBaUQ7WUFDbEQsTUFBTUMsTUFBTTtnQkFBQztnQkFBTTthQUFJO1lBQ3ZCLE1BQU1DLFNBQVN2QixPQUFPc0IsS0FBSztnQkFBRSxHQUFHZ0MsYUFBYTtnQkFBRXpCLFNBQVM7Z0JBQU0wQixLQUFLO1lBQUU7WUFDckUvQixPQUFPRCxRQUFRRSxJQUFJLENBQUM7UUFDdEI7UUFDQUosR0FBRyxpREFBaUQ7WUFDbEQsTUFBTUMsTUFBTTtnQkFBQztnQkFBTTthQUFJO1lBQ3ZCLE1BQU1DLFNBQVN2QixPQUFPc0IsS0FBSztnQkFBRSxHQUFHZ0MsYUFBYTtnQkFBRXpCLFNBQVM7Z0JBQU0yQixLQUFLO1lBQUU7WUFDckVoQyxPQUFPRCxRQUFRRSxJQUFJLENBQUM7UUFDdEI7UUFDQUosR0FBRyxxREFBcUQ7WUFDdEQsTUFBTUMsTUFBTTtnQkFBQztnQkFBTTthQUFJO1lBQ3ZCLE1BQU1DLFNBQVN2QixPQUFPc0IsS0FBSztnQkFBRSxHQUFHZ0MsYUFBYTtnQkFBRXpCLFNBQVM7Z0JBQU1lLFNBQVM7WUFBRTtZQUN6RXBCLE9BQU9ELFFBQVFFLElBQUksQ0FBQztRQUN0QjtRQUNBSixHQUFHLHFEQUFxRDtZQUN0RCxNQUFNQyxNQUFNO2dCQUFDO2dCQUFNO2dCQUFLO2FBQUk7WUFDNUIsTUFBTUMsU0FBU3ZCLE9BQU9zQixLQUFLO2dCQUFFLEdBQUdnQyxhQUFhO2dCQUFFekIsU0FBUztnQkFBTW1CLFNBQVM7WUFBRTtZQUN6RXhCLE9BQU9ELFFBQVFFLElBQUksQ0FBQztRQUN0QjtJQUNGO0FBQ0YifQ==