@nlabs/reaktor 0.10.1 → 0.10.5

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 (494) hide show
  1. package/coverage/actions/index.html +21 -36
  2. package/coverage/actions/notifications.ts.html +223 -0
  3. package/coverage/actions/posts.ts.html +2356 -0
  4. package/coverage/adapters/arangoAdapter.ts.html +170 -20
  5. package/coverage/adapters/fileAdapter.ts.html +445 -0
  6. package/coverage/adapters/index.html +72 -42
  7. package/coverage/adapters/postAdapter.ts.html +436 -0
  8. package/coverage/adapters/reaktorAdapter.ts.html +201 -18
  9. package/coverage/adapters/tagAdapter.ts.html +274 -25
  10. package/coverage/adapters/userAdapter.ts.html +829 -0
  11. package/coverage/analyticsUtils.ts.html +286 -0
  12. package/coverage/block-navigation.js +1 -1
  13. package/coverage/config.ts.html +766 -0
  14. package/coverage/index.html +83 -53
  15. package/coverage/mocks/group.ts.html +5 -5
  16. package/coverage/mocks/image.ts.html +18 -12
  17. package/coverage/mocks/index.html +37 -7
  18. package/coverage/mocks/post.ts.html +8 -8
  19. package/coverage/mocks/tag.ts.html +2 -2
  20. package/coverage/mocks/user.ts.html +18 -15
  21. package/coverage/sorter.js +21 -7
  22. package/coverage/testUtils.ts.html +1309 -0
  23. package/coverage/translationQueue.ts.html +592 -0
  24. package/coverage/types/error.types.ts.html +148 -0
  25. package/coverage/types/index.html +2 -2
  26. package/coverage/utils/adapterUtils.ts.html +39 -27
  27. package/coverage/utils/analyticsUtils.ts.html +35 -41
  28. package/coverage/utils/authUtils.ts.html +328 -0
  29. package/coverage/utils/dbI18n.ts.html +280 -0
  30. package/coverage/utils/googleTranslate.ts.html +385 -0
  31. package/coverage/utils/index.html +29 -44
  32. package/coverage/utils/localeUtils.ts.html +193 -0
  33. package/coverage/utils/sessionUtils.ts.html +211 -0
  34. package/coverage/utils/testUtils.ts.html +1309 -0
  35. package/lex.config.mjs +34 -0
  36. package/lib/actions/apps.d.ts +25 -0
  37. package/lib/actions/connections.d.ts +5 -0
  38. package/lib/actions/content.d.ts +13 -0
  39. package/lib/actions/conversations.d.ts +16 -0
  40. package/lib/actions/dynamodb.d.ts +12 -0
  41. package/lib/actions/email.d.ts +8 -0
  42. package/lib/actions/files.d.ts +19 -0
  43. package/lib/actions/groups.d.ts +13 -0
  44. package/lib/actions/images.d.ts +33 -0
  45. package/lib/actions/index.d.ts +28 -0
  46. package/lib/actions/ios.d.ts +7 -0
  47. package/lib/actions/locations.d.ts +6 -0
  48. package/lib/actions/messages.d.ts +13 -0
  49. package/lib/actions/notifications.d.ts +9 -0
  50. package/lib/actions/payments.d.ts +12 -0
  51. package/lib/actions/posts.d.ts +25 -0
  52. package/lib/actions/profiles.d.ts +4 -0
  53. package/lib/actions/reactions.d.ts +32 -0
  54. package/lib/actions/s3.d.ts +11 -0
  55. package/lib/actions/search.d.ts +3 -0
  56. package/lib/actions/sms.d.ts +2 -0
  57. package/lib/actions/statistics.d.ts +4 -0
  58. package/lib/actions/subscriptions.d.ts +7 -0
  59. package/lib/actions/tags.d.ts +34 -0
  60. package/lib/actions/users.d.ts +73 -0
  61. package/lib/actions/videos.d.ts +25 -0
  62. package/lib/actions/websockets.d.ts +20 -0
  63. package/lib/adapters/arangoAdapter.d.ts +8 -0
  64. package/lib/adapters/contentAdapter.d.ts +8 -0
  65. package/lib/adapters/fileAdapter.d.ts +9 -0
  66. package/lib/adapters/imageAdapter.d.ts +8 -0
  67. package/lib/adapters/index.d.ts +9 -0
  68. package/lib/adapters/messageAdapter.d.ts +8 -0
  69. package/lib/adapters/postAdapter.d.ts +8 -0
  70. package/lib/adapters/reaktorAdapter.d.ts +16 -0
  71. package/lib/adapters/tagAdapter.d.ts +9 -0
  72. package/lib/adapters/userAdapter.d.ts +13 -0
  73. package/lib/config.d.ts +57 -0
  74. package/lib/handlers/graphqlHandler.d.ts +4 -0
  75. package/lib/index.d.ts +19 -0
  76. package/lib/lambdas/actions/websockets.d.ts +7 -0
  77. package/lib/lambdas/authorizer.d.ts +20 -0
  78. package/lib/lambdas/connection.d.ts +12 -0
  79. package/lib/lambdas/utils/message.d.ts +1 -0
  80. package/lib/lambdas/utils/websocket.d.ts +7 -0
  81. package/lib/mocks/conversation.d.ts +8 -0
  82. package/lib/mocks/file.d.ts +11 -0
  83. package/lib/mocks/group.d.ts +17 -0
  84. package/lib/mocks/image.d.ts +3 -0
  85. package/lib/mocks/post.d.ts +38 -0
  86. package/lib/mocks/tag.d.ts +2 -0
  87. package/lib/mocks/user.d.ts +4 -0
  88. package/lib/mocks/video.d.ts +3 -0
  89. package/lib/mutations/content.d.ts +2 -0
  90. package/lib/mutations/index.d.ts +11 -0
  91. package/lib/mutations/locations.d.ts +2 -0
  92. package/lib/mutations/messages.d.ts +2 -0
  93. package/lib/mutations/posts.d.ts +2 -0
  94. package/lib/mutations/profiles.d.ts +2 -0
  95. package/lib/mutations/reactions.d.ts +2 -0
  96. package/lib/mutations/statistics.d.ts +2 -0
  97. package/lib/mutations/subscriptions.d.ts +2 -0
  98. package/lib/mutations/tags.d.ts +2 -0
  99. package/lib/mutations/users.d.ts +1 -0
  100. package/lib/objectTypes/app.d.ts +3 -0
  101. package/lib/objectTypes/bankAccount.d.ts +1 -0
  102. package/lib/objectTypes/connection.d.ts +1 -0
  103. package/lib/objectTypes/content.d.ts +2 -0
  104. package/lib/objectTypes/conversation.d.ts +2 -0
  105. package/lib/objectTypes/creditCard.d.ts +1 -0
  106. package/lib/objectTypes/document.d.ts +1 -0
  107. package/lib/objectTypes/error.d.ts +1 -0
  108. package/lib/objectTypes/external.d.ts +1 -0
  109. package/lib/objectTypes/file.d.ts +2 -0
  110. package/lib/objectTypes/filter.d.ts +1 -0
  111. package/lib/objectTypes/group.d.ts +3 -0
  112. package/lib/objectTypes/iapSubscription.d.ts +1 -0
  113. package/lib/objectTypes/image.d.ts +6 -0
  114. package/lib/objectTypes/index.d.ts +26 -0
  115. package/lib/objectTypes/location.d.ts +2 -0
  116. package/lib/objectTypes/message.d.ts +2 -0
  117. package/lib/objectTypes/passcode.d.ts +1 -0
  118. package/lib/objectTypes/plan.d.ts +2 -0
  119. package/lib/objectTypes/post.d.ts +2 -0
  120. package/lib/objectTypes/profile.d.ts +3 -0
  121. package/lib/objectTypes/reaction.d.ts +2 -0
  122. package/lib/objectTypes/relation.d.ts +1 -0
  123. package/lib/objectTypes/search.d.ts +1 -0
  124. package/lib/objectTypes/statistics.d.ts +1 -0
  125. package/lib/objectTypes/subscription.d.ts +2 -0
  126. package/lib/objectTypes/tag.d.ts +2 -0
  127. package/lib/objectTypes/user.d.ts +4 -0
  128. package/lib/queries/content.d.ts +2 -0
  129. package/lib/queries/index.d.ts +10 -0
  130. package/lib/queries/locations.d.ts +2 -0
  131. package/lib/queries/messages.d.ts +2 -0
  132. package/lib/queries/posts.d.ts +2 -0
  133. package/lib/queries/reactions.d.ts +2 -0
  134. package/lib/queries/statistics.d.ts +2 -0
  135. package/lib/queries/subscriptions.d.ts +2 -0
  136. package/lib/queries/tags.d.ts +2 -0
  137. package/lib/queries/users.d.ts +1 -0
  138. package/lib/templates/email/layout.d.ts +2 -0
  139. package/lib/templates/email/passwordForgot.d.ts +2 -0
  140. package/lib/templates/email/passwordRecovery.d.ts +2 -0
  141. package/lib/templates/email/verifyEmail.d.ts +2 -0
  142. package/lib/templates/email/welcome.d.ts +2 -0
  143. package/lib/templates/sms/passwordForgot.d.ts +2 -0
  144. package/lib/templates/sms/passwordRecovery.d.ts +2 -0
  145. package/lib/templates/sms/verifyEmail.d.ts +2 -0
  146. package/lib/templates/sms/verifyPhone.d.ts +2 -0
  147. package/lib/templates/sms/welcome.d.ts +2 -0
  148. package/lib/types/apps.types.d.ts +50 -0
  149. package/lib/types/arangodb.types.d.ts +38 -0
  150. package/lib/types/auth.types.d.ts +15 -0
  151. package/lib/types/connections.types.d.ts +9 -0
  152. package/lib/types/content.types.d.ts +31 -0
  153. package/lib/types/conversations.types.d.ts +31 -0
  154. package/lib/types/email.types.d.ts +17 -0
  155. package/lib/types/error.types.d.ts +21 -0
  156. package/lib/types/files.types.d.ts +27 -0
  157. package/lib/types/google.types.d.ts +33 -0
  158. package/lib/types/groups.types.d.ts +22 -0
  159. package/lib/types/images.types.d.ts +56 -0
  160. package/lib/types/index.d.ts +27 -0
  161. package/lib/types/locations.types.d.ts +22 -0
  162. package/lib/types/messages.types.d.ts +20 -0
  163. package/lib/types/notifications.types.d.ts +23 -0
  164. package/lib/types/payments.types.d.ts +113 -0
  165. package/lib/types/posts.types.d.ts +32 -0
  166. package/lib/types/profiles.types.d.ts +20 -0
  167. package/lib/types/statistics.types.d.ts +3 -0
  168. package/lib/types/tags.types.d.ts +19 -0
  169. package/lib/types/users.types.d.ts +110 -0
  170. package/lib/types/videos.types.d.ts +46 -0
  171. package/lib/types/websockets.types.d.ts +22 -0
  172. package/lib/utils/adapterUtils.d.ts +5 -0
  173. package/lib/utils/analyticsUtils.d.ts +25 -0
  174. package/lib/utils/arangodbUtils.d.ts +70 -0
  175. package/lib/utils/authUtils.d.ts +23 -0
  176. package/lib/utils/contextUtils.d.ts +3 -0
  177. package/lib/utils/dbI18n.d.ts +10 -0
  178. package/lib/utils/dbI18n.example.d.ts +20 -0
  179. package/lib/utils/googleTranslate.d.ts +6 -0
  180. package/lib/utils/graphqlUtils.d.ts +10 -0
  181. package/lib/utils/index.d.ts +18 -0
  182. package/lib/utils/languageDetection.d.ts +8 -0
  183. package/lib/utils/localeUtils.d.ts +11 -0
  184. package/lib/utils/localeUtils.example.d.ts +5 -0
  185. package/lib/utils/middlewareUtils.d.ts +2 -0
  186. package/lib/utils/sessionUtils.d.ts +18 -0
  187. package/lib/utils/stripeUtils.d.ts +7 -0
  188. package/lib/utils/templateUtils.d.ts +3 -0
  189. package/lib/utils/testUtils.d.ts +95 -0
  190. package/lib/utils/translationQueue.d.ts +29 -0
  191. package/lib/utils/translationQueue.example.d.ts +33 -0
  192. package/package.json +28 -28
  193. package/tsconfig.build.json +21 -0
  194. package/tsconfig.lint.json +33 -0
  195. package/tsconfig.test.json +31 -0
  196. package/dist/actions/apps.js +0 -242
  197. package/dist/actions/connections.js +0 -90
  198. package/dist/actions/conversations.js +0 -350
  199. package/dist/actions/dynamodb.js +0 -150
  200. package/dist/actions/email.js +0 -152
  201. package/dist/actions/files.js +0 -283
  202. package/dist/actions/groups.js +0 -292
  203. package/dist/actions/images.js +0 -735
  204. package/dist/actions/index.js +0 -66
  205. package/dist/actions/ios.js +0 -164
  206. package/dist/actions/locations.js +0 -122
  207. package/dist/actions/messages.js +0 -208
  208. package/dist/actions/notifications.js +0 -59
  209. package/dist/actions/payments.js +0 -497
  210. package/dist/actions/personas.js +0 -110
  211. package/dist/actions/posts.js +0 -595
  212. package/dist/actions/reactions.js +0 -322
  213. package/dist/actions/s3.js +0 -133
  214. package/dist/actions/search.js +0 -90
  215. package/dist/actions/sms.js +0 -108
  216. package/dist/actions/statistics.js +0 -62
  217. package/dist/actions/subscription.js +0 -220
  218. package/dist/actions/tags.js +0 -292
  219. package/dist/actions/users.js +0 -784
  220. package/dist/actions/websockets.js +0 -174
  221. package/dist/adapters/arangoAdapter.js +0 -46
  222. package/dist/adapters/fileAdapter.js +0 -76
  223. package/dist/adapters/imageAdapter.js +0 -40
  224. package/dist/adapters/messageAdapter.js +0 -49
  225. package/dist/adapters/postAdapter.js +0 -70
  226. package/dist/adapters/reaktorAdapter.js +0 -44
  227. package/dist/adapters/tagAdapter.js +0 -50
  228. package/dist/adapters/userAdapter.js +0 -115
  229. package/dist/config.js +0 -125
  230. package/dist/index.js +0 -66
  231. package/dist/lambdas/actions/websockets.js +0 -132
  232. package/dist/lambdas/authorizer.js +0 -67
  233. package/dist/lambdas/connection.js +0 -91
  234. package/dist/lambdas/utils/message.js +0 -42
  235. package/dist/lambdas/utils/websocket.js +0 -105
  236. package/dist/mocks/conversation.js +0 -35
  237. package/dist/mocks/file.js +0 -38
  238. package/dist/mocks/group.js +0 -47
  239. package/dist/mocks/image.js +0 -44
  240. package/dist/mocks/nlabs.png +0 -0
  241. package/dist/mocks/post.js +0 -55
  242. package/dist/mocks/tag.js +0 -37
  243. package/dist/mocks/user.js +0 -88
  244. package/dist/mutations/index.js +0 -26
  245. package/dist/mutations/locations.js +0 -44
  246. package/dist/mutations/messages.js +0 -86
  247. package/dist/mutations/personas.js +0 -100
  248. package/dist/mutations/posts.js +0 -53
  249. package/dist/mutations/reactions.js +0 -51
  250. package/dist/mutations/statistics.js +0 -39
  251. package/dist/mutations/subscriptions.js +0 -56
  252. package/dist/mutations/tags.js +0 -120
  253. package/dist/mutations/users.js +0 -116
  254. package/dist/objectTypes/app.js +0 -173
  255. package/dist/objectTypes/bankAccount.js +0 -76
  256. package/dist/objectTypes/connection.js +0 -48
  257. package/dist/objectTypes/conversation.js +0 -77
  258. package/dist/objectTypes/creditCard.js +0 -86
  259. package/dist/objectTypes/document.js +0 -46
  260. package/dist/objectTypes/error.js +0 -46
  261. package/dist/objectTypes/external.js +0 -74
  262. package/dist/objectTypes/file.js +0 -100
  263. package/dist/objectTypes/filter.js +0 -43
  264. package/dist/objectTypes/group.js +0 -123
  265. package/dist/objectTypes/iapSubscription.js +0 -40
  266. package/dist/objectTypes/image.js +0 -129
  267. package/dist/objectTypes/index.js +0 -68
  268. package/dist/objectTypes/location.js +0 -109
  269. package/dist/objectTypes/message.js +0 -96
  270. package/dist/objectTypes/passcode.js +0 -42
  271. package/dist/objectTypes/persona.js +0 -87
  272. package/dist/objectTypes/plan.js +0 -95
  273. package/dist/objectTypes/post.js +0 -125
  274. package/dist/objectTypes/reaction.js +0 -61
  275. package/dist/objectTypes/relation.js +0 -49
  276. package/dist/objectTypes/search.js +0 -72
  277. package/dist/objectTypes/statistics.js +0 -39
  278. package/dist/objectTypes/subscription.js +0 -117
  279. package/dist/objectTypes/tag.js +0 -65
  280. package/dist/objectTypes/user.js +0 -144
  281. package/dist/queries/index.js +0 -33
  282. package/dist/queries/locations.js +0 -45
  283. package/dist/queries/messages.js +0 -52
  284. package/dist/queries/posts.js +0 -154
  285. package/dist/queries/reactions.js +0 -56
  286. package/dist/queries/statistics.js +0 -39
  287. package/dist/queries/subscriptions.js +0 -44
  288. package/dist/queries/tags.js +0 -75
  289. package/dist/queries/users.js +0 -64
  290. package/dist/templates/email/layout.js +0 -302
  291. package/dist/templates/email/passwordForgot.js +0 -38
  292. package/dist/templates/email/passwordRecovery.js +0 -35
  293. package/dist/templates/email/verifyEmail.js +0 -38
  294. package/dist/templates/email/welcome.js +0 -38
  295. package/dist/templates/sms/passwordForgot.js +0 -24
  296. package/dist/templates/sms/passwordRecovery.js +0 -24
  297. package/dist/templates/sms/verifyEmail.js +0 -24
  298. package/dist/templates/sms/verifyPhone.js +0 -24
  299. package/dist/templates/sms/welcome.js +0 -24
  300. package/dist/types/apps.js +0 -32
  301. package/dist/types/arangodb.js +0 -16
  302. package/dist/types/auth.js +0 -16
  303. package/dist/types/connections.js +0 -16
  304. package/dist/types/conversations.js +0 -16
  305. package/dist/types/email.js +0 -16
  306. package/dist/types/error.js +0 -44
  307. package/dist/types/files.js +0 -16
  308. package/dist/types/google.js +0 -16
  309. package/dist/types/groups.js +0 -16
  310. package/dist/types/images.js +0 -16
  311. package/dist/types/index.js +0 -60
  312. package/dist/types/locations.js +0 -16
  313. package/dist/types/messages.js +0 -16
  314. package/dist/types/notifications.js +0 -16
  315. package/dist/types/payments.js +0 -16
  316. package/dist/types/personas.js +0 -16
  317. package/dist/types/posts.js +0 -16
  318. package/dist/types/statistics.js +0 -16
  319. package/dist/types/tags.js +0 -16
  320. package/dist/types/users.js +0 -16
  321. package/dist/types/websockets.js +0 -16
  322. package/dist/utils/adapterUtils.js +0 -45
  323. package/dist/utils/analyticsUtils.js +0 -72
  324. package/dist/utils/arangodbUtils.js +0 -165
  325. package/dist/utils/auth.js +0 -57
  326. package/dist/utils/index.js +0 -30
  327. package/dist/utils/session.js +0 -60
  328. package/jest.config.js +0 -17
  329. package/jest.setup.js +0 -36
  330. package/lex.config.cjs +0 -13
  331. package/lib/actions/apps.js +0 -20
  332. package/lib/actions/connections.js +0 -7
  333. package/lib/actions/content.js +0 -17
  334. package/lib/actions/conversations.js +0 -33
  335. package/lib/actions/dynamodb.js +0 -2
  336. package/lib/actions/email.js +0 -2
  337. package/lib/actions/files.js +0 -5
  338. package/lib/actions/groups.js +0 -52
  339. package/lib/actions/images.js +0 -66
  340. package/lib/actions/index.js +0 -2
  341. package/lib/actions/ios.js +0 -11
  342. package/lib/actions/locations.js +0 -7
  343. package/lib/actions/messages.js +0 -33
  344. package/lib/actions/notifications.js +0 -2
  345. package/lib/actions/payments.js +0 -32
  346. package/lib/actions/posts.js +0 -143
  347. package/lib/actions/profiles.js +0 -8
  348. package/lib/actions/reactions.js +0 -35
  349. package/lib/actions/s3.js +0 -2
  350. package/lib/actions/search.js +0 -5
  351. package/lib/actions/sms.js +0 -2
  352. package/lib/actions/statistics.js +0 -8
  353. package/lib/actions/subscriptions.js +0 -12
  354. package/lib/actions/tags.js +0 -24
  355. package/lib/actions/users.js +0 -84
  356. package/lib/actions/websockets.js +0 -30
  357. package/lib/adapters/arangoAdapter.js +0 -2
  358. package/lib/adapters/contentAdapter.js +0 -2
  359. package/lib/adapters/fileAdapter.js +0 -2
  360. package/lib/adapters/imageAdapter.js +0 -2
  361. package/lib/adapters/messageAdapter.js +0 -2
  362. package/lib/adapters/postAdapter.js +0 -2
  363. package/lib/adapters/reaktorAdapter.js +0 -2
  364. package/lib/adapters/tagAdapter.js +0 -2
  365. package/lib/adapters/userAdapter.js +0 -2
  366. package/lib/config.js +0 -2
  367. package/lib/handlers/graphqlHandler.js +0 -2
  368. package/lib/index.js +0 -2
  369. package/lib/lambdas/actions/websockets.js +0 -30
  370. package/lib/lambdas/authorizer.js +0 -2
  371. package/lib/lambdas/connection.js +0 -2
  372. package/lib/lambdas/utils/message.js +0 -2
  373. package/lib/lambdas/utils/websocket.js +0 -2
  374. package/lib/mocks/conversation.js +0 -2
  375. package/lib/mocks/file.js +0 -2
  376. package/lib/mocks/group.js +0 -2
  377. package/lib/mocks/image.js +0 -2
  378. package/lib/mocks/post.js +0 -2
  379. package/lib/mocks/tag.js +0 -2
  380. package/lib/mocks/user.js +0 -2
  381. package/lib/mutations/index.js +0 -2
  382. package/lib/mutations/locations.integration.js +0 -2
  383. package/lib/mutations/locations.js +0 -2
  384. package/lib/mutations/messages.integration.js +0 -2
  385. package/lib/mutations/messages.js +0 -2
  386. package/lib/mutations/posts.integration.js +0 -2
  387. package/lib/mutations/posts.js +0 -2
  388. package/lib/mutations/profiles.integration.js +0 -2
  389. package/lib/mutations/profiles.js +0 -2
  390. package/lib/mutations/reactions.integration.js +0 -2
  391. package/lib/mutations/reactions.js +0 -2
  392. package/lib/mutations/statistics.integration.js +0 -2
  393. package/lib/mutations/statistics.js +0 -2
  394. package/lib/mutations/subscriptions.integration.js +0 -2
  395. package/lib/mutations/subscriptions.js +0 -2
  396. package/lib/mutations/tags.integration.js +0 -2
  397. package/lib/mutations/tags.js +0 -2
  398. package/lib/mutations/users.integration.js +0 -2
  399. package/lib/mutations/users.js +0 -2
  400. package/lib/objectTypes/app.js +0 -2
  401. package/lib/objectTypes/bankAccount.js +0 -2
  402. package/lib/objectTypes/connection.js +0 -2
  403. package/lib/objectTypes/conversation.js +0 -2
  404. package/lib/objectTypes/creditCard.js +0 -2
  405. package/lib/objectTypes/document.js +0 -2
  406. package/lib/objectTypes/error.js +0 -2
  407. package/lib/objectTypes/external.js +0 -2
  408. package/lib/objectTypes/file.js +0 -2
  409. package/lib/objectTypes/filter.js +0 -2
  410. package/lib/objectTypes/group.js +0 -2
  411. package/lib/objectTypes/iapSubscription.js +0 -2
  412. package/lib/objectTypes/image.js +0 -2
  413. package/lib/objectTypes/index.js +0 -2
  414. package/lib/objectTypes/location.js +0 -2
  415. package/lib/objectTypes/message.js +0 -2
  416. package/lib/objectTypes/passcode.js +0 -2
  417. package/lib/objectTypes/plan.js +0 -2
  418. package/lib/objectTypes/post.js +0 -2
  419. package/lib/objectTypes/profile.js +0 -2
  420. package/lib/objectTypes/reaction.js +0 -2
  421. package/lib/objectTypes/relation.js +0 -2
  422. package/lib/objectTypes/search.js +0 -2
  423. package/lib/objectTypes/statistics.js +0 -2
  424. package/lib/objectTypes/subscription.js +0 -2
  425. package/lib/objectTypes/tag.js +0 -2
  426. package/lib/objectTypes/user.js +0 -2
  427. package/lib/queries/index.js +0 -2
  428. package/lib/queries/locations.integration.js +0 -2
  429. package/lib/queries/locations.js +0 -2
  430. package/lib/queries/messages.integration.js +0 -2
  431. package/lib/queries/messages.js +0 -2
  432. package/lib/queries/posts.integration.js +0 -2
  433. package/lib/queries/posts.js +0 -2
  434. package/lib/queries/reactions.integration.js +0 -2
  435. package/lib/queries/reactions.js +0 -2
  436. package/lib/queries/statistics.js +0 -2
  437. package/lib/queries/subscriptions.js +0 -2
  438. package/lib/queries/tags.integration.js +0 -2
  439. package/lib/queries/tags.js +0 -2
  440. package/lib/queries/users.integration.js +0 -2
  441. package/lib/queries/users.js +0 -2
  442. package/lib/templates/email/layout.js +0 -280
  443. package/lib/templates/email/passwordForgot.js +0 -16
  444. package/lib/templates/email/passwordRecovery.js +0 -13
  445. package/lib/templates/email/verifyEmail.js +0 -16
  446. package/lib/templates/email/welcome.js +0 -16
  447. package/lib/templates/sms/passwordForgot.js +0 -2
  448. package/lib/templates/sms/passwordRecovery.js +0 -2
  449. package/lib/templates/sms/verifyEmail.js +0 -2
  450. package/lib/templates/sms/verifyPhone.js +0 -2
  451. package/lib/templates/sms/welcome.js +0 -2
  452. package/lib/types/apps.types.js +0 -2
  453. package/lib/types/arangodb.types.js +0 -1
  454. package/lib/types/auth.types.js +0 -1
  455. package/lib/types/connections.types.js +0 -1
  456. package/lib/types/content.types.js +0 -1
  457. package/lib/types/conversations.types.js +0 -1
  458. package/lib/types/email.types.js +0 -1
  459. package/lib/types/error.types.js +0 -2
  460. package/lib/types/files.types.js +0 -1
  461. package/lib/types/google.types.js +0 -1
  462. package/lib/types/groups.types.js +0 -1
  463. package/lib/types/images.types.js +0 -1
  464. package/lib/types/index.js +0 -2
  465. package/lib/types/locations.types.js +0 -1
  466. package/lib/types/messages.types.js +0 -1
  467. package/lib/types/notifications.types.js +0 -1
  468. package/lib/types/payments.types.js +0 -1
  469. package/lib/types/posts.types.js +0 -1
  470. package/lib/types/profiles.types.js +0 -1
  471. package/lib/types/statistics.types.js +0 -1
  472. package/lib/types/tags.types.js +0 -1
  473. package/lib/types/users.types.js +0 -1
  474. package/lib/types/websockets.types.js +0 -1
  475. package/lib/utils/adapterUtils.js +0 -2
  476. package/lib/utils/analyticsUtils.js +0 -2
  477. package/lib/utils/arangodbUtils.js +0 -7
  478. package/lib/utils/authUtils.js +0 -2
  479. package/lib/utils/contextUtils.js +0 -2
  480. package/lib/utils/dbI18n.example.js +0 -6
  481. package/lib/utils/dbI18n.js +0 -2
  482. package/lib/utils/googleTranslate.js +0 -2
  483. package/lib/utils/graphqlUtils.js +0 -2
  484. package/lib/utils/index.js +0 -2
  485. package/lib/utils/languageDetection.js +0 -2
  486. package/lib/utils/localeUtils.example.js +0 -2
  487. package/lib/utils/localeUtils.js +0 -2
  488. package/lib/utils/middlewareUtils.js +0 -2
  489. package/lib/utils/sessionUtils.js +0 -2
  490. package/lib/utils/stripeUtils.js +0 -2
  491. package/lib/utils/templateUtils.js +0 -2
  492. package/lib/utils/testUtils.js +0 -2
  493. package/lib/utils/translationQueue.example.js +0 -2
  494. package/lib/utils/translationQueue.js +0 -2
@@ -1,33 +0,0 @@
1
- import{createHash as T,parseId as v}from"@nlabs/utils";import{aql as R}from"arangojs";import O from"lodash/cloneDeep";import{getImageUrl as q}from"./images";import{getDisplayName as _,getUser as N}from"./users";import{Config as b}from"../config";import{ErrorTypes as C}from"../types/error.types";import{logError as I}from"../utils/analyticsUtils";import{getLimit as P,sortIds as A,useDb as y}from"../utils/arangodbUtils";const g="conversations",Q=(e={})=>{const{from:n=0,to:a=30}=e;return{limit:P(n,a)}},G=(e,n,a)=>{const i="getConversations",{databaseName:c}=e,{limit:u}=Q(a),o=`users/${n}`,t=`FOR c, e IN 1..1 OUTBOUND "${o}" hasConversation
2
- ${u.aql}
3
- LET users = (
4
- FOR u, uc IN 1..1 INBOUND c._id hasConversation
5
- FILTER u._id != "${o}"
6
- RETURN u
7
- )
8
- RETURN MERGE(c, {users: users})`;return y(c).query(t).then(s=>s.all()).catch(s=>(I({action:i,category:g,label:C.DATABASE_ERROR},s,e),[]))},H=async(e,{fromId:n,toId:a,toUser:i})=>{const c="getDirectConversation",{databaseName:u}=e;try{const o=v(n),t=v(a),r=A([o,t]),d=T(`conversations-${r.join("-")}`,null),m=i||await N(e,{userId:t}),l=R`LET c = DOCUMENT(${`conversations/${d}`}) RETURN c`,p=await y(u).query(l).then(E=>E.next()).catch(E=>I({action:c,category:g,label:C.DATABASE_ERROR},E,e));return p?{...p,users:[m]}:F(e,{fromId:n,toId:a,toUser:m})}catch(o){return I({action:c,category:g,label:C.DATABASE_ERROR},o,e)}},F=async(e,{fromId:n,toId:a,toUser:i})=>{const c="getDirectConversation",{databaseName:u}=e;try{const o=v(n),t=v(a),s=[o,t],r=A([o,t]),d=i||await N(e,{userId:t}),m=T(`conversations-${r.join("-")}`,null),l=Date.now(),E=R`INSERT ${{_key:m,added:l,isDirect:!0,modified:l}} IN conversations RETURN NEW`,h=await y(u).query(E).then(U=>U.next());return await Promise.all(s.map(U=>{const D=T(`hasConversation-${U}-${m}`),$={_from:`users/${U}`,_key:D,_to:`conversations/${m}`,added:Date.now()},f=R`INSERT ${$} IN hasConversation RETURN NEW`;return y(u).query(f)})),{...h,users:[d]}}catch(o){return I({action:c,category:g,label:C.DATABASE_ERROR},o,e),{}}},V=(e,{conversationId:n,includeAll:a=!1,isDirect:i})=>{const c="getConnectionUsers",{databaseName:u,session:{userId:o}}=e,t=["c.userId == u._key"];a||t.push(`u._key != ${o}`),i&&t.push(`p.vertices[0].isDirect == ${i}`);const s=R`FOR u, e,p IN 1..1 INBOUND ${`conversations/${n}`} hasConversation
9
- OPTIONS {vertexCollections: "users"}
10
- FOR c IN connections
11
- FILTER ${t.join(" && ")}
12
- RETURN c`;return y(u).query(s).then(r=>r.all()).catch(r=>(I({action:c,category:g,label:C.DATABASE_ERROR},r,e),[]))},z=(e,{conversationId:n,includeAll:a=!1,isDirect:i})=>{const c="getConversationUsers",{databaseName:u,session:{userId:o}}=e,t=["c.userId == u._key"];a||t.push(`u._key != ${o}`),i&&t.push(`p.vertices[0].isDirect == ${i}`);const s=R`FOR u, e,p IN 1..1 INBOUND ${`conversations/${n}`} hasConversation
13
- OPTIONS {vertexCollections: "users"}
14
- FILTER ${t.join(" && ")}
15
- RETURN u`;return y(u).query(s).then(r=>r.all()).catch(r=>(I({action:c,category:g,label:C.DATABASE_ERROR},r,e),[]))},J=(e,n)=>{const a="getItem",{databaseName:i,session:{userId:c}}=e,u=`users/${c}`,o=`conversations/${v(n)}`,t=R`FOR c, e IN 1..1 OUTBOUND ${u} hasConversation
16
- FILTER c._id == ${o}
17
- LET u = (
18
- FOR inUser, inEdge IN 1..1 INBOUND ${o} hasConversation
19
- RETURN inUser
20
- )
21
- LIMIT 1
22
- RETURN MERGE(c, {users: u})`;return y(i).query(t).then(s=>s.next()).then(s=>s?(s.users=s.users.map(r=>{const{imageId:d,userId:m}=r,l={bucket:b.get("aws.s3.Bucket"),imageDir:"thumbs",imageId:d,type:"users",typeId:m};return{...r,name:_(r),thumb:q(l)}}),s):{}).catch(s=>I({action:a,category:g,label:C.DATABASE_ERROR},s,e))},K=(e,n)=>{const a="updateConversation",{databaseName:i,session:{userId:c}}=e,{conversationId:u=T(`conversation-${c} `),isDirect:o=!1,name:t}=n,s=v(u),r=Date.now(),d={isDirect:o,modified:r,name:t},m={...O(d),_key:s,added:r},l=R`UPSERT {_key: ${s} }
23
- INSERT ${m}
24
- UPDATE ${d}
25
- IN conversations RETURN NEW`;return y(i).query(l).then(p=>p.next()).then(p=>p).catch(p=>I({action:a,category:g,label:C.DATABASE_ERROR},p,e))},X=(e,{conversationId:n,userId:a})=>{const i="addUserToConversation",{databaseName:c}=e,u=v(n),o=v(a),t=`conversations/${u}`,s=`users/${o}`,r=R`FOR hc IN hasConversation
26
- FILTER hc._from == ${s} && hc._to == ${t}
27
- LIMIT 1
28
- RETURN hc`;return y(c).query(r).then(d=>d.next()).then(d=>{if(d)return d;const m=y(c).collection("hasConversation"),l=T(`convo - ${u} -${o} `),p={_from:s,_key:l,_to:t,added:Date.now()};return m.save(p,{returnNew:!0}).then(()=>p)}).catch(d=>I({action:i,category:g,label:C.DATABASE_ERROR},d,e))},Y=(e,{conversationId:n,userId:a})=>{const i="deleteUserFromConversation",{databaseName:c}=e,u=v(n),o=v(a),t=`conversations/${u}`,s=`users/${o}`,r=R`FOR hc IN hasConversation
29
- FILTER hc._from == ${s} && hc._to == ${t}
30
- LIMIT 1
31
- REMOVE hc IN hasConversation
32
- RETURN OLD`;return y(c).query(r).then(d=>d.next()).catch(d=>I({action:i,category:g,label:C.DATABASE_ERROR},d,e))};export{F as addDirectConversation,X as addUserToConversation,Y as deleteUserFromConversation,V as getConnectionUsers,J as getConversation,z as getConversationUsers,G as getConversations,H as getDirectConversation,Q as parseConversationOptions,K as updateConversation};
33
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvY29udmVyc2F0aW9ucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcblxuaW1wb3J0IHtnZXRJbWFnZVVybH0gZnJvbSAnLi9pbWFnZXMnO1xuaW1wb3J0IHtnZXREaXNwbGF5TmFtZSwgZ2V0VXNlcn0gZnJvbSAnLi91c2Vycyc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMnO1xuaW1wb3J0IHtnZXRMaW1pdCwgc29ydElkcywgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFyYW5nb0RiTGltaXQsXG4gIENvbm5lY3Rpb25UeXBlLFxuICBDb252ZXJzYXRpb25PcHRpb25zLFxuICBDb252ZXJzYXRpb25UeXBlLFxuICBDb252ZXJzYXRpb25Vc2Vyc1BhcmFtcyxcbiAgRGlyZWN0Q29udmVyc2F0aW9uUGFyYW1zLFxuICBFZGdlVHlwZSxcbiAgSW1hZ2VVcmxEYXRhLFxuICBVcGRhdGVDb252ZXJzYXRpb25Vc2VyUGFyYW1zLFxuICBVc2VyVHlwZVxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcyc7XG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ2NvbnZlcnNhdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb252ZXJzYXRpb25PcHRpb25zID0gKG9wdGlvbnM6IENvbnZlcnNhdGlvbk9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgZnJvbSA9IDAsXG4gICAgdG8gPSAzMFxuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvbnMgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcklkOiBzdHJpbmcsIG9wdGlvbnM/KTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0Q29udmVyc2F0aW9ucyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlQ29udmVyc2F0aW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgdXNlckRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHt1c2VySWR9YDtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCBcIiR7dXNlckRvY0lkfVwiIGhhc0NvbnZlcnNhdGlvblxuICAgICR7bGltaXQuYXFsfVxuICAgIExFVCB1c2VycyA9IChcbiAgICAgIEZPUiB1LCB1YyBJTiAxLi4xIElOQk9VTkQgYy5faWQgaGFzQ29udmVyc2F0aW9uXG4gICAgICBGSUxURVIgdS5faWQgIT0gXCIke3VzZXJEb2NJZH1cIlxuICAgICAgUkVUVVJOIHVcbiAgICApXG4gICAgUkVUVVJOIE1FUkdFKGMsIHt1c2VyczogdXNlcnN9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIENvbnZlcnNhdGlvblR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERpcmVjdENvbnZlcnNhdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGZyb21JZCxcbiAgICB0b0lkLFxuICAgIHRvVXNlclxuICB9OiBEaXJlY3RDb252ZXJzYXRpb25QYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXREaXJlY3RDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmb3JtYXRGcm9tSWQgPSBwYXJzZUlkKGZyb21JZCk7XG4gICAgY29uc3QgZm9ybWF0VG9JZCA9IHBhcnNlSWQodG9JZCk7XG4gICAgY29uc3QgdXNlcklkcyA9IFtmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWRdO1xuICAgIGNvbnN0IHNvcnRlZFVzZXJJZHMgPSBzb3J0SWRzKHVzZXJJZHMpO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9ucy0ke3NvcnRlZFVzZXJJZHMuam9pbignLScpfWAsIG51bGwpO1xuICAgIGNvbnN0IHVzZXI6IFVzZXJUeXBlID0gdG9Vc2VyIHx8IGF3YWl0IGdldFVzZXIoY29udGV4dCwge3VzZXJJZDogZm9ybWF0VG9JZH0pO1xuICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgTEVUIGMgPSBET0NVTUVOVCgke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0pIFJFVFVSTiBjYDtcbiAgICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcblxuICAgIGlmKGNvbnZlcnNhdGlvbikge1xuICAgICAgcmV0dXJuIHsuLi5jb252ZXJzYXRpb24sIHVzZXJzOiBbdXNlcl19O1xuICAgIH1cblxuICAgIHJldHVybiBhZGREaXJlY3RDb252ZXJzYXRpb24oY29udGV4dCwge2Zyb21JZCwgdG9JZCwgdG9Vc2VyOiB1c2VyfSk7XG4gIH0gY2F0Y2goZGF0YWJhc2VFcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZGF0YWJhc2VFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBhZGREaXJlY3RDb252ZXJzYXRpb24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBmcm9tSWQsXG4gICAgdG9JZCxcbiAgICB0b1VzZXJcbiAgfTogRGlyZWN0Q29udmVyc2F0aW9uUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0RGlyZWN0Q29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZm9ybWF0RnJvbUlkID0gcGFyc2VJZChmcm9tSWQpO1xuICAgIGNvbnN0IGZvcm1hdFRvSWQgPSBwYXJzZUlkKHRvSWQpO1xuICAgIGNvbnN0IHVzZXJJZHMgPSBbZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkXTtcbiAgICBjb25zdCBzb3J0ZWRVc2VySWRzID0gc29ydElkcyhbZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkXSk7XG4gICAgY29uc3QgdXNlcjogVXNlclR5cGUgPSB0b1VzZXIgfHwgYXdhaXQgZ2V0VXNlcihjb250ZXh0LCB7dXNlcklkOiBmb3JtYXRUb0lkfSk7XG4gICAgY29uc3QgY29udmVyc2F0aW9uSWQgPSBjcmVhdGVIYXNoKGBjb252ZXJzYXRpb25zLSR7c29ydGVkVXNlcklkcy5qb2luKCctJyl9YCwgbnVsbCk7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBpbnNlcnQgPSB7XG4gICAgICBfa2V5OiBjb252ZXJzYXRpb25JZCxcbiAgICAgIGFkZGVkOiBub3csXG4gICAgICBpc0RpcmVjdDogdHJ1ZSxcbiAgICAgIG1vZGlmaWVkOiBub3dcbiAgICB9O1xuICAgIGNvbnN0IGluc2VydFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIGNvbnZlcnNhdGlvbnMgUkVUVVJOIE5FV2A7XG4gICAgY29uc3QgdXBkYXRlZENvbnZlcnNhdGlvbiA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoaW5zZXJ0UXVlcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHVzZXJJZHMubWFwKCh1c2VySWQpID0+IHtcbiAgICAgIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgaGFzQ29udmVyc2F0aW9uLSR7dXNlcklkfS0ke2NvbnZlcnNhdGlvbklkfWApO1xuICAgICAgY29uc3QgZWRnZTogRWRnZVR5cGUgPSB7XG4gICAgICAgIF9mcm9tOiBgdXNlcnMvJHt1c2VySWR9YCxcbiAgICAgICAgX2tleTogZWRnZUlkLFxuICAgICAgICBfdG86IGBjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YCxcbiAgICAgICAgYWRkZWQ6IERhdGUubm93KClcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnNlcnRFZGdlUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2VkZ2V9IElOIGhhc0NvbnZlcnNhdGlvbiBSRVRVUk4gTkVXYDtcbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGluc2VydEVkZ2VRdWVyeSk7XG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHsuLi51cGRhdGVkQ29udmVyc2F0aW9uLCB1c2VyczogW3VzZXJdfTtcbiAgfSBjYXRjaChkYXRhYmFzZUVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGRhdGFiYXNlRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiB7fTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbm5lY3Rpb25Vc2VycyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIGluY2x1ZGVBbGwgPSBmYWxzZSxcbiAgICBpc0RpcmVjdFxuICB9OiBDb252ZXJzYXRpb25Vc2Vyc1BhcmFtc1xuKTogUHJvbWlzZTxDb25uZWN0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldENvbm5lY3Rpb25Vc2Vycyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gWydjLnVzZXJJZCA9PSB1Ll9rZXknXTtcblxuICBpZighaW5jbHVkZUFsbCkge1xuICAgIGZpbHRlcnMucHVzaChgdS5fa2V5ICE9ICR7c2Vzc2lvblVzZXJJZH1gKTtcbiAgfVxuICBpZihpc0RpcmVjdCkge1xuICAgIGZpbHRlcnMucHVzaChgcC52ZXJ0aWNlc1swXS5pc0RpcmVjdCA9PSAke2lzRGlyZWN0fWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdSwgZSxwIElOIDEuLjEgSU5CT1VORCAke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0gaGFzQ29udmVyc2F0aW9uXG4gICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwidXNlcnNcIn1cbiAgICBGT1IgYyBJTiBjb25uZWN0aW9uc1xuICAgIEZJTFRFUiAke2ZpbHRlcnMuam9pbignICYmICcpfVxuICAgIFJFVFVSTiBjYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgQ29ubmVjdGlvblR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvblVzZXJzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgaW5jbHVkZUFsbCA9IGZhbHNlLFxuICAgIGlzRGlyZWN0XG4gIH06IENvbnZlcnNhdGlvblVzZXJzUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRDb252ZXJzYXRpb25Vc2Vycyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gWydjLnVzZXJJZCA9PSB1Ll9rZXknXTtcblxuICBpZighaW5jbHVkZUFsbCkge1xuICAgIGZpbHRlcnMucHVzaChgdS5fa2V5ICE9ICR7c2Vzc2lvblVzZXJJZH1gKTtcbiAgfVxuICBpZihpc0RpcmVjdCkge1xuICAgIGZpbHRlcnMucHVzaChgcC52ZXJ0aWNlc1swXS5pc0RpcmVjdCA9PSAke2lzRGlyZWN0fWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdSwgZSxwIElOIDEuLjEgSU5CT1VORCAke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0gaGFzQ29udmVyc2F0aW9uXG4gICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwidXNlcnNcIn1cbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICBSRVRVUk4gdWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIENvbnZlcnNhdGlvblR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuLy8gZXhwb3J0IGNvbnN0IGdldERpcmVjdENvbnZlcnNhdGlvbk9sZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VySWQ6IHN0cmluZyk6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuLy8gICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXREaXJlY3RDb252ZXJzYXRpb24nO1xuLy8gICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbi8vICAgY29uc3Qgc2Vzc2lvbkRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbi8vICAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKHVzZXJJZCk7XG5cbi8vICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgZnJvbSA9IChcbi8vICAgICAgIEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgJHtzZXNzaW9uRG9jSWR9IGhhc0NvbnZlcnNhdGlvblxuLy8gICAgICAgRklMVEVSIGMuZGlyZWN0ID09IHRydWVcbi8vICAgICAgIFJFVFVSTiBjXG4vLyAgICAgKVxuLy8gICAgIExFVCB0byA9IChcbi8vICAgICAgIEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgJHtmb3JtYXRVc2VySWR9IGhhc0NvbnZlcnNhdGlvblxuLy8gICAgICAgRklMVEVSIGMuZGlyZWN0ID09IHRydWVcbi8vICAgICAgIFJFVFVSTiBjXG4vLyAgICAgKVxuLy8gICAgIExFVCBjb252ZXJzYXRpb24gPSBGSVJTVChJTlRFUlNFQ1RJT04oZnJvbSwgdG8pKVxuLy8gICAgIExFVCB1c2VycyA9ICFJU19OVUxMKGNvbnZlcnNhdGlvbikgJiYgKFxuLy8gICAgICAgRk9SIGcgSU5bJHtzZXNzaW9uRG9jSWR9LCAke2Zvcm1hdFVzZXJJZH1dXG4vLyAgICAgICBGT1IgdSBJTiB1c2Vyc1xuLy8gICAgICAgRklMVEVSIGcgPT0gdS5faWRcbi8vICAgICAgIFJFVFVSTiB1XG4vLyAgICAgKVxuLy8gICAgIFJFVFVSTiBJU19OVUxMKGNvbnZlcnNhdGlvbikgPyBudWxsIDogTUVSR0UoY29udmVyc2F0aW9uLCB7dXNlcnM6IHVzZXJzfSlgO1xuXG4vLyAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4vLyAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbi8vICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuLy8gICAgICAgYWN0aW9uLFxuLy8gICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4vLyAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuLy8gICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4vLyB9O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgc2Vzc2lvbkRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgY29udmVyc2F0aW9uRG9jSWQ6IHN0cmluZyA9IGBjb252ZXJzYXRpb25zLyR7cGFyc2VJZChjb252ZXJzYXRpb25JZCl9YDtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgJHtzZXNzaW9uRG9jSWR9IGhhc0NvbnZlcnNhdGlvblxuICAgIEZJTFRFUiBjLl9pZCA9PSAke2NvbnZlcnNhdGlvbkRvY0lkfVxuICAgIExFVCB1ID0gKFxuICAgICAgRk9SIGluVXNlciwgaW5FZGdlIElOIDEuLjEgSU5CT1VORCAke2NvbnZlcnNhdGlvbkRvY0lkfSBoYXNDb252ZXJzYXRpb25cbiAgICAgIFJFVFVSTiBpblVzZXJcbiAgICApXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBNRVJHRShjLCB7dXNlcnM6IHV9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSkgPT4ge1xuICAgICAgaWYoIWNvbnZlcnNhdGlvbikge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG5cbiAgICAgIGNvbnZlcnNhdGlvbi51c2VycyA9IGNvbnZlcnNhdGlvbi51c2Vycy5tYXAoKHVzZXI6IFVzZXJUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHtpbWFnZUlkLCB1c2VySWR9ID0gdXNlcjtcbiAgICAgICAgY29uc3QgdGh1bWJVcmxEYXRhOiBJbWFnZVVybERhdGEgPSB7XG4gICAgICAgICAgYnVja2V0OiBDb25maWcuZ2V0KCdhd3MuczMuQnVja2V0JyksXG4gICAgICAgICAgaW1hZ2VEaXI6ICd0aHVtYnMnLFxuICAgICAgICAgIGltYWdlSWQsXG4gICAgICAgICAgdHlwZTogJ3VzZXJzJyxcbiAgICAgICAgICB0eXBlSWQ6IHVzZXJJZFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udXNlcixcbiAgICAgICAgICBuYW1lOiBnZXREaXNwbGF5TmFtZSh1c2VyKSxcbiAgICAgICAgICB0aHVtYjogZ2V0SW1hZ2VVcmwodGh1bWJVcmxEYXRhKVxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjb252ZXJzYXRpb247XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ29udmVyc2F0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGVcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICd1cGRhdGVDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBjb252ZXJzYXRpb25JZCA9IGNyZWF0ZUhhc2goYGNvbnZlcnNhdGlvbi0ke3Nlc3Npb25JZH0gYCksXG4gICAgaXNEaXJlY3QgPSBmYWxzZSxcbiAgICBuYW1lXG4gIH0gPSBjb252ZXJzYXRpb247XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkOiBzdHJpbmcgPSBwYXJzZUlkKGNvbnZlcnNhdGlvbklkKTtcbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCB1cGRhdGUgPSB7XG4gICAgaXNEaXJlY3QsXG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBuYW1lXG4gIH07XG5cbiAgY29uc3QgaW5zZXJ0ID0ge1xuICAgIC4uLmNsb25lRGVlcCh1cGRhdGUpLFxuICAgIF9rZXk6IGZvcm1hdENvbnZlcnNhdGlvbklkLFxuICAgIGFkZGVkOiBub3dcbiAgfTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHtmb3JtYXRDb252ZXJzYXRpb25JZH0gfVxuICAgIElOU0VSVCAke2luc2VydH1cbiAgICBVUERBVEUgJHt1cGRhdGV9XG4gICAgSU4gY29udmVyc2F0aW9ucyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiBjb252ZXJzYXRpb24pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFVzZXJUb0NvbnZlcnNhdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIHVzZXJJZFxuICB9OiBVcGRhdGVDb252ZXJzYXRpb25Vc2VyUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkVXNlclRvQ29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRDb252ZXJzYXRpb25JZDogc3RyaW5nID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZDogc3RyaW5nID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZDogc3RyaW5nID0gYGNvbnZlcnNhdGlvbnMvJHtmb3JtYXRDb252ZXJzYXRpb25JZH1gO1xuICBjb25zdCB1c2VyRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke2Zvcm1hdFVzZXJJZH1gO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGhjIElOIGhhc0NvbnZlcnNhdGlvblxuICAgIEZJTFRFUiBoYy5fZnJvbSA9PSAke3VzZXJEb2NJZH0gJiYgaGMuX3RvID09ICR7Y29udmVyc2F0aW9uRG9jSWR9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBoY2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGhhc0NvbnZlcnNhdGlvbkVkZ2UpID0+IHtcbiAgICAgIGlmKCEhaGFzQ29udmVyc2F0aW9uRWRnZSkge1xuICAgICAgICByZXR1cm4gaGFzQ29udmVyc2F0aW9uRWRnZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKCdoYXNDb252ZXJzYXRpb24nKTtcbiAgICAgIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgY29udm8gLSAke2Zvcm1hdENvbnZlcnNhdGlvbklkfSAtJHtmb3JtYXRVc2VySWR9IGApO1xuXG4gICAgICBjb25zdCBlZGdlOiBDb252ZXJzYXRpb25UeXBlID0ge1xuICAgICAgICBfZnJvbTogdXNlckRvY0lkLFxuICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgIF90bzogY29udmVyc2F0aW9uRG9jSWQsXG4gICAgICAgIGFkZGVkOiBEYXRlLm5vdygpXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZWRnZUNvbGxlY3Rpb25cbiAgICAgICAgLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgICAgIC50aGVuKCgpID0+IGVkZ2UpO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVVzZXJGcm9tQ29udmVyc2F0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgdXNlcklkXG4gIH06IFVwZGF0ZUNvbnZlcnNhdGlvblVzZXJQYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdkZWxldGVVc2VyRnJvbUNvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQ6IHN0cmluZyA9IHBhcnNlSWQoY29udmVyc2F0aW9uSWQpO1xuICBjb25zdCBmb3JtYXRVc2VySWQ6IHN0cmluZyA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgY29udmVyc2F0aW9uRG9jSWQ6IHN0cmluZyA9IGBjb252ZXJzYXRpb25zLyR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9YDtcbiAgY29uc3QgdXNlckRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtmb3JtYXRVc2VySWR9YDtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBoYyBJTiBoYXNDb252ZXJzYXRpb25cbiAgICBGSUxURVIgaGMuX2Zyb20gPT0gJHt1c2VyRG9jSWR9ICYmIGhjLl90byA9PSAke2NvbnZlcnNhdGlvbkRvY0lkfVxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgaGMgSU4gaGFzQ29udmVyc2F0aW9uXG4gICAgUkVUVVJOIE9MRGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICJBQUlBLE9BQVEsY0FBQUEsRUFBWSxXQUFBQyxNQUFjLGVBQ2xDLE9BQVEsT0FBQUMsTUFBVSxXQUVsQixPQUFPQyxNQUFlLG1CQUV0QixPQUFRLGVBQUFDLE1BQWtCLFdBQzFCLE9BQVEsa0JBQUFDLEVBQWdCLFdBQUFDLE1BQWMsVUFDdEMsT0FBUSxVQUFBQyxNQUFhLFlBQ3JCLE9BQVEsY0FBQUMsTUFBaUIsdUJBQ3pCLE9BQVEsWUFBQUMsTUFBZSwwQkFDdkIsT0FBUSxZQUFBQyxFQUFVLFdBQUFDLEVBQVMsU0FBQUMsTUFBWSx5QkFpQnZDLE1BQU1DLEVBQXdCLGdCQUVqQkMsRUFBMkIsQ0FBQ0MsRUFBK0IsQ0FBQyxJQUFNLENBQzdFLEtBQU0sQ0FDSixLQUFBQyxFQUFPLEVBQ1AsR0FBQUMsRUFBSyxFQUNQLEVBQUlGLEVBRUosTUFBTyxDQUNMLE1BQU9MLEVBQVNNLEVBQU1DLENBQUUsQ0FDMUIsQ0FDRixFQUVhQyxFQUFtQixDQUFDQyxFQUFxQkMsRUFBZ0JMLElBQTBDLENBQzlHLE1BQU1NLEVBQWlCLG1CQUNqQixDQUFDLGFBQUFDLENBQVksRUFBSUgsRUFDakIsQ0FBQyxNQUFBSSxDQUFLLEVBQUlULEVBQXlCQyxDQUFPLEVBQzFDUyxFQUFvQixTQUFTSixDQUFNLEdBQ25DSyxFQUFpQiw4QkFBOEJELENBQVM7QUFBQSxNQUMxREQsRUFBTSxHQUFHO0FBQUE7QUFBQTtBQUFBLHlCQUdVQyxDQUFTO0FBQUE7QUFBQTtBQUFBLHFDQUtoQyxPQUFP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QSxnQkFLbEUsT0FBTzVDLEVBQU1VLENBQVksRUFBRSxNQUFNRyxDQUFNLEVBQ3BDLEtBQU1DLEdBQVdBLEVBQU8sS0FBSyxDQUFDLEVBQzlCLE1BQU9DLEdBQWlCbEIsRUFBUyxDQUNoQyxPQUFBWSxFQUNBLFNBQVVSLEVBQ1YsTUFBT0wsRUFBVyxjQUNwQixFQUFHbUIsRUFBT1IsQ0FBTyxDQUFDLENBQ3RCIiwKICAibmFtZXMiOiBbImNyZWF0ZUhhc2giLCAicGFyc2VJZCIsICJhcWwiLCAiY2xvbmVEZWVwIiwgImdldEltYWdlVXJsIiwgImdldERpc3BsYXlOYW1lIiwgImdldFVzZXIiLCAiQ29uZmlnIiwgIkVycm9yVHlwZXMiLCAibG9nRXJyb3IiLCAiZ2V0TGltaXQiLCAic29ydElkcyIsICJ1c2VEYiIsICJldmVudENhdGVnb3J5IiwgInBhcnNlQ29udmVyc2F0aW9uT3B0aW9ucyIsICJvcHRpb25zIiwgImZyb20iLCAidG8iLCAiZ2V0Q29udmVyc2F0aW9ucyIsICJjb250ZXh0IiwgInVzZXJJZCIsICJhY3Rpb24iLCAiZGF0YWJhc2VOYW1lIiwgImxpbWl0IiwgInVzZXJEb2NJZCIsICJhcWxRcnkiLCAiY3Vyc29yIiwgImVycm9yIiwgImdldERpcmVjdENvbnZlcnNhdGlvbiIsICJmcm9tSWQiLCAidG9JZCIsICJ0b1VzZXIiLCAiZm9ybWF0RnJvbUlkIiwgImZvcm1hdFRvSWQiLCAic29ydGVkVXNlcklkcyIsICJjb252ZXJzYXRpb25JZCIsICJ1c2VyIiwgImNvbnZlcnNhdGlvbiIsICJhZGREaXJlY3RDb252ZXJzYXRpb24iLCAiZGF0YWJhc2VFcnJvciIsICJ1c2VySWRzIiwgIm5vdyIsICJpbnNlcnRRdWVyeSIsICJ1cGRhdGVkQ29udmVyc2F0aW9uIiwgImVkZ2VJZCIsICJlZGdlIiwgImluc2VydEVkZ2VRdWVyeSIsICJnZXRDb25uZWN0aW9uVXNlcnMiLCAiaW5jbHVkZUFsbCIsICJpc0RpcmVjdCIsICJzZXNzaW9uVXNlcklkIiwgImZpbHRlcnMiLCAiZ2V0Q29udmVyc2F0aW9uVXNlcnMiLCAiZ2V0Q29udmVyc2F0aW9uIiwgInNlc3Npb25JZCIsICJzZXNzaW9uRG9jSWQiLCAiY29udmVyc2F0aW9uRG9jSWQiLCAiaW1hZ2VJZCIsICJ0aHVtYlVybERhdGEiLCAidXBkYXRlQ29udmVyc2F0aW9uIiwgIm5hbWUiLCAiZm9ybWF0Q29udmVyc2F0aW9uSWQiLCAidXBkYXRlIiwgImluc2VydCIsICJhZGRVc2VyVG9Db252ZXJzYXRpb24iLCAiZm9ybWF0VXNlcklkIiwgImhhc0NvbnZlcnNhdGlvbkVkZ2UiLCAiZWRnZUNvbGxlY3Rpb24iLCAiZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24iXQp9Cg==
@@ -1,2 +0,0 @@
1
- import{DynamoDB as s}from"@aws-sdk/client-dynamodb";import{Config as d}from"../config";const U=n=>new Promise((m,o)=>{const r=new s({credentials:d.get("aws.credentials"),region:d.get("aws.region")});n.ConsistentRead=!1,r.getItem(n,(e,t)=>e?o(e):m(t))}),c=n=>{const{Items:m=[]}=n,o=[];for(let r=0,e=m.length;r<e;r++){const t=m[r],u={};let a;for(a in t)t.hasOwnProperty(a)&&(t[a].S?u[a]=t[a].S.toString():t[a].N?u[a]=parseFloat(t[a].N):u[a]=t[a].B);o.push(u)}return o},C=(n,m)=>new Promise((o,r)=>{const e=new s({credentials:d.get("aws.credentials"),region:d.get("aws.region")}),{ConsistentRead:t}=n,u={...n};m&&(u.ExclusiveStartKey=m),t||(u.ConsistentRead=!1);const a=[];e.query(u,(i,p)=>{if(i)return r(i);a.push(...c(p)||[]);const{LastEvaluatedKey:I}=p;return I!==void 0?C(n,I):o(a)})}),W=n=>new Promise((m,o)=>{new s({credentials:d.get("aws.credentials"),region:d.get("aws.region")}).putItem(n,(e,t)=>e?o(e):m(t))}),Q=n=>new Promise((m,o)=>{new s({credentials:d.get("aws.credentials"),region:d.get("aws.region")}).updateItem(n,(e,t)=>e?o(e):m(t))}),L=n=>new Promise((m,o)=>{new s({credentials:d.get("aws.credentials"),region:d.get("aws.region")}).batchWriteItem(n,(e,t)=>e?o(e):m(t))}),R=n=>new Promise((m,o)=>{new s({credentials:d.get("aws.credentials"),region:d.get("aws.region")}).deleteItem(n,(e,t)=>e?o(e):m(t))});export{R as dynamoDel,U as dynamoGet,C as dynamoGetList,W as dynamoPut,L as dynamoPutList,Q as dynamoUpdate,c as parseDynamoList};
2
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvZHluYW1vZGIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge1xuICBCYXRjaFdyaXRlSXRlbUNvbW1hbmRJbnB1dCxcbiAgQmF0Y2hXcml0ZUl0ZW1Db21tYW5kT3V0cHV0LFxuICBEZWxldGVJdGVtQ29tbWFuZElucHV0LFxuICBEZWxldGVJdGVtQ29tbWFuZE91dHB1dCxcbiAgRHluYW1vREIsXG4gIEdldEl0ZW1Db21tYW5kSW5wdXQsXG4gIEdldEl0ZW1Db21tYW5kT3V0cHV0LFxuICBQdXRJdGVtQ29tbWFuZElucHV0LFxuICBQdXRJdGVtQ29tbWFuZE91dHB1dCxcbiAgUXVlcnlDb21tYW5kSW5wdXQsXG4gIFF1ZXJ5Q29tbWFuZE91dHB1dCxcbiAgVXBkYXRlSXRlbUNvbW1hbmRJbnB1dCxcbiAgVXBkYXRlSXRlbUNvbW1hbmRPdXRwdXRcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZyc7XG5cbi8vIGNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdkeW5hbW9kYic7XG5leHBvcnQgY29uc3QgZHluYW1vR2V0ID0gKHBhcmFtczogR2V0SXRlbUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0SXRlbUNvbW1hbmRPdXRwdXQ+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBkeW5hbW9kYiA9IG5ldyBEeW5hbW9EQih7XG4gICAgICBjcmVkZW50aWFsczogQ29uZmlnLmdldCgnYXdzLmNyZWRlbnRpYWxzJyksXG4gICAgICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxuICAgIH0pO1xuICAgIHBhcmFtcy5Db25zaXN0ZW50UmVhZCA9IGZhbHNlO1xuXG4gICAgZHluYW1vZGIuZ2V0SXRlbShwYXJhbXMsIChlcnJvcjogRXJyb3IsIHJlc3VsdHM6IEdldEl0ZW1Db21tYW5kT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc29sdmUocmVzdWx0cyk7XG4gICAgfSk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgcGFyc2VEeW5hbW9MaXN0ID0gKHJlc3VsdHM6IFF1ZXJ5Q29tbWFuZE91dHB1dCk6IGFueVtdID0+IHtcbiAgY29uc3Qge0l0ZW1zOiBpdGVtcyA9IFtdfSA9IHJlc3VsdHM7XG4gIGNvbnN0IGRhdGE6IGFueVtdID0gW107XG5cblxuICBmb3IobGV0IGlkeDogbnVtYmVyID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpZHggPCBsZW47IGlkeCsrKSB7XG4gICAgY29uc3QgdG1wID0gaXRlbXNbaWR4XTtcbiAgICBjb25zdCBvYmogPSB7fTtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yKGtleSBpbiB0bXApIHtcbiAgICAgIGlmKHRtcC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGlmKHRtcFtrZXldLlMpIHtcbiAgICAgICAgICBvYmpba2V5XSA9IHRtcFtrZXldLlMudG9TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIGlmKHRtcFtrZXldLk4pIHtcbiAgICAgICAgICBvYmpba2V5XSA9IHBhcnNlRmxvYXQodG1wW2tleV0uTik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqW2tleV0gPSB0bXBba2V5XS5CO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZGF0YS5wdXNoKG9iaik7XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9HZXRMaXN0ID0gKHBhcmFtczogUXVlcnlDb21tYW5kSW5wdXQsIHN0YXJ0SXRlbT8pOiBQcm9taXNlPEdldEl0ZW1Db21tYW5kT3V0cHV0W10+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBkeW5hbW9kYiA9IG5ldyBEeW5hbW9EQih7XG4gICAgICBjcmVkZW50aWFsczogQ29uZmlnLmdldCgnYXdzLmNyZWRlbnRpYWxzJyksXG4gICAgICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxuICAgIH0pO1xuICAgIGNvbnN0IHtDb25zaXN0ZW50UmVhZDogY29uc2lzdGVudFJlYWR9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHVwZGF0ZWRQYXJhbXMgPSB7Li4ucGFyYW1zfTtcblxuICAgIGlmKHN0YXJ0SXRlbSkge1xuICAgICAgdXBkYXRlZFBhcmFtcy5FeGNsdXNpdmVTdGFydEtleSA9IHN0YXJ0SXRlbTtcbiAgICB9XG5cbiAgICBpZighY29uc2lzdGVudFJlYWQpIHtcbiAgICAgIHVwZGF0ZWRQYXJhbXMuQ29uc2lzdGVudFJlYWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBsaXN0ID0gW107XG5cbiAgICBkeW5hbW9kYi5xdWVyeSh1cGRhdGVkUGFyYW1zLCAoZXJyb3I6IEVycm9yLCBvdXRwdXQ6IFF1ZXJ5Q29tbWFuZE91dHB1dCkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIGxpc3QucHVzaCguLi4ocGFyc2VEeW5hbW9MaXN0KG91dHB1dCkgfHwgW10pKTtcblxuICAgICAgY29uc3Qge0xhc3RFdmFsdWF0ZWRLZXk6IGxhc3RLZXl9ID0gb3V0cHV0O1xuXG4gICAgICBpZihsYXN0S2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGR5bmFtb0dldExpc3QocGFyYW1zLCBsYXN0S2V5KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc29sdmUobGlzdCk7XG4gICAgfSk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgZHluYW1vUHV0ID0gKHBhcmFtczogUHV0SXRlbUNvbW1hbmRJbnB1dCk6IFByb21pc2U8UHV0SXRlbUNvbW1hbmRPdXRwdXQ+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBkeW5hbW9kYiA9IG5ldyBEeW5hbW9EQih7XG4gICAgICBjcmVkZW50aWFsczogQ29uZmlnLmdldCgnYXdzLmNyZWRlbnRpYWxzJyksXG4gICAgICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxuICAgIH0pO1xuXG4gICAgZHluYW1vZGIucHV0SXRlbShwYXJhbXMsIChlcnJvciwgb3V0cHV0OiBQdXRJdGVtQ29tbWFuZE91dHB1dCkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcblxuZXhwb3J0IGNvbnN0IGR5bmFtb1VwZGF0ZSA9IChwYXJhbXM6IFVwZGF0ZUl0ZW1Db21tYW5kSW5wdXQpOiBQcm9taXNlPFVwZGF0ZUl0ZW1Db21tYW5kT3V0cHV0PiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZHluYW1vZGIgPSBuZXcgRHluYW1vREIoe1xuICAgICAgY3JlZGVudGlhbHM6IENvbmZpZy5nZXQoJ2F3cy5jcmVkZW50aWFscycpLFxuICAgICAgcmVnaW9uOiBDb25maWcuZ2V0KCdhd3MucmVnaW9uJylcbiAgICB9KTtcblxuICAgIGR5bmFtb2RiLnVwZGF0ZUl0ZW0ocGFyYW1zLCAoZXJyb3I6IEVycm9yLCBvdXRwdXQ6IFVwZGF0ZUl0ZW1Db21tYW5kT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKG91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgZHluYW1vUHV0TGlzdCA9IChwYXJhbXM6IEJhdGNoV3JpdGVJdGVtQ29tbWFuZElucHV0KTogUHJvbWlzZTxCYXRjaFdyaXRlSXRlbUNvbW1hbmRPdXRwdXQ+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBkeW5hbW9kYiA9IG5ldyBEeW5hbW9EQih7XG4gICAgICBjcmVkZW50aWFsczogQ29uZmlnLmdldCgnYXdzLmNyZWRlbnRpYWxzJyksXG4gICAgICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxuICAgIH0pO1xuXG4gICAgZHluYW1vZGIuYmF0Y2hXcml0ZUl0ZW0ocGFyYW1zLCAoZXJyb3I6IEVycm9yLCBvdXRwdXQ6IEJhdGNoV3JpdGVJdGVtQ29tbWFuZE91dHB1dCkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcblxuZXhwb3J0IGNvbnN0IGR5bmFtb0RlbCA9IChwYXJhbXM6IERlbGV0ZUl0ZW1Db21tYW5kSW5wdXQpOiBQcm9taXNlPERlbGV0ZUl0ZW1Db21tYW5kT3V0cHV0PiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZHluYW1vZGIgPSBuZXcgRHluYW1vREIoe1xuICAgICAgY3JlZGVudGlhbHM6IENvbmZpZy5nZXQoJ2F3cy5jcmVkZW50aWFscycpLFxuICAgICAgcmVnaW9uOiBDb25maWcuZ2V0KCdhd3MucmVnaW9uJylcbiAgICB9KTtcblxuICAgIGR5bmFtb2RiLmRlbGV0ZUl0ZW0ocGFyYW1zLCAoZXJyb3IsIG91dHB1dDogRGVsZXRlSXRlbUNvbW1hbmRPdXRwdXQpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc29sdmUob3V0cHV0KTtcbiAgICB9KTtcbiAgfSk7XG4iXSwKICAibWFwcGluZ3MiOiAiQUFJQSxPQUtFLFlBQUFBLE1BU0ssMkJBRVAsT0FBUSxVQUFBQyxNQUFhLFlBR2QsTUFBTUMsRUFBYUMsR0FDeEIsSUFBSSxRQUFRLENBQUNDLEVBQVNDLElBQVcsQ0FDL0IsTUFBTUMsRUFBVyxJQUFJTixFQUFTLENBQzVCLFlBQWFDLEVBQU8sSUFBSSxpQkFBaUIsRUFDekMsT0FBUUEsRUFBTyxJQUFJLFlBQVksQ0FDakMsQ0FBQyxFQUNERSxFQUFPLGVBQWlCLEdBRXhCRyxFQUFTLFFBQVFILEVBQVEsQ0FBQ0ksRUFBY0MsSUFDbkNELEVBQ01GLEVBQU9FLENBQUssRUFHZEgsRUFBUUksQ0FBTyxDQUN2QixDQUNILENBQUMsRUFFVUMsRUFBbUJELEdBQXVDLENBQ3JFLEtBQU0sQ0FBQyxNQUFPRSxFQUFRLENBQUMsQ0FBQyxFQUFJRixFQUN0QkcsRUFBYyxDQUFDLEVBR3JCLFFBQVFDLEVBQWMsRUFBR0MsRUFBTUgsRUFBTSxPQUFRRSxFQUFNQyxFQUFLRCxJQUFPLENBQzdELE1BQU1FLEVBQU1KLEVBQU1FLENBQUcsRUFDZkcsRUFBTSxDQUFDLEVBQ2IsSUFBSUMsRUFFSixJQUFJQSxLQUFPRixFQUNOQSxFQUFJLGVBQWVFLENBQUcsSUFDcEJGLEVBQUlFLENBQUcsRUFBRSxFQUNWRCxFQUFJQyxDQUFHLEVBQUlGLEVBQUlFLENBQUcsRUFBRSxFQUFFLFNBQVMsRUFDdkJGLEVBQUlFLENBQUcsRUFBRSxFQUNqQkQsRUFBSUMsQ0FBRyxFQUFJLFdBQVdGLEVBQUlFLENBQUcsRUFBRSxDQUFDLEVBRWhDRCxFQUFJQyxDQUFHLEVBQUlGLEVBQUlFLENBQUcsRUFBRSxHQUsxQkwsRUFBSyxLQUFLSSxDQUFHLENBQ2YsQ0FFQSxPQUFPSixDQUNULEVBRWFNLEVBQWdCLENBQUNkLEVBQTJCZSxJQUN2RCxJQUFJLFFBQVEsQ0FBQ2QsRUFBU0MsSUFBVyxDQUMvQixNQUFNQyxFQUFXLElBQUlOLEVBQVMsQ0FDNUIsWUFBYUMsRUFBTyxJQUFJLGlCQUFpQixFQUN6QyxPQUFRQSxFQUFPLElBQUksWUFBWSxDQUNqQyxDQUFDLEVBQ0ssQ0FBQyxlQUFnQmtCLENBQWMsRUFBSWhCLEVBQ25DaUIsRUFBZ0IsQ0FBQyxHQUFHakIsQ0FBTSxFQUU3QmUsSUFDREUsRUFBYyxrQkFBb0JGLEdBR2hDQyxJQUNGQyxFQUFjLGVBQWlCLElBR2pDLE1BQU1DLEVBQU8sQ0FBQyxFQUVkZixFQUFTLE1BQU1jLEVBQWUsQ0FBQ2IsRUFBY2UsSUFBK0IsQ0FDMUUsR0FBR2YsRUFDRCxPQUFPRixFQUFPRSxDQUFLLEVBR3JCYyxFQUFLLEtBQUssR0FBSVosRUFBZ0JhLENBQU0sR0FBSyxDQUFDLENBQUUsRUFFNUMsS0FBTSxDQUFDLGlCQUFrQkMsQ0FBTyxFQUFJRCxFQUVwQyxPQUFHQyxJQUFZLE9BQ05OLEVBQWNkLEVBQVFvQixDQUFPLEVBRy9CbkIsRUFBUWlCLENBQUksQ0FDckIsQ0FBQyxDQUNILENBQUMsRUFFVUcsRUFBYXJCLEdBQ3hCLElBQUksUUFBUSxDQUFDQyxFQUFTQyxJQUFXLENBQ2QsSUFBSUwsRUFBUyxDQUM1QixZQUFhQyxFQUFPLElBQUksaUJBQWlCLEVBQ3pDLE9BQVFBLEVBQU8sSUFBSSxZQUFZLENBQ2pDLENBQUMsRUFFUSxRQUFRRSxFQUFRLENBQUNJLEVBQU9lLElBQzVCZixFQUNNRixFQUFPRSxDQUFLLEVBRWRILEVBQVFrQixDQUFNLENBQ3RCLENBQ0gsQ0FBQyxFQUVVRyxFQUFnQnRCLEdBQzNCLElBQUksUUFBUSxDQUFDQyxFQUFTQyxJQUFXLENBQ2QsSUFBSUwsRUFBUyxDQUM1QixZQUFhQyxFQUFPLElBQUksaUJBQWlCLEVBQ3pDLE9BQVFBLEVBQU8sSUFBSSxZQUFZLENBQ2pDLENBQUMsRUFFUSxXQUFXRSxFQUFRLENBQUNJLEVBQWNlLElBQ3RDZixFQUNNRixFQUFPRSxDQUFLLEVBRWRILEVBQVFrQixDQUFNLENBQ3RCLENBQ0gsQ0FBQyxFQUVVSSxFQUFpQnZCLEdBQzVCLElBQUksUUFBUSxDQUFDQyxFQUFTQyxJQUFXLENBQ2QsSUFBSUwsRUFBUyxDQUM1QixZQUFhQyxFQUFPLElBQUksaUJBQWlCLEVBQ3pDLE9BQVFBLEVBQU8sSUFBSSxZQUFZLENBQ2pDLENBQUMsRUFFUSxlQUFlRSxFQUFRLENBQUNJLEVBQWNlLElBQzFDZixFQUNNRixFQUFPRSxDQUFLLEVBRWRILEVBQVFrQixDQUFNLENBQ3RCLENBQ0gsQ0FBQyxFQUVVSyxFQUFheEIsR0FDeEIsSUFBSSxRQUFRLENBQUNDLEVBQVNDLElBQVcsQ0FDZCxJQUFJTCxFQUFTLENBQzVCLFlBQWFDLEVBQU8sSUFBSSxpQkFBaUIsRUFDekMsT0FBUUEsRUFBTyxJQUFJLFlBQVksQ0FDakMsQ0FBQyxFQUVRLFdBQVdFLEVBQVEsQ0FBQ0ksRUFBT2UsSUFDL0JmLEVBQ01GLEVBQU9FLENBQUssRUFFZEgsRUFBUWtCLENBQU0sQ0FDdEIsQ0FDSCxDQUFDIiwKICAibmFtZXMiOiBbIkR5bmFtb0RCIiwgIkNvbmZpZyIsICJkeW5hbW9HZXQiLCAicGFyYW1zIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImR5bmFtb2RiIiwgImVycm9yIiwgInJlc3VsdHMiLCAicGFyc2VEeW5hbW9MaXN0IiwgIml0ZW1zIiwgImRhdGEiLCAiaWR4IiwgImxlbiIsICJ0bXAiLCAib2JqIiwgImtleSIsICJkeW5hbW9HZXRMaXN0IiwgInN0YXJ0SXRlbSIsICJjb25zaXN0ZW50UmVhZCIsICJ1cGRhdGVkUGFyYW1zIiwgImxpc3QiLCAib3V0cHV0IiwgImxhc3RLZXkiLCAiZHluYW1vUHV0IiwgImR5bmFtb1VwZGF0ZSIsICJkeW5hbW9QdXRMaXN0IiwgImR5bmFtb0RlbCJdCn0K
@@ -1,2 +0,0 @@
1
- import{SES as l}from"@aws-sdk/client-ses";import{Config as r}from"../config";import{logError as d}from"../utils/analyticsUtils";const u="email",c=o=>new Promise((e,n)=>{new l({credentials:r.get("aws.credentials"),region:r.get("aws.region")}).sendEmail(o,(t,a)=>t?n(t):e(a))}),x=o=>{const{context:e,html:n,subject:m,text:t,user:a}=o,s={Destination:{ToAddresses:[a.email]},Message:{Body:{Html:{Data:n},Text:{Data:t}},Subject:{Data:m}},Source:`"${e.config.details.supportName}" <${e.config.details.supportEmail}>`};return c(s).then(()=>!0).catch(i=>(d({action:"sendEmail",category:u},i,e),!1))};export{x as sendEmail,c as sesSend};
2
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvZW1haWwudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge1NlbmRFbWFpbENvbW1hbmRJbnB1dCwgU2VuZEVtYWlsQ29tbWFuZE91dHB1dCwgU0VTfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc2VzJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQge0VtYWlsVHlwZX0gZnJvbSAnLi4vdHlwZXMvZW1haWwudHlwZXMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnZW1haWwnO1xuXG5leHBvcnQgY29uc3Qgc2VzU2VuZCA9IChwYXJhbXM6IFNlbmRFbWFpbENvbW1hbmRJbnB1dCk6IFByb21pc2U8U2VuZEVtYWlsQ29tbWFuZE91dHB1dD4gPT5cbiAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNlcyA9IG5ldyBTRVMoe1xuICAgICAgY3JlZGVudGlhbHM6IENvbmZpZy5nZXQoJ2F3cy5jcmVkZW50aWFscycpLFxuICAgICAgcmVnaW9uOiBDb25maWcuZ2V0KCdhd3MucmVnaW9uJylcbiAgICB9KTtcblxuICAgIHNlcy5zZW5kRW1haWwocGFyYW1zLCAoZXJyb3I6IEVycm9yLCByZXNwb25zZTogU2VuZEVtYWlsQ29tbWFuZE91dHB1dCkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBzZW5kRW1haWwgPSAocGFyYW1zOiBFbWFpbFR5cGUpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3Qge1xuICAgIGNvbnRleHQsXG4gICAgaHRtbCxcbiAgICBzdWJqZWN0LFxuICAgIHRleHQsXG4gICAgdXNlclxuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IHRvID0gW3VzZXIuZW1haWxdO1xuICBjb25zdCBlbWFpbFBhcmFtczogU2VuZEVtYWlsQ29tbWFuZElucHV0ID0ge1xuICAgIERlc3RpbmF0aW9uOiB7VG9BZGRyZXNzZXM6IHRvfSxcbiAgICBNZXNzYWdlOiB7XG4gICAgICBCb2R5OiB7XG4gICAgICAgIEh0bWw6IHtEYXRhOiBodG1sfSxcbiAgICAgICAgVGV4dDoge0RhdGE6IHRleHR9XG4gICAgICB9LFxuICAgICAgU3ViamVjdDoge0RhdGE6IHN1YmplY3R9XG4gICAgfSxcbiAgICBTb3VyY2U6IGBcIiR7Y29udGV4dC5jb25maWcuZGV0YWlscy5zdXBwb3J0TmFtZX1cIiA8JHtjb250ZXh0LmNvbmZpZy5kZXRhaWxzLnN1cHBvcnRFbWFpbH0+YFxuICB9O1xuXG4gIHJldHVybiBzZXNTZW5kKGVtYWlsUGFyYW1zKVxuICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uOiAnc2VuZEVtYWlsJyxcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnlcbiAgICAgIH0sXG4gICAgICBlcnJvcixcbiAgICAgIGNvbnRleHRcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiQUFJQSxPQUF1RCxPQUFBQSxNQUFVLHNCQUVqRSxPQUFRLFVBQUFDLE1BQWEsWUFFckIsT0FBUSxZQUFBQyxNQUFlLDBCQUV2QixNQUFNQyxFQUF3QixRQUVqQkMsRUFBV0MsR0FDdEIsSUFBSSxRQUFRLENBQUNDLEVBQVNDLElBQVcsQ0FDbkIsSUFBSVAsRUFBSSxDQUNsQixZQUFhQyxFQUFPLElBQUksaUJBQWlCLEVBQ3pDLE9BQVFBLEVBQU8sSUFBSSxZQUFZLENBQ2pDLENBQUMsRUFFRyxVQUFVSSxFQUFRLENBQUNHLEVBQWNDLElBQ2hDRCxFQUNNRCxFQUFPQyxDQUFLLEVBR2RGLEVBQVFHLENBQVEsQ0FDeEIsQ0FDSCxDQUFDLEVBRVVDLEVBQWFMLEdBQXdDLENBQ2hFLEtBQU0sQ0FDSixRQUFBTSxFQUNBLEtBQUFDLEVBQ0EsUUFBQUMsRUFDQSxLQUFBQyxFQUNBLEtBQUFDLENBQ0YsRUFBSVYsRUFHRVcsRUFBcUMsQ0FDekMsWUFBYSxDQUFDLFlBRkwsQ0FBQ0QsRUFBSyxLQUFLLENBRVMsRUFDN0IsUUFBUyxDQUNQLEtBQU0sQ0FDSixLQUFNLENBQUMsS0FBTUgsQ0FBSSxFQUNqQixLQUFNLENBQUMsS0FBTUUsQ0FBSSxDQUNuQixFQUNBLFFBQVMsQ0FBQyxLQUFNRCxDQUFPLENBQ3pCLEVBQ0EsT0FBUSxJQUFJRixFQUFRLE9BQU8sUUFBUSxXQUFXLE1BQU1BLEVBQVEsT0FBTyxRQUFRLFlBQVksR0FDekYsRUFFQSxPQUFPUCxFQUFRWSxDQUFXLEVBQ3ZCLEtBQUssSUFBTSxFQUFJLEVBQ2YsTUFBT1IsSUFDTk4sRUFBUyxDQUNQLE9BQVEsWUFDUixTQUFVQyxDQUNaLEVBQ0FLLEVBQ0FHLENBQ0EsRUFFTyxHQUNSLENBQ0wiLAogICJuYW1lcyI6IFsiU0VTIiwgIkNvbmZpZyIsICJsb2dFcnJvciIsICJldmVudENhdGVnb3J5IiwgInNlc1NlbmQiLCAicGFyYW1zIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVycm9yIiwgInJlc3BvbnNlIiwgInNlbmRFbWFpbCIsICJjb250ZXh0IiwgImh0bWwiLCAic3ViamVjdCIsICJ0ZXh0IiwgInVzZXIiLCAiZW1haWxQYXJhbXMiXQp9Cg==
@@ -1,5 +0,0 @@
1
- import{get as f}from"@nlabs/rip-hunter";import{createHash as w}from"@nlabs/utils";import{aql as h}from"arangojs";import{google as $}from"googleapis";import{Config as E}from"../config";import{resizeSaveImage as x}from"./images";import{createPostEdge as B}from"./posts";import{parseFile as T}from"../adapters/fileAdapter";import{ErrorTypes as u}from"../types/error.types";import{logError as y}from"../utils/analyticsUtils";import{useDb as c}from"../utils/arangodbUtils";const d="files",P="http://api.giphy.com/v1/gifs",A=()=>$.youtube({auth:E.get("google.key"),version:"v3"}),R=(e,o)=>{const t="insertFile",{databaseName:r}=e,n=T(o),i=h`INSERT ${n} IN files RETURN NEW`;return c(r).query(i).then(s=>s.next()).catch(s=>y({action:t,category:d,label:u.DATABASE_ERROR},s,e))},C=(e,o)=>{const t="upsertFile",{databaseName:r}=e,n=T(o),{fileId:i}=n,s={...n,_key:i,added:Date.now(),modified:Date.now()},l={...n,_key:i,modified:Date.now()},p=h`UPSERT {_key: ${i}}
2
- INSERT ${s}
3
- UPDATE ${l}
4
- IN files RETURN NEW`;return c(r).query(p).then(a=>a.next()).then(a=>a).catch(a=>y({action:t,category:d,label:u.DATABASE_ERROR},a,e))},F=(e,o,t)=>{const{session:{userId:r}}=e,n=T(o),{description:i,fileId:s,fileType:l,name:p,url:a}=n,m=Date.now(),b=s||w(`file-${r}`);let g=p;return!g&&a&&(g=a.substring(a.lastIndexOf("/")+1)),l==="image/jpeg"||l==="image/png"?x(e,b,t,l).then(_=>R(e,{..._,_key:b,added:m,modified:m,name:g,userId:r})):R(e,{...n,added:m,modified:m,userId:r})},L=(e,o)=>{const t="addFile",{base64:r,url:n}=o;if(n)return f(n).then(i=>F(e,o,Buffer.from(i,"binary"))).catch(i=>y({action:t,category:d,label:u.FILE_REQUEST},i,e));if(r){const i=Buffer.from(r);return F(e,o,i)}return Promise.reject(new Error(u.FILE_REQUIRED))},U=e=>{const{id:o,images:{original:{url:t=""}={},fixed_height_small:{url:r=""}={}}={}}=e;return!o||!t?null:{id:o,thumb:r,type:"giphy",url:t}},z=(e=30)=>{const o=`${P}/trending?api_key=${E.get("giphy.key")}&limit=${e}`;return f(o).then(t=>t.json()).then(t=>t?.data?.map(U).filter(r=>!!r))},H=(e,o=30)=>{const t=encodeURI(e),r=`${P}/search?q=${t}&api_key=${E.get("giphy.key")}&limit=${o}`;return f(r).then(n=>n.json()).then(n=>n?.data?.map(U).filter(i=>!!i))},V=(e=30)=>{const o="getYouTubeTrends",t=A();return new Promise((r,n)=>{t.videos.list({chart:"mostPopular",maxResults:e,part:["snippet"],regionCode:"US"},(i,s)=>{if(i)n(new Error(u.YOUTUBE_ERROR));else if(s){const l=s.items.map(p=>({id:p.id,thumb:p.snippet.thumbnails.high.url,type:"youtube",url:`http://www.youtube.com/embed/${p.id}`}));r(l)}})})},W=(e,o=30)=>{const t="getYouTubeSearch",r=A();return new Promise((n,i)=>{r.search.list({maxResults:o,part:["snippet"],q:e,regionCode:"US"},(s,l)=>{if(s)i(new Error(u.YOUTUBE_ERROR));else if(l){const{items:p}=l,a=p.map(m=>({id:m.id,thumb:m.snippet.thumbnails.high.url,type:"youtube",url:`http://www.youtube.com/embed/${m.id}`}));n(a)}})})},K=(e,o)=>`users/${e}/files/${o}`,I=(e,o,t)=>Promise.all(t.map(r=>C(e,r).then(n=>B(e,o,n.id,"isPosted",{type:n.fileType})))),M=(e,o,t)=>{const r="updateFiles",{databaseName:n}=e;return c(n).collection("isPosted").inEdges(o,{}).then(s=>s.length?Promise.all(s.map(l=>{const{_key:p}=l,a=h`REMOVE {_key:${p}} IN isPosted`;return c(n).query(a).catch(m=>{throw m})})).then(()=>t.length?I(e,o,t).then(()=>t):[]):t.length?I(e,o,t).then(()=>t):t).catch(s=>y({action:r,category:d,label:u.DATABASE_ERROR},s,e))},Z=e=>Buffer.from(e).toString("base64"),J=e=>{const o="decodeBase64",t=n=>n.match(/^data:([A-Za-z-+/]+);base64,(.+)$/)||[];let r=t(e);if(r.length!==3&&(r=t(decodeURIComponent(e)),r.length!==3))throw Error(u.INVALID_INPUT);return{data:Buffer.from(r[2],"base64"),type:r[1]}};export{P as GIPHY_URL,L as addFile,J as decodeBase64,Z as encodeBase64,H as getGiphySearch,z as getGiphyTrends,K as getPathUserFiles,A as getYouTube,W as getYouTubeSearch,V as getYouTubeTrends,R as insertFile,I as linkFiles,U as parseGiphyItem,M as updateFiles,F as uploadFile,C as upsertFile};
5
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvZmlsZXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2dldCBhcyBodHRwR2V0fSBmcm9tICdAbmxhYnMvcmlwLWh1bnRlcic7XG5pbXBvcnQge2NyZWF0ZUhhc2h9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7Z29vZ2xlfSBmcm9tICdnb29nbGVhcGlzJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQge3Jlc2l6ZVNhdmVJbWFnZX0gZnJvbSAnLi9pbWFnZXMnO1xuaW1wb3J0IHtjcmVhdGVQb3N0RWRnZX0gZnJvbSAnLi9wb3N0cyc7XG5pbXBvcnQge3BhcnNlRmlsZX0gZnJvbSAnLi4vYWRhcHRlcnMvZmlsZUFkYXB0ZXInO1xuaW1wb3J0IHtJbWFnZVR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzJztcbmltcG9ydCB7RmlsZVR5cGV9IGZyb20gJy4uL3R5cGVzL2ZpbGVzLnR5cGVzJztcbmltcG9ydCB7bG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzJztcbmltcG9ydCB7dXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMnO1xuXG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ2ZpbGVzJztcblxuZXhwb3J0IGNvbnN0IEdJUEhZX1VSTDogc3RyaW5nID0gJ2h0dHA6Ly9hcGkuZ2lwaHkuY29tL3YxL2dpZnMnO1xuXG5leHBvcnQgY29uc3QgZ2V0WW91VHViZSA9ICgpID0+IGdvb2dsZS55b3V0dWJlKHthdXRoOiBDb25maWcuZ2V0KCdnb29nbGUua2V5JyksIHZlcnNpb246ICd2Myd9KTtcblxuZXhwb3J0IGNvbnN0IGluc2VydEZpbGUgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZmlsZTogRmlsZVR5cGUpID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2luc2VydEZpbGUnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdHRlZEZpbGUgPSBwYXJzZUZpbGUoZmlsZSk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7Zm9ybWF0dGVkRmlsZX0gSU4gZmlsZXMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwc2VydEZpbGUgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZmlsZTogRmlsZVR5cGUpOiBQcm9taXNlPEZpbGVUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cHNlcnRGaWxlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXR0ZWRGaWxlID0gcGFyc2VGaWxlKGZpbGUpO1xuICBjb25zdCB7ZmlsZUlkfSA9IGZvcm1hdHRlZEZpbGU7XG4gIGNvbnN0IGluc2VydDogYW55ID0ge1xuICAgIC4uLmZvcm1hdHRlZEZpbGUsXG4gICAgX2tleTogZmlsZUlkLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpLFxuICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpXG4gIH07XG4gIGNvbnN0IHVwZGF0ZTogYW55ID0ge1xuICAgIC4uLmZvcm1hdHRlZEZpbGUsXG4gICAgX2tleTogZmlsZUlkLFxuICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpXG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge19rZXk6ICR7ZmlsZUlkfX1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFICR7dXBkYXRlfVxuICAgIElOIGZpbGVzIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh1cGRhdGVkRmlsZTogRmlsZVR5cGUpID0+IHVwZGF0ZWRGaWxlKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGxvYWRGaWxlID0gKGNvbnRleHQsIGZpbGU6IEZpbGVUeXBlLCBidWZmZXI6IEJ1ZmZlcikgPT4ge1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXR0ZWRGaWxlID0gcGFyc2VGaWxlKGZpbGUpO1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24sXG4gICAgZmlsZUlkLFxuICAgIGZpbGVUeXBlLFxuICAgIG5hbWUsXG4gICAgdXJsXG4gIH0gPSBmb3JtYXR0ZWRGaWxlO1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBmb3JtYXRGaWxlSWQ6IHN0cmluZyA9IGZpbGVJZCB8fCBjcmVhdGVIYXNoKGBmaWxlLSR7c2Vzc2lvbklkfWApO1xuICBsZXQgdXBkYXRlZE5hbWUgPSBuYW1lO1xuXG4gIGlmKCF1cGRhdGVkTmFtZSAmJiAhIXVybCkge1xuICAgIHVwZGF0ZWROYW1lID0gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy8nKSArIDEpO1xuICB9XG5cbiAgaWYoZmlsZVR5cGUgPT09ICdpbWFnZS9qcGVnJyB8fCBmaWxlVHlwZSA9PT0gJ2ltYWdlL3BuZycpIHtcbiAgICByZXR1cm4gcmVzaXplU2F2ZUltYWdlKGNvbnRleHQsIGZvcm1hdEZpbGVJZCwgYnVmZmVyLCBmaWxlVHlwZSlcbiAgICAgIC50aGVuKChyZXNpemVkSW1hZ2U6IEZpbGVUeXBlKSA9PiBpbnNlcnRGaWxlKGNvbnRleHQsIHtcbiAgICAgICAgLi4ucmVzaXplZEltYWdlLFxuICAgICAgICBfa2V5OiBmb3JtYXRGaWxlSWQsXG4gICAgICAgIGFkZGVkOiBub3csXG4gICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgIG5hbWU6IHVwZGF0ZWROYW1lLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfSkpO1xuICB9XG5cbiAgcmV0dXJuIGluc2VydEZpbGUoY29udGV4dCwge1xuICAgIC4uLmZvcm1hdHRlZEZpbGUsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEZpbGUgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZmlsZTogRmlsZVR5cGUpOiBQcm9taXNlPEZpbGVUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRGaWxlJztcbiAgY29uc3Qge2Jhc2U2NCwgdXJsfSA9IGZpbGU7XG5cbiAgaWYoISF1cmwpIHtcbiAgICByZXR1cm4gaHR0cEdldCh1cmwpXG4gICAgICAudGhlbigoYm9keSkgPT4gdXBsb2FkRmlsZShjb250ZXh0LCBmaWxlLCBCdWZmZXIuZnJvbShib2R5LCAnYmluYXJ5JykpKVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuRklMRV9SRVFVRVNUXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9IGVsc2UgaWYoISFiYXNlNjQpIHtcbiAgICBjb25zdCBidWZmZXI6IEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJhc2U2NCk7XG4gICAgcmV0dXJuIHVwbG9hZEZpbGUoY29udGV4dCwgZmlsZSwgYnVmZmVyKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoRXJyb3JUeXBlcy5GSUxFX1JFUVVJUkVEKSk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VHaXBoeUl0ZW0gPSAoZ2lmSW1hZ2U6IGFueSk6IEltYWdlVHlwZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICBpbWFnZXM6IHtcbiAgICAgIG9yaWdpbmFsOiB7dXJsID0gJyd9ID0ge30sXG4gICAgICBmaXhlZF9oZWlnaHRfc21hbGw6IHt1cmw6IHRodW1iID0gJyd9ID0ge31cbiAgICB9ID0ge31cbiAgfSA9IGdpZkltYWdlO1xuXG4gIGlmKCFpZCB8fCAhdXJsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIHRodW1iLFxuICAgIHR5cGU6ICdnaXBoeScsXG4gICAgdXJsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R2lwaHlUcmVuZHMgPSAobGltaXQ6IG51bWJlciA9IDMwKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBnaWZVcmwgPSBgJHtHSVBIWV9VUkx9L3RyZW5kaW5nP2FwaV9rZXk9JHtDb25maWcuZ2V0KCdnaXBoeS5rZXknKX0mbGltaXQ9JHtsaW1pdH1gO1xuXG4gIHJldHVybiBodHRwR2V0KGdpZlVybClcbiAgICAudGhlbigocmVzOiBSZXNwb25zZSkgPT4gcmVzLmpzb24oKSlcbiAgICAudGhlbigoanNvbjogYW55KSA9PiBqc29uPy5kYXRhPy5tYXAocGFyc2VHaXBoeUl0ZW0pLmZpbHRlcigoaXRlbSkgPT4gISFpdGVtKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R2lwaHlTZWFyY2ggPSAocXVlcnk6IHN0cmluZywgbGltaXQ6IG51bWJlciA9IDMwKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBmb3JtYXRRdWVyeSA9IGVuY29kZVVSSShxdWVyeSk7XG4gIGNvbnN0IGdpZlVybCA9IGAke0dJUEhZX1VSTH0vc2VhcmNoP3E9JHtmb3JtYXRRdWVyeX0mYXBpX2tleT0ke0NvbmZpZy5nZXQoJ2dpcGh5LmtleScpfSZsaW1pdD0ke2xpbWl0fWA7XG5cbiAgcmV0dXJuIGh0dHBHZXQoZ2lmVXJsKVxuICAgIC50aGVuKChyZXM6IFJlc3BvbnNlKSA9PiByZXMuanNvbigpKVxuICAgIC50aGVuKChqc29uOiBhbnkpID0+IGpzb24/LmRhdGE/Lm1hcChwYXJzZUdpcGh5SXRlbSkuZmlsdGVyKChpdGVtKSA9PiAhIWl0ZW0pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRZb3VUdWJlVHJlbmRzID0gKGxpbWl0OiBudW1iZXIgPSAzMCk6IFByb21pc2U8YW55W10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFlvdVR1YmVUcmVuZHMnO1xuICBjb25zdCB5b3V0dWJlID0gZ2V0WW91VHViZSgpO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgeW91dHViZS52aWRlb3MubGlzdCh7XG4gICAgICBjaGFydDogJ21vc3RQb3B1bGFyJyxcbiAgICAgIG1heFJlc3VsdHM6IGxpbWl0LFxuICAgICAgcGFydDogWydzbmlwcGV0J10sXG4gICAgICByZWdpb25Db2RlOiAnVVMnXG4gICAgfSwgKGVycm9yOiBFcnJvciwgZGF0YTogYW55KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihFcnJvclR5cGVzLllPVVRVQkVfRVJST1IpKTtcbiAgICAgIH0gZWxzZSBpZihkYXRhKSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBkYXRhLml0ZW1zLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICB0aHVtYjogaXRlbS5zbmlwcGV0LnRodW1ibmFpbHMuaGlnaC51cmwsXG4gICAgICAgICAgdHlwZTogJ3lvdXR1YmUnLFxuICAgICAgICAgIHVybDogYGh0dHA6Ly93d3cueW91dHViZS5jb20vZW1iZWQvJHtpdGVtLmlkfWBcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHJlc29sdmUobGlzdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFlvdVR1YmVTZWFyY2ggPSAocXVlcnk6IHN0cmluZywgbGltaXQ6IG51bWJlciA9IDMwKTogUHJvbWlzZTxhbnlbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0WW91VHViZVNlYXJjaCc7XG4gIGNvbnN0IHlvdXR1YmUgPSBnZXRZb3VUdWJlKCk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB5b3V0dWJlLnNlYXJjaC5saXN0KHtcbiAgICAgIG1heFJlc3VsdHM6IGxpbWl0LFxuICAgICAgcGFydDogWydzbmlwcGV0J10sXG4gICAgICBxOiBxdWVyeSxcbiAgICAgIHJlZ2lvbkNvZGU6ICdVUydcbiAgICB9LCAoZXJyb3I6IEVycm9yLCBkYXRhOiBhbnkpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKEVycm9yVHlwZXMuWU9VVFVCRV9FUlJPUikpO1xuICAgICAgfSBlbHNlIGlmKGRhdGEpIHtcbiAgICAgICAgY29uc3Qge2l0ZW1zfSA9IGRhdGE7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBpdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgdGh1bWI6IGl0ZW0uc25pcHBldC50aHVtYm5haWxzLmhpZ2gudXJsLFxuICAgICAgICAgIHR5cGU6ICd5b3V0dWJlJyxcbiAgICAgICAgICB1cmw6IGBodHRwOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7aXRlbS5pZH1gXG4gICAgICAgIH0pKTtcblxuICAgICAgICByZXNvbHZlKGxpc3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQYXRoVXNlckZpbGVzID0gKHVzZXJJZDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nID0+IGB1c2Vycy8ke3VzZXJJZH0vZmlsZXMvJHtmaWxlbmFtZX1gO1xuXG5leHBvcnQgY29uc3QgbGlua0ZpbGVzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3REb2NJZDogc3RyaW5nLCBmaWxlczogRmlsZVR5cGVbXSk6IFByb21pc2U8YW55PiA9PlxuICBQcm9taXNlLmFsbChcbiAgICBmaWxlcy5tYXAoKGZpbGU6IEZpbGVUeXBlKSA9PiB1cHNlcnRGaWxlKGNvbnRleHQsIGZpbGUpXG4gICAgICAudGhlbigoZmlsZTogRmlsZVR5cGUpID0+IGNyZWF0ZVBvc3RFZGdlKGNvbnRleHQsIHBvc3REb2NJZCwgZmlsZS5pZCwgJ2lzUG9zdGVkJywge3R5cGU6IGZpbGUuZmlsZVR5cGV9KSkpXG4gICk7XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWxlcyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBwb3N0RG9jSWQ6IHN0cmluZywgZmlsZXM6IEZpbGVUeXBlW10pOiBQcm9taXNlPGFueT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBkYXRlRmlsZXMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbignaXNQb3N0ZWQnKTtcblxuICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uaW5FZGdlcyhwb3N0RG9jSWQsIHt9KVxuICAgIC50aGVuKChlZGdlczogYW55KSA9PiB7XG4gICAgICBpZihlZGdlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgIGVkZ2VzLm1hcCgoZWRnZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qge19rZXk6IGVkZ2VLZXl9ID0gZWRnZTtcbiAgICAgICAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgUkVNT1ZFIHtfa2V5OiR7ZWRnZUtleX19IElOIGlzUG9zdGVkYDtcblxuICAgICAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZihmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGxpbmtGaWxlcyhjb250ZXh0LCBwb3N0RG9jSWQsIGZpbGVzKS50aGVuKCgpID0+IGZpbGVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmKGZpbGVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbGlua0ZpbGVzKGNvbnRleHQsIHBvc3REb2NJZCwgZmlsZXMpXG4gICAgICAgICAgLnRoZW4oKCkgPT4gZmlsZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmlsZXM7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZW5jb2RlQmFzZTY0ID0gKGJ1ZmZlcjogQnVmZmVyKTogc3RyaW5nID0+IEJ1ZmZlci5mcm9tKGJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG5leHBvcnQgY29uc3QgZGVjb2RlQmFzZTY0ID0gKGRhdGFTdHJpbmc6IHN0cmluZyk6IGFueSA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWNvZGVCYXNlNjQnO1xuICBjb25zdCBnZXREYXRhID0gKHN0cjogc3RyaW5nKSA9PiBzdHIubWF0Y2goL15kYXRhOihbQS1aYS16LSsvXSspO2Jhc2U2NCwoLispJC8pIHx8IFtdO1xuICBsZXQgbWF0Y2hlcyA9IGdldERhdGEoZGF0YVN0cmluZyk7XG5cbiAgaWYobWF0Y2hlcy5sZW5ndGggIT09IDMpIHtcbiAgICBtYXRjaGVzID0gZ2V0RGF0YShkZWNvZGVVUklDb21wb25lbnQoZGF0YVN0cmluZykpO1xuXG4gICAgaWYobWF0Y2hlcy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9JTlBVVCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkYXRhOiBCdWZmZXIuZnJvbShtYXRj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QU8sZ0JBRW5ELE9BQU85RCxFQUFNUSxDQUFZLEVBQUUsTUFBTUUsQ0FBTSxFQUNwQyxNQUFPRSxHQUFpQixDQUN2QixNQUFNQSxDQUNSLENBQUMsQ0FDTCxDQUFDLENBQUMsRUFDRCxLQUFLLElBQ0Q4QyxFQUFNLE9BQ0FGLEVBQVVuRCxFQUFTb0QsRUFBV0MsQ0FBSyxFQUFFLEtBQUssSUFBTUEsQ0FBSyxFQUd2RCxDQUFDLENBQ1QsRUFDS0EsRUFBTSxPQUNQRixFQUFVbkQsRUFBU29ELEVBQVdDLENBQUssRUFDdkMsS0FBSyxJQUFNQSxDQUFLLEVBR2RBLENBQ1IsRUFDQSxNQUFPOUMsR0FBaUJiLEVBQVMsQ0FDaEMsT0FBQVEsRUFDQSxTQUFVTixFQUNWLE1BQU9ILEVBQVcsY0FDcEIsRUFBR2MsRUFBT1AsQ0FBTyxDQUFDLENBQ3RCLEVBRWEwRCxFQUFnQjVDLEdBQTJCLE9BQU8sS0FBS0EsQ0FBTSxFQUFFLFNBQVMsUUFBUSxFQUVoRjZDLEVBQWdCQyxHQUE0QixDQUN2RCxNQUFNMUQsRUFBUyxlQUNUMkQsRUFBV0MsR0FBZ0JBLEVBQUksTUFBTSxtQ0FBbUMsR0FBSyxDQUFDLEVBQ3BGLElBQUlDLEVBQVVGLEVBQVFELENBQVUsRUFFaEMsR0FBR0csRUFBUSxTQUFXLElBQ3BCQSxFQUFVRixFQUFRLG1CQUFtQkQsQ0FBVSxDQUFDLEVBRTdDRyxFQUFRLFNBQVcsR0FDcEIsTUFBTSxNQUFNdEUsRUFBVyxhQUFhLEVBSXhDLE1BQU8sQ0FDTCxLQUFNLE9BQU8sS0FBS3NFLEVBQVEsQ0FBQyxFQUFHLFFBQVEsRUFDdEMsS0FBTUEsRUFBUSxDQUFDLENBQ2pCLENBQ0YiLAogICJuYW1lcyI6IFsiaHR0cEdldCIsICJjcmVhdGVIYXNoIiwgImFxbCIsICJnb29nbGUiLCAiQ29uZmlnIiwgInJlc2l6ZVNhdmVJbWFnZSIsICJjcmVhdGVQb3N0RWRnZSIsICJwYXJzZUZpbGUiLCAiRXJyb3JUeXBlcyIsICJsb2dFcnJvciIsICJ1c2VEYiIsICJldmVudENhdGVnb3J5IiwgIkdJUEhZX1VSTCIsICJnZXRZb3VUdWJlIiwgImluc2VydEZpbGUiLCAiY29udGV4dCIsICJmaWxlIiwgImFjdGlvbiIsICJkYXRhYmFzZU5hbWUiLCAiZm9ybWF0dGVkRmlsZSIsICJhcWxRcnkiLCAiY3Vyc29yIiwgImVycm9yIiwgInVwc2VydEZpbGUiLCAiZmlsZUlkIiwgImluc2VydCIsICJ1cGRhdGUiLCAidXBkYXRlZEZpbGUiLCAidXBsb2FkRmlsZSIsICJidWZmZXIiLCAic2Vzc2lvbklkIiwgImRlc2NyaXB0aW9uIiwgImZpbGVUeXBlIiwgIm5hbWUiLCAidXJsIiwgIm5vdyIsICJmb3JtYXRGaWxlSWQiLCAidXBkYXRlZE5hbWUiLCAicmVzaXplZEltYWdlIiwgImFkZEZpbGUiLCAiYmFzZTY0IiwgImJvZHkiLCAicGFyc2VHaXBoeUl0ZW0iLCAiZ2lmSW1hZ2UiLCAiaWQiLCAidGh1bWIiLCAiZ2V0R2lwaHlUcmVuZHMiLCAibGltaXQiLCAiZ2lmVXJsIiwgInJlcyIsICJqc29uIiwgIml0ZW0iLCAiZ2V0R2lwaHlTZWFyY2giLCAicXVlcnkiLCAiZm9ybWF0UXVlcnkiLCAiZ2V0WW91VHViZVRyZW5kcyIsICJ5b3V0dWJlIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImRhdGEiLCAibGlzdCIsICJnZXRZb3VUdWJlU2VhcmNoIiwgIml0ZW1zIiwgImdldFBhdGhVc2VyRmlsZXMiLCAidXNlcklkIiwgImZpbGVuYW1lIiwgImxpbmtGaWxlcyIsICJwb3N0RG9jSWQiLCAiZmlsZXMiLCAidXBkYXRlRmlsZXMiLCAiZWRnZXMiLCAiZWRnZSIsICJlZGdlS2V5IiwgImVuY29kZUJhc2U2NCIsICJkZWNvZGVCYXNlNjQiLCAiZGF0YVN0cmluZyIsICJnZXREYXRhIiwgInN0ciIsICJtYXRjaGVzIl0KfQo=
@@ -1,52 +0,0 @@
1
- import{createHash as O,parseArangoId as G,parseChar as D,parseId as y}from"@nlabs/utils";import{aql as E}from"arangojs";import L from"lodash/flatten";import f from"lodash/uniqBy";import{extractTags as b,updateTagsInItem as U}from"./tags";import{ErrorTypes as c}from"../types/error.types";import{logError as l}from"../utils/analyticsUtils";import{getLimit as A,useDb as p}from"../utils/arangodbUtils";const g="groups",P=(t,o,i)=>{const a="getListByApp",{databaseName:s}=t,e=`FOR g in groups
2
- LET users = (
3
- FOR u, l IN OUTBOUND g._id hasConnection
4
- RETURN MERGE (u, {type:l.type})
5
- )
6
- ${A(o,i).aql}
7
- SORT g.added
8
- RETURN DISTINCT MERGE(g, {users:users})`;return p(s).query(e).then(r=>r.all()).catch(r=>l({action:a,category:g,label:c.DATABASE_ERROR},r,t).then(()=>null))},M=(t,o,i)=>{const{databaseName:a,session:{userId:s}}=t,n=A(o,i),e=`FOR g, e IN INBOUND "${`users/${s}`}" hasConnection
9
- LET users = (
10
- FOR u, l IN OUTBOUND g._id hasConnection
11
- RETURN MERGE (u, {type:l.type})
12
- )
13
- ${n.aql}
14
- SORT g.added
15
- RETURN DISTINCT MERGE(g, {users:users})`;return p(a).query(e).then(r=>r.all()).catch(r=>{throw r})},v=(t,o,i,a)=>{const s="getListByTags",{databaseName:n}=t;return Promise.all(o.map(e=>{const r=y(e),u=A(i,a),R=`FOR p, e IN OUTBOUND "${`tags/${r}`}" isTagged
16
- FOR u IN users
17
- LET likes = (
18
- FOR post, like IN INBOUND p._id likes
19
- FILTER like.value == 'like'
20
- RETURN like
21
- )
22
- LET dislikes = (
23
- FOR post, like IN INBOUND p._id likes
24
- FILTER like.value == 'dislike'
25
- RETURN like
26
- )
27
- FILTER e.type == 'post' && p.userId == u._key
28
- ${u.aql}
29
- SORT p.added
30
- RETURN DISTINCT MERGE(p, {user:u, likes:LENGTH(likes), dislikes:LENGTH(dislikes)})`;return p(n).query(R).then(m=>m.all())})).then(e=>f(L(e),"_key")).catch(e=>l({action:s,category:g,label:c.DATABASE_ERROR},e,t).then(()=>null))},w=(t,o)=>{const i="getItem",{databaseName:a,session:{userId:s}}=t,n=y(o),e=E`FOR g, e IN INBOUND ${`users/${s}`} hasConnection
31
- FILTER g._key == ${n}
32
- LET users = (
33
- FOR u, l IN OUTBOUND g._id hasConnection
34
- RETURN MERGE (u, {type:l.type})
35
- )
36
- LIMIT 1
37
- RETURN DISTINCT MERGE(g, {users:users})`;return p(a).query(e).then(r=>r.next()).then(r=>r).catch(r=>l({action:i,category:g,label:c.DATABASE_ERROR},r,t).then(()=>null))},H=(t,o)=>{const i="getDetails",{databaseName:a}=t,s=y(o),n=E`FOR g IN groups
38
- FILTER g._key == ${s}
39
- LIMIT 1
40
- RETURN g`;return p(a).query(n).then(e=>e.next()).then(e=>e).catch(e=>l({action:i,category:g,label:c.DATABASE_ERROR},e,t).then(()=>null))},C=(t,o,i)=>{const a="createGroupEdge",{databaseName:s}=t,n=G(o),e=G(i),r=Date.now(),u=p(s).collection("hasConnection"),R=O(`group-${n}-${e}`),m={_from:n,_key:R,_to:e,added:r,type:"groups"};return u.save(m,{returnNew:!0}).catch(I=>l({action:a,category:g,label:c.DATABASE_ERROR},I,{session:{userId:n}}).then(()=>null))},W=(t,o)=>{const{databaseName:a,session:{userId:s}}=t,n=Date.now(),{description:e="",name:r="Untitled",type:u}=o,R=O(`group-${s}`),m=e.substr(0,640),I=D(u,16)||"private",N=E`INSERT ${{_key:R,added:n,description:m,modified:n,name:r,type:I}} IN groups RETURN NEW`;return p(a).query(N).then(d=>d.next()).then(d=>{const{_id:h}=d,q=b(m);return U(t,{itemDocId:h,tags:q}).then(()=>C(t,s,h).then(()=>d))}).catch(d=>l({action:"add",category:g,label:c.DATABASE_ERROR},d,t).then(()=>null))},V=(t,o)=>{const i="update",{databaseName:a}=t,{description:s="",id:n,name:e="Untitled"}=o,r=y(n),u=Date.now(),m={description:s.substr(0,640),modified:u,name:e},I=E`UPDATE ${r} WITH ${m} IN groups RETURN NEW`;return p(a).query(I).then(T=>T.next()).then(T=>{const{_id:N}=T,d=b(s);return U(t,{itemDocId:N,tags:d}).then(()=>T)}).catch(T=>l({action:i,category:g,label:c.DATABASE_ERROR},T,t).then(()=>null))},j=(t,o)=>{const i="delete",{databaseName:a}=t,s=y(o),n=E`FOR g IN groups
41
- FILTER g._key == ${s}
42
- REMOVE g IN groups
43
- RETURN OLD`;return p(a).query(n).then(e=>e.next()).then(e=>e).catch(e=>l({action:i,category:g,label:c.DATABASE_ERROR},e,t).then(()=>null))},z=(t,o)=>{const i="getGroupsByReaction",{databaseName:a,session:{userId:s}}=t,n=D(o,32),e=`users/${s}`,r=E`FOR u, r IN OUTBOUND ${e} hasReaction
44
- FILTER r.value == ${n}
45
- COLLECT reactionName = r.value INTO reactionItems
46
- RETURN {value: reactionName, count: LENGTH(reactionItems[*].r.value)}`;return p(a).query(r).then(u=>u.all()).catch(u=>l({action:i,category:g,label:c.DATABASE_ERROR},u,t).then(()=>null))},J=(t,o,i)=>{const a="isGrouped",{databaseName:s}=t,n=y(o),e=y(i),r=E`FOR g IN groups
47
- FILTER g._key == ${e}
48
- FOR u IN INBOUND g._id hasConnection
49
- FILTER u._key == ${n}
50
- LIMIT 1
51
- RETURN u`;return p(s).query(r).then(u=>u.all()).then((u=[])=>{const R=!!u.length;return{groupId:i,isValid:R,userId:o}}).catch(u=>l({action:a,category:g,label:c.DATABASE_ERROR},u,{session:{userId:o}}).then(()=>null))};export{W as addGroup,C as createGroupEdge,j as deleteGroup,w as getGroup,H as getGroupDetails,P as getGroupList,v as getGroupListByTags,M as getGroupListByUser,z as getGroupsByReaction,J as isGrouped,V as updateGroup};
52
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvZ3JvdXBzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUNoYXIsIHBhcnNlSWR9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCBmbGF0dGVuIGZyb20gJ2xvZGFzaC9mbGF0dGVuJztcbmltcG9ydCB1bmlxQnkgZnJvbSAnbG9kYXNoL3VuaXFCeSc7XG5cbmltcG9ydCB7ZXh0cmFjdFRhZ3MsIHVwZGF0ZVRhZ3NJbkl0ZW19IGZyb20gJy4vdGFncyc7XG5pbXBvcnQge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcyc7XG5pbXBvcnQge0dyb3VwRWRnZVR5cGUsIEdyb3VwVHlwZSwgR3JvdXBVc2VyfSBmcm9tICcuLi90eXBlcy9ncm91cHMudHlwZXMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMnO1xuaW1wb3J0IHtnZXRMaW1pdCwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMnO1xuXG5pbXBvcnQgdHlwZSB7QXJhbmdvRGJMaW1pdH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMnO1xuaW1wb3J0IHR5cGUge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdncm91cHMnO1xuXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBMaXN0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGZyb206IG51bWJlciwgdG86IG51bWJlcik6IFByb21pc2U8R3JvdXBUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdEJ5QXBwJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBsaW1pdDogQXJhbmdvRGJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGcgaW4gZ3JvdXBzXG4gICAgICBMRVQgdXNlcnMgPSAoXG4gICAgICAgIEZPUiB1LCBsIElOIE9VVEJPVU5EIGcuX2lkIGhhc0Nvbm5lY3Rpb25cbiAgICAgICAgUkVUVVJOIE1FUkdFICh1LCB7dHlwZTpsLnR5cGV9KVxuICAgICAgKVxuICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICBTT1JUIGcuYWRkZWRcbiAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShnLCB7dXNlcnM6dXNlcnN9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cExpc3RCeVVzZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKTogUHJvbWlzZTxHcm91cFR5cGVbXT4gPT4ge1xuICAvLyBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0QnlVc2VyJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBsaW1pdDogQXJhbmdvRGJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGcsIGUgSU4gSU5CT1VORCBcIiR7YHVzZXJzLyR7c2Vzc2lvbklkfWB9XCIgaGFzQ29ubmVjdGlvblxuICAgICAgTEVUIHVzZXJzID0gKFxuICAgICAgICBGT1IgdSwgbCBJTiBPVVRCT1VORCBnLl9pZCBoYXNDb25uZWN0aW9uXG4gICAgICAgIFJFVFVSTiBNRVJHRSAodSwge3R5cGU6bC50eXBlfSlcbiAgICAgIClcbiAgICAgICR7bGltaXQuYXFsfVxuICAgICAgU09SVCBnLmFkZGVkXG4gICAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UoZywge3VzZXJzOnVzZXJzfSlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwTGlzdEJ5VGFncyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFnczogc3RyaW5nW10sXG4gIGZyb206IG51bWJlcixcbiAgdG86IG51bWJlclxuKTogUHJvbWlzZTxHcm91cFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0QnlUYWdzJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuXG4gIHJldHVybiBQcm9taXNlLmFsbChcbiAgICB0YWdzLm1hcCgodGFnTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBmb3JtYXRUYWdOYW1lOiBzdHJpbmcgPSBwYXJzZUlkKHRhZ05hbWUpO1xuICAgICAgY29uc3QgbGltaXQ6IEFyYW5nb0RiTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG4gICAgICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCwgZSBJTiBPVVRCT1VORCBcIiR7YHRhZ3MvJHtmb3JtYXRUYWdOYW1lfWB9XCIgaXNUYWdnZWRcbiAgICAgICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgICAgIExFVCBsaWtlcyA9IChcbiAgICAgICAgICAgIEZPUiBwb3N0LCBsaWtlIElOIElOQk9VTkQgcC5faWQgbGlrZXNcbiAgICAgICAgICAgIEZJTFRFUiBsaWtlLnZhbHVlID09ICdsaWtlJ1xuICAgICAgICAgICAgUkVUVVJOIGxpa2VcbiAgICAgICAgICApXG4gICAgICAgICAgTEVUIGRpc2xpa2VzID0gKFxuICAgICAgICAgICAgRk9SIHBvc3QsIGxpa2UgSU4gSU5CT1VORCBwLl9pZCBsaWtlc1xuICAgICAgICAgICAgRklMVEVSIGxpa2UudmFsdWUgPT0gJ2Rpc2xpa2UnXG4gICAgICAgICAgICBSRVRVUk4gbGlrZVxuICAgICAgICAgIClcbiAgICAgICAgICBGSUxURVIgZS50eXBlID09ICdwb3N0JyAmJiBwLnVzZXJJZCA9PSB1Ll9rZXlcbiAgICAgICAgICAke2xpbWl0LmFxbH1cbiAgICAgICAgICBTT1JUIHAuYWRkZWRcbiAgICAgICAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwge3VzZXI6dSwgbGlrZXM6TEVOR1RIKGxpa2VzKSwgZGlzbGlrZXM6TEVOR1RIKGRpc2xpa2VzKX0pYDtcblxuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG4gICAgfSlcbiAgKVxuICAgIC50aGVuKChyZXN1bHRzKSA9PiB1bmlxQnkoZmxhdHRlbihyZXN1bHRzKSwgJ19rZXknKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldEl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VJZChpdGVtSWQpO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGcsIGUgSU4gSU5CT1VORCAke2B1c2Vycy8ke3Nlc3Npb25JZH1gfSBoYXNDb25uZWN0aW9uXG4gICAgICBGSUxURVIgZy5fa2V5ID09ICR7Zm9ybWF0SXRlbUlkfVxuICAgICAgTEVUIHVzZXJzID0gKFxuICAgICAgICBGT1IgdSwgbCBJTiBPVVRCT1VORCBnLl9pZCBoYXNDb25uZWN0aW9uXG4gICAgICAgIFJFVFVSTiBNRVJHRSAodSwge3R5cGU6bC50eXBlfSlcbiAgICAgIClcbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShnLCB7dXNlcnM6dXNlcnN9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGdyb3VwOiBHcm91cFR5cGUpID0+IGdyb3VwKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwRGV0YWlscyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBncm91cElkOiBzdHJpbmcpOiBQcm9taXNlPEdyb3VwVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXREZXRhaWxzJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRHcm91cElkOiBzdHJpbmcgPSBwYXJzZUlkKGdyb3VwSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBnIElOIGdyb3Vwc1xuICAgICAgRklMVEVSIGcuX2tleSA9PSAke2Zvcm1hdEdyb3VwSWR9XG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gZ2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGdyb3VwOiBHcm91cFR5cGUpID0+IGdyb3VwKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdyb3VwRWRnZSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGdyb3VwSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxHcm91cEVkZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2NyZWF0ZUdyb3VwRWRnZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKHVzZXJJZCk7XG4gIGNvbnN0IGZvcm1hdEdyb3VwSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoZ3JvdXBJZCk7XG5cbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc0Nvbm5lY3Rpb24nKTtcbiAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBncm91cC0ke2Zvcm1hdFVzZXJJZH0tJHtmb3JtYXRHcm91cElkfWApO1xuXG4gIGNvbnN0IGVkZ2U6IGFueSA9IHtcbiAgICBfZnJvbTogZm9ybWF0VXNlcklkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGZvcm1hdEdyb3VwSWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICB0eXBlOiAnZ3JvdXBzJ1xuICB9O1xuXG4gIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIHtzZXNzaW9uOiB7dXNlcklkOiBmb3JtYXRVc2VySWR9fSkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkR3JvdXAgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbTogR3JvdXBUeXBlKTogUHJvbWlzZTxHcm91cFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IHtcbiAgICBkZXNjcmlwdGlvbiA9ICcnLFxuICAgIG5hbWUgPSAnVW50aXRsZWQnLFxuICAgIHR5cGVcbiAgfTogR3JvdXBUeXBlID0gaXRlbTtcbiAgY29uc3QgaWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYGdyb3VwLSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBmb3JtYXREZXNjOiBzdHJpbmcgPSBkZXNjcmlwdGlvbi5zdWJzdHIoMCwgNjQwKTtcbiAgY29uc3QgZm9ybWF0VHlwZTogc3RyaW5nID0gcGFyc2VDaGFyKHR5cGUsIDE2KSB8fCAncHJpdmF0ZSc7XG4gIGNvbnN0IGluc2VydDogR3JvdXBUeXBlID0ge1xuICAgIF9rZXk6IGlkLFxuICAgIGFkZGVkOiBub3csXG4gICAgZGVzY3JpcHRpb246IGZvcm1hdERlc2MsXG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBuYW1lLFxuICAgIHR5cGU6IGZvcm1hdFR5cGVcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIGdyb3VwcyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoZ3JvdXA6IEdyb3VwVHlwZSkgPT4ge1xuICAgICAgLy8gVXBkYXRlIGxpbmtlZCB0YWdzXG4gICAgICBjb25zdCB7X2lkOiBncm91cERvY0lkfTogR3JvdXBUeXBlID0gZ3JvdXA7XG4gICAgICBjb25zdCB0YWdzID0gZXh0cmFjdFRhZ3MoZm9ybWF0RGVzYyk7XG5cbiAgICAgIHJldHVybiB1cGRhdGVUYWdzSW5JdGVtKGNvbnRleHQsIHtpdGVtRG9jSWQ6IGdyb3VwRG9jSWQsIHRhZ3N9KVxuICAgICAgICAudGhlbigoKSA9PiBjcmVhdGVHcm91cEVkZ2UoY29udGV4dCwgc2Vzc2lvbklkLCBncm91cERvY0lkKS50aGVuKCgpID0+IGdyb3VwKSk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtOiBHcm91cFR5cGUpOiBQcm9taXNlPEdyb3VwVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICd1cGRhdGUnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBkZXNjcmlwdGlvbiA9ICcnLFxuICAgIGlkLFxuICAgIG5hbWUgPSAnVW50aXRsZWQnXG4gIH06IEdyb3VwVHlwZSA9IGl0ZW07XG4gIGNvbnN0IGl0ZW1JZDogc3RyaW5nID0gcGFyc2VJZChpZCk7XG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZm9ybWF0RGVzYzogc3RyaW5nID0gZGVzY3JpcHRpb24uc3Vic3RyKDAsIDY0MCk7XG4gIGNvbnN0IHVwZGF0ZTogYW55ID0ge1xuICAgIGRlc2NyaXB0aW9uOiBmb3JtYXREZXNjLFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgbmFtZVxuICB9O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSAke2l0ZW1JZH0gV0lUSCAke3VwZGF0ZX0gSU4gZ3JvdXBzIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChncm91cDogR3JvdXBUeXBlKSA9PiB7XG4gICAgICBjb25zdCB7X2lkOiBncm91cERvY0lkfSA9IGdyb3VwO1xuXG4gICAgICAvLyBVcGRhdGUgbGlua2VkIHRhZ3NcbiAgICAgIGNvbnN0IHRhZ3MgPSBleHRyYWN0VGFncyhkZXNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gdXBkYXRlVGFnc0luSXRlbShjb250ZXh0LCB7aXRlbURvY0lkOiBncm91cERvY0lkLCB0YWdzfSkudGhlbigoKSA9PiBncm91cCk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVHcm91cCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8R3JvdXBUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUlkKGl0ZW1JZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGcgSU4gZ3JvdXBzXG4gICAgICBGSUxURVIgZy5fa2V5ID09ICR7Zm9ybWF0SXRlbUlkfVxuICAgICAgUkVNT1ZFIGcgSU4gZ3JvdXBzXG4gICAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoZ3JvdXA6IEdyb3VwVHlwZSkgPT4gZ3JvdXApXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R3JvdXBzQnlSZWFjdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCByZWFjdGlvbjogc3RyaW5nKTogUHJvbWlzZTxHcm91cFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRHcm91cHNCeVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbjogc3RyaW5nID0gcGFyc2VDaGFyKHJlYWN0aW9uLCAzMik7XG4gIGNvbnN0IHVzZXJEb2NJZDogc3RyaW5nID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG5cbiAgLy8gUXVlcnlcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdSwgciBJTiBPVVRCT1VORCAke3VzZXJEb2NJZH0gaGFzUmVhY3Rpb25cbiAgICAgIEZJTFRFUiByLnZhbHVlID09ICR7Zm9ybWF0UmVhY3Rpb259XG4gICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICBSRVRVUk4ge3ZhbHVlOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX1gO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNHcm91cGVkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXJJZDogc3RyaW5nLCBncm91cElkOiBzdHJpbmcpOiBQcm9taXNlPEdyb3VwVXNlcj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdpc0dyb3VwZWQnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZDogc3RyaW5nID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBmb3JtYXRHcm91cElkOiBzdHJpbmcgPSBwYXJzZUlkKGdyb3VwSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBnIElOIGdyb3Vwc1xuICAgIEZJTFRFUiBnLl9rZXkgPT0gJHtmb3JtYXRHcm91cElkfVxuICAgIEZPUiB1IElOIElOQk9VTkQgZy5faWQgaGFzQ29ubmVjdGlvblxuICAgIEZJTFRFUiB1Ll9rZXkgPT0gJHtmb3JtYXRVc2VySWR9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiB1YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChyZXN1bHRzID0gW10pID0+IHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSAhIXJlc3VsdHMubGVuZ3RoO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBncm91cElkLFxuICAgICAgICBpc1ZhbGlkLFxuICAgICAgICB1c2VySWRcbiAgICAgIH07XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCB7c2Vzc2lvbjoge3VzZXJJZH19KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiQUFJQSxPQUFRLGNBQUFBLEVBQVksaUJBQUFDLEVBQWUsYUFBQUMsRUFBVyxXQUFBQyxNQUFjLGVBQzVELE9BQVEsT0FBQUMsTUFBVSxXQUVsQixPQUFPQyxNQUFhLGlCQUNwQixPQUFPQyxNQUFZLGdCQUVuQixPQUFRLGVBQUFDLEVBQWEsb0JBQUFDLE1BQXVCLFNBRTVDLE9BQVEsY0FBQUMsTUFBaUIsdUJBRXpCLE9BQVEsWUFBQUMsTUFBZSwwQkFDdkIsT0FBUSxZQUFBQyxFQUFVLFNBQUFDLE1BQVkseUJBSzlCLE1BQU1DLEVBQXdCLFNBRWpCQyxFQUFlLENBQUNDLEVBQXFCQyxFQUFjQyxJQUFxQyxDQUNuRyxNQUFNQyxFQUFpQixlQUNqQixDQUFDLGFBQUFDLENBQVksRUFBSUosRUFFakJLLEVBQWlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQURNVCxFQUFTSyxFQUFNQyxDQUFFLEVBTWxDLEdBQUc7QUFBQTtBQUFBLCtDQUlmLE9BQU9MLEVBQU1PLENBQVksRUFBRSxNQUFNQyxDQUFNLEVBQ3BDLEtBQU1DLEdBQVdBLEVBQU8sSUFBSSxDQUFDLEVBQzdCLE1BQU9DLEdBQWlCWixFQUFTLENBQ2hDLE9BQUFRLEVBQ0EsU0FBVUwsRUFDVixNQUFPSixFQUFXLGNBQ3BCLEVBQUdhLEVBQU9QLENBQU8sRUFBRSxLQUFLLElBQU0sSUFBSSxDQUFDLENBQ3ZDLEVBRWFRLEVBQXFCLENBQUNSLEVBQXFCQyxFQUFjQyxJQUFxQyxDQUV6RyxLQUFNLENBQUMsYUFBQUUsRUFBYyxR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b0MsQ0FBTSxFQUNyQ0YsRUFBd0JsQyxFQUFRaUMsQ0FBTyxFQUN2Q2hCLEVBQW1CaEI7QUFBQSx1QkFDSmlDLENBQWE7QUFBQTtBQUFBLHVCQUViRyxDQUFZO0FBQUE7QUFBQSxjQUlqQyxPQUFPNUIsRUFBTU8sQ0FBWSxFQUFFLE1BQU1DLENBQU0sRUFDcEMsS0FBTUMsR0FBV0EsRUFBTyxJQUFJLENBQUMsRUFDN0IsS0FBSyxDQUFDUyxFQUFVLENBQUMsSUFBTSxDQUN0QixNQUFNZ0MsRUFBVSxDQUFDLENBQUNoQyxFQUFRLE9BRTFCLE1BQU8sQ0FDTCxRQUFBTSxFQUNBLFFBQUEwQixFQUNBLE9BQUF2QixDQUNGLENBQ0YsQ0FBQyxFQUNBLE1BQU9qQixHQUFpQlosRUFBUyxDQUNoQyxPQUFBUSxFQUNBLFNBQVVMLEVBQ1YsTUFBT0osRUFBVyxjQUNwQixFQUFHYSxFQUFPLENBQUMsUUFBUyxDQUFDLE9BQUFpQixDQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBTSxJQUFJLENBQUMsQ0FDbkQiLAogICJuYW1lcyI6IFsiY3JlYXRlSGFzaCIsICJwYXJzZUFyYW5nb0lkIiwgInBhcnNlQ2hhciIsICJwYXJzZUlkIiwgImFxbCIsICJmbGF0dGVuIiwgInVuaXFCeSIsICJleHRyYWN0VGFncyIsICJ1cGRhdGVUYWdzSW5JdGVtIiwgIkVycm9yVHlwZXMiLCAibG9nRXJyb3IiLCAiZ2V0TGltaXQiLCAidXNlRGIiLCAiZXZlbnRDYXRlZ29yeSIsICJnZXRHcm91cExpc3QiLCAiY29udGV4dCIsICJmcm9tIiwgInRvIiwgImFjdGlvbiIsICJkYXRhYmFzZU5hbWUiLCAiYXFsUXJ5IiwgImN1cnNvciIsICJlcnJvciIsICJnZXRHcm91cExpc3RCeVVzZXIiLCAic2Vzc2lvbklkIiwgImxpbWl0IiwgImdldEdyb3VwTGlzdEJ5VGFncyIsICJ0YWdzIiwgInRhZ05hbWUiLCAiZm9ybWF0VGFnTmFtZSIsICJyZXN1bHRzIiwgImdldEdyb3VwIiwgIml0ZW1JZCIsICJmb3JtYXRJdGVtSWQiLCAiZ3JvdXAiLCAiZ2V0R3JvdXBEZXRhaWxzIiwgImdyb3VwSWQiLCAiZm9ybWF0R3JvdXBJZCIsICJjcmVhdGVHcm91cEVkZ2UiLCAidXNlcklkIiwgImZvcm1hdFVzZXJJZCIsICJub3ciLCAiZWRnZUNvbGxlY3Rpb24iLCAiZWRnZUlkIiwgImVkZ2UiLCAiYWRkR3JvdXAiLCAiaXRlbSIsICJkZXNjcmlwdGlvbiIsICJuYW1lIiwgInR5cGUiLCAiaWQiLCAiZm9ybWF0RGVzYyIsICJmb3JtYXRUeXBlIiwgImdyb3VwRG9jSWQiLCAidXBkYXRlR3JvdXAiLCAidXBkYXRlIiwgImRlbGV0ZUdyb3VwIiwgImdldEdyb3Vwc0J5UmVhY3Rpb24iLCAicmVhY3Rpb24iLCAiZm9ybWF0UmVhY3Rpb24iLCAidXNlckRvY0lkIiwgImlzR3JvdXBlZCIsICJpc1ZhbGlkIl0KfQo=
@@ -1,66 +0,0 @@
1
- import{get as J}from"@nlabs/rip-hunter";import{createHash as z,lowerCaseKeys as Z,parseArangoId as K,parseChar as j,parseId as q,parseNum as X}from"@nlabs/utils";import{aql as L}from"arangojs";import w from"gm";import{DateTime as Y}from"luxon";import{getGroupDetails as ee,isGrouped as te}from"./groups";import{s3DeleteList as re,s3GetSignedUrl as ae,s3Put as G}from"./s3";import{Config as O}from"../config";import{ErrorTypes as E}from"../types/error.types";import{logError as R,logException as se}from"../utils/analyticsUtils";import{getDocId as ne,getLimit as _,selectReactionCountByType as oe,useDb as N}from"../utils/arangodbUtils";const f="images";w.subClass({imageMagick:"7+"});const H=(e={})=>{const{from:t=0,to:s=30,type:r="default"}=e;return{limit:_(t,s),type:j(r,32)}},W=(e=[])=>e.reduce((t,s)=>{if(s.includes("Count"))return oe("images","i",s,t);switch(s){case"reactions":return t.queries.push(`LET reactions = (
2
- FOR image, r IN INBOUND i._id reactions
3
- COLLECT reactionName = r.value INTO reactionItems
4
- RETURN {name: reactionName, count: LENGTH(reactionItems[*].r.value)}
5
- )`),t.objects.push("reactions:reactions"),t;case"tags":return t.queries.push(`LET tags = (
6
- FOR t, pl IN INBOUND i._id isTagged
7
- RETURN t
8
- )`),t.objects.push("tags:tags"),t;case"users":return t.queries.push(`LET users = FIRST(
9
- FOR u IN users
10
- FILTER i.userId == u._key
11
- LIMIT 1
12
- RETURN u
13
- )`),t.objects.push("users:users"),t;default:return t}},{objects:[],queries:[]}),Te=(e,t,s=0,r=30)=>{const o="getImagesByUser",{databaseName:n}=e,a=q(t),u=_(s,r),g=`FOR i IN images
14
- FILTER i.userId == "${a}"
15
- LET user = FIRST(
16
- FOR u IN users
17
- FILTER u._key == i.userId
18
- LIMIT 1
19
- RETURN u
20
- )
21
- ${u.aql}
22
- SORT i.added
23
- RETURN MERGE(i, {user:user})`;return N(n).query(g).then(i=>i.all()).catch(i=>(R({action:o,category:f,params:{from:s,to:r,userId:t},value:E.DATABASE_ERROR},i,e),[]))},he=(e,t)=>{const s="getImageCountByItem",{databaseName:r}=e,o=K(t),n=L`FOR i IN hasImage
24
- FILTER i._to == ${o}
25
- RETURN {count: COUNT(i)}`;return N(r).query(n).then(a=>a.next()).then(({count:a})=>a).catch(a=>R({action:s,category:f,params:{itemId:t},value:E.DATABASE_ERROR},a,e))},be=async(e,t,s={})=>{const r="getImagesByItem",{databaseName:o,fields:n=[]}=e,a=K(t),{limit:u}=H(s),{objects:g,queries:i}=W(n),p=`FOR i, l IN 1..1 OUTBOUND "${a}" hasImage
26
- FILTER NOT IS_NULL(i)
27
- ${i.join(`
28
- `)}
29
- SORT i.added
30
- ${u.aql}
31
- RETURN MERGE(i, {${g.join(", ")}})`;return N(o).query(p).then(y=>y.all()).catch(y=>(R({action:r,category:f,params:{itemId:t,options:s},value:E.DATABASE_ERROR},y,e),[]))},Ae=(e,t)=>{const s="getImagesByGroup",{databaseName:r,session:{userId:o}}=e,{filters:n,groupId:a,from:u,to:g}=t,i=q(a),p=_(u,g);return n.map(y=>{const{conditional:I,name:m,value:c}=y;let l=I;switch(I!==">="&&I!=="<="&&I!==">"&&I!=="<"&&(l="=="),m){case"added":return`p.added ${l} ${X(c)}`;default:return""}}),ee(e,i).then(y=>{if(y.privacy==="public"){n.push({conditional:"==",name:"groupId",value:i});const m=`FOR i IN
32
- FLATTEN(
33
- FOR p IN posts
34
- FILTER ${n.join(" && ")}
35
- LET images = (
36
- FOR i, e IN INBOUND p._id hasImage
37
- RETURN i
38
- )
39
- SORT p.added DESC
40
- RETURN images
41
- )
42
- SORT i.added DESC
43
- ${p.aql}
44
- RETURN i`;return N(r).query(m).then(c=>c.all()).catch(c=>(R({action:s,category:f,params:{filters:n,from:u,groupId:a,to:g},value:E.DATABASE_ERROR},c,e),[]))}return te(e,o,a).then(I=>{if(I.isValid){n.push({conditional:"==",name:"groupId",value:I.groupId});const c=`FOR p IN post
45
- FILTER ${n.join(" && ")}
46
- FOR f IN p.files
47
- FILTER f.type == "image/jpeg" || f.type == "image/png"
48
- ${p.aql}
49
- SORT p.added DESC
50
- RETURN f`;return N(r).query(c).then(l=>l.all()).catch(l=>(R({action:s,category:f,params:{filters:n,from:u,groupId:a,to:g},value:E.DATABASE_ERROR},l,e),[]))}return[]})})},Ne=(e,t=[],s)=>{const r="getUsersByImage",{databaseName:o,fields:n=[],session:{userId:a}}=e,{limit:u}=H(s),{objects:g,queries:i}=W(n),p=`users/${a}`,y=t.map(c=>j(c,32)),I=['r.type == "images"',`POSITION(${JSON.stringify(y)}, LOWER(r.name))`],m=`FOR i, r IN OUTBOUND "${p}" hasReaction
51
- OPTIONS {vertexCollections: "images"}
52
- ${i.join(`
53
- `)}
54
- FILTER ${I.join(" && ")}
55
- ${u.aql}
56
- RETURN MERGE(i, {${g.join(", ")}})`;return N(o).query(m).then(c=>c.all()).catch(c=>(R({action:r,category:f,params:{options:s,reactions:t},value:E.DATABASE_ERROR},c,e),[]))},Oe=(e,t)=>{const s="getItem",{databaseName:r}=e,o=q(t),n=L`FOR i IN images
57
- FILTER i._key==${o}
58
- LIMIT 1
59
- RETURN i`;return N(r).query(n).then(a=>a.next()).catch(a=>R({action:s,category:f,params:{imageId:t},value:E.DATABASE_ERROR},a,e))},M=(e,t,s,r="images")=>{let o=t;switch(s){case"image/png":o=`${t}.png`;break;default:o=`${t}.jpg`;break}return`users/${e}/${r}/${o}`},$e=({bucket:e,directory:t="images",imageId:s,imageType:r="jpg",isThumb:o=!1,type:n,typeId:a})=>{if(!n)return"";if(!s)return r==="profile"?`${O.get("image.defaultUrl")}/users_bk.jpg`:`${O.get("image.defaultUrl")}/users_wh.jpg`;const u=e||O.get("image.bucket")||"dev.reaktor.io",g=o?`${s}-th.${r}`:`${s}.${r==="profile"||r==="other"?"jpg":r}`,i=O.get("image.url")||`https://s3.amazonaws.com/${u}`;return n==="apps"?`${i}/${n}/${t}/${g}`:`${i}/${n}/${a}/${t}/${g}`},Be=async({bucket:e,imageDir:t="images",imageId:s,imageType:r="jpg",isThumb:o=!1,type:n,typeId:a,urlType:u="public"})=>{if(!s)return"";o&&(u="signed");const i=`${n}/${a}/${t}/${s}${o?"-th":""}.${r}`;switch(u){case"signed":try{const p=O.get("image.bucket")||"dev.reaktor.io";return await ae({Bucket:e||p,Expires:900,Key:i})}catch(p){throw p}case"public":return`https://box.${O.get("app.url")}/${i}`;case"dev":return`https://s3.amazonaws.com/dev.${O.get("app.url")}/${i}`;default:return""}},ie=async(e,t,s,r="image/jpeg",o)=>{const n="resizeSaveImage",{session:{userId:a}}=e,u=O.get("image.imgSize"),g=O.get("image.imgQuality"),i=r.split("/")[1],p=await new Promise((m,c)=>{w(s,"img").setFormat(i).quality(g).autoOrient().resize(u,u,">").stream((l,b)=>{if(l){c(R({action:n,category:f,params:{fileType:r,imageId:t},value:E.IMAGE_SAVE},l,e));return}let T=Buffer.from("");b.on("data",C=>{T=Buffer.concat([T,C])}),b.on("end",()=>m(T))})});try{const m={ACL:"authenticated-read",Body:p,Bucket:null,ContentType:r,...o||{},Key:M(a,t,r,"images")};await G(m)}catch(m){return R({action:n,category:f,params:{fileType:r,imageId:t},value:E.IMAGE_SAVE},m,e)}const y=await new Promise(m=>{w(p,"img").identify({bufferStream:!0},(c,l={})=>{if(c)return R({action:n,category:f,value:E.IMAGE_SAVE},c,e);const b=Z(l),{make:T,model:C,datetimeoriginal:h}=b,d=b["channel statistics"];let $;if(d){let{red:D,green:U,blue:S,mean:B}=d;D?(B=D["standard deviation"]||D.mean,D=B?+B.split(" ")[0].substring(0,3):0):D=0,U?(B=U["standard deviation"]||U.mean,U=B?+B.split(" ")[0].substring(0,3):0):U=0,S?(B=S["standard deviation"]||S.mean,S=B?+B.split(" ")[0].substring(0,3):0):S=0;const Q=(S|U<<8|D<<16).toString(16);$=Q==="0"?"000000":Q}const{"JPEG-Quality":A,Orientation:v,Resolution:F,size:k}=l;let P;if(F){const[D,U]=F.split(" ");P=`${D.split("x")[0]} ${U==="pixels/inch"?"ppi":""}`}return m({color:$,fileSize:p.length,fileType:i,height:k?.height||0,imageId:t,make:T,model:C,orientation:v==="Unknown"?void 0:v?.toLowerCase(),quality:A?+A:void 0,resolution:P,taken:h?Y.fromMillis(h).millisecond:void 0,width:k?.width||0})})}),I=await new Promise((m,c)=>{const l=O.get("image.thmSize"),b=O.get("image.thmQuality");w(p,"img").setFormat(i).gravity("Center").resize(l,l,"^").extent(l,l).quality(b).stream((T,C)=>{if(T){R({action:n,category:f,params:{fileType:r,imageId:t},value:E.IMAGE_SAVE},T,e);return}let h=Buffer.from("");C.on("data",d=>{h=Buffer.concat([h,d])}),C.on("end",()=>m(h))})});try{const m={ACL:"authenticated-read",Body:I,Bucket:null,ContentType:r,...o||{},Key:M(a,t,r,"thumbs")};await G(m)}catch(m){return R({action:n,category:f,value:E.IMAGE_SAVE},m,e)}return y},x=(e,t,s)=>{const r="addImage",{databaseName:o,session:{userId:n}}=e,{imageId:a,description:u,buffer:g,fileType:i}=t,p=Date.now();return ie(e,a,g,i,s).then(y=>{const I={...y,_key:a,added:p,description:u,fileType:i,modified:p,userId:n},m=L`INSERT ${I} IN images RETURN NEW`;return N(o).query(m).then(c=>c.next()).catch(c=>R({action:r,category:f,params:{image:t,s3Options:s},value:E.DATABASE_ERROR},c,e))}).catch(y=>R({action:r,category:f,value:E.IMAGE_RESIZE},y,e))},V=async(e,t)=>{const s="addImageEdge",{databaseName:r,session:{userId:o}}=e,{imageId:n,itemId:a,itemType:u}=t,g=Date.now(),i=N(r).collection("hasImage"),p=z(`hasImage-${n}-${a}-${o}`),y=j(u).toLowerCase(),I=q(a),m=ne(y,{_key:I}),l=`images/${q(n)}`,b={_from:m,_key:p,_to:l,added:g,itemType:u};return m?N(r).collection("hasImage").save(b,{returnNew:!0}).then(T=>N(r).collection("hasImage").document(T)).catch(T=>R({action:s,category:f,params:{edge:b,fileDocId:l,imageId:n,itemDocId:m,itemId:a,itemType:u},value:E.DATABASE_ERROR},T,e)):null},Ce=async(e,t,s)=>{const r="updateImage",{databaseName:o,session:{userId:n}}=e,{base64:a="",buffer:u,description:g="",imageId:i,itemId:p,itemType:y,fileType:I,url:m=""}=t,c=Date.now(),l=i||z(`image-${n}`),b=q(p),T=j(y,16).toLowerCase(),C={description:g,imageId:l,userId:n};if(a||u){let h=u;if(a){const A=a.substr(a.indexOf(",")+1);h=Buffer.from(A,"base64")}let d=I;if(!I){const{fileTypeFromBuffer:A}=await import("file-type"),{mime:v}=await A(h);d=v}const $={...C,buffer:h,fileType:d};return x(e,$,s).then(A=>b&&T?V(e,{imageId:l,itemId:b,itemType:T}).then(()=>A):A).catch(A=>R({action:r,category:f,value:E.IMAGE_SAVE},A,e))}else if(m!==""){let h;return J(m).then(d=>d.status!==200?se({action:r,category:f,value:E.IMAGE_REQUEST},e):(h=d.headers.get("content-type"),d)).then(d=>d.buffer()).then(d=>{const $={...C,buffer:d,fileType:h};return x(e,$,s).then(A=>b&&T?V(e,{imageId:l,itemId:b,itemType:T}).then(()=>A):A)}).catch(d=>R({action:r,category:f,value:"fetch_error"},d,e))}else if(i!==""){const h={description:g,modified:c},d=L`UPDATE {_key: ${l}} WITH ${h} IN images RETURN NEW`;return N(o).query(d).then($=>$.next()).catch($=>R({action:r,category:f,params:{aqlQry:d,formatImageId:l,update:h},value:E.DATABASE_ERROR},$,e))}return null},De=async(e,t)=>{const s="delete",{databaseName:r,session:{userId:o}}=e,n=q(t);try{const a=L`FOR hi IN hasImage
60
- FILTER hi._from == ${n}
61
- REMOVE hi IN hasImage
62
- RETURN OLD`;await N(r).query(a);const u=L`FOR i IN images
63
- FILTER i._key == ${n} && i.userId == ${o}
64
- REMOVE i IN images
65
- RETURN OLD`,g=await N(r).query(u).then(i=>i.next());if(g){const{_key:i}=g,p={Bucket:null,Delete:{Objects:[{Key:`users/${o}/images/${i}.jpg`},{Key:`users/${o}/thumbs/${i}.jpg`}],Quiet:!0}};return re(p).then(()=>g)}return null}catch(a){return R({action:s,category:f,params:{imageId:t},value:E.DATABASE_ERROR},a,e)}};export{x as addImage,V as addImageEdge,De as deleteImage,$e as getAppImageUrl,Oe as getImage,he as getImageCountByItem,W as getImageOptional,Be as getImageUrl,Ae as getImagesByGroup,be as getImagesByItem,Ne as getImagesByReactions,Te as getImagesByUser,M as getPathUserImages,H as parseImageOptions,ie as resizeSaveImage,Ce as updateImage};
66
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvaW1hZ2VzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtEZWxldGVPYmplY3RzQ29tbWFuZElucHV0LCBQdXRPYmplY3RDb21tYW5kSW5wdXR9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMyc7XG5pbXBvcnQge2dldCBhcyBodHRwR2V0fSBmcm9tICdAbmxhYnMvcmlwLWh1bnRlcic7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIGxvd2VyQ2FzZUtleXMsIHBhcnNlQXJhbmdvSWQsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCBnbSBmcm9tICdnbSc7XG5pbXBvcnQge0RhdGVUaW1lfSBmcm9tICdsdXhvbic7XG5cbmltcG9ydCB7Z2V0R3JvdXBEZXRhaWxzLCBpc0dyb3VwZWR9IGZyb20gJy4vZ3JvdXBzJztcbmltcG9ydCB7czNEZWxldGVMaXN0LCBzM0dldFNpZ25lZFVybCwgczNQdXR9IGZyb20gJy4vczMnO1xuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMnO1xuaW1wb3J0IHtnZXREb2NJZCwgZ2V0TGltaXQsIHNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUsIHVzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzJztcblxuaW1wb3J0IHR5cGUge1xuICBBcGlDb250ZXh0LFxuICBBcmFuZ29EYkNvbGxlY3Rpb24sXG4gIEFyYW5nb0RiTGltaXQsXG4gIEdyb3VwVHlwZSxcbiAgR3JvdXBVc2VyLFxuICBJbWFnZUVkZ2VUeXBlLFxuICBJbWFnZUlkZW50aWZ5VHlwZSxcbiAgSW1hZ2VPcHRpb25zLFxuICBJbWFnZVR5cGUsXG4gIEltYWdlVXJsRGF0YSxcbiAgUXVlcnlGaWx0ZXJcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5cbi8vIERlZmluZSBpbnRlcmZhY2UgZm9yIEhUVFAgcmVzcG9uc2Ugd2l0aCBidWZmZXIgbWV0aG9kXG5pbnRlcmZhY2UgSHR0cFJlc3BvbnNlIGV4dGVuZHMgUmVzcG9uc2Uge1xuICBidWZmZXIoKTogUHJvbWlzZTxCdWZmZXI+O1xufVxuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnaW1hZ2VzJztcbmdtLnN1YkNsYXNzKHtpbWFnZU1hZ2ljazogJzcrJ30pO1xuXG5leHBvcnQgY29uc3QgcGFyc2VJbWFnZU9wdGlvbnMgPSAob3B0aW9uczogSW1hZ2VPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIHRvID0gMzAsXG4gICAgdHlwZSA9ICdkZWZhdWx0J1xuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdCxcbiAgICB0eXBlOiBwYXJzZUNoYXIodHlwZSwgMzIpXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VPcHRpb25hbCA9IChmaWVsZHM6IHN0cmluZ1tdID0gW10pID0+XG4gIGZpZWxkcy5yZWR1Y2UoKHNlbGVjdHMsIGZpZWxkOiBzdHJpbmcpID0+IHtcbiAgICBpZihmaWVsZC5pbmNsdWRlcygnQ291bnQnKSkge1xuICAgICAgcmV0dXJuIHNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUoJ2ltYWdlcycsICdpJywgZmllbGQsIHNlbGVjdHMpO1xuICAgIH1cblxuICAgIHN3aXRjaChmaWVsZCkge1xuICAgICAgY2FzZSAncmVhY3Rpb25zJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHJlYWN0aW9ucyA9IChcbiAgICAgICAgICBGT1IgaW1hZ2UsIHIgSU4gSU5CT1VORCBpLl9pZCByZWFjdGlvbnNcbiAgICAgICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICAgICAgUkVUVVJOIHtuYW1lOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX1cbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgncmVhY3Rpb25zOnJlYWN0aW9ucycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RhZ3MnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgdGFncyA9IChcbiAgICAgICAgICBGT1IgdCwgcGwgSU4gSU5CT1VORCBpLl9pZCBpc1RhZ2dlZFxuICAgICAgICAgIFJFVFVSTiB0XG4gICAgICAgIClgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3RhZ3M6dGFncycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3VzZXJzJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHVzZXJzID0gRklSU1QoXG4gICAgICAgICAgRk9SIHUgSU4gdXNlcnNcbiAgICAgICAgICBGSUxURVIgaS51c2VySWQgPT0gdS5fa2V5XG4gICAgICAgICAgTElNSVQgMVxuICAgICAgICAgIFJFVFVSTiB1XG4gICAgICAgIClgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3VzZXJzOnVzZXJzJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtvYmplY3RzOiBbXSwgcXVlcmllczogW119KTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlc0J5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGZyb206IG51bWJlciA9IDAsXG4gIHRvOiBudW1iZXIgPSAzMFxuKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRJbWFnZXNCeVVzZXInO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZDogc3RyaW5nID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBsaW1pdDogQXJhbmdvRGJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGkgSU4gaW1hZ2VzXG4gICAgICBGSUxURVIgaS51c2VySWQgPT0gXCIke2Zvcm1hdFVzZXJJZH1cIlxuICAgICAgTEVUIHVzZXIgPSBGSVJTVChcbiAgICAgICAgRk9SIHUgSU4gdXNlcnNcbiAgICAgICAgRklMVEVSIHUuX2tleSA9PSBpLnVzZXJJZFxuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFJFVFVSTiB1XG4gICAgICApXG4gICAgICAke2xpbWl0LmFxbH1cbiAgICAgIFNPUlQgaS5hZGRlZFxuICAgICAgUkVUVVJOIE1FUkdFKGksIHt1c2VyOnVzZXJ9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEltYWdlVHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge2Zyb20sIHRvLCB1c2VySWR9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2VDb3VudEJ5SXRlbSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldEltYWdlQ291bnRCeUl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBpIElOIGhhc0ltYWdlXG4gICAgICBGSUxURVIgaS5fdG8gPT0gJHtmb3JtYXRJdGVtSWR9XG4gICAgICBSRVRVUk4ge2NvdW50OiBDT1VOVChpKX1gO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh7Y291bnR9KSA9PiBjb3VudClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtpdGVtSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlc0J5SXRlbSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIG9wdGlvbnM6IEltYWdlT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldEltYWdlc0J5SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcyA9IFtdfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VJbWFnZU9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldEltYWdlT3B0aW9uYWwoZmllbGRzKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGksIGwgSU4gMS4uMSBPVVRCT1VORCBcIiR7Zm9ybWF0SXRlbUlkfVwiIGhhc0ltYWdlXG4gICAgRklMVEVSIE5PVCBJU19OVUxMKGkpXG4gICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgIFNPUlQgaS5hZGRlZFxuICAgICR7bGltaXQuYXFsfVxuICAgIFJFVFVSTiBNRVJHRShpLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBJbWFnZVR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHtpdGVtSWQsIG9wdGlvbnN9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlc0J5R3JvdXAgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBhcmFtczoge2ZpbHRlcnM6IFF1ZXJ5RmlsdGVyW10sIGdyb3VwSWQ6IHN0cmluZywgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyfVxuKTogUHJvbWlzZTxJbWFnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRJbWFnZXNCeUdyb3VwJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7ZmlsdGVycywgZ3JvdXBJZCwgZnJvbSwgdG99ID0gcGFyYW1zO1xuICBjb25zdCBmb3JtYXRHcm91cElkOiBzdHJpbmcgPSBwYXJzZUlkKGdyb3VwSWQpO1xuICBjb25zdCBsaW1pdDogQXJhbmdvRGJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcblxuICBmaWx0ZXJzXG4gICAgLm1hcCgoZmlsdGVyOiBRdWVyeUZpbHRlcikgPT4ge1xuICAgICAgY29uc3Qge2NvbmRpdGlvbmFsLCBuYW1lLCB2YWx1ZX0gPSBmaWx0ZXI7XG4gICAgICBsZXQgZm9ybWF0Q29uZDogc3RyaW5nID0gY29uZGl0aW9uYWw7XG5cbiAgICAgIGlmKGNvbmRpdGlvbmFsICE9PSAnPj0nICYmIGNvbmRpdGlvbmFsICE9PSAnPD0nICYmIGNvbmRpdGlvbmFsICE9PSAnPicgJiYgY29uZGl0aW9uYWwgIT09ICc8Jykge1xuICAgICAgICBmb3JtYXRDb25kID0gJz09JztcbiAgICAgIH1cblxuICAgICAgc3dpdGNoKG5hbWUpIHtcbiAgICAgICAgY2FzZSAnYWRkZWQnOlxuICAgICAgICAgIHJldHVybiBgcC5hZGRlZCAke2Zvcm1hdENvbmR9ICR7cGFyc2VOdW0odmFsdWUpfWA7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIHJldHVybiBnZXRHcm91cERldGFpbHMoY29udGV4dCwgZm9ybWF0R3JvdXBJZClcbiAgICAudGhlbigoZ3JvdXA6IEdyb3VwVHlwZSkgPT4ge1xuICAgICAgaWYoZ3JvdXAucHJpdmFjeSA9PT0gJ3B1YmxpYycpIHtcbiAgICAgICAgZmlsdGVycy5wdXNoKHtjb25kaXRpb25hbDogJz09JywgbmFtZTogJ2dyb3VwSWQnLCB2YWx1ZTogZm9ybWF0R3JvdXBJZH0pO1xuICAgICAgICBjb25zdCBmaWx0ZXJTdHIgPSBmaWx0ZXJzLmpvaW4oJyAmJiAnKTtcbiAgICAgICAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGkgSU5cbiAgICAgICAgICBGTEFUVEVOKFxuICAgICAgICAgICAgRk9SIHAgSU4gcG9zdHNcbiAgICAgICAgICAgIEZJTFRFUiAke2ZpbHRlclN0cn1cbiAgICAgICAgICAgIExFVCBpbWFnZXMgPSAoXG4gICAgICAgICAgICAgIEZPUiBpLCBlIElOIElOQk9VTkQgcC5faWQgaGFzSW1hZ2VcbiAgICAgICAgICAgICAgUkVUVVJOIGlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIFNPUlQgcC5hZGRlZCBERVNDXG4gICAgICAgICAgICBSRVRVUk4gaW1hZ2VzXG4gICAgICAgICAgKVxuICAgICAgICAgIFNPUlQgaS5hZGRlZCBERVNDXG4gICAgICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICAgICAgUkVUVVJOIGlgO1xuXG4gICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBJbWFnZVR5cGVbXSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgICBwYXJhbXM6IHtmaWx0ZXJzLCBmcm9tLCBncm91cElkLCB0b30sXG4gICAgICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNHcm91cGVkKGNvbnRleHQsIHNlc3Npb25JZCwgZ3JvdXBJZClcbiAgICAgICAgLnRoZW4oKGdyb3VwZWQ6IEdyb3VwVXNlcikgPT4ge1xuICAgICAgICAgIGlmKGdyb3VwZWQuaXNWYWxpZCkge1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtjb25kaXRpb25hbDogJz09JywgbmFtZTogJ2dyb3VwSWQnLCB2YWx1ZTogZ3JvdXBlZC5ncm91cElkfSk7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJMaXN0OiBzdHJpbmcgPSBmaWx0ZXJzLmpvaW4oJyAmJiAnKTtcbiAgICAgICAgICAgIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBwIElOIHBvc3RcbiAgICAgICAgICAgICAgICBGSUxURVIgJHtmaWx0ZXJMaXN0fVxuICAgICAgICAgICAgICAgIEZPUiBmIElOIHAuZmlsZXNcbiAgICAgICAgICAgICAgICBGSUxURVIgZi50eXBlID09IFwiaW1hZ2UvanBlZ1wiIHx8IGYudHlwZSA9PSBcImltYWdlL3BuZ1wiXG4gICAgICAgICAgICAgICAgJHtsaW1pdC5hcWx9XG4gICAgICAgICAgICAgICAgU09SVCBwLmFkZGVkIERFU0NcbiAgICAgICAgICAgICAgICBSRVRVUk4gZmA7XG5cbiAgICAgICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgSW1hZ2VUeXBlW10pXG4gICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgICAgICBwYXJhbXM6IHtmaWx0ZXJzLCBmcm9tLCBncm91cElkLCB0b30sXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlc0J5UmVhY3Rpb25zID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICByZWFjdGlvbnM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBJbWFnZU9wdGlvbnNcbik6IFByb21pc2U8SW1hZ2VUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0VXNlcnNCeUltYWdlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzID0gW10sIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlSW1hZ2VPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRJbWFnZU9wdGlvbmFsKGZpZWxkcyk7XG4gIGNvbnN0IGZvcm1hdFNlc3Npb25JZDogc3RyaW5nID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uczogc3RyaW5nW10gPSByZWFjdGlvbnMubWFwKChyZWFjdGlvbk5hbWUpID0+IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKSk7XG4gIGNvbnN0IGZpbHRlckJ5OiBzdHJpbmdbXSA9IFtcbiAgICAnci50eXBlID09IFwiaW1hZ2VzXCInLFxuICAgIGBQT1NJVElPTigke0pTT04uc3RyaW5naWZ5KGZvcm1hdFJlYWN0aW9ucyl9LCBMT1dFUihyLm5hbWUpKWBdO1xuXG4gIC8vIEdldCBkYXRhIGZyb20gZGF0YWJhc2VcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGksIHIgSU4gT1VUQk9VTkQgXCIke2Zvcm1hdFNlc3Npb25JZH1cIiBoYXNSZWFjdGlvblxuICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcImltYWdlc1wifVxuICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICBGSUxURVIgJHtmaWx0ZXJCeS5qb2luKCcgJiYgJyl9XG4gICAgJHtsaW1pdC5hcWx9XG4gICAgUkVUVVJOIE1FUkdFKGksIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEltYWdlVHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge29wdGlvbnMsIHJlYWN0aW9uc30sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW1hZ2UgPSAoY29udGV4dDogQXBpQ29udGV4dCwgaW1hZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxJbWFnZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SW1hZ2VJZDogc3RyaW5nID0gcGFyc2VJZChpbWFnZUlkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgaSBJTiBpbWFnZXNcbiAgICBGSUxURVIgaS5fa2V5PT0ke2Zvcm1hdEltYWdlSWR9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBpYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtpbWFnZUlkfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQYXRoVXNlckltYWdlcyA9ICh1c2VySWQ6IHN0cmluZywgaW1hZ2VJZDogc3RyaW5nLCBpbWFnZVR5cGU6IHN0cmluZywgZGlyOiBzdHJpbmcgPSAnaW1hZ2VzJyk6IHN0cmluZyA9PiB7XG4gIGxldCBmaWxlbmFtZTogc3RyaW5nID0gaW1hZ2VJZDtcblxuICBzd2l0Y2goaW1hZ2VUeXBlKSB7XG4gICAgY2FzZSAnaW1hZ2UvcG5nJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7aW1hZ2VJZH0ucG5nYDtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBmaWxlbmFtZSA9IGAke2ltYWdlSWR9LmpwZ2A7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBgdXNlcnMvJHt1c2VySWR9LyR7ZGlyfS8ke2ZpbGVuYW1lfWA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXBwSW1hZ2VVcmwgPSAoe1xuICBidWNrZXQsXG4gIGRpcmVjdG9yeSA9ICdpbWFnZXMnLFxuICBpbWFnZUlkLFxuICBpbWFnZVR5cGUgPSAnanBnJyxcbiAgaXNUaHVtYiA9IGZhbHNlLFxuICB0eXBlLFxuICB0eXBlSWRcbn06IEltYWdlVXJsRGF0YSk6IHN0cmluZyA9PiB7XG4gIGlmKCF0eXBlKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYoIWltYWdlSWQpIHtcbiAgICBpZihpbWFnZVR5cGUgPT09ICdwcm9maWxlJykge1xuICAgICAgcmV0dXJuIGAke0NvbmZpZy5nZXQoJ2ltYWdlLmRlZmF1bHRVcmwnKX0vdXNlcnNfYmsuanBnYDtcbiAgICB9XG4gICAgcmV0dXJuIGAke0NvbmZpZy5nZXQoJ2ltYWdlLmRlZmF1bHRVcmwnKX0vdXNlcnNfd2guanBnYDtcbiAgfVxuXG4gIGNvbnN0IGJ1Y2tldE5hbWUgPSBidWNrZXQgfHwgQ29uZmlnLmdldCgnaW1hZ2UuYnVja2V0JykgfHwgJ2Rldi5yZWFrdG9yLmlvJztcbiAgY29uc3QgaW1hZ2VOYW1lID0gaXNUaHVtYiA/IGAke2ltYWdlSWR9LXRoLiR7aW1hZ2VUeXBlfWAgOiBgJHtpbWFnZUlkfS4ke2ltYWdlVHlwZSA9PT0gJ3Byb2ZpbGUnIHx8IGltYWdlVHlwZSA9PT0gJ290aGVyJyA/ICdqcGcnIDogaW1hZ2VUeXBlfWA7XG4gIGNvbnN0IGltYWdlVXJsID0gQ29uZmlnLmdldCgnaW1hZ2UudXJsJykgfHwgYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS8ke2J1Y2tldE5hbWV9YDtcblxuICBpZih0eXBlID09PSAnYXBwcycpIHtcbiAgICByZXR1cm4gYCR7aW1hZ2VVcmx9LyR7dHlwZX0vJHtkaXJlY3Rvcnl9LyR7aW1hZ2VOYW1lfWA7XG4gIH1cblxuICByZXR1cm4gYCR7aW1hZ2VVcmx9LyR7dHlwZX0vJHt0eXBlSWR9LyR7ZGlyZWN0b3J5fS8ke2ltYWdlTmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlVXJsID0gYXN5bmMgKHtcbiAgYnVja2V0LFxuICBpbWFnZURpciA9ICdpbWFnZXMnLFxuICBpbWFnZUlkLFxuICBpbWFnZVR5cGUgPSAnanBnJyxcbiAgaXNUaHVtYiA9IGZhbHNlLFxuICB0eXBlLFxuICB0eXBlSWQsXG4gIHVybFR5cGUgPSAncHVibGljJ1xufTogSW1hZ2VVcmxEYXRhKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgaWYoIWltYWdlSWQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvLyBBbHdheXMgdXNlIHNpZ25lZCBVUkxzIGZvciB0aHVtYm5haWxzXG4gIGlmKGlzVGh1bWIpIHtcbiAgICB1cmxUeXBlID0gJ3NpZ25lZCc7XG4gIH1cblxuICBjb25zdCB0aHVtYlN1ZmZpeCA9IGlzVGh1bWIgPyAnLXRoJyA6ICcnO1xuICBjb25zdCBpbWFnZUtleTogc3RyaW5nID0gYCR7dHlwZX0vJHt0eXBlSWR9LyR7aW1hZ2VEaXJ9LyR7aW1hZ2VJZH0ke3RodW1iU3VmZml4fS4ke2ltYWdlVHlwZX1gO1xuXG4gIHN3aXRjaCh1cmxUeXBlKSB7XG4gICAgY2FzZSAnc2lnbmVkJzoge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGVmYXVsdEJ1Y2tldCA9IENvbmZpZy5nZXQoJ2ltYWdlLmJ1Y2tldCcpIHx8ICdkZXYucmVha3Rvci5pbyc7XG4gICAgICAgIHJldHVybiBhd2FpdCBzM0dldFNpZ25lZFVybCh7QnVja2V0OiBidWNrZXQgfHwgZGVmYXVsdEJ1Y2tldCwgRXhwaXJlczogOTAwLCBLZXk6IGltYWdlS2V5fSk7XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICBjYXNlICdwdWJsaWMnOiB7XG4gICAgICByZXR1cm4gYGh0dHBzOi8vYm94LiR7Q29uZmlnLmdldCgnYXBwLnVybCcpfS8ke2ltYWdlS2V5fWA7XG4gICAgfVxuICAgIGNhc2UgJ2Rldic6IHtcbiAgICAgIHJldHVybiBgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2Rldi4ke0NvbmZpZy5nZXQoJ2FwcC51cmwnKX0vJHtpbWFnZUtleX1gO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVzaXplU2F2ZUltYWdlID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbWFnZUlkOiBzdHJpbmcsXG4gIGJ1ZmZlcjogQnVmZmVyLFxuICBmaWxlVHlwZTogc3RyaW5nID0gJ2ltYWdlL2pwZWcnLCBzM09wdGlvbnM/OiBQdXRPYmplY3RDb21tYW5kSW5wdXRcbik6IFByb21pc2U8SW1hZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ3Jlc2l6ZVNhdmVJbWFnZSc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGltZ1c6IG51bWJlciA9IENvbmZpZy5nZXQoJ2ltYWdlLmltZ1NpemUnKTtcbiAgY29uc3QgaW1nUTogbnVtYmVyID0gQ29uZmlnLmdldCgnaW1hZ2UuaW1nUXVhbGl0eScpO1xuICBjb25zdCBmb3JtYXQ6IHN0cmluZyA9IChmaWxlVHlwZS5zcGxpdCgnLycpKVsxXTtcblxuICBjb25zdCBpbWFnZU9wdGltaXplZEJ1ZmZlcjogQnVmZmVyID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGdtKGJ1ZmZlciwgJ2ltZycpXG4gICAgICAuc2V0Rm9ybWF0KGZvcm1hdClcbiAgICAgIC5xdWFsaXR5KGltZ1EpXG4gICAgICAuYXV0b09yaWVudCgpXG4gICAgICAucmVzaXplKGltZ1csIGltZ1csICc+JylcbiAgICAgIC5zdHJlYW0oKHN0cmVhbUVycm9yOiBFcnJvciwgc3Rkb3V0KTogdm9pZCA9PiB7XG4gICAgICAgIGlmKHN0cmVhbUVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgICBwYXJhbXM6IHtmaWxlVHlwZSwgaW1hZ2VJZH0sXG4gICAgICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1NBVkVcbiAgICAgICAgICAgIH0sIHN0cmVhbUVycm9yLCBjb250ZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGltYWdlQnVmZmVyOiBCdWZmZXIgPSBCdWZmZXIuZnJvbSgnJyk7XG5cbiAgICAgICAgc3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgICBpbWFnZUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW2ltYWdlQnVmZmVyLCBkYXRhXSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0ZG91dC5vbignZW5kJywgKCkgPT4gcmVzb2x2ZShpbWFnZUJ1ZmZlcikpO1xuICAgICAgfSk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgaW1hZ2VPYmo6IFB1dE9iamVjdENvbW1hbmRJbnB1dCA9IHtcbiAgICAgIEFDTDogJ2F1dGhlbnRpY2F0ZWQtcmVhZCcsXG4gICAgICBCb2R5OiBpbWFnZU9wdGltaXplZEJ1ZmZlcixcbiAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgIENvbnRlbnRUeXBlOiBmaWxlVHlwZSxcbiAgICAgIC4uLihzM09wdGlvbnMgfHwge30pLFxuICAgICAgS2V5OiBnZXRQYXRoVXNlckltYWdlcyhzZXNzaW9uSWQsIGltYWdlSWQsIGZpbGVUeXBlLCAnaW1hZ2VzJylcbiAgICB9O1xuICAgIGF3YWl0IHMzUHV0KGltYWdlT2JqKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2ZpbGVUeXBlLCBpbWFnZUlkfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1NBVkVcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cblxuICBjb25zdCBpbWFnZUlkZW50aXR5ID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBnbShpbWFnZU9wdGltaXplZEJ1ZmZlciwgJ2ltZycpXG4gICAgICAuaWRlbnRpZnkoe2J1ZmZlclN0cmVhbTogdHJ1ZX0sIChlcnJvcjogRXJyb3IsIGltYWdlRGF0YTogSW1hZ2VJZGVudGlmeVR5cGUgPSB7fSkgPT4ge1xuICAgICAgICBpZihlcnJvcikge1xuICAgICAgICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1NBVkVcbiAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmb3JtYXRWYWx1ZXMgPSBsb3dlckNhc2VLZXlzKGltYWdlRGF0YSk7XG4gICAgICAgIGNvbnN0IHttYWtlOiBjYW1lcmFNYWtlLCBtb2RlbDogY2FtZXJhTW9kZWwsIGRhdGV0aW1lb3JpZ2luYWw6IHRha2VufTogSW1hZ2VJZGVudGlmeVR5cGUgPSBmb3JtYXRWYWx1ZXM7XG4gICAgICAgIGNvbnN0IHN0YXRzID0gZm9ybWF0VmFsdWVzWydjaGFubmVsIHN0YXRpc3RpY3MnXTtcbiAgICAgICAgbGV0IGNvbG9yOiBzdHJpbmc7XG5cbiAgICAgICAgaWYoc3RhdHMpIHtcbiAgICAgICAgICBsZXQge3JlZCwgZ3JlZW4sIGJsdWUsIG1lYW59ID0gc3RhdHM7XG5cbiAgICAgICAgICBpZihyZWQpIHtcbiAgICAgICAgICAgIG1lYW4gPSByZWRbJ3N0YW5kYXJkIGRldmlhdGlvbiddIHx8IHJlZC5tZWFuO1xuICAgICAgICAgICAgcmVkID0gbWVhbiA/ICsoKG1lYW4uc3BsaXQoJyAnKVswXSkuc3Vic3RyaW5nKDAsIDMpKSA6IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlZCA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYoZ3JlZW4pIHtcbiAgICAgICAgICAgIG1lYW4gPSBncmVlblsnc3RhbmRhcmQgZGV2aWF0aW9uJ10gfHwgZ3JlZW4ubWVhbjtcbiAgICAgICAgICAgIGdyZWVuID0gbWVhbiA/ICsoKG1lYW4uc3BsaXQoJyAnKVswXSkuc3Vic3RyaW5nKDAsIDMpKSA6IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdyZWVuID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZihibHVlKSB7XG4gICAgICAgICAgICBtZWFuID0gYmx1ZVsnc3RhbmRhcmQgZGV2aWF0aW9uJ10gfHwgYmx1ZS5tZWFuO1xuICAgICAgICAgICAgYmx1ZSA9IG1lYW4gPyArKChtZWFuLnNwbGl0KCcgJylbMF0pLnN1YnN0cmluZygwLCAzKSkgOiAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBibHVlID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCByZ2IgPSBibHVlIHwgKGdyZWVuIDw8IDgpIHwgKHJlZCA8PCAxNik7XG4gICAgICAgICAgY29uc3QgcmdiQ29sb3IgPSByZ2IudG9TdHJpbmcoMTYpO1xuICAgICAgICAgIGNvbG9yID0gcmdiQ29sb3IgPT09ICcwJyA/ICcwMDAwMDAnIDogcmdiQ29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgJ0pQRUctUXVhbGl0eSc6IHF1YWxpdHksXG4gICAgICAgICAgT3JpZW50YXRpb246IG9yaWVudGF0aW9uRGF0YSxcbiAgICAgICAgICBSZXNvbHV0aW9uOiByZXNvbHV0aW9uRGF0YSxcbiAgICAgICAgICBzaXplXG4gICAgICAgIH0gPSBpbWFnZURhdGE7XG4gICAgICAgIGxldCByZXNvbHV0aW9uO1xuXG4gICAgICAgIGlmKHJlc29sdXRpb25EYXRhKSB7XG4gICAgICAgICAgY29uc3QgW3Jlc29sdXRpb25OdW1iZXIsIHJlc29sdXRpb25Vbml0XSA9IHJlc29sdXRpb25EYXRhLnNwbGl0KCcgJyk7XG4gICAgICAgICAgY29uc3QgcmVzb2x1dGlvblZhbHVlID0gcmVzb2x1dGlvbk51bWJlci5zcGxpdCgneCcpWzBdO1xuICAgICAgICAgIGNvbnN0IHJlc29sdXRpb25Vbml0VmFsdWUgPSByZXNvbHV0aW9uVW5pdCA9PT0gJ3BpeGVscy9pbmNoJyA/ICdwcGknIDogJyc7XG4gICAgICAgICAgcmVzb2x1dGlvbiA9IGAke3Jlc29sdXRpb25WYWx1ZX0gJHtyZXNvbHV0aW9uVW5pdFZhbHVlfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgICAgY29sb3IsXG4gICAgICAgICAgZmlsZVNpemU6IGltYWdlT3B0aW1pemVkQnVmZmVyLmxlbmd0aCxcbiAgICAgICAgICBmaWxlVHlwZTogZm9ybWF0LFxuICAgICAgICAgIGhlaWdodDogc2l6ZT8uaGVpZ2h0IHx8IDAsXG4gICAgICAgICAgaW1hZ2VJZCxcbiAgICAgICAgICBtYWtlOiBjYW1lcmFNYWtlLFxuICAgICAgICAgIG1vZGVsOiBjYW1lcmFNb2RlbCxcbiAgICAgICAgICBvcmllbnRhdGlvbjogb3JpZW50YXRpb25EYXRhID09PSAnVW5rbm93bicgPyB1bmRlZmluZWQgOiBvcmllbnRhdGlvbkRhdGE/LnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgcXVhbGl0eTogcXVhbGl0eSA/ICtxdWFsaXR5IDogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlc29sdXRpb24sXG4gICAgICAgICAgdGFrZW46IHRha2VuID8gRGF0ZVRpbWUuZnJvbU1pbGxpcyh0YWtlbikubWlsbGlzZWNvbmQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgd2lkdGg6IHNpemU/LndpZHRoIHx8IDBcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3QgdGh1bWJPcHRpbWl6ZWRCdWZmZXI6IEJ1ZmZlciA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB0aG1XID0gQ29uZmlnLmdldCgnaW1hZ2UudGhtU2l6ZScpO1xuICAgIGNvbnN0IHRobVEgPSBDb25maWcuZ2V0KCdpbWFnZS50aG1RdWFsaXR5Jyk7XG5cbiAgICBnbShpbWFnZU9wdGltaXplZEJ1ZmZlciwgJ2ltZycpXG4gICAgICAuc2V0Rm9ybWF0KGZvcm1hdClcbiAgICAgIC5ncmF2aXR5KCdDZW50ZXInKVxuICAgICAgLnJlc2l6ZSh0aG1XLCB0aG1XLCAnXicpXG4gICAgICAuZXh0ZW50KHRobVcsIHRobVcpXG4gICAgICAucXVhbGl0eSh0aG1RKVxuICAgICAgLnN0cmVhbSgoc3RyZWFtRXJyb3I6IEVycm9yLCB0aHVtYlN0ZG91dCk6IHZvaWQgPT4ge1xuICAgICAgICBpZihzdHJlYW1FcnJvcikge1xuICAgICAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgcGFyYW1zOiB7ZmlsZVR5cGUsIGltYWdlSWR9LFxuICAgICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfU0FWRVxuICAgICAgICAgIH0sIHN0cmVhbUVycm9yLCBjb250ZXh0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGh1bWJCdWZmZXI6IEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKCcnKTtcblxuICAgICAgICB0aHVtYlN0ZG91dC5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgICAgdGh1bWJCdWZmZXIgPSBCdWZmZXIuY29uY2F0KFt0aHVtYkJ1ZmZlciwgZGF0YV0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aHVtYlN0ZG91dC5vbignZW5kJywgKCkgPT4gcmVzb2x2ZSh0aHVtYkJ1ZmZlcikpO1xuICAgICAgfSk7XG4gIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdGh1bWJPYmo6IFB1dE9iamVjdENvbW1hbmRJbnB1dCA9IHtcbiAgICAgIEFDTDogJ2F1dGhlbnRpY2F0ZWQtcmVhZCcsXG4gICAgICBCb2R5OiB0aHVtYk9wdGltaXplZEJ1ZmZlcixcbiAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgIENvbnRlbnRUeXBlOiBmaWxlVHlwZSxcbiAgICAgIC4uLihzM09wdGlvbnMgfHwge30pLFxuICAgICAgS2V5OiBnZXRQYXRoVXNlckltYWdlcyhzZXNzaW9uSWQsIGltYWdlSWQsIGZpbGVUeXBlLCAndGh1bWJzJylcbiAgICB9O1xuICAgIGF3YWl0IHMzUHV0KHRodW1iT2JqKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1NBVkVcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gaW1hZ2VJZGVudGl0eTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRJbWFnZSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW1hZ2U6IEltYWdlVHlwZSxcbiAgczNPcHRpb25zPzogUHV0T2JqZWN0Q29tbWFuZElucHV0XG4pOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRJbWFnZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2ltYWdlSWQsIGRlc2NyaXB0aW9uLCBidWZmZXIsIGZpbGVUeXBlfSA9IGltYWdlO1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG5cbiAgcmV0dXJuIHJlc2l6ZVNhdmVJbWFnZShjb250ZXh0LCBpbWFnZUlkLCBidWZmZXIsIGZpbGVUeXBlLCBzM09wdGlvbnMpXG4gICAgLnRoZW4oKHJlc2l6ZWRJbWFnZTogSW1hZ2VUeXBlKSA9PiB7XG4gICAgICBjb25zdCBpbnNlcnQ6IEltYWdlVHlwZSA9IHtcbiAgICAgICAgLi4ucmVzaXplZEltYWdlLFxuICAgICAgICBfa2V5OiBpbWFnZUlkLFxuICAgICAgICBhZGRlZDogbm93LFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgZmlsZVR5cGUsXG4gICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gaW1hZ2VzIFJFVFVSTiBORVdgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIHBhcmFtczoge2ltYWdlLCBzM09wdGlvbnN9LFxuICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTUFHRV9SRVNJWkVcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEltYWdlRWRnZSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBpbWFnZUVkZ2U6IEltYWdlRWRnZVR5cGUpOiBQcm9taXNlPG9iamVjdD4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRJbWFnZUVkZ2UnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtpbWFnZUlkLCBpdGVtSWQsIGl0ZW1UeXBlfSA9IGltYWdlRWRnZTtcbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc0ltYWdlJyk7XG4gIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgaGFzSW1hZ2UtJHtpbWFnZUlkfS0ke2l0ZW1JZH0tJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1UeXBlOiBBcmFuZ29EYkNvbGxlY3Rpb24gPSBwYXJzZUNoYXIoaXRlbVR5cGUpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uO1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgY29uc3QgaXRlbURvY0lkOiBzdHJpbmcgPSBnZXREb2NJZChmb3JtYXRJdGVtVHlwZSwge19rZXk6IGZvcm1hdEl0ZW1JZH0pO1xuICBjb25zdCBmb3JtYXRJbWFnZUlkOiBzdHJpbmcgPSBwYXJzZUlkKGltYWdlSWQpO1xuICBjb25zdCBmaWxlRG9jSWQ6IHN0cmluZyA9IGBpbWFnZXMvJHtmb3JtYXRJbWFnZUlkfWA7XG5cbiAgY29uc3QgZWRnZTogSW1hZ2VFZGdlVHlwZSA9IHtcbiAgICBfZnJvbTogaXRlbURvY0lkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGZpbGVEb2NJZCxcbiAgICBhZGRlZDogbm93LFxuICAgIGl0ZW1UeXBlXG4gIH07XG5cbiAgaWYoaXRlbURvY0lkKSB7XG4gICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbignaGFzSW1hZ2UnKS5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgICAgLnRoZW4oKGZpbGVFZGdlKSA9PiB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc0ltYWdlJykuZG9jdW1lbnQoZmlsZUVkZ2UpKVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgZWRnZSxcbiAgICAgICAgICBmaWxlRG9jSWQsXG4gICAgICAgICAgaW1hZ2VJZCxcbiAgICAgICAgICBpdGVtRG9jSWQsXG4gICAgICAgICAgaXRlbUlkLFxuICAgICAgICAgIGl0ZW1UeXBlXG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlSW1hZ2UgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGltYWdlOiBJbWFnZVR5cGUsXG4gIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxJbWFnZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAndXBkYXRlSW1hZ2UnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBiYXNlNjQgPSAnJyxcbiAgICBidWZmZXI6IGltYWdlQnVmZmVyLFxuICAgIGRlc2NyaXB0aW9uID0gJycsXG4gICAgaW1hZ2VJZCxcbiAgICBpdGVtSWQsXG4gICAgaXRlbVR5cGUsXG4gICAgZmlsZVR5cGUsXG4gICAgdXJsID0gJydcbiAgfSA9IGltYWdlO1xuXG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZm9ybWF0SW1hZ2VJZDogc3RyaW5nID0gaW1hZ2VJZCB8fCBjcmVhdGVIYXNoKGBpbWFnZS0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUlkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1UeXBlOiBBcmFuZ29EYkNvbGxlY3Rpb24gPSBwYXJzZUNoYXIoaXRlbVR5cGUsIDE2KS50b0xvd2VyQ2FzZSgpIGFzIEFyYW5nb0RiQ29sbGVjdGlvbjtcbiAgY29uc3QgY3VzdG9tUGFyYW1zOiBJbWFnZVR5cGUgPSB7XG4gICAgZGVzY3JpcHRpb24sXG4gICAgaW1hZ2VJZDogZm9ybWF0SW1hZ2VJZCxcbiAgICB1c2VySWQ6IHNlc3Npb25JZFxuICB9O1xuXG4gIGlmKGJhc2U2NCB8fCBpbWFnZUJ1ZmZlcikge1xuICAgIGxldCBidWZmZXI6IEJ1ZmZlciA9IGltYWdlQnVmZmVyO1xuXG4gICAgaWYoYmFzZTY0KSB7XG4gICAgICBjb25zdCBmb3JtYXRCYXNlNjQ6IHN0cmluZyA9IGJhc2U2NC5zdWJzdHIoYmFzZTY0LmluZGV4T2YoJywnKSArIDEpO1xuICAgICAgYnVmZmVyID0gQnVmZmVyLmZyb20oZm9ybWF0QmFzZTY0LCAnYmFzZTY0Jyk7XG4gICAgfVxuXG4gICAgbGV0IHVwZGF0ZWRGaWxlVHlwZSA9IGZpbGVUeXBlO1xuXG4gICAgaWYoIWZpbGVUeXBlKSB7XG4gICAgICBjb25zdCB7ZmlsZVR5cGVGcm9tQnVmZmVyfSA9IGF3YWl0IGltcG9ydCgnZmlsZS10eXBlJyk7XG4gICAgICBjb25zdCB7bWltZX0gPSBhd2FpdCBmaWxlVHlwZUZyb21CdWZmZXIoYnVmZmVyKTtcbiAgICAgIHVwZGF0ZWRGaWxlVHlwZSA9IG1pbWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW1nUGFyYW1zOiBJbWFnZVR5cGUgPSB7XG4gICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICBidWZmZXIsXG4gICAgICBmaWxlVHlwZTogdXBkYXRlZEZpbGVUeXBlXG4gICAgfTtcblxuICAgIHJldHVybiBhZGRJbWFnZShjb250ZXh0LCBpbWdQYXJhbXMsIHMzT3B0aW9ucylcbiAgICAgIC50aGVuKChpbWFnZTogSW1hZ2VUeXBlKSA9PiB7XG4gICAgICAgIGlmKGZvcm1hdEl0ZW1JZCAmJiBmb3JtYXRJdGVtVHlwZSkge1xuICAgICAgICAgIGNvbnN0IGltYWdlRWRnZTogSW1hZ2VFZGdlVHlwZSA9IHtcbiAgICAgICAgICAgIGltYWdlSWQ6IGZvcm1hdEltYWdlSWQsXG4gICAgICAgICAgICBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGFkZEltYWdlRWRnZShjb250ZXh0LCBpbWFnZUVkZ2UpLnRoZW4oKCkgPT4gaW1hZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGltYWdlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU1BR0VfU0FWRVxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfSBlbHNlIGlmKHVybCAhPT0gJycpIHtcbiAgICBsZXQgY29udGVudFR5cGU7XG5cbiAgICByZXR1cm4gaHR0cEdldCh1cmwpXG4gICAgICAudGhlbigocmVzOiBIdHRwUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklNQUdFX1JFUVVFU1RcbiAgICAgICAgICB9LCBjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRlbnRUeXBlID0gcmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICAgIC50aGVuKChyZXMpID0+IChyZXMgYXMgSHR0cFJlc3BvbnNlKS5idWZmZXIoKSlcbiAgICAgIC50aGVuKChidWZmZXI6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBjb25zdCBpbWdQYXJhbXM6IEltYWdlVHlwZSA9IHtcbiAgICAgICAgICAuLi5jdXN0b21QYXJhbXMsXG4gICAgICAgICAgYnVmZmVyLFxuICAgICAgICAgIGZpbGVUeXBlOiBjb250ZW50VHlwZVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBhZGRJbWFnZShjb250ZXh0LCBpbWdQYXJhbXMsIHMzT3B0aW9ucylcbiAgICAgICAgICAudGhlbigoaW1hZ2U6IEltYWdlVHlwZSkgPT4ge1xuICAgICAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGltYWdlRWRnZTogSW1hZ2VFZGdlVHlwZSA9IHtpbWFnZUlkOiBmb3JtYXRJbWFnZUlkLCBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCwgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlfTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFkZEltYWdlRWRnZShjb250ZXh0LCBpbWFnZUVkZ2UpLnRoZW4oKCkgPT4gaW1hZ2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gaW1hZ2U7XG4gICAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6ICdmZXRjaF9lcnJvcidcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH0gZWxzZSBpZihpbWFnZUlkICE9PSAnJykge1xuICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgbW9kaWZpZWQ6IG5vd1xuICAgIH07XG4gICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUge19rZXk6ICR7Zm9ybWF0SW1hZ2VJZH19IFdJVEggJHt1cGRhdGV9IElOIGltYWdlcyBSRVRVUk4gTkVXYDtcblxuICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBhcWxRcnksXG4gICAgICAgICAgZm9ybWF0SW1hZ2VJZCxcbiAgICAgICAgICB1cGRhdGVcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVJbWFnZSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBpbWFnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEltYWdlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdkZWxldGUnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEltYWdlSWQgPSBwYXJzZUlkKGltYWdlSWQpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVtb3ZlRWRnZVF1ZXJ5ID0gYXFsYEZPUiBoaSBJTiBoYXNJbWFnZVxuICAgIEZJTFRFUiBoaS5fZnJvbSA9PSAke2Zvcm1hdEltYWdlSWR9XG4gICAgUkVNT1ZFIGhpIElOIGhhc0ltYWdlXG4gICAgUkVUVVJOIE9MRGA7XG5cbiAgICBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KHJlbW92ZUVkZ2VRdWVyeSk7XG5cbiAgICBjb25zdCBhcWxRdWVyeSA9IGFxbGBGT1IgaSBJTiBpbWFnZXNcbiAgICBGSUxURVIgaS5fa2V5ID09ICR7Zm9ybWF0SW1hZ2VJZH0gJiYgaS51c2VySWQgPT0gJHtzZXNzaW9uSWR9XG4gICAgUkVNT1ZFIGkgSU4gaW1hZ2VzXG4gICAgUkVUVVJOIE9MRGA7XG5cbiAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG5cbiAgICBpZihpbWFnZSkge1xuICAgICAgY29uc3Qge19rZXk6IGltYWdlS2V5fSA9IGltYWdlO1xuICAgICAgY29uc3QgcGFyYW1zOiBEZWxldGVPYmplY3RzQ29tbWFuZElucHV0ID0ge1xuICAgICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICAgIERlbGV0ZToge1xuICAgICAgICAgIE9iamVjdHM6IFtcbiAgICAgICAgICAgIHtLZXk6IGB1c2Vycy8ke3Nlc3Npb25JZH0vaW1hZ2VzLyR7aW1hZ2VLZXl9LmpwZ2B9LFxuICAgICAgICAgICAge0tleTogYHVzZXJzLyR7c2Vzc2lvbklkfS90aHVtYnMvJHtpbWFnZUtleX0uanBnYH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIFF1aWV0OiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzM0RlbGV0ZUxpc3QocGFyYW1zKS50aGVuKCgpID0+IGltYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2ltYWdlSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG4iXSwKICAibWFwcGluZ3MiOiAiQUFLQSxPQUFRLE9BQU9BLE1BQWMsb0JBQzdCLE9BQVEsY0FBQUMsRUFBWSxpQkFBQUMsRUFBZSxpQkFBQUMsRUFBZSxhQUFBQyxFQUFXLFdBQUFDLEVBQVMsWUFBQUMsTUFBZSxlQUNyRixPQUFRLE9BQUFDLE1BQVUsV0FFbEIsT0FBT0MsTUFBUSxLQUNmLE9BQVEsWUFBQUMsTUFBZSxRQUV2QixPQUFRLG1CQUFBQyxHQUFpQixhQUFBQyxPQUFnQixXQUN6QyxPQUFRLGdCQUFBQyxHQUFjLGtCQUFBQyxHQUFnQixTQUFBQyxNQUFZLE9BQ2xELE9BQVEsVUFBQUMsTUFBYSxZQUNyQixPQUFRLGNBQUFDLE1BQWlCLHVCQUN6QixPQUFRLFlBQUFDLEVBQVUsZ0JBQUFDLE9BQW1CLDBCQUNyQyxPQUFRLFlBQUFDLEdBQVUsWUFBQUMsRUFBVSw2QkFBQUMsR0FBMkIsU0FBQUMsTUFBWSx5QkFzQm5FLE1BQU1DLEVBQXdCLFNBQzlCZixFQUFHLFNBQVMsQ0FBQyxZQUFhLElBQUksQ0FBQyxFQUV4QixNQUFNZ0IsRUFBb0IsQ0FBQ0MsRUFBd0IsQ0FBQyxJQUFNLENBQy9ELEtBQU0sQ0FDSixLQUFBQyxFQUFPLEVBQ1AsR0FBQUMsRUFBSyxHQUNMLEtBQUFDLEVBQU8sU0FD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LENBQVMsV0FBV21DLENBQVEsTUFBTSxFQUNqRCxDQUFDLElBQUssU0FBU25DLENBQVMsV0FBV21DLENBQVEsTUFBTSxDQUNuRCxFQUNBLE1BQU8sRUFDVCxDQUNGLEVBRUEsT0FBTzNFLEdBQWF1QyxDQUFNLEVBQUUsS0FBSyxJQUFNZ0YsQ0FBSyxDQUM5QyxDQUVBLE9BQU8sSUFDVCxPQUFRekYsRUFBTyxDQUNiLE9BQU96QixFQUFTLENBQ2QsT0FBQW1CLEVBQ0EsU0FBVWIsRUFDVixPQUFRLENBQUMsUUFBQStDLENBQU8sRUFDaEIsTUFBT3RELEVBQVcsY0FDcEIsRUFBRzBCLEVBQU9SLENBQU8sQ0FDbkIsQ0FDRiIsCiAgIm5hbWVzIjogWyJodHRwR2V0IiwgImNyZWF0ZUhhc2giLCAibG93ZXJDYXNlS2V5cyIsICJwYXJzZUFyYW5nb0lkIiwgInBhcnNlQ2hhciIsICJwYXJzZUlkIiwgInBhcnNlTnVtIiwgImFxbCIsICJnbSIsICJEYXRlVGltZSIsICJnZXRHcm91cERldGFpbHMiLCAiaXNHcm91cGVkIiwgInMzRGVsZXRlTGlzdCIsICJzM0dldFNpZ25lZFVybCIsICJzM1B1dCIsICJDb25maWciLCAiRXJyb3JUeXBlcyIsICJsb2dFcnJvciIsICJsb2dFeGNlcHRpb24iLCAiZ2V0RG9jSWQiLCAiZ2V0TGltaXQiLCAic2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSIsICJ1c2VEYiIsICJldmVudENhdGVnb3J5IiwgInBhcnNlSW1hZ2VPcHRpb25zIiwgIm9wdGlvbnMiLCAiZnJvbSIsICJ0byIsICJ0eXBlIiwgImdldEltYWdlT3B0aW9uYWwiLCAiZmllbGRzIiwgInNlbGVjdHMiLCAiZmllbGQiLCAiZ2V0SW1hZ2VzQnlVc2VyIiwgImNvbnRleHQiLCAidXNlcklkIiwgImFjdGlvbiIsICJkYXRhYmFzZU5hbWUiLCAiZm9ybWF0VXNlcklkIiwgImxpbWl0IiwgImFxbFFyeSIsICJjdXJzb3IiLCAiZXJyb3IiLCAiZ2V0SW1hZ2VDb3VudEJ5SXRlbSIsICJpdGVtSWQiLCAiZm9ybWF0SXRlbUlkIiwgImNvdW50IiwgImdldEltYWdlc0J5SXRlbSIsICJzZWxlY3RPYmplY3RzIiwgInNlbGVjdFF1ZXJpZXMiLCAiZ2V0SW1hZ2VzQnlHcm91cCIsICJwYXJhbXMiLCAic2Vzc2lvbklkIiwgImZpbHRlcnMiLCAiZ3JvdXBJZCIsICJmb3JtYXRHcm91cElkIiwgImZpbHRlciIsICJjb25kaXRpb25hbCIsICJuYW1lIiwgInZhbHVlIiwgImZvcm1hdENvbmQiLCAiZ3JvdXAiLCAiZ3JvdXBlZCIsICJnZXRJbWFnZXNCeVJlYWN0aW9ucyIsICJyZWFjdGlvbnMiLCAiZm9ybWF0U2Vzc2lvbklkIiwgImZvcm1hdFJlYWN0aW9ucyIsICJyZWFjdGlvbk5hbWUiLCAiZmlsdGVyQnkiLCAiZ2V0SW1hZ2UiLCAiaW1hZ2VJZCIsICJmb3JtYXRJbWFnZUlkIiwgImdldFBhdGhVc2VySW1hZ2VzIiwgImltYWdlVHlwZSIsICJkaXIiLCAiZmlsZW5hbWUiLCAiZ2V0QXBwSW1hZ2VVcmwiLCAiYnVja2V0IiwgImRpcmVjdG9yeSIsICJpc1RodW1iIiwgInR5cGVJZCIsICJidWNrZXROYW1lIiwgImltYWdlTmFtZSIsICJpbWFnZVVybCIsICJnZXRJbWFnZVVybCIsICJpbWFnZURpciIsICJ1cmxUeXBlIiwgImltYWdlS2V5IiwgImRlZmF1bHRCdWNrZXQiLCAicmVzaXplU2F2ZUltYWdlIiwgImJ1ZmZlciIsICJmaWxlVHlwZSIsICJzM09wdGlvbnMiLCAiaW1nVyIsICJpbWdRIiwgImZvcm1hdCIsICJpbWFnZU9wdGltaXplZEJ1ZmZlciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJzdHJlYW1FcnJvciIsICJzdGRvdXQiLCAiaW1hZ2VCdWZmZXIiLCAiZGF0YSIsICJpbWFnZU9iaiIsICJpbWFnZUlkZW50aXR5IiwgImltYWdlRGF0YSIsICJmb3JtYXRWYWx1ZXMiLCAiY2FtZXJhTWFrZSIsICJjYW1lcmFNb2RlbCIsICJ0YWtlbiIsICJzdGF0cyIsICJjb2xvciIsICJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSIsICJtZWFuIiwgInJnYkNvbG9yIiwgInF1YWxpdHkiLCAib3JpZW50YXRpb25EYXRhIiwgInJlc29sdXRpb25EYXRhIiwgInNpemUiLCAicmVzb2x1dGlvbiIsICJyZXNvbHV0aW9uTnVtYmVyIiwgInJlc29sdXRpb25Vbml0IiwgInRodW1iT3B0aW1pemVkQnVmZmVyIiwgInRobVciLCAidGhtUSIsICJ0aHVtYlN0ZG91dCIsICJ0aHVtYkJ1ZmZlciIsICJ0aHVtYk9iaiIsICJhZGRJbWFnZSIsICJpbWFnZSIsICJkZXNjcmlwdGlvbiIsICJub3ciLCAicmVzaXplZEltYWdlIiwgImluc2VydCIsICJhZGRJbWFnZUVkZ2UiLCAiaW1hZ2VFZGdlIiwgIml0ZW1UeXBlIiwgImVkZ2VDb2xsZWN0aW9uIiwgImVkZ2VJZCIsICJmb3JtYXRJdGVtVHlwZSIsICJpdGVtRG9jSWQiLCAiZmlsZURvY0lkIiwgImVkZ2UiLCAiZmlsZUVkZ2UiLCAidXBkYXRlSW1hZ2UiLCAiYmFzZTY0IiwgInVybCIsICJjdXN0b21QYXJhbXMiLCAiZm9ybWF0QmFzZTY0IiwgInVwZGF0ZWRGaWxlVHlwZSIsICJmaWxlVHlwZUZyb21CdWZmZXIiLCAibWltZSIsICJpbWdQYXJhbXMiLCAiY29udGVudFR5cGUiLCAicmVzIiwgInVwZGF0ZSIsICJkZWxldGVJbWFnZSIsICJyZW1vdmVFZGdlUXVlcnkiLCAiYXFsUXVlcnkiXQp9Cg==
@@ -1,2 +0,0 @@
1
- export*from"./apps";export*from"./connections";export*from"./conversations";export*from"./dynamodb";export*from"./email";export*from"./files";export*from"./groups";export*from"./images";export*from"./ios";export*from"./locations";export*from"./messages";export*from"./notifications";export*from"./payments";export*from"./posts";export*from"./reactions";export*from"./s3";export*from"./search";export*from"./sms";export*from"./statistics";export*from"./subscriptions";export*from"./tags";export*from"./users";export*from"./websockets";
2
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5leHBvcnQgKiBmcm9tICcuL2FwcHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25uZWN0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnZlcnNhdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9keW5hbW9kYic7XG5leHBvcnQgKiBmcm9tICcuL2VtYWlsJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9ncm91cHMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbWFnZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9pb3MnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2NhdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdlcyc7XG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9wYXltZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3Bvc3RzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVhY3Rpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vczMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWFyY2gnO1xuZXhwb3J0ICogZnJvbSAnLi9zbXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdGF0aXN0aWNzJztcbmV4cG9ydCAqIGZyb20gJy4vc3Vic2NyaXB0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3RhZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi91c2Vycyc7XG5leHBvcnQgKiBmcm9tICcuL3dlYnNvY2tldHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBSUEsV0FBYyxTQUNkLFdBQWMsZ0JBQ2QsV0FBYyxrQkFDZCxXQUFjLGFBQ2QsV0FBYyxVQUNkLFdBQWMsVUFDZCxXQUFjLFdBQ2QsV0FBYyxXQUNkLFdBQWMsUUFDZCxXQUFjLGNBQ2QsV0FBYyxhQUNkLFdBQWMsa0JBQ2QsV0FBYyxhQUNkLFdBQWMsVUFDZCxXQUFjLGNBQ2QsV0FBYyxPQUNkLFdBQWMsV0FDZCxXQUFjLFFBQ2QsV0FBYyxlQUNkLFdBQWMsa0JBQ2QsV0FBYyxTQUNkLFdBQWMsVUFDZCxXQUFjIiwKICAibmFtZXMiOiBbXQp9Cg==