@nlabs/reaktor 0.10.1 → 0.10.2

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 (451) 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/config.ts.html +766 -0
  13. package/coverage/index.html +81 -51
  14. package/coverage/mocks/group.ts.html +5 -5
  15. package/coverage/mocks/image.ts.html +18 -12
  16. package/coverage/mocks/index.html +37 -7
  17. package/coverage/mocks/post.ts.html +8 -8
  18. package/coverage/mocks/tag.ts.html +2 -2
  19. package/coverage/mocks/user.ts.html +18 -15
  20. package/coverage/testUtils.ts.html +1309 -0
  21. package/coverage/translationQueue.ts.html +592 -0
  22. package/coverage/types/error.types.ts.html +148 -0
  23. package/coverage/types/index.html +2 -2
  24. package/coverage/utils/adapterUtils.ts.html +39 -27
  25. package/coverage/utils/analyticsUtils.ts.html +35 -41
  26. package/coverage/utils/authUtils.ts.html +328 -0
  27. package/coverage/utils/dbI18n.ts.html +280 -0
  28. package/coverage/utils/googleTranslate.ts.html +385 -0
  29. package/coverage/utils/index.html +29 -44
  30. package/coverage/utils/localeUtils.ts.html +193 -0
  31. package/coverage/utils/sessionUtils.ts.html +211 -0
  32. package/coverage/utils/testUtils.ts.html +1309 -0
  33. package/lex.config.mjs +34 -0
  34. package/lib/actions/apps.d.ts +25 -0
  35. package/lib/actions/apps.js +11 -11
  36. package/lib/actions/connections.d.ts +5 -0
  37. package/lib/actions/connections.js +6 -6
  38. package/lib/actions/content.d.ts +13 -0
  39. package/lib/actions/content.js +9 -9
  40. package/lib/actions/conversations.d.ts +16 -0
  41. package/lib/actions/conversations.js +17 -17
  42. package/lib/actions/dynamodb.d.ts +12 -0
  43. package/lib/actions/dynamodb.js +2 -2
  44. package/lib/actions/email.d.ts +8 -0
  45. package/lib/actions/email.js +2 -2
  46. package/lib/actions/files.d.ts +19 -0
  47. package/lib/actions/files.js +3 -3
  48. package/lib/actions/groups.d.ts +13 -0
  49. package/lib/actions/groups.js +15 -15
  50. package/lib/actions/images.d.ts +33 -0
  51. package/lib/actions/images.js +22 -22
  52. package/lib/actions/index.d.ts +27 -0
  53. package/lib/actions/index.js +2 -2
  54. package/lib/actions/ios.d.ts +7 -0
  55. package/lib/actions/ios.js +4 -4
  56. package/lib/actions/locations.d.ts +6 -0
  57. package/lib/actions/locations.js +3 -3
  58. package/lib/actions/messages.d.ts +13 -0
  59. package/lib/actions/messages.js +3 -3
  60. package/lib/actions/notifications.d.ts +9 -0
  61. package/lib/actions/notifications.js +2 -2
  62. package/lib/actions/payments.d.ts +12 -0
  63. package/lib/actions/payments.js +6 -6
  64. package/lib/actions/posts.d.ts +25 -0
  65. package/lib/actions/posts.js +30 -30
  66. package/lib/actions/profiles.d.ts +4 -0
  67. package/lib/actions/profiles.js +4 -4
  68. package/lib/actions/reactions.d.ts +32 -0
  69. package/lib/actions/reactions.js +16 -16
  70. package/lib/actions/s3.d.ts +11 -0
  71. package/lib/actions/s3.js +2 -2
  72. package/lib/actions/search.d.ts +3 -0
  73. package/lib/actions/search.js +3 -3
  74. package/lib/actions/sms.d.ts +2 -0
  75. package/lib/actions/sms.js +2 -2
  76. package/lib/actions/statistics.d.ts +4 -0
  77. package/lib/actions/statistics.js +4 -4
  78. package/lib/actions/subscriptions.d.ts +7 -0
  79. package/lib/actions/subscriptions.js +6 -6
  80. package/lib/actions/tags.d.ts +34 -0
  81. package/lib/actions/tags.js +6 -6
  82. package/lib/actions/users.d.ts +73 -0
  83. package/lib/actions/users.js +45 -42
  84. package/lib/actions/websockets.d.ts +20 -0
  85. package/lib/actions/websockets.js +8 -8
  86. package/lib/adapters/arangoAdapter.d.ts +8 -0
  87. package/lib/adapters/arangoAdapter.js +2 -2
  88. package/lib/adapters/contentAdapter.d.ts +8 -0
  89. package/lib/adapters/contentAdapter.js +2 -2
  90. package/lib/adapters/fileAdapter.d.ts +9 -0
  91. package/lib/adapters/fileAdapter.js +2 -2
  92. package/lib/adapters/imageAdapter.d.ts +8 -0
  93. package/lib/adapters/imageAdapter.js +2 -2
  94. package/lib/adapters/index.d.ts +9 -0
  95. package/lib/adapters/index.js +2 -0
  96. package/lib/adapters/messageAdapter.d.ts +8 -0
  97. package/lib/adapters/messageAdapter.js +2 -2
  98. package/lib/adapters/postAdapter.d.ts +8 -0
  99. package/lib/adapters/postAdapter.js +2 -2
  100. package/lib/adapters/reaktorAdapter.d.ts +16 -0
  101. package/lib/adapters/reaktorAdapter.js +2 -2
  102. package/lib/adapters/tagAdapter.d.ts +9 -0
  103. package/lib/adapters/tagAdapter.js +2 -2
  104. package/lib/adapters/userAdapter.d.ts +13 -0
  105. package/lib/adapters/userAdapter.js +2 -2
  106. package/lib/config.d.ts +57 -0
  107. package/lib/config.js +2 -2
  108. package/lib/handlers/graphqlHandler.d.ts +4 -0
  109. package/lib/handlers/graphqlHandler.js +2 -2
  110. package/lib/index.d.ts +19 -0
  111. package/lib/index.js +2 -2
  112. package/lib/lambdas/actions/websockets.d.ts +7 -0
  113. package/lib/lambdas/actions/websockets.js +6 -6
  114. package/lib/lambdas/authorizer.d.ts +20 -0
  115. package/lib/lambdas/authorizer.js +2 -2
  116. package/lib/lambdas/connection.d.ts +12 -0
  117. package/lib/lambdas/connection.js +2 -2
  118. package/lib/lambdas/utils/message.d.ts +1 -0
  119. package/lib/lambdas/utils/websocket.d.ts +7 -0
  120. package/lib/lambdas/utils/websocket.js +2 -2
  121. package/lib/mocks/conversation.d.ts +8 -0
  122. package/lib/mocks/file.d.ts +11 -0
  123. package/lib/mocks/group.d.ts +17 -0
  124. package/lib/mocks/group.js +2 -2
  125. package/lib/mocks/image.d.ts +3 -0
  126. package/lib/mocks/image.js +2 -2
  127. package/lib/mocks/post.d.ts +38 -0
  128. package/lib/mocks/post.js +2 -2
  129. package/lib/mocks/tag.d.ts +2 -0
  130. package/lib/mocks/tag.js +1 -1
  131. package/lib/mocks/user.d.ts +4 -0
  132. package/lib/mocks/user.js +2 -2
  133. package/lib/mutations/content.d.ts +2 -0
  134. package/lib/mutations/content.js +2 -0
  135. package/lib/mutations/index.d.ts +11 -0
  136. package/lib/mutations/index.js +2 -2
  137. package/lib/mutations/locations.d.ts +2 -0
  138. package/lib/mutations/locations.js +2 -2
  139. package/lib/mutations/messages.d.ts +2 -0
  140. package/lib/mutations/messages.js +2 -2
  141. package/lib/mutations/posts.d.ts +2 -0
  142. package/lib/mutations/posts.js +2 -2
  143. package/lib/mutations/profiles.d.ts +2 -0
  144. package/lib/mutations/profiles.js +2 -2
  145. package/lib/mutations/reactions.d.ts +2 -0
  146. package/lib/mutations/reactions.js +2 -2
  147. package/lib/mutations/statistics.d.ts +2 -0
  148. package/lib/mutations/statistics.js +2 -2
  149. package/lib/mutations/subscriptions.d.ts +2 -0
  150. package/lib/mutations/subscriptions.js +2 -2
  151. package/lib/mutations/tags.d.ts +2 -0
  152. package/lib/mutations/tags.js +2 -2
  153. package/lib/mutations/users.d.ts +1 -0
  154. package/lib/mutations/users.js +2 -2
  155. package/lib/objectTypes/app.d.ts +3 -0
  156. package/lib/objectTypes/app.js +2 -2
  157. package/lib/objectTypes/bankAccount.d.ts +1 -0
  158. package/lib/objectTypes/connection.d.ts +1 -0
  159. package/lib/objectTypes/connection.js +2 -2
  160. package/lib/objectTypes/content.d.ts +2 -0
  161. package/lib/objectTypes/content.js +2 -0
  162. package/lib/objectTypes/conversation.d.ts +2 -0
  163. package/lib/objectTypes/conversation.js +2 -2
  164. package/lib/objectTypes/creditCard.d.ts +1 -0
  165. package/lib/objectTypes/document.d.ts +1 -0
  166. package/lib/objectTypes/error.d.ts +1 -0
  167. package/lib/objectTypes/external.d.ts +1 -0
  168. package/lib/objectTypes/external.js +2 -2
  169. package/lib/objectTypes/file.d.ts +2 -0
  170. package/lib/objectTypes/file.js +2 -2
  171. package/lib/objectTypes/filter.d.ts +1 -0
  172. package/lib/objectTypes/group.d.ts +3 -0
  173. package/lib/objectTypes/group.js +2 -2
  174. package/lib/objectTypes/iapSubscription.d.ts +1 -0
  175. package/lib/objectTypes/image.d.ts +6 -0
  176. package/lib/objectTypes/image.js +2 -2
  177. package/lib/objectTypes/index.d.ts +26 -0
  178. package/lib/objectTypes/index.js +2 -2
  179. package/lib/objectTypes/location.d.ts +2 -0
  180. package/lib/objectTypes/location.js +2 -2
  181. package/lib/objectTypes/message.d.ts +2 -0
  182. package/lib/objectTypes/message.js +2 -2
  183. package/lib/objectTypes/passcode.d.ts +1 -0
  184. package/lib/objectTypes/passcode.js +2 -2
  185. package/lib/objectTypes/plan.d.ts +2 -0
  186. package/lib/objectTypes/plan.js +2 -2
  187. package/lib/objectTypes/post.d.ts +2 -0
  188. package/lib/objectTypes/post.js +2 -2
  189. package/lib/objectTypes/profile.d.ts +3 -0
  190. package/lib/objectTypes/profile.js +2 -2
  191. package/lib/objectTypes/reaction.d.ts +2 -0
  192. package/lib/objectTypes/reaction.js +2 -2
  193. package/lib/objectTypes/relation.d.ts +1 -0
  194. package/lib/objectTypes/relation.js +2 -2
  195. package/lib/objectTypes/search.d.ts +1 -0
  196. package/lib/objectTypes/search.js +2 -2
  197. package/lib/objectTypes/statistics.d.ts +1 -0
  198. package/lib/objectTypes/statistics.js +2 -2
  199. package/lib/objectTypes/subscription.d.ts +2 -0
  200. package/lib/objectTypes/subscription.js +2 -2
  201. package/lib/objectTypes/tag.d.ts +2 -0
  202. package/lib/objectTypes/tag.js +2 -2
  203. package/lib/objectTypes/user.d.ts +4 -0
  204. package/lib/objectTypes/user.js +2 -2
  205. package/lib/queries/content.d.ts +2 -0
  206. package/lib/queries/content.js +2 -0
  207. package/lib/queries/index.d.ts +10 -0
  208. package/lib/queries/index.js +2 -2
  209. package/lib/queries/locations.d.ts +2 -0
  210. package/lib/queries/locations.js +2 -2
  211. package/lib/queries/messages.d.ts +2 -0
  212. package/lib/queries/messages.js +2 -2
  213. package/lib/queries/posts.d.ts +2 -0
  214. package/lib/queries/posts.js +2 -2
  215. package/lib/queries/reactions.d.ts +2 -0
  216. package/lib/queries/reactions.js +2 -2
  217. package/lib/queries/statistics.d.ts +2 -0
  218. package/lib/queries/statistics.js +2 -2
  219. package/lib/queries/subscriptions.d.ts +2 -0
  220. package/lib/queries/subscriptions.js +2 -2
  221. package/lib/queries/tags.d.ts +2 -0
  222. package/lib/queries/tags.js +2 -2
  223. package/lib/queries/users.d.ts +1 -0
  224. package/lib/queries/users.js +2 -2
  225. package/lib/templates/email/layout.d.ts +2 -0
  226. package/lib/templates/email/passwordForgot.d.ts +2 -0
  227. package/lib/templates/email/passwordRecovery.d.ts +2 -0
  228. package/lib/templates/email/verifyEmail.d.ts +2 -0
  229. package/lib/templates/email/welcome.d.ts +2 -0
  230. package/lib/templates/sms/passwordForgot.d.ts +2 -0
  231. package/lib/templates/sms/passwordRecovery.d.ts +2 -0
  232. package/lib/templates/sms/verifyEmail.d.ts +2 -0
  233. package/lib/templates/sms/verifyPhone.d.ts +2 -0
  234. package/lib/templates/sms/welcome.d.ts +2 -0
  235. package/lib/types/apps.types.d.ts +50 -0
  236. package/lib/types/apps.types.js +1 -1
  237. package/lib/types/arangodb.types.d.ts +38 -0
  238. package/lib/types/auth.types.d.ts +15 -0
  239. package/lib/types/connections.types.d.ts +9 -0
  240. package/lib/types/content.types.d.ts +31 -0
  241. package/lib/types/conversations.types.d.ts +31 -0
  242. package/lib/types/email.types.d.ts +17 -0
  243. package/lib/types/error.types.d.ts +21 -0
  244. package/lib/types/files.types.d.ts +27 -0
  245. package/lib/types/google.types.d.ts +33 -0
  246. package/lib/types/groups.types.d.ts +22 -0
  247. package/lib/types/images.types.d.ts +56 -0
  248. package/lib/types/index.d.ts +26 -0
  249. package/lib/types/index.js +2 -2
  250. package/lib/types/locations.types.d.ts +22 -0
  251. package/lib/types/messages.types.d.ts +20 -0
  252. package/lib/types/notifications.types.d.ts +23 -0
  253. package/lib/types/payments.types.d.ts +113 -0
  254. package/lib/types/posts.types.d.ts +32 -0
  255. package/lib/types/profiles.types.d.ts +20 -0
  256. package/lib/types/statistics.types.d.ts +3 -0
  257. package/lib/types/tags.types.d.ts +19 -0
  258. package/lib/types/users.types.d.ts +110 -0
  259. package/lib/types/websockets.types.d.ts +22 -0
  260. package/lib/utils/adapterUtils.d.ts +5 -0
  261. package/lib/utils/analyticsUtils.d.ts +25 -0
  262. package/lib/utils/analyticsUtils.js +2 -2
  263. package/lib/utils/arangodbUtils.d.ts +70 -0
  264. package/lib/utils/arangodbUtils.js +3 -3
  265. package/lib/utils/authUtils.d.ts +23 -0
  266. package/lib/utils/authUtils.js +2 -2
  267. package/lib/utils/contextUtils.d.ts +3 -0
  268. package/lib/utils/contextUtils.js +1 -1
  269. package/lib/utils/dbI18n.d.ts +10 -0
  270. package/lib/utils/dbI18n.example.d.ts +20 -0
  271. package/lib/utils/dbI18n.example.js +3 -3
  272. package/lib/utils/dbI18n.js +2 -2
  273. package/lib/utils/googleTranslate.d.ts +6 -0
  274. package/lib/utils/googleTranslate.js +2 -2
  275. package/lib/utils/graphqlUtils.d.ts +10 -0
  276. package/lib/utils/graphqlUtils.js +2 -2
  277. package/lib/utils/index.d.ts +18 -0
  278. package/lib/utils/index.js +2 -2
  279. package/lib/utils/languageDetection.d.ts +8 -0
  280. package/lib/utils/languageDetection.js +1 -1
  281. package/lib/utils/localeUtils.d.ts +11 -0
  282. package/lib/utils/localeUtils.example.d.ts +5 -0
  283. package/lib/utils/localeUtils.example.js +2 -2
  284. package/lib/utils/localeUtils.js +1 -1
  285. package/lib/utils/middlewareUtils.d.ts +2 -0
  286. package/lib/utils/middlewareUtils.js +2 -2
  287. package/lib/utils/sessionUtils.d.ts +18 -0
  288. package/lib/utils/sessionUtils.js +2 -2
  289. package/lib/utils/stripeUtils.d.ts +7 -0
  290. package/lib/utils/stripeUtils.js +2 -2
  291. package/lib/utils/templateUtils.d.ts +3 -0
  292. package/lib/utils/testUtils.d.ts +95 -0
  293. package/lib/utils/testUtils.js +2 -2
  294. package/lib/utils/translationQueue.d.ts +29 -0
  295. package/lib/utils/translationQueue.example.d.ts +33 -0
  296. package/lib/utils/translationQueue.example.js +2 -2
  297. package/lib/utils/translationQueue.js +2 -2
  298. package/package.json +22 -21
  299. package/tsconfig.build.json +21 -0
  300. package/tsconfig.lint.json +33 -0
  301. package/tsconfig.test.json +31 -0
  302. package/dist/actions/apps.js +0 -242
  303. package/dist/actions/connections.js +0 -90
  304. package/dist/actions/conversations.js +0 -350
  305. package/dist/actions/dynamodb.js +0 -150
  306. package/dist/actions/email.js +0 -152
  307. package/dist/actions/files.js +0 -283
  308. package/dist/actions/groups.js +0 -292
  309. package/dist/actions/images.js +0 -735
  310. package/dist/actions/index.js +0 -66
  311. package/dist/actions/ios.js +0 -164
  312. package/dist/actions/locations.js +0 -122
  313. package/dist/actions/messages.js +0 -208
  314. package/dist/actions/notifications.js +0 -59
  315. package/dist/actions/payments.js +0 -497
  316. package/dist/actions/personas.js +0 -110
  317. package/dist/actions/posts.js +0 -595
  318. package/dist/actions/reactions.js +0 -322
  319. package/dist/actions/s3.js +0 -133
  320. package/dist/actions/search.js +0 -90
  321. package/dist/actions/sms.js +0 -108
  322. package/dist/actions/statistics.js +0 -62
  323. package/dist/actions/subscription.js +0 -220
  324. package/dist/actions/tags.js +0 -292
  325. package/dist/actions/users.js +0 -784
  326. package/dist/actions/websockets.js +0 -174
  327. package/dist/adapters/arangoAdapter.js +0 -46
  328. package/dist/adapters/fileAdapter.js +0 -76
  329. package/dist/adapters/imageAdapter.js +0 -40
  330. package/dist/adapters/messageAdapter.js +0 -49
  331. package/dist/adapters/postAdapter.js +0 -70
  332. package/dist/adapters/reaktorAdapter.js +0 -44
  333. package/dist/adapters/tagAdapter.js +0 -50
  334. package/dist/adapters/userAdapter.js +0 -115
  335. package/dist/config.js +0 -125
  336. package/dist/index.js +0 -66
  337. package/dist/lambdas/actions/websockets.js +0 -132
  338. package/dist/lambdas/authorizer.js +0 -67
  339. package/dist/lambdas/connection.js +0 -91
  340. package/dist/lambdas/utils/message.js +0 -42
  341. package/dist/lambdas/utils/websocket.js +0 -105
  342. package/dist/mocks/conversation.js +0 -35
  343. package/dist/mocks/file.js +0 -38
  344. package/dist/mocks/group.js +0 -47
  345. package/dist/mocks/image.js +0 -44
  346. package/dist/mocks/nlabs.png +0 -0
  347. package/dist/mocks/post.js +0 -55
  348. package/dist/mocks/tag.js +0 -37
  349. package/dist/mocks/user.js +0 -88
  350. package/dist/mutations/index.js +0 -26
  351. package/dist/mutations/locations.js +0 -44
  352. package/dist/mutations/messages.js +0 -86
  353. package/dist/mutations/personas.js +0 -100
  354. package/dist/mutations/posts.js +0 -53
  355. package/dist/mutations/reactions.js +0 -51
  356. package/dist/mutations/statistics.js +0 -39
  357. package/dist/mutations/subscriptions.js +0 -56
  358. package/dist/mutations/tags.js +0 -120
  359. package/dist/mutations/users.js +0 -116
  360. package/dist/objectTypes/app.js +0 -173
  361. package/dist/objectTypes/bankAccount.js +0 -76
  362. package/dist/objectTypes/connection.js +0 -48
  363. package/dist/objectTypes/conversation.js +0 -77
  364. package/dist/objectTypes/creditCard.js +0 -86
  365. package/dist/objectTypes/document.js +0 -46
  366. package/dist/objectTypes/error.js +0 -46
  367. package/dist/objectTypes/external.js +0 -74
  368. package/dist/objectTypes/file.js +0 -100
  369. package/dist/objectTypes/filter.js +0 -43
  370. package/dist/objectTypes/group.js +0 -123
  371. package/dist/objectTypes/iapSubscription.js +0 -40
  372. package/dist/objectTypes/image.js +0 -129
  373. package/dist/objectTypes/index.js +0 -68
  374. package/dist/objectTypes/location.js +0 -109
  375. package/dist/objectTypes/message.js +0 -96
  376. package/dist/objectTypes/passcode.js +0 -42
  377. package/dist/objectTypes/persona.js +0 -87
  378. package/dist/objectTypes/plan.js +0 -95
  379. package/dist/objectTypes/post.js +0 -125
  380. package/dist/objectTypes/reaction.js +0 -61
  381. package/dist/objectTypes/relation.js +0 -49
  382. package/dist/objectTypes/search.js +0 -72
  383. package/dist/objectTypes/statistics.js +0 -39
  384. package/dist/objectTypes/subscription.js +0 -117
  385. package/dist/objectTypes/tag.js +0 -65
  386. package/dist/objectTypes/user.js +0 -144
  387. package/dist/queries/index.js +0 -33
  388. package/dist/queries/locations.js +0 -45
  389. package/dist/queries/messages.js +0 -52
  390. package/dist/queries/posts.js +0 -154
  391. package/dist/queries/reactions.js +0 -56
  392. package/dist/queries/statistics.js +0 -39
  393. package/dist/queries/subscriptions.js +0 -44
  394. package/dist/queries/tags.js +0 -75
  395. package/dist/queries/users.js +0 -64
  396. package/dist/templates/email/layout.js +0 -302
  397. package/dist/templates/email/passwordForgot.js +0 -38
  398. package/dist/templates/email/passwordRecovery.js +0 -35
  399. package/dist/templates/email/verifyEmail.js +0 -38
  400. package/dist/templates/email/welcome.js +0 -38
  401. package/dist/templates/sms/passwordForgot.js +0 -24
  402. package/dist/templates/sms/passwordRecovery.js +0 -24
  403. package/dist/templates/sms/verifyEmail.js +0 -24
  404. package/dist/templates/sms/verifyPhone.js +0 -24
  405. package/dist/templates/sms/welcome.js +0 -24
  406. package/dist/types/apps.js +0 -32
  407. package/dist/types/arangodb.js +0 -16
  408. package/dist/types/auth.js +0 -16
  409. package/dist/types/connections.js +0 -16
  410. package/dist/types/conversations.js +0 -16
  411. package/dist/types/email.js +0 -16
  412. package/dist/types/error.js +0 -44
  413. package/dist/types/files.js +0 -16
  414. package/dist/types/google.js +0 -16
  415. package/dist/types/groups.js +0 -16
  416. package/dist/types/images.js +0 -16
  417. package/dist/types/index.js +0 -60
  418. package/dist/types/locations.js +0 -16
  419. package/dist/types/messages.js +0 -16
  420. package/dist/types/notifications.js +0 -16
  421. package/dist/types/payments.js +0 -16
  422. package/dist/types/personas.js +0 -16
  423. package/dist/types/posts.js +0 -16
  424. package/dist/types/statistics.js +0 -16
  425. package/dist/types/tags.js +0 -16
  426. package/dist/types/users.js +0 -16
  427. package/dist/types/websockets.js +0 -16
  428. package/dist/utils/adapterUtils.js +0 -45
  429. package/dist/utils/analyticsUtils.js +0 -72
  430. package/dist/utils/arangodbUtils.js +0 -165
  431. package/dist/utils/auth.js +0 -57
  432. package/dist/utils/index.js +0 -30
  433. package/dist/utils/session.js +0 -60
  434. package/jest.config.js +0 -17
  435. package/jest.setup.js +0 -36
  436. package/lex.config.cjs +0 -13
  437. package/lib/mutations/locations.integration.js +0 -2
  438. package/lib/mutations/messages.integration.js +0 -2
  439. package/lib/mutations/posts.integration.js +0 -2
  440. package/lib/mutations/profiles.integration.js +0 -2
  441. package/lib/mutations/reactions.integration.js +0 -2
  442. package/lib/mutations/statistics.integration.js +0 -2
  443. package/lib/mutations/subscriptions.integration.js +0 -2
  444. package/lib/mutations/tags.integration.js +0 -2
  445. package/lib/mutations/users.integration.js +0 -2
  446. package/lib/queries/locations.integration.js +0 -2
  447. package/lib/queries/messages.integration.js +0 -2
  448. package/lib/queries/posts.integration.js +0 -2
  449. package/lib/queries/reactions.integration.js +0 -2
  450. package/lib/queries/tags.integration.js +0 -2
  451. package/lib/queries/users.integration.js +0 -2
@@ -0,0 +1,2356 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for actions/posts.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../prettify.css" />
9
+ <link rel="stylesheet" href="../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../index.html">All files</a> / <a href="index.html">actions</a> posts.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">97% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>227/234</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">83.89% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>99/118</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">98.03% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>50/51</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">96.95% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>223/230</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a>
442
+ <a name='L377'></a><a href='#L377'>377</a>
443
+ <a name='L378'></a><a href='#L378'>378</a>
444
+ <a name='L379'></a><a href='#L379'>379</a>
445
+ <a name='L380'></a><a href='#L380'>380</a>
446
+ <a name='L381'></a><a href='#L381'>381</a>
447
+ <a name='L382'></a><a href='#L382'>382</a>
448
+ <a name='L383'></a><a href='#L383'>383</a>
449
+ <a name='L384'></a><a href='#L384'>384</a>
450
+ <a name='L385'></a><a href='#L385'>385</a>
451
+ <a name='L386'></a><a href='#L386'>386</a>
452
+ <a name='L387'></a><a href='#L387'>387</a>
453
+ <a name='L388'></a><a href='#L388'>388</a>
454
+ <a name='L389'></a><a href='#L389'>389</a>
455
+ <a name='L390'></a><a href='#L390'>390</a>
456
+ <a name='L391'></a><a href='#L391'>391</a>
457
+ <a name='L392'></a><a href='#L392'>392</a>
458
+ <a name='L393'></a><a href='#L393'>393</a>
459
+ <a name='L394'></a><a href='#L394'>394</a>
460
+ <a name='L395'></a><a href='#L395'>395</a>
461
+ <a name='L396'></a><a href='#L396'>396</a>
462
+ <a name='L397'></a><a href='#L397'>397</a>
463
+ <a name='L398'></a><a href='#L398'>398</a>
464
+ <a name='L399'></a><a href='#L399'>399</a>
465
+ <a name='L400'></a><a href='#L400'>400</a>
466
+ <a name='L401'></a><a href='#L401'>401</a>
467
+ <a name='L402'></a><a href='#L402'>402</a>
468
+ <a name='L403'></a><a href='#L403'>403</a>
469
+ <a name='L404'></a><a href='#L404'>404</a>
470
+ <a name='L405'></a><a href='#L405'>405</a>
471
+ <a name='L406'></a><a href='#L406'>406</a>
472
+ <a name='L407'></a><a href='#L407'>407</a>
473
+ <a name='L408'></a><a href='#L408'>408</a>
474
+ <a name='L409'></a><a href='#L409'>409</a>
475
+ <a name='L410'></a><a href='#L410'>410</a>
476
+ <a name='L411'></a><a href='#L411'>411</a>
477
+ <a name='L412'></a><a href='#L412'>412</a>
478
+ <a name='L413'></a><a href='#L413'>413</a>
479
+ <a name='L414'></a><a href='#L414'>414</a>
480
+ <a name='L415'></a><a href='#L415'>415</a>
481
+ <a name='L416'></a><a href='#L416'>416</a>
482
+ <a name='L417'></a><a href='#L417'>417</a>
483
+ <a name='L418'></a><a href='#L418'>418</a>
484
+ <a name='L419'></a><a href='#L419'>419</a>
485
+ <a name='L420'></a><a href='#L420'>420</a>
486
+ <a name='L421'></a><a href='#L421'>421</a>
487
+ <a name='L422'></a><a href='#L422'>422</a>
488
+ <a name='L423'></a><a href='#L423'>423</a>
489
+ <a name='L424'></a><a href='#L424'>424</a>
490
+ <a name='L425'></a><a href='#L425'>425</a>
491
+ <a name='L426'></a><a href='#L426'>426</a>
492
+ <a name='L427'></a><a href='#L427'>427</a>
493
+ <a name='L428'></a><a href='#L428'>428</a>
494
+ <a name='L429'></a><a href='#L429'>429</a>
495
+ <a name='L430'></a><a href='#L430'>430</a>
496
+ <a name='L431'></a><a href='#L431'>431</a>
497
+ <a name='L432'></a><a href='#L432'>432</a>
498
+ <a name='L433'></a><a href='#L433'>433</a>
499
+ <a name='L434'></a><a href='#L434'>434</a>
500
+ <a name='L435'></a><a href='#L435'>435</a>
501
+ <a name='L436'></a><a href='#L436'>436</a>
502
+ <a name='L437'></a><a href='#L437'>437</a>
503
+ <a name='L438'></a><a href='#L438'>438</a>
504
+ <a name='L439'></a><a href='#L439'>439</a>
505
+ <a name='L440'></a><a href='#L440'>440</a>
506
+ <a name='L441'></a><a href='#L441'>441</a>
507
+ <a name='L442'></a><a href='#L442'>442</a>
508
+ <a name='L443'></a><a href='#L443'>443</a>
509
+ <a name='L444'></a><a href='#L444'>444</a>
510
+ <a name='L445'></a><a href='#L445'>445</a>
511
+ <a name='L446'></a><a href='#L446'>446</a>
512
+ <a name='L447'></a><a href='#L447'>447</a>
513
+ <a name='L448'></a><a href='#L448'>448</a>
514
+ <a name='L449'></a><a href='#L449'>449</a>
515
+ <a name='L450'></a><a href='#L450'>450</a>
516
+ <a name='L451'></a><a href='#L451'>451</a>
517
+ <a name='L452'></a><a href='#L452'>452</a>
518
+ <a name='L453'></a><a href='#L453'>453</a>
519
+ <a name='L454'></a><a href='#L454'>454</a>
520
+ <a name='L455'></a><a href='#L455'>455</a>
521
+ <a name='L456'></a><a href='#L456'>456</a>
522
+ <a name='L457'></a><a href='#L457'>457</a>
523
+ <a name='L458'></a><a href='#L458'>458</a>
524
+ <a name='L459'></a><a href='#L459'>459</a>
525
+ <a name='L460'></a><a href='#L460'>460</a>
526
+ <a name='L461'></a><a href='#L461'>461</a>
527
+ <a name='L462'></a><a href='#L462'>462</a>
528
+ <a name='L463'></a><a href='#L463'>463</a>
529
+ <a name='L464'></a><a href='#L464'>464</a>
530
+ <a name='L465'></a><a href='#L465'>465</a>
531
+ <a name='L466'></a><a href='#L466'>466</a>
532
+ <a name='L467'></a><a href='#L467'>467</a>
533
+ <a name='L468'></a><a href='#L468'>468</a>
534
+ <a name='L469'></a><a href='#L469'>469</a>
535
+ <a name='L470'></a><a href='#L470'>470</a>
536
+ <a name='L471'></a><a href='#L471'>471</a>
537
+ <a name='L472'></a><a href='#L472'>472</a>
538
+ <a name='L473'></a><a href='#L473'>473</a>
539
+ <a name='L474'></a><a href='#L474'>474</a>
540
+ <a name='L475'></a><a href='#L475'>475</a>
541
+ <a name='L476'></a><a href='#L476'>476</a>
542
+ <a name='L477'></a><a href='#L477'>477</a>
543
+ <a name='L478'></a><a href='#L478'>478</a>
544
+ <a name='L479'></a><a href='#L479'>479</a>
545
+ <a name='L480'></a><a href='#L480'>480</a>
546
+ <a name='L481'></a><a href='#L481'>481</a>
547
+ <a name='L482'></a><a href='#L482'>482</a>
548
+ <a name='L483'></a><a href='#L483'>483</a>
549
+ <a name='L484'></a><a href='#L484'>484</a>
550
+ <a name='L485'></a><a href='#L485'>485</a>
551
+ <a name='L486'></a><a href='#L486'>486</a>
552
+ <a name='L487'></a><a href='#L487'>487</a>
553
+ <a name='L488'></a><a href='#L488'>488</a>
554
+ <a name='L489'></a><a href='#L489'>489</a>
555
+ <a name='L490'></a><a href='#L490'>490</a>
556
+ <a name='L491'></a><a href='#L491'>491</a>
557
+ <a name='L492'></a><a href='#L492'>492</a>
558
+ <a name='L493'></a><a href='#L493'>493</a>
559
+ <a name='L494'></a><a href='#L494'>494</a>
560
+ <a name='L495'></a><a href='#L495'>495</a>
561
+ <a name='L496'></a><a href='#L496'>496</a>
562
+ <a name='L497'></a><a href='#L497'>497</a>
563
+ <a name='L498'></a><a href='#L498'>498</a>
564
+ <a name='L499'></a><a href='#L499'>499</a>
565
+ <a name='L500'></a><a href='#L500'>500</a>
566
+ <a name='L501'></a><a href='#L501'>501</a>
567
+ <a name='L502'></a><a href='#L502'>502</a>
568
+ <a name='L503'></a><a href='#L503'>503</a>
569
+ <a name='L504'></a><a href='#L504'>504</a>
570
+ <a name='L505'></a><a href='#L505'>505</a>
571
+ <a name='L506'></a><a href='#L506'>506</a>
572
+ <a name='L507'></a><a href='#L507'>507</a>
573
+ <a name='L508'></a><a href='#L508'>508</a>
574
+ <a name='L509'></a><a href='#L509'>509</a>
575
+ <a name='L510'></a><a href='#L510'>510</a>
576
+ <a name='L511'></a><a href='#L511'>511</a>
577
+ <a name='L512'></a><a href='#L512'>512</a>
578
+ <a name='L513'></a><a href='#L513'>513</a>
579
+ <a name='L514'></a><a href='#L514'>514</a>
580
+ <a name='L515'></a><a href='#L515'>515</a>
581
+ <a name='L516'></a><a href='#L516'>516</a>
582
+ <a name='L517'></a><a href='#L517'>517</a>
583
+ <a name='L518'></a><a href='#L518'>518</a>
584
+ <a name='L519'></a><a href='#L519'>519</a>
585
+ <a name='L520'></a><a href='#L520'>520</a>
586
+ <a name='L521'></a><a href='#L521'>521</a>
587
+ <a name='L522'></a><a href='#L522'>522</a>
588
+ <a name='L523'></a><a href='#L523'>523</a>
589
+ <a name='L524'></a><a href='#L524'>524</a>
590
+ <a name='L525'></a><a href='#L525'>525</a>
591
+ <a name='L526'></a><a href='#L526'>526</a>
592
+ <a name='L527'></a><a href='#L527'>527</a>
593
+ <a name='L528'></a><a href='#L528'>528</a>
594
+ <a name='L529'></a><a href='#L529'>529</a>
595
+ <a name='L530'></a><a href='#L530'>530</a>
596
+ <a name='L531'></a><a href='#L531'>531</a>
597
+ <a name='L532'></a><a href='#L532'>532</a>
598
+ <a name='L533'></a><a href='#L533'>533</a>
599
+ <a name='L534'></a><a href='#L534'>534</a>
600
+ <a name='L535'></a><a href='#L535'>535</a>
601
+ <a name='L536'></a><a href='#L536'>536</a>
602
+ <a name='L537'></a><a href='#L537'>537</a>
603
+ <a name='L538'></a><a href='#L538'>538</a>
604
+ <a name='L539'></a><a href='#L539'>539</a>
605
+ <a name='L540'></a><a href='#L540'>540</a>
606
+ <a name='L541'></a><a href='#L541'>541</a>
607
+ <a name='L542'></a><a href='#L542'>542</a>
608
+ <a name='L543'></a><a href='#L543'>543</a>
609
+ <a name='L544'></a><a href='#L544'>544</a>
610
+ <a name='L545'></a><a href='#L545'>545</a>
611
+ <a name='L546'></a><a href='#L546'>546</a>
612
+ <a name='L547'></a><a href='#L547'>547</a>
613
+ <a name='L548'></a><a href='#L548'>548</a>
614
+ <a name='L549'></a><a href='#L549'>549</a>
615
+ <a name='L550'></a><a href='#L550'>550</a>
616
+ <a name='L551'></a><a href='#L551'>551</a>
617
+ <a name='L552'></a><a href='#L552'>552</a>
618
+ <a name='L553'></a><a href='#L553'>553</a>
619
+ <a name='L554'></a><a href='#L554'>554</a>
620
+ <a name='L555'></a><a href='#L555'>555</a>
621
+ <a name='L556'></a><a href='#L556'>556</a>
622
+ <a name='L557'></a><a href='#L557'>557</a>
623
+ <a name='L558'></a><a href='#L558'>558</a>
624
+ <a name='L559'></a><a href='#L559'>559</a>
625
+ <a name='L560'></a><a href='#L560'>560</a>
626
+ <a name='L561'></a><a href='#L561'>561</a>
627
+ <a name='L562'></a><a href='#L562'>562</a>
628
+ <a name='L563'></a><a href='#L563'>563</a>
629
+ <a name='L564'></a><a href='#L564'>564</a>
630
+ <a name='L565'></a><a href='#L565'>565</a>
631
+ <a name='L566'></a><a href='#L566'>566</a>
632
+ <a name='L567'></a><a href='#L567'>567</a>
633
+ <a name='L568'></a><a href='#L568'>568</a>
634
+ <a name='L569'></a><a href='#L569'>569</a>
635
+ <a name='L570'></a><a href='#L570'>570</a>
636
+ <a name='L571'></a><a href='#L571'>571</a>
637
+ <a name='L572'></a><a href='#L572'>572</a>
638
+ <a name='L573'></a><a href='#L573'>573</a>
639
+ <a name='L574'></a><a href='#L574'>574</a>
640
+ <a name='L575'></a><a href='#L575'>575</a>
641
+ <a name='L576'></a><a href='#L576'>576</a>
642
+ <a name='L577'></a><a href='#L577'>577</a>
643
+ <a name='L578'></a><a href='#L578'>578</a>
644
+ <a name='L579'></a><a href='#L579'>579</a>
645
+ <a name='L580'></a><a href='#L580'>580</a>
646
+ <a name='L581'></a><a href='#L581'>581</a>
647
+ <a name='L582'></a><a href='#L582'>582</a>
648
+ <a name='L583'></a><a href='#L583'>583</a>
649
+ <a name='L584'></a><a href='#L584'>584</a>
650
+ <a name='L585'></a><a href='#L585'>585</a>
651
+ <a name='L586'></a><a href='#L586'>586</a>
652
+ <a name='L587'></a><a href='#L587'>587</a>
653
+ <a name='L588'></a><a href='#L588'>588</a>
654
+ <a name='L589'></a><a href='#L589'>589</a>
655
+ <a name='L590'></a><a href='#L590'>590</a>
656
+ <a name='L591'></a><a href='#L591'>591</a>
657
+ <a name='L592'></a><a href='#L592'>592</a>
658
+ <a name='L593'></a><a href='#L593'>593</a>
659
+ <a name='L594'></a><a href='#L594'>594</a>
660
+ <a name='L595'></a><a href='#L595'>595</a>
661
+ <a name='L596'></a><a href='#L596'>596</a>
662
+ <a name='L597'></a><a href='#L597'>597</a>
663
+ <a name='L598'></a><a href='#L598'>598</a>
664
+ <a name='L599'></a><a href='#L599'>599</a>
665
+ <a name='L600'></a><a href='#L600'>600</a>
666
+ <a name='L601'></a><a href='#L601'>601</a>
667
+ <a name='L602'></a><a href='#L602'>602</a>
668
+ <a name='L603'></a><a href='#L603'>603</a>
669
+ <a name='L604'></a><a href='#L604'>604</a>
670
+ <a name='L605'></a><a href='#L605'>605</a>
671
+ <a name='L606'></a><a href='#L606'>606</a>
672
+ <a name='L607'></a><a href='#L607'>607</a>
673
+ <a name='L608'></a><a href='#L608'>608</a>
674
+ <a name='L609'></a><a href='#L609'>609</a>
675
+ <a name='L610'></a><a href='#L610'>610</a>
676
+ <a name='L611'></a><a href='#L611'>611</a>
677
+ <a name='L612'></a><a href='#L612'>612</a>
678
+ <a name='L613'></a><a href='#L613'>613</a>
679
+ <a name='L614'></a><a href='#L614'>614</a>
680
+ <a name='L615'></a><a href='#L615'>615</a>
681
+ <a name='L616'></a><a href='#L616'>616</a>
682
+ <a name='L617'></a><a href='#L617'>617</a>
683
+ <a name='L618'></a><a href='#L618'>618</a>
684
+ <a name='L619'></a><a href='#L619'>619</a>
685
+ <a name='L620'></a><a href='#L620'>620</a>
686
+ <a name='L621'></a><a href='#L621'>621</a>
687
+ <a name='L622'></a><a href='#L622'>622</a>
688
+ <a name='L623'></a><a href='#L623'>623</a>
689
+ <a name='L624'></a><a href='#L624'>624</a>
690
+ <a name='L625'></a><a href='#L625'>625</a>
691
+ <a name='L626'></a><a href='#L626'>626</a>
692
+ <a name='L627'></a><a href='#L627'>627</a>
693
+ <a name='L628'></a><a href='#L628'>628</a>
694
+ <a name='L629'></a><a href='#L629'>629</a>
695
+ <a name='L630'></a><a href='#L630'>630</a>
696
+ <a name='L631'></a><a href='#L631'>631</a>
697
+ <a name='L632'></a><a href='#L632'>632</a>
698
+ <a name='L633'></a><a href='#L633'>633</a>
699
+ <a name='L634'></a><a href='#L634'>634</a>
700
+ <a name='L635'></a><a href='#L635'>635</a>
701
+ <a name='L636'></a><a href='#L636'>636</a>
702
+ <a name='L637'></a><a href='#L637'>637</a>
703
+ <a name='L638'></a><a href='#L638'>638</a>
704
+ <a name='L639'></a><a href='#L639'>639</a>
705
+ <a name='L640'></a><a href='#L640'>640</a>
706
+ <a name='L641'></a><a href='#L641'>641</a>
707
+ <a name='L642'></a><a href='#L642'>642</a>
708
+ <a name='L643'></a><a href='#L643'>643</a>
709
+ <a name='L644'></a><a href='#L644'>644</a>
710
+ <a name='L645'></a><a href='#L645'>645</a>
711
+ <a name='L646'></a><a href='#L646'>646</a>
712
+ <a name='L647'></a><a href='#L647'>647</a>
713
+ <a name='L648'></a><a href='#L648'>648</a>
714
+ <a name='L649'></a><a href='#L649'>649</a>
715
+ <a name='L650'></a><a href='#L650'>650</a>
716
+ <a name='L651'></a><a href='#L651'>651</a>
717
+ <a name='L652'></a><a href='#L652'>652</a>
718
+ <a name='L653'></a><a href='#L653'>653</a>
719
+ <a name='L654'></a><a href='#L654'>654</a>
720
+ <a name='L655'></a><a href='#L655'>655</a>
721
+ <a name='L656'></a><a href='#L656'>656</a>
722
+ <a name='L657'></a><a href='#L657'>657</a>
723
+ <a name='L658'></a><a href='#L658'>658</a>
724
+ <a name='L659'></a><a href='#L659'>659</a>
725
+ <a name='L660'></a><a href='#L660'>660</a>
726
+ <a name='L661'></a><a href='#L661'>661</a>
727
+ <a name='L662'></a><a href='#L662'>662</a>
728
+ <a name='L663'></a><a href='#L663'>663</a>
729
+ <a name='L664'></a><a href='#L664'>664</a>
730
+ <a name='L665'></a><a href='#L665'>665</a>
731
+ <a name='L666'></a><a href='#L666'>666</a>
732
+ <a name='L667'></a><a href='#L667'>667</a>
733
+ <a name='L668'></a><a href='#L668'>668</a>
734
+ <a name='L669'></a><a href='#L669'>669</a>
735
+ <a name='L670'></a><a href='#L670'>670</a>
736
+ <a name='L671'></a><a href='#L671'>671</a>
737
+ <a name='L672'></a><a href='#L672'>672</a>
738
+ <a name='L673'></a><a href='#L673'>673</a>
739
+ <a name='L674'></a><a href='#L674'>674</a>
740
+ <a name='L675'></a><a href='#L675'>675</a>
741
+ <a name='L676'></a><a href='#L676'>676</a>
742
+ <a name='L677'></a><a href='#L677'>677</a>
743
+ <a name='L678'></a><a href='#L678'>678</a>
744
+ <a name='L679'></a><a href='#L679'>679</a>
745
+ <a name='L680'></a><a href='#L680'>680</a>
746
+ <a name='L681'></a><a href='#L681'>681</a>
747
+ <a name='L682'></a><a href='#L682'>682</a>
748
+ <a name='L683'></a><a href='#L683'>683</a>
749
+ <a name='L684'></a><a href='#L684'>684</a>
750
+ <a name='L685'></a><a href='#L685'>685</a>
751
+ <a name='L686'></a><a href='#L686'>686</a>
752
+ <a name='L687'></a><a href='#L687'>687</a>
753
+ <a name='L688'></a><a href='#L688'>688</a>
754
+ <a name='L689'></a><a href='#L689'>689</a>
755
+ <a name='L690'></a><a href='#L690'>690</a>
756
+ <a name='L691'></a><a href='#L691'>691</a>
757
+ <a name='L692'></a><a href='#L692'>692</a>
758
+ <a name='L693'></a><a href='#L693'>693</a>
759
+ <a name='L694'></a><a href='#L694'>694</a>
760
+ <a name='L695'></a><a href='#L695'>695</a>
761
+ <a name='L696'></a><a href='#L696'>696</a>
762
+ <a name='L697'></a><a href='#L697'>697</a>
763
+ <a name='L698'></a><a href='#L698'>698</a>
764
+ <a name='L699'></a><a href='#L699'>699</a>
765
+ <a name='L700'></a><a href='#L700'>700</a>
766
+ <a name='L701'></a><a href='#L701'>701</a>
767
+ <a name='L702'></a><a href='#L702'>702</a>
768
+ <a name='L703'></a><a href='#L703'>703</a>
769
+ <a name='L704'></a><a href='#L704'>704</a>
770
+ <a name='L705'></a><a href='#L705'>705</a>
771
+ <a name='L706'></a><a href='#L706'>706</a>
772
+ <a name='L707'></a><a href='#L707'>707</a>
773
+ <a name='L708'></a><a href='#L708'>708</a>
774
+ <a name='L709'></a><a href='#L709'>709</a>
775
+ <a name='L710'></a><a href='#L710'>710</a>
776
+ <a name='L711'></a><a href='#L711'>711</a>
777
+ <a name='L712'></a><a href='#L712'>712</a>
778
+ <a name='L713'></a><a href='#L713'>713</a>
779
+ <a name='L714'></a><a href='#L714'>714</a>
780
+ <a name='L715'></a><a href='#L715'>715</a>
781
+ <a name='L716'></a><a href='#L716'>716</a>
782
+ <a name='L717'></a><a href='#L717'>717</a>
783
+ <a name='L718'></a><a href='#L718'>718</a>
784
+ <a name='L719'></a><a href='#L719'>719</a>
785
+ <a name='L720'></a><a href='#L720'>720</a>
786
+ <a name='L721'></a><a href='#L721'>721</a>
787
+ <a name='L722'></a><a href='#L722'>722</a>
788
+ <a name='L723'></a><a href='#L723'>723</a>
789
+ <a name='L724'></a><a href='#L724'>724</a>
790
+ <a name='L725'></a><a href='#L725'>725</a>
791
+ <a name='L726'></a><a href='#L726'>726</a>
792
+ <a name='L727'></a><a href='#L727'>727</a>
793
+ <a name='L728'></a><a href='#L728'>728</a>
794
+ <a name='L729'></a><a href='#L729'>729</a>
795
+ <a name='L730'></a><a href='#L730'>730</a>
796
+ <a name='L731'></a><a href='#L731'>731</a>
797
+ <a name='L732'></a><a href='#L732'>732</a>
798
+ <a name='L733'></a><a href='#L733'>733</a>
799
+ <a name='L734'></a><a href='#L734'>734</a>
800
+ <a name='L735'></a><a href='#L735'>735</a>
801
+ <a name='L736'></a><a href='#L736'>736</a>
802
+ <a name='L737'></a><a href='#L737'>737</a>
803
+ <a name='L738'></a><a href='#L738'>738</a>
804
+ <a name='L739'></a><a href='#L739'>739</a>
805
+ <a name='L740'></a><a href='#L740'>740</a>
806
+ <a name='L741'></a><a href='#L741'>741</a>
807
+ <a name='L742'></a><a href='#L742'>742</a>
808
+ <a name='L743'></a><a href='#L743'>743</a>
809
+ <a name='L744'></a><a href='#L744'>744</a>
810
+ <a name='L745'></a><a href='#L745'>745</a>
811
+ <a name='L746'></a><a href='#L746'>746</a>
812
+ <a name='L747'></a><a href='#L747'>747</a>
813
+ <a name='L748'></a><a href='#L748'>748</a>
814
+ <a name='L749'></a><a href='#L749'>749</a>
815
+ <a name='L750'></a><a href='#L750'>750</a>
816
+ <a name='L751'></a><a href='#L751'>751</a>
817
+ <a name='L752'></a><a href='#L752'>752</a>
818
+ <a name='L753'></a><a href='#L753'>753</a>
819
+ <a name='L754'></a><a href='#L754'>754</a>
820
+ <a name='L755'></a><a href='#L755'>755</a>
821
+ <a name='L756'></a><a href='#L756'>756</a>
822
+ <a name='L757'></a><a href='#L757'>757</a>
823
+ <a name='L758'></a><a href='#L758'>758</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
824
+ <span class="cline-any cline-neutral">&nbsp;</span>
825
+ <span class="cline-any cline-neutral">&nbsp;</span>
826
+ <span class="cline-any cline-neutral">&nbsp;</span>
827
+ <span class="cline-any cline-neutral">&nbsp;</span>
828
+ <span class="cline-any cline-neutral">&nbsp;</span>
829
+ <span class="cline-any cline-neutral">&nbsp;</span>
830
+ <span class="cline-any cline-neutral">&nbsp;</span>
831
+ <span class="cline-any cline-neutral">&nbsp;</span>
832
+ <span class="cline-any cline-neutral">&nbsp;</span>
833
+ <span class="cline-any cline-neutral">&nbsp;</span>
834
+ <span class="cline-any cline-neutral">&nbsp;</span>
835
+ <span class="cline-any cline-neutral">&nbsp;</span>
836
+ <span class="cline-any cline-neutral">&nbsp;</span>
837
+ <span class="cline-any cline-neutral">&nbsp;</span>
838
+ <span class="cline-any cline-neutral">&nbsp;</span>
839
+ <span class="cline-any cline-neutral">&nbsp;</span>
840
+ <span class="cline-any cline-neutral">&nbsp;</span>
841
+ <span class="cline-any cline-neutral">&nbsp;</span>
842
+ <span class="cline-any cline-neutral">&nbsp;</span>
843
+ <span class="cline-any cline-neutral">&nbsp;</span>
844
+ <span class="cline-any cline-neutral">&nbsp;</span>
845
+ <span class="cline-any cline-neutral">&nbsp;</span>
846
+ <span class="cline-any cline-neutral">&nbsp;</span>
847
+ <span class="cline-any cline-yes">1x</span>
848
+ <span class="cline-any cline-yes">1x</span>
849
+ <span class="cline-any cline-neutral">&nbsp;</span>
850
+ <span class="cline-any cline-yes">1x</span>
851
+ <span class="cline-any cline-neutral">&nbsp;</span>
852
+ <span class="cline-any cline-neutral">&nbsp;</span>
853
+ <span class="cline-any cline-neutral">&nbsp;</span>
854
+ <span class="cline-any cline-neutral">&nbsp;</span>
855
+ <span class="cline-any cline-neutral">&nbsp;</span>
856
+ <span class="cline-any cline-neutral">&nbsp;</span>
857
+ <span class="cline-any cline-yes">28x</span>
858
+ <span class="cline-any cline-neutral">&nbsp;</span>
859
+ <span class="cline-any cline-yes">28x</span>
860
+ <span class="cline-any cline-neutral">&nbsp;</span>
861
+ <span class="cline-any cline-neutral">&nbsp;</span>
862
+ <span class="cline-any cline-neutral">&nbsp;</span>
863
+ <span class="cline-any cline-neutral">&nbsp;</span>
864
+ <span class="cline-any cline-neutral">&nbsp;</span>
865
+ <span class="cline-any cline-neutral">&nbsp;</span>
866
+ <span class="cline-any cline-neutral">&nbsp;</span>
867
+ <span class="cline-any cline-yes">1x</span>
868
+ <span class="cline-any cline-yes">22x</span>
869
+ <span class="cline-any cline-yes">6x</span>
870
+ <span class="cline-any cline-neutral">&nbsp;</span>
871
+ <span class="cline-any cline-yes">1x</span>
872
+ <span class="cline-any cline-neutral">&nbsp;</span>
873
+ <span class="cline-any cline-neutral">&nbsp;</span>
874
+ <span class="cline-any cline-neutral">&nbsp;</span>
875
+ <span class="cline-any cline-neutral">&nbsp;</span>
876
+ <span class="cline-any cline-neutral">&nbsp;</span>
877
+ <span class="cline-any cline-yes">1x</span>
878
+ <span class="cline-any cline-yes">1x</span>
879
+ <span class="cline-any cline-neutral">&nbsp;</span>
880
+ <span class="cline-any cline-neutral">&nbsp;</span>
881
+ <span class="cline-any cline-yes">1x</span>
882
+ <span class="cline-any cline-neutral">&nbsp;</span>
883
+ <span class="cline-any cline-neutral">&nbsp;</span>
884
+ <span class="cline-any cline-neutral">&nbsp;</span>
885
+ <span class="cline-any cline-neutral">&nbsp;</span>
886
+ <span class="cline-any cline-neutral">&nbsp;</span>
887
+ <span class="cline-any cline-yes">1x</span>
888
+ <span class="cline-any cline-yes">1x</span>
889
+ <span class="cline-any cline-neutral">&nbsp;</span>
890
+ <span class="cline-any cline-neutral">&nbsp;</span>
891
+ <span class="cline-any cline-yes">1x</span>
892
+ <span class="cline-any cline-neutral">&nbsp;</span>
893
+ <span class="cline-any cline-neutral">&nbsp;</span>
894
+ <span class="cline-any cline-neutral">&nbsp;</span>
895
+ <span class="cline-any cline-neutral">&nbsp;</span>
896
+ <span class="cline-any cline-yes">1x</span>
897
+ <span class="cline-any cline-yes">1x</span>
898
+ <span class="cline-any cline-neutral">&nbsp;</span>
899
+ <span class="cline-any cline-neutral">&nbsp;</span>
900
+ <span class="cline-any cline-yes">1x</span>
901
+ <span class="cline-any cline-neutral">&nbsp;</span>
902
+ <span class="cline-any cline-neutral">&nbsp;</span>
903
+ <span class="cline-any cline-neutral">&nbsp;</span>
904
+ <span class="cline-any cline-neutral">&nbsp;</span>
905
+ <span class="cline-any cline-neutral">&nbsp;</span>
906
+ <span class="cline-any cline-yes">1x</span>
907
+ <span class="cline-any cline-yes">1x</span>
908
+ <span class="cline-any cline-neutral">&nbsp;</span>
909
+ <span class="cline-any cline-neutral">&nbsp;</span>
910
+ <span class="cline-any cline-yes">1x</span>
911
+ <span class="cline-any cline-neutral">&nbsp;</span>
912
+ <span class="cline-any cline-neutral">&nbsp;</span>
913
+ <span class="cline-any cline-neutral">&nbsp;</span>
914
+ <span class="cline-any cline-neutral">&nbsp;</span>
915
+ <span class="cline-any cline-neutral">&nbsp;</span>
916
+ <span class="cline-any cline-yes">1x</span>
917
+ <span class="cline-any cline-yes">1x</span>
918
+ <span class="cline-any cline-neutral">&nbsp;</span>
919
+ <span class="cline-any cline-neutral">&nbsp;</span>
920
+ <span class="cline-any cline-yes">1x</span>
921
+ <span class="cline-any cline-neutral">&nbsp;</span>
922
+ <span class="cline-any cline-neutral">&nbsp;</span>
923
+ <span class="cline-any cline-neutral">&nbsp;</span>
924
+ <span class="cline-any cline-neutral">&nbsp;</span>
925
+ <span class="cline-any cline-yes">1x</span>
926
+ <span class="cline-any cline-neutral">&nbsp;</span>
927
+ <span class="cline-any cline-neutral">&nbsp;</span>
928
+ <span class="cline-any cline-neutral">&nbsp;</span>
929
+ <span class="cline-any cline-neutral">&nbsp;</span>
930
+ <span class="cline-any cline-yes">7x</span>
931
+ <span class="cline-any cline-yes">7x</span>
932
+ <span class="cline-any cline-yes">7x</span>
933
+ <span class="cline-any cline-yes">7x</span>
934
+ <span class="cline-any cline-yes">7x</span>
935
+ <span class="cline-any cline-yes">7x</span>
936
+ <span class="cline-any cline-yes">7x</span>
937
+ <span class="cline-any cline-neutral">&nbsp;</span>
938
+ <span class="cline-any cline-neutral">&nbsp;</span>
939
+ <span class="cline-any cline-neutral">&nbsp;</span>
940
+ <span class="cline-any cline-neutral">&nbsp;</span>
941
+ <span class="cline-any cline-yes">7x</span>
942
+ <span class="cline-any cline-yes">6x</span>
943
+ <span class="cline-any cline-neutral">&nbsp;</span>
944
+ <span class="cline-any cline-neutral">&nbsp;</span>
945
+ <span class="cline-any cline-neutral">&nbsp;</span>
946
+ <span class="cline-any cline-neutral">&nbsp;</span>
947
+ <span class="cline-any cline-neutral">&nbsp;</span>
948
+ <span class="cline-any cline-neutral">&nbsp;</span>
949
+ <span class="cline-any cline-yes">6x</span>
950
+ <span class="cline-any cline-neutral">&nbsp;</span>
951
+ <span class="cline-any cline-neutral">&nbsp;</span>
952
+ <span class="cline-any cline-neutral">&nbsp;</span>
953
+ <span class="cline-any cline-yes">6x</span>
954
+ <span class="cline-any cline-yes">3x</span>
955
+ <span class="cline-any cline-neutral">&nbsp;</span>
956
+ <span class="cline-any cline-neutral">&nbsp;</span>
957
+ <span class="cline-any cline-yes">3x</span>
958
+ <span class="cline-any cline-yes">1x</span>
959
+ <span class="cline-any cline-neutral">&nbsp;</span>
960
+ <span class="cline-any cline-neutral">&nbsp;</span>
961
+ <span class="cline-any cline-neutral">&nbsp;</span>
962
+ <span class="cline-any cline-neutral">&nbsp;</span>
963
+ <span class="cline-any cline-neutral">&nbsp;</span>
964
+ <span class="cline-any cline-neutral">&nbsp;</span>
965
+ <span class="cline-any cline-neutral">&nbsp;</span>
966
+ <span class="cline-any cline-yes">2x</span>
967
+ <span class="cline-any cline-yes">1x</span>
968
+ <span class="cline-any cline-neutral">&nbsp;</span>
969
+ <span class="cline-any cline-neutral">&nbsp;</span>
970
+ <span class="cline-any cline-neutral">&nbsp;</span>
971
+ <span class="cline-any cline-neutral">&nbsp;</span>
972
+ <span class="cline-any cline-neutral">&nbsp;</span>
973
+ <span class="cline-any cline-yes">3x</span>
974
+ <span class="cline-any cline-yes">2x</span>
975
+ <span class="cline-any cline-yes">1x</span>
976
+ <span class="cline-any cline-yes">1x</span>
977
+ <span class="cline-any cline-neutral">&nbsp;</span>
978
+ <span class="cline-any cline-neutral">&nbsp;</span>
979
+ <span class="cline-any cline-neutral">&nbsp;</span>
980
+ <span class="cline-any cline-neutral">&nbsp;</span>
981
+ <span class="cline-any cline-neutral">&nbsp;</span>
982
+ <span class="cline-any cline-neutral">&nbsp;</span>
983
+ <span class="cline-any cline-yes">1x</span>
984
+ <span class="cline-any cline-neutral">&nbsp;</span>
985
+ <span class="cline-any cline-yes">2x</span>
986
+ <span class="cline-any cline-neutral">&nbsp;</span>
987
+ <span class="cline-any cline-neutral">&nbsp;</span>
988
+ <span class="cline-any cline-neutral">&nbsp;</span>
989
+ <span class="cline-any cline-neutral">&nbsp;</span>
990
+ <span class="cline-any cline-neutral">&nbsp;</span>
991
+ <span class="cline-any cline-neutral">&nbsp;</span>
992
+ <span class="cline-any cline-neutral">&nbsp;</span>
993
+ <span class="cline-any cline-neutral">&nbsp;</span>
994
+ <span class="cline-any cline-neutral">&nbsp;</span>
995
+ <span class="cline-any cline-neutral">&nbsp;</span>
996
+ <span class="cline-any cline-neutral">&nbsp;</span>
997
+ <span class="cline-any cline-neutral">&nbsp;</span>
998
+ <span class="cline-any cline-neutral">&nbsp;</span>
999
+ <span class="cline-any cline-neutral">&nbsp;</span>
1000
+ <span class="cline-any cline-neutral">&nbsp;</span>
1001
+ <span class="cline-any cline-neutral">&nbsp;</span>
1002
+ <span class="cline-any cline-neutral">&nbsp;</span>
1003
+ <span class="cline-any cline-neutral">&nbsp;</span>
1004
+ <span class="cline-any cline-neutral">&nbsp;</span>
1005
+ <span class="cline-any cline-neutral">&nbsp;</span>
1006
+ <span class="cline-any cline-neutral">&nbsp;</span>
1007
+ <span class="cline-any cline-neutral">&nbsp;</span>
1008
+ <span class="cline-any cline-neutral">&nbsp;</span>
1009
+ <span class="cline-any cline-neutral">&nbsp;</span>
1010
+ <span class="cline-any cline-neutral">&nbsp;</span>
1011
+ <span class="cline-any cline-neutral">&nbsp;</span>
1012
+ <span class="cline-any cline-yes">1x</span>
1013
+ <span class="cline-any cline-neutral">&nbsp;</span>
1014
+ <span class="cline-any cline-neutral">&nbsp;</span>
1015
+ <span class="cline-any cline-neutral">&nbsp;</span>
1016
+ <span class="cline-any cline-neutral">&nbsp;</span>
1017
+ <span class="cline-any cline-neutral">&nbsp;</span>
1018
+ <span class="cline-any cline-yes">2x</span>
1019
+ <span class="cline-any cline-yes">2x</span>
1020
+ <span class="cline-any cline-yes">2x</span>
1021
+ <span class="cline-any cline-yes">2x</span>
1022
+ <span class="cline-any cline-yes">2x</span>
1023
+ <span class="cline-any cline-yes">2x</span>
1024
+ <span class="cline-any cline-yes">2x</span>
1025
+ <span class="cline-any cline-neutral">&nbsp;</span>
1026
+ <span class="cline-any cline-neutral">&nbsp;</span>
1027
+ <span class="cline-any cline-neutral">&nbsp;</span>
1028
+ <span class="cline-any cline-neutral">&nbsp;</span>
1029
+ <span class="cline-any cline-neutral">&nbsp;</span>
1030
+ <span class="cline-any cline-yes">2x</span>
1031
+ <span class="cline-any cline-neutral">&nbsp;</span>
1032
+ <span class="cline-any cline-yes">2x</span>
1033
+ <span class="cline-any cline-neutral">&nbsp;</span>
1034
+ <span class="cline-any cline-neutral">&nbsp;</span>
1035
+ <span class="cline-any cline-neutral">&nbsp;</span>
1036
+ <span class="cline-any cline-neutral">&nbsp;</span>
1037
+ <span class="cline-any cline-neutral">&nbsp;</span>
1038
+ <span class="cline-any cline-neutral">&nbsp;</span>
1039
+ <span class="cline-any cline-yes">2x</span>
1040
+ <span class="cline-any cline-yes">1x</span>
1041
+ <span class="cline-any cline-neutral">&nbsp;</span>
1042
+ <span class="cline-any cline-yes">1x</span>
1043
+ <span class="cline-any cline-neutral">&nbsp;</span>
1044
+ <span class="cline-any cline-neutral">&nbsp;</span>
1045
+ <span class="cline-any cline-neutral">&nbsp;</span>
1046
+ <span class="cline-any cline-neutral">&nbsp;</span>
1047
+ <span class="cline-any cline-neutral">&nbsp;</span>
1048
+ <span class="cline-any cline-no">&nbsp;</span>
1049
+ <span class="cline-any cline-neutral">&nbsp;</span>
1050
+ <span class="cline-any cline-neutral">&nbsp;</span>
1051
+ <span class="cline-any cline-neutral">&nbsp;</span>
1052
+ <span class="cline-any cline-neutral">&nbsp;</span>
1053
+ <span class="cline-any cline-neutral">&nbsp;</span>
1054
+ <span class="cline-any cline-neutral">&nbsp;</span>
1055
+ <span class="cline-any cline-neutral">&nbsp;</span>
1056
+ <span class="cline-any cline-neutral">&nbsp;</span>
1057
+ <span class="cline-any cline-neutral">&nbsp;</span>
1058
+ <span class="cline-any cline-neutral">&nbsp;</span>
1059
+ <span class="cline-any cline-neutral">&nbsp;</span>
1060
+ <span class="cline-any cline-neutral">&nbsp;</span>
1061
+ <span class="cline-any cline-neutral">&nbsp;</span>
1062
+ <span class="cline-any cline-neutral">&nbsp;</span>
1063
+ <span class="cline-any cline-neutral">&nbsp;</span>
1064
+ <span class="cline-any cline-neutral">&nbsp;</span>
1065
+ <span class="cline-any cline-neutral">&nbsp;</span>
1066
+ <span class="cline-any cline-neutral">&nbsp;</span>
1067
+ <span class="cline-any cline-neutral">&nbsp;</span>
1068
+ <span class="cline-any cline-neutral">&nbsp;</span>
1069
+ <span class="cline-any cline-neutral">&nbsp;</span>
1070
+ <span class="cline-any cline-neutral">&nbsp;</span>
1071
+ <span class="cline-any cline-neutral">&nbsp;</span>
1072
+ <span class="cline-any cline-neutral">&nbsp;</span>
1073
+ <span class="cline-any cline-neutral">&nbsp;</span>
1074
+ <span class="cline-any cline-neutral">&nbsp;</span>
1075
+ <span class="cline-any cline-neutral">&nbsp;</span>
1076
+ <span class="cline-any cline-neutral">&nbsp;</span>
1077
+ <span class="cline-any cline-neutral">&nbsp;</span>
1078
+ <span class="cline-any cline-neutral">&nbsp;</span>
1079
+ <span class="cline-any cline-neutral">&nbsp;</span>
1080
+ <span class="cline-any cline-neutral">&nbsp;</span>
1081
+ <span class="cline-any cline-neutral">&nbsp;</span>
1082
+ <span class="cline-any cline-neutral">&nbsp;</span>
1083
+ <span class="cline-any cline-neutral">&nbsp;</span>
1084
+ <span class="cline-any cline-neutral">&nbsp;</span>
1085
+ <span class="cline-any cline-neutral">&nbsp;</span>
1086
+ <span class="cline-any cline-neutral">&nbsp;</span>
1087
+ <span class="cline-any cline-neutral">&nbsp;</span>
1088
+ <span class="cline-any cline-neutral">&nbsp;</span>
1089
+ <span class="cline-any cline-neutral">&nbsp;</span>
1090
+ <span class="cline-any cline-neutral">&nbsp;</span>
1091
+ <span class="cline-any cline-neutral">&nbsp;</span>
1092
+ <span class="cline-any cline-neutral">&nbsp;</span>
1093
+ <span class="cline-any cline-neutral">&nbsp;</span>
1094
+ <span class="cline-any cline-yes">1x</span>
1095
+ <span class="cline-any cline-neutral">&nbsp;</span>
1096
+ <span class="cline-any cline-yes">2x</span>
1097
+ <span class="cline-any cline-yes">2x</span>
1098
+ <span class="cline-any cline-yes">2x</span>
1099
+ <span class="cline-any cline-yes">2x</span>
1100
+ <span class="cline-any cline-neutral">&nbsp;</span>
1101
+ <span class="cline-any cline-neutral">&nbsp;</span>
1102
+ <span class="cline-any cline-neutral">&nbsp;</span>
1103
+ <span class="cline-any cline-neutral">&nbsp;</span>
1104
+ <span class="cline-any cline-neutral">&nbsp;</span>
1105
+ <span class="cline-any cline-neutral">&nbsp;</span>
1106
+ <span class="cline-any cline-yes">2x</span>
1107
+ <span class="cline-any cline-yes">1x</span>
1108
+ <span class="cline-any cline-neutral">&nbsp;</span>
1109
+ <span class="cline-any cline-yes">1x</span>
1110
+ <span class="cline-any cline-neutral">&nbsp;</span>
1111
+ <span class="cline-any cline-neutral">&nbsp;</span>
1112
+ <span class="cline-any cline-neutral">&nbsp;</span>
1113
+ <span class="cline-any cline-yes">1x</span>
1114
+ <span class="cline-any cline-neutral">&nbsp;</span>
1115
+ <span class="cline-any cline-neutral">&nbsp;</span>
1116
+ <span class="cline-any cline-neutral">&nbsp;</span>
1117
+ <span class="cline-any cline-neutral">&nbsp;</span>
1118
+ <span class="cline-any cline-yes">4x</span>
1119
+ <span class="cline-any cline-yes">4x</span>
1120
+ <span class="cline-any cline-yes">4x</span>
1121
+ <span class="cline-any cline-yes">4x</span>
1122
+ <span class="cline-any cline-yes">4x</span>
1123
+ <span class="cline-any cline-yes">4x</span>
1124
+ <span class="cline-any cline-yes">4x</span>
1125
+ <span class="cline-any cline-yes">4x</span>
1126
+ <span class="cline-any cline-yes">4x</span>
1127
+ <span class="cline-any cline-yes">4x</span>
1128
+ <span class="cline-any cline-neutral">&nbsp;</span>
1129
+ <span class="cline-any cline-yes">4x</span>
1130
+ <span class="cline-any cline-yes">1x</span>
1131
+ <span class="cline-any cline-neutral">&nbsp;</span>
1132
+ <span class="cline-any cline-neutral">&nbsp;</span>
1133
+ <span class="cline-any cline-neutral">&nbsp;</span>
1134
+ <span class="cline-any cline-neutral">&nbsp;</span>
1135
+ <span class="cline-any cline-neutral">&nbsp;</span>
1136
+ <span class="cline-any cline-yes">1x</span>
1137
+ <span class="cline-any cline-yes">1x</span>
1138
+ <span class="cline-any cline-neutral">&nbsp;</span>
1139
+ <span class="cline-any cline-neutral">&nbsp;</span>
1140
+ <span class="cline-any cline-yes">4x</span>
1141
+ <span class="cline-any cline-yes">3x</span>
1142
+ <span class="cline-any cline-yes">3x</span>
1143
+ <span class="cline-any cline-neutral">&nbsp;</span>
1144
+ <span class="cline-any cline-neutral">&nbsp;</span>
1145
+ <span class="cline-any cline-neutral">&nbsp;</span>
1146
+ <span class="cline-any cline-neutral">&nbsp;</span>
1147
+ <span class="cline-any cline-yes">3x</span>
1148
+ <span class="cline-any cline-yes">3x</span>
1149
+ <span class="cline-any cline-neutral">&nbsp;</span>
1150
+ <span class="cline-any cline-neutral">&nbsp;</span>
1151
+ <span class="cline-any cline-yes">4x</span>
1152
+ <span class="cline-any cline-yes">4x</span>
1153
+ <span class="cline-any cline-neutral">&nbsp;</span>
1154
+ <span class="cline-any cline-neutral">&nbsp;</span>
1155
+ <span class="cline-any cline-yes">4x</span>
1156
+ <span class="cline-any cline-neutral">&nbsp;</span>
1157
+ <span class="cline-any cline-neutral">&nbsp;</span>
1158
+ <span class="cline-any cline-neutral">&nbsp;</span>
1159
+ <span class="cline-any cline-neutral">&nbsp;</span>
1160
+ <span class="cline-any cline-neutral">&nbsp;</span>
1161
+ <span class="cline-any cline-neutral">&nbsp;</span>
1162
+ <span class="cline-any cline-neutral">&nbsp;</span>
1163
+ <span class="cline-any cline-neutral">&nbsp;</span>
1164
+ <span class="cline-any cline-neutral">&nbsp;</span>
1165
+ <span class="cline-any cline-neutral">&nbsp;</span>
1166
+ <span class="cline-any cline-neutral">&nbsp;</span>
1167
+ <span class="cline-any cline-yes">4x</span>
1168
+ <span class="cline-any cline-yes">3x</span>
1169
+ <span class="cline-any cline-neutral">&nbsp;</span>
1170
+ <span class="cline-any cline-yes">1x</span>
1171
+ <span class="cline-any cline-neutral">&nbsp;</span>
1172
+ <span class="cline-any cline-neutral">&nbsp;</span>
1173
+ <span class="cline-any cline-neutral">&nbsp;</span>
1174
+ <span class="cline-any cline-neutral">&nbsp;</span>
1175
+ <span class="cline-any cline-neutral">&nbsp;</span>
1176
+ <span class="cline-any cline-no">&nbsp;</span>
1177
+ <span class="cline-any cline-neutral">&nbsp;</span>
1178
+ <span class="cline-any cline-neutral">&nbsp;</span>
1179
+ <span class="cline-any cline-neutral">&nbsp;</span>
1180
+ <span class="cline-any cline-yes">1x</span>
1181
+ <span class="cline-any cline-neutral">&nbsp;</span>
1182
+ <span class="cline-any cline-neutral">&nbsp;</span>
1183
+ <span class="cline-any cline-neutral">&nbsp;</span>
1184
+ <span class="cline-any cline-neutral">&nbsp;</span>
1185
+ <span class="cline-any cline-yes">4x</span>
1186
+ <span class="cline-any cline-yes">4x</span>
1187
+ <span class="cline-any cline-yes">4x</span>
1188
+ <span class="cline-any cline-yes">4x</span>
1189
+ <span class="cline-any cline-yes">4x</span>
1190
+ <span class="cline-any cline-yes">4x</span>
1191
+ <span class="cline-any cline-yes">4x</span>
1192
+ <span class="cline-any cline-yes">4x</span>
1193
+ <span class="cline-any cline-yes">4x</span>
1194
+ <span class="cline-any cline-neutral">&nbsp;</span>
1195
+ <span class="cline-any cline-yes">4x</span>
1196
+ <span class="cline-any cline-yes">2x</span>
1197
+ <span class="cline-any cline-neutral">&nbsp;</span>
1198
+ <span class="cline-any cline-neutral">&nbsp;</span>
1199
+ <span class="cline-any cline-neutral">&nbsp;</span>
1200
+ <span class="cline-any cline-neutral">&nbsp;</span>
1201
+ <span class="cline-any cline-neutral">&nbsp;</span>
1202
+ <span class="cline-any cline-yes">2x</span>
1203
+ <span class="cline-any cline-yes">2x</span>
1204
+ <span class="cline-any cline-neutral">&nbsp;</span>
1205
+ <span class="cline-any cline-neutral">&nbsp;</span>
1206
+ <span class="cline-any cline-yes">4x</span>
1207
+ <span class="cline-any cline-yes">3x</span>
1208
+ <span class="cline-any cline-yes">3x</span>
1209
+ <span class="cline-any cline-neutral">&nbsp;</span>
1210
+ <span class="cline-any cline-neutral">&nbsp;</span>
1211
+ <span class="cline-any cline-neutral">&nbsp;</span>
1212
+ <span class="cline-any cline-neutral">&nbsp;</span>
1213
+ <span class="cline-any cline-yes">3x</span>
1214
+ <span class="cline-any cline-yes">3x</span>
1215
+ <span class="cline-any cline-neutral">&nbsp;</span>
1216
+ <span class="cline-any cline-neutral">&nbsp;</span>
1217
+ <span class="cline-any cline-yes">4x</span>
1218
+ <span class="cline-any cline-yes">4x</span>
1219
+ <span class="cline-any cline-neutral">&nbsp;</span>
1220
+ <span class="cline-any cline-yes">4x</span>
1221
+ <span class="cline-any cline-neutral">&nbsp;</span>
1222
+ <span class="cline-any cline-neutral">&nbsp;</span>
1223
+ <span class="cline-any cline-neutral">&nbsp;</span>
1224
+ <span class="cline-any cline-neutral">&nbsp;</span>
1225
+ <span class="cline-any cline-neutral">&nbsp;</span>
1226
+ <span class="cline-any cline-neutral">&nbsp;</span>
1227
+ <span class="cline-any cline-neutral">&nbsp;</span>
1228
+ <span class="cline-any cline-neutral">&nbsp;</span>
1229
+ <span class="cline-any cline-neutral">&nbsp;</span>
1230
+ <span class="cline-any cline-neutral">&nbsp;</span>
1231
+ <span class="cline-any cline-neutral">&nbsp;</span>
1232
+ <span class="cline-any cline-neutral">&nbsp;</span>
1233
+ <span class="cline-any cline-yes">4x</span>
1234
+ <span class="cline-any cline-yes">3x</span>
1235
+ <span class="cline-any cline-neutral">&nbsp;</span>
1236
+ <span class="cline-any cline-yes">1x</span>
1237
+ <span class="cline-any cline-neutral">&nbsp;</span>
1238
+ <span class="cline-any cline-neutral">&nbsp;</span>
1239
+ <span class="cline-any cline-neutral">&nbsp;</span>
1240
+ <span class="cline-any cline-neutral">&nbsp;</span>
1241
+ <span class="cline-any cline-neutral">&nbsp;</span>
1242
+ <span class="cline-any cline-no">&nbsp;</span>
1243
+ <span class="cline-any cline-neutral">&nbsp;</span>
1244
+ <span class="cline-any cline-neutral">&nbsp;</span>
1245
+ <span class="cline-any cline-neutral">&nbsp;</span>
1246
+ <span class="cline-any cline-yes">1x</span>
1247
+ <span class="cline-any cline-yes">2x</span>
1248
+ <span class="cline-any cline-yes">2x</span>
1249
+ <span class="cline-any cline-yes">2x</span>
1250
+ <span class="cline-any cline-yes">2x</span>
1251
+ <span class="cline-any cline-yes">2x</span>
1252
+ <span class="cline-any cline-yes">2x</span>
1253
+ <span class="cline-any cline-neutral">&nbsp;</span>
1254
+ <span class="cline-any cline-neutral">&nbsp;</span>
1255
+ <span class="cline-any cline-neutral">&nbsp;</span>
1256
+ <span class="cline-any cline-neutral">&nbsp;</span>
1257
+ <span class="cline-any cline-neutral">&nbsp;</span>
1258
+ <span class="cline-any cline-neutral">&nbsp;</span>
1259
+ <span class="cline-any cline-yes">2x</span>
1260
+ <span class="cline-any cline-yes">1x</span>
1261
+ <span class="cline-any cline-neutral">&nbsp;</span>
1262
+ <span class="cline-any cline-yes">1x</span>
1263
+ <span class="cline-any cline-neutral">&nbsp;</span>
1264
+ <span class="cline-any cline-neutral">&nbsp;</span>
1265
+ <span class="cline-any cline-neutral">&nbsp;</span>
1266
+ <span class="cline-any cline-neutral">&nbsp;</span>
1267
+ <span class="cline-any cline-neutral">&nbsp;</span>
1268
+ <span class="cline-any cline-no">&nbsp;</span>
1269
+ <span class="cline-any cline-neutral">&nbsp;</span>
1270
+ <span class="cline-any cline-neutral">&nbsp;</span>
1271
+ <span class="cline-any cline-neutral">&nbsp;</span>
1272
+ <span class="cline-any cline-yes">1x</span>
1273
+ <span class="cline-any cline-yes">5x</span>
1274
+ <span class="cline-any cline-yes">5x</span>
1275
+ <span class="cline-any cline-yes">5x</span>
1276
+ <span class="cline-any cline-yes">5x</span>
1277
+ <span class="cline-any cline-neutral">&nbsp;</span>
1278
+ <span class="cline-any cline-neutral">&nbsp;</span>
1279
+ <span class="cline-any cline-yes">5x</span>
1280
+ <span class="cline-any cline-neutral">&nbsp;</span>
1281
+ <span class="cline-any cline-neutral">&nbsp;</span>
1282
+ <span class="cline-any cline-neutral">&nbsp;</span>
1283
+ <span class="cline-any cline-neutral">&nbsp;</span>
1284
+ <span class="cline-any cline-yes">5x</span>
1285
+ <span class="cline-any cline-yes">5x</span>
1286
+ <span class="cline-any cline-neutral">&nbsp;</span>
1287
+ <span class="cline-any cline-neutral">&nbsp;</span>
1288
+ <span class="cline-any cline-neutral">&nbsp;</span>
1289
+ <span class="cline-any cline-neutral">&nbsp;</span>
1290
+ <span class="cline-any cline-neutral">&nbsp;</span>
1291
+ <span class="cline-any cline-yes">4x</span>
1292
+ <span class="cline-any cline-neutral">&nbsp;</span>
1293
+ <span class="cline-any cline-neutral">&nbsp;</span>
1294
+ <span class="cline-any cline-neutral">&nbsp;</span>
1295
+ <span class="cline-any cline-neutral">&nbsp;</span>
1296
+ <span class="cline-any cline-yes">4x</span>
1297
+ <span class="cline-any cline-yes">1x</span>
1298
+ <span class="cline-any cline-neutral">&nbsp;</span>
1299
+ <span class="cline-any cline-neutral">&nbsp;</span>
1300
+ <span class="cline-any cline-neutral">&nbsp;</span>
1301
+ <span class="cline-any cline-neutral">&nbsp;</span>
1302
+ <span class="cline-any cline-neutral">&nbsp;</span>
1303
+ <span class="cline-any cline-neutral">&nbsp;</span>
1304
+ <span class="cline-any cline-neutral">&nbsp;</span>
1305
+ <span class="cline-any cline-neutral">&nbsp;</span>
1306
+ <span class="cline-any cline-neutral">&nbsp;</span>
1307
+ <span class="cline-any cline-neutral">&nbsp;</span>
1308
+ <span class="cline-any cline-neutral">&nbsp;</span>
1309
+ <span class="cline-any cline-neutral">&nbsp;</span>
1310
+ <span class="cline-any cline-neutral">&nbsp;</span>
1311
+ <span class="cline-any cline-neutral">&nbsp;</span>
1312
+ <span class="cline-any cline-yes">3x</span>
1313
+ <span class="cline-any cline-yes">2x</span>
1314
+ <span class="cline-any cline-neutral">&nbsp;</span>
1315
+ <span class="cline-any cline-neutral">&nbsp;</span>
1316
+ <span class="cline-any cline-neutral">&nbsp;</span>
1317
+ <span class="cline-any cline-neutral">&nbsp;</span>
1318
+ <span class="cline-any cline-neutral">&nbsp;</span>
1319
+ <span class="cline-any cline-neutral">&nbsp;</span>
1320
+ <span class="cline-any cline-neutral">&nbsp;</span>
1321
+ <span class="cline-any cline-neutral">&nbsp;</span>
1322
+ <span class="cline-any cline-neutral">&nbsp;</span>
1323
+ <span class="cline-any cline-neutral">&nbsp;</span>
1324
+ <span class="cline-any cline-neutral">&nbsp;</span>
1325
+ <span class="cline-any cline-neutral">&nbsp;</span>
1326
+ <span class="cline-any cline-yes">4x</span>
1327
+ <span class="cline-any cline-yes">3x</span>
1328
+ <span class="cline-any cline-yes">3x</span>
1329
+ <span class="cline-any cline-neutral">&nbsp;</span>
1330
+ <span class="cline-any cline-yes">1x</span>
1331
+ <span class="cline-any cline-neutral">&nbsp;</span>
1332
+ <span class="cline-any cline-neutral">&nbsp;</span>
1333
+ <span class="cline-any cline-neutral">&nbsp;</span>
1334
+ <span class="cline-any cline-neutral">&nbsp;</span>
1335
+ <span class="cline-any cline-neutral">&nbsp;</span>
1336
+ <span class="cline-any cline-no">&nbsp;</span>
1337
+ <span class="cline-any cline-neutral">&nbsp;</span>
1338
+ <span class="cline-any cline-neutral">&nbsp;</span>
1339
+ <span class="cline-any cline-neutral">&nbsp;</span>
1340
+ <span class="cline-any cline-yes">1x</span>
1341
+ <span class="cline-any cline-neutral">&nbsp;</span>
1342
+ <span class="cline-any cline-neutral">&nbsp;</span>
1343
+ <span class="cline-any cline-yes">2x</span>
1344
+ <span class="cline-any cline-neutral">&nbsp;</span>
1345
+ <span class="cline-any cline-neutral">&nbsp;</span>
1346
+ <span class="cline-any cline-neutral">&nbsp;</span>
1347
+ <span class="cline-any cline-neutral">&nbsp;</span>
1348
+ <span class="cline-any cline-neutral">&nbsp;</span>
1349
+ <span class="cline-any cline-no">&nbsp;</span>
1350
+ <span class="cline-any cline-neutral">&nbsp;</span>
1351
+ <span class="cline-any cline-neutral">&nbsp;</span>
1352
+ <span class="cline-any cline-neutral">&nbsp;</span>
1353
+ <span class="cline-any cline-yes">1x</span>
1354
+ <span class="cline-any cline-neutral">&nbsp;</span>
1355
+ <span class="cline-any cline-neutral">&nbsp;</span>
1356
+ <span class="cline-any cline-neutral">&nbsp;</span>
1357
+ <span class="cline-any cline-neutral">&nbsp;</span>
1358
+ <span class="cline-any cline-neutral">&nbsp;</span>
1359
+ <span class="cline-any cline-neutral">&nbsp;</span>
1360
+ <span class="cline-any cline-neutral">&nbsp;</span>
1361
+ <span class="cline-any cline-neutral">&nbsp;</span>
1362
+ <span class="cline-any cline-neutral">&nbsp;</span>
1363
+ <span class="cline-any cline-neutral">&nbsp;</span>
1364
+ <span class="cline-any cline-neutral">&nbsp;</span>
1365
+ <span class="cline-any cline-neutral">&nbsp;</span>
1366
+ <span class="cline-any cline-neutral">&nbsp;</span>
1367
+ <span class="cline-any cline-neutral">&nbsp;</span>
1368
+ <span class="cline-any cline-neutral">&nbsp;</span>
1369
+ <span class="cline-any cline-neutral">&nbsp;</span>
1370
+ <span class="cline-any cline-yes">4x</span>
1371
+ <span class="cline-any cline-yes">4x</span>
1372
+ <span class="cline-any cline-yes">4x</span>
1373
+ <span class="cline-any cline-yes">4x</span>
1374
+ <span class="cline-any cline-yes">4x</span>
1375
+ <span class="cline-any cline-neutral">&nbsp;</span>
1376
+ <span class="cline-any cline-neutral">&nbsp;</span>
1377
+ <span class="cline-any cline-neutral">&nbsp;</span>
1378
+ <span class="cline-any cline-neutral">&nbsp;</span>
1379
+ <span class="cline-any cline-neutral">&nbsp;</span>
1380
+ <span class="cline-any cline-neutral">&nbsp;</span>
1381
+ <span class="cline-any cline-neutral">&nbsp;</span>
1382
+ <span class="cline-any cline-neutral">&nbsp;</span>
1383
+ <span class="cline-any cline-neutral">&nbsp;</span>
1384
+ <span class="cline-any cline-neutral">&nbsp;</span>
1385
+ <span class="cline-any cline-neutral">&nbsp;</span>
1386
+ <span class="cline-any cline-neutral">&nbsp;</span>
1387
+ <span class="cline-any cline-neutral">&nbsp;</span>
1388
+ <span class="cline-any cline-neutral">&nbsp;</span>
1389
+ <span class="cline-any cline-neutral">&nbsp;</span>
1390
+ <span class="cline-any cline-neutral">&nbsp;</span>
1391
+ <span class="cline-any cline-neutral">&nbsp;</span>
1392
+ <span class="cline-any cline-yes">4x</span>
1393
+ <span class="cline-any cline-neutral">&nbsp;</span>
1394
+ <span class="cline-any cline-yes">4x</span>
1395
+ <span class="cline-any cline-yes">4x</span>
1396
+ <span class="cline-any cline-yes">3x</span>
1397
+ <span class="cline-any cline-yes">1x</span>
1398
+ <span class="cline-any cline-neutral">&nbsp;</span>
1399
+ <span class="cline-any cline-neutral">&nbsp;</span>
1400
+ <span class="cline-any cline-neutral">&nbsp;</span>
1401
+ <span class="cline-any cline-neutral">&nbsp;</span>
1402
+ <span class="cline-any cline-yes">3x</span>
1403
+ <span class="cline-any cline-yes">3x</span>
1404
+ <span class="cline-any cline-neutral">&nbsp;</span>
1405
+ <span class="cline-any cline-yes">3x</span>
1406
+ <span class="cline-any cline-yes">1x</span>
1407
+ <span class="cline-any cline-yes">2x</span>
1408
+ <span class="cline-any cline-yes">1x</span>
1409
+ <span class="cline-any cline-yes">2x</span>
1410
+ <span class="cline-any cline-yes">1x</span>
1411
+ <span class="cline-any cline-neutral">&nbsp;</span>
1412
+ <span class="cline-any cline-neutral">&nbsp;</span>
1413
+ <span class="cline-any cline-neutral">&nbsp;</span>
1414
+ <span class="cline-any cline-neutral">&nbsp;</span>
1415
+ <span class="cline-any cline-neutral">&nbsp;</span>
1416
+ <span class="cline-any cline-neutral">&nbsp;</span>
1417
+ <span class="cline-any cline-neutral">&nbsp;</span>
1418
+ <span class="cline-any cline-yes">1x</span>
1419
+ <span class="cline-any cline-neutral">&nbsp;</span>
1420
+ <span class="cline-any cline-neutral">&nbsp;</span>
1421
+ <span class="cline-any cline-neutral">&nbsp;</span>
1422
+ <span class="cline-any cline-neutral">&nbsp;</span>
1423
+ <span class="cline-any cline-neutral">&nbsp;</span>
1424
+ <span class="cline-any cline-yes">2x</span>
1425
+ <span class="cline-any cline-neutral">&nbsp;</span>
1426
+ <span class="cline-any cline-yes">1x</span>
1427
+ <span class="cline-any cline-neutral">&nbsp;</span>
1428
+ <span class="cline-any cline-neutral">&nbsp;</span>
1429
+ <span class="cline-any cline-neutral">&nbsp;</span>
1430
+ <span class="cline-any cline-yes">1x</span>
1431
+ <span class="cline-any cline-yes">6x</span>
1432
+ <span class="cline-any cline-yes">6x</span>
1433
+ <span class="cline-any cline-yes">6x</span>
1434
+ <span class="cline-any cline-yes">6x</span>
1435
+ <span class="cline-any cline-neutral">&nbsp;</span>
1436
+ <span class="cline-any cline-neutral">&nbsp;</span>
1437
+ <span class="cline-any cline-neutral">&nbsp;</span>
1438
+ <span class="cline-any cline-yes">6x</span>
1439
+ <span class="cline-any cline-neutral">&nbsp;</span>
1440
+ <span class="cline-any cline-yes">6x</span>
1441
+ <span class="cline-any cline-neutral">&nbsp;</span>
1442
+ <span class="cline-any cline-neutral">&nbsp;</span>
1443
+ <span class="cline-any cline-neutral">&nbsp;</span>
1444
+ <span class="cline-any cline-neutral">&nbsp;</span>
1445
+ <span class="cline-any cline-yes">6x</span>
1446
+ <span class="cline-any cline-yes">1x</span>
1447
+ <span class="cline-any cline-neutral">&nbsp;</span>
1448
+ <span class="cline-any cline-neutral">&nbsp;</span>
1449
+ <span class="cline-any cline-neutral">&nbsp;</span>
1450
+ <span class="cline-any cline-neutral">&nbsp;</span>
1451
+ <span class="cline-any cline-neutral">&nbsp;</span>
1452
+ <span class="cline-any cline-neutral">&nbsp;</span>
1453
+ <span class="cline-any cline-yes">5x</span>
1454
+ <span class="cline-any cline-neutral">&nbsp;</span>
1455
+ <span class="cline-any cline-neutral">&nbsp;</span>
1456
+ <span class="cline-any cline-neutral">&nbsp;</span>
1457
+ <span class="cline-any cline-neutral">&nbsp;</span>
1458
+ <span class="cline-any cline-neutral">&nbsp;</span>
1459
+ <span class="cline-any cline-yes">5x</span>
1460
+ <span class="cline-any cline-neutral">&nbsp;</span>
1461
+ <span class="cline-any cline-neutral">&nbsp;</span>
1462
+ <span class="cline-any cline-neutral">&nbsp;</span>
1463
+ <span class="cline-any cline-neutral">&nbsp;</span>
1464
+ <span class="cline-any cline-yes">5x</span>
1465
+ <span class="cline-any cline-yes">5x</span>
1466
+ <span class="cline-any cline-neutral">&nbsp;</span>
1467
+ <span class="cline-any cline-yes">4x</span>
1468
+ <span class="cline-any cline-yes">1x</span>
1469
+ <span class="cline-any cline-neutral">&nbsp;</span>
1470
+ <span class="cline-any cline-neutral">&nbsp;</span>
1471
+ <span class="cline-any cline-neutral">&nbsp;</span>
1472
+ <span class="cline-any cline-neutral">&nbsp;</span>
1473
+ <span class="cline-any cline-yes">4x</span>
1474
+ <span class="cline-any cline-yes">4x</span>
1475
+ <span class="cline-any cline-neutral">&nbsp;</span>
1476
+ <span class="cline-any cline-yes">4x</span>
1477
+ <span class="cline-any cline-yes">1x</span>
1478
+ <span class="cline-any cline-yes">2x</span>
1479
+ <span class="cline-any cline-yes">1x</span>
1480
+ <span class="cline-any cline-no">&nbsp;</span>
1481
+ <span class="cline-any cline-yes">1x</span>
1482
+ <span class="cline-any cline-neutral">&nbsp;</span>
1483
+ <span class="cline-any cline-neutral">&nbsp;</span>
1484
+ <span class="cline-any cline-neutral">&nbsp;</span>
1485
+ <span class="cline-any cline-neutral">&nbsp;</span>
1486
+ <span class="cline-any cline-neutral">&nbsp;</span>
1487
+ <span class="cline-any cline-neutral">&nbsp;</span>
1488
+ <span class="cline-any cline-neutral">&nbsp;</span>
1489
+ <span class="cline-any cline-yes">1x</span>
1490
+ <span class="cline-any cline-neutral">&nbsp;</span>
1491
+ <span class="cline-any cline-neutral">&nbsp;</span>
1492
+ <span class="cline-any cline-neutral">&nbsp;</span>
1493
+ <span class="cline-any cline-neutral">&nbsp;</span>
1494
+ <span class="cline-any cline-neutral">&nbsp;</span>
1495
+ <span class="cline-any cline-yes">3x</span>
1496
+ <span class="cline-any cline-neutral">&nbsp;</span>
1497
+ <span class="cline-any cline-yes">1x</span>
1498
+ <span class="cline-any cline-neutral">&nbsp;</span>
1499
+ <span class="cline-any cline-neutral">&nbsp;</span>
1500
+ <span class="cline-any cline-neutral">&nbsp;</span>
1501
+ <span class="cline-any cline-yes">1x</span>
1502
+ <span class="cline-any cline-yes">5x</span>
1503
+ <span class="cline-any cline-yes">5x</span>
1504
+ <span class="cline-any cline-yes">5x</span>
1505
+ <span class="cline-any cline-neutral">&nbsp;</span>
1506
+ <span class="cline-any cline-yes">5x</span>
1507
+ <span class="cline-any cline-yes">1x</span>
1508
+ <span class="cline-any cline-neutral">&nbsp;</span>
1509
+ <span class="cline-any cline-neutral">&nbsp;</span>
1510
+ <span class="cline-any cline-neutral">&nbsp;</span>
1511
+ <span class="cline-any cline-neutral">&nbsp;</span>
1512
+ <span class="cline-any cline-neutral">&nbsp;</span>
1513
+ <span class="cline-any cline-neutral">&nbsp;</span>
1514
+ <span class="cline-any cline-yes">4x</span>
1515
+ <span class="cline-any cline-neutral">&nbsp;</span>
1516
+ <span class="cline-any cline-neutral">&nbsp;</span>
1517
+ <span class="cline-any cline-neutral">&nbsp;</span>
1518
+ <span class="cline-any cline-yes">4x</span>
1519
+ <span class="cline-any cline-neutral">&nbsp;</span>
1520
+ <span class="cline-any cline-yes">1x</span>
1521
+ <span class="cline-any cline-neutral">&nbsp;</span>
1522
+ <span class="cline-any cline-neutral">&nbsp;</span>
1523
+ <span class="cline-any cline-yes">3x</span>
1524
+ <span class="cline-any cline-neutral">&nbsp;</span>
1525
+ <span class="cline-any cline-neutral">&nbsp;</span>
1526
+ <span class="cline-any cline-neutral">&nbsp;</span>
1527
+ <span class="cline-any cline-yes">3x</span>
1528
+ <span class="cline-any cline-neutral">&nbsp;</span>
1529
+ <span class="cline-any cline-yes">1x</span>
1530
+ <span class="cline-any cline-neutral">&nbsp;</span>
1531
+ <span class="cline-any cline-neutral">&nbsp;</span>
1532
+ <span class="cline-any cline-yes">2x</span>
1533
+ <span class="cline-any cline-neutral">&nbsp;</span>
1534
+ <span class="cline-any cline-neutral">&nbsp;</span>
1535
+ <span class="cline-any cline-neutral">&nbsp;</span>
1536
+ <span class="cline-any cline-neutral">&nbsp;</span>
1537
+ <span class="cline-any cline-neutral">&nbsp;</span>
1538
+ <span class="cline-any cline-yes">2x</span>
1539
+ <span class="cline-any cline-yes">1x</span>
1540
+ <span class="cline-any cline-neutral">&nbsp;</span>
1541
+ <span class="cline-any cline-yes">1x</span>
1542
+ <span class="cline-any cline-neutral">&nbsp;</span>
1543
+ <span class="cline-any cline-neutral">&nbsp;</span>
1544
+ <span class="cline-any cline-neutral">&nbsp;</span>
1545
+ <span class="cline-any cline-yes">1x</span>
1546
+ <span class="cline-any cline-neutral">&nbsp;</span>
1547
+ <span class="cline-any cline-neutral">&nbsp;</span>
1548
+ <span class="cline-any cline-neutral">&nbsp;</span>
1549
+ <span class="cline-any cline-neutral">&nbsp;</span>
1550
+ <span class="cline-any cline-neutral">&nbsp;</span>
1551
+ <span class="cline-any cline-neutral">&nbsp;</span>
1552
+ <span class="cline-any cline-yes">3x</span>
1553
+ <span class="cline-any cline-yes">3x</span>
1554
+ <span class="cline-any cline-yes">3x</span>
1555
+ <span class="cline-any cline-yes">3x</span>
1556
+ <span class="cline-any cline-yes">3x</span>
1557
+ <span class="cline-any cline-neutral">&nbsp;</span>
1558
+ <span class="cline-any cline-yes">3x</span>
1559
+ <span class="cline-any cline-yes">1x</span>
1560
+ <span class="cline-any cline-neutral">&nbsp;</span>
1561
+ <span class="cline-any cline-neutral">&nbsp;</span>
1562
+ <span class="cline-any cline-yes">2x</span>
1563
+ <span class="cline-any cline-yes">2x</span>
1564
+ <span class="cline-any cline-neutral">&nbsp;</span>
1565
+ <span class="cline-any cline-neutral">&nbsp;</span>
1566
+ <span class="cline-any cline-neutral">&nbsp;</span>
1567
+ <span class="cline-any cline-neutral">&nbsp;</span>
1568
+ <span class="cline-any cline-neutral">&nbsp;</span>
1569
+ <span class="cline-any cline-neutral">&nbsp;</span>
1570
+ <span class="cline-any cline-neutral">&nbsp;</span>
1571
+ <span class="cline-any cline-yes">2x</span>
1572
+ <span class="cline-any cline-neutral">&nbsp;</span>
1573
+ <span class="cline-any cline-yes">1x</span>
1574
+ <span class="cline-any cline-neutral">&nbsp;</span>
1575
+ <span class="cline-any cline-neutral">&nbsp;</span>
1576
+ <span class="cline-any cline-neutral">&nbsp;</span>
1577
+ <span class="cline-any cline-neutral">&nbsp;</span>
1578
+ <span class="cline-any cline-neutral">&nbsp;</span>
1579
+ <span class="cline-any cline-neutral">&nbsp;</span>
1580
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
1581
+ * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
1582
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
1583
+ */
1584
+ import { parseNum } from '@nlabs/utils/parsers/numbers';
1585
+ import {
1586
+ createHash, parseArangoId, parseChar, parseId, parseString, parseVarChar
1587
+ } from '@nlabs/utils/parsers/strings';
1588
+ import { aql } from 'arangojs';
1589
+ import { AqlQuery } from 'arangojs/aql';
1590
+ &nbsp;
1591
+ import { parsePost } from '../adapters/postAdapter.js';
1592
+ import { ErrorTypes } from '../types/error.types.js';
1593
+ import { logError, logException } from '../utils/analyticsUtils.js';
1594
+ import { getLimit, useDb } from '../utils/arangodbUtils.js';
1595
+ import { extractTags, getTagsByName, updateTagsInItem } from './tags.js';
1596
+ &nbsp;
1597
+ import type { EdgeCollection } from 'arangojs/collections';
1598
+ import type { ArangoDbLimit } from '../types/arangodb.types.js';
1599
+ import type { ApiContext } from '../types/auth.types.js';
1600
+ import type { FileType } from '../types/files.types.js';
1601
+ import type { PostInputType, PostOptions, PostType } from '../types/posts.types.js';
1602
+ import type { TagType } from '../types/tags.types.js';
1603
+ &nbsp;
1604
+ const MAX_CONTENT_LENGTH: number = 100000;
1605
+ const eventCategory: string = 'posts';
1606
+ &nbsp;
1607
+ export const parsePostOptions = (options: PostOptions = {}) =&gt; {
1608
+ const {
1609
+ from = 0,
1610
+ latitude = 0,
1611
+ longitude = 0,
1612
+ to = 30,
1613
+ type = 'post'
1614
+ } = options;
1615
+ &nbsp;
1616
+ return {
1617
+ latitude: parseNum(latitude, 32),
1618
+ limit: getLimit(from, to) as ArangoDbLimit,
1619
+ longitude: parseNum(longitude, 32),
1620
+ type: parseChar(type, 32)
1621
+ };
1622
+ };
1623
+ &nbsp;
1624
+ export const getPostOptional = (fields: string[] = [], sessionId: string = <span class="branch-0 cbranch-no" title="branch not covered" >'')</span> =&gt;
1625
+ (fields || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span>.reduce((selects: {objects: string[], queries: string[]}, field: string) =&gt; {
1626
+ switch(field) {
1627
+ case 'hasRsvp': {
1628
+ selects.queries.push(`LET hasRsvp = TO_BOOL(FIRST(
1629
+ FOR post, r IN INBOUND p._id hasReaction
1630
+ FILTER r.name == "rsvp" &amp;&amp; r.type == "posts" &amp;&amp; r._from == "users/${sessionId}"
1631
+ COLLECT WITH COUNT INTO count
1632
+ RETURN count
1633
+ ))`);
1634
+ selects.objects.push('hasRsvp:hasRsvp');
1635
+ return selects;
1636
+ }
1637
+ case 'isSaved': {
1638
+ selects.queries.push(`LET isSaved = TO_BOOL(FIRST(
1639
+ FOR post, r IN INBOUND p._id hasReaction
1640
+ FILTER r.name == "pin" &amp;&amp; r.type == "posts" &amp;&amp; r._from == "users/${sessionId}"
1641
+ COLLECT WITH COUNT INTO count
1642
+ RETURN count
1643
+ ))`);
1644
+ selects.objects.push('isSaved:isSaved');
1645
+ return selects;
1646
+ }
1647
+ case 'reactions': {
1648
+ selects.queries.push(`LET reactions = (
1649
+ FOR post, r IN INBOUND p._id hasReaction
1650
+ COLLECT reactionName = r.value INTO reactionItems
1651
+ RETURN {name: reactionName, count: LENGTH(reactionItems[*].r.value)}
1652
+ )`);
1653
+ selects.objects.push('reactions:reactions');
1654
+ return selects;
1655
+ }
1656
+ case 'rsvpCount': {
1657
+ selects.queries.push(`LET rsvpCount = FIRST(
1658
+ FOR post, r IN INBOUND p._id hasReaction
1659
+ FILTER r.name == "rsvp" &amp;&amp; r.type == "posts"
1660
+ COLLECT WITH COUNT INTO count
1661
+ RETURN count
1662
+ )`);
1663
+ selects.objects.push('rsvpCount:rsvpCount');
1664
+ return selects;
1665
+ }
1666
+ case 'viewCount': {
1667
+ selects.queries.push(`LET viewCount = FIRST(
1668
+ FOR post, r IN INBOUND p._id hasReaction
1669
+ FILTER r.name == "view" &amp;&amp; r.type == "posts"
1670
+ COLLECT WITH COUNT INTO count
1671
+ RETURN count
1672
+ )`);
1673
+ selects.objects.push('viewCount:viewCount');
1674
+ return selects;
1675
+ }
1676
+ default: {
1677
+ return selects;
1678
+ }
1679
+ }
1680
+ }, {objects: [], queries: []});
1681
+ &nbsp;
1682
+ export const getPost = async (
1683
+ context: ApiContext,
1684
+ postId: string,
1685
+ options?: PostOptions
1686
+ ): Promise&lt;PostType&gt; =&gt; {
1687
+ const action: string = 'getPost';
1688
+ const {databaseName, fields, session: {userId: sessionId} = <span class="branch-0 cbranch-no" title="branch not covered" >{}}</span> = context;
1689
+ const formatItemId: string = parseId(postId);
1690
+ const {type} = parsePostOptions(options);
1691
+ const database = useDb(databaseName);
1692
+ const {objects: selectObjects, queries: selectQueries} = getPostOptional(fields, sessionId);
1693
+ const aqlQry: AqlQuery = aql`FOR p IN posts
1694
+ FILTER p._key == ${formatItemId} &amp;&amp; p.type == ${type}
1695
+ LIMIT 1
1696
+ RETURN p`;
1697
+ &nbsp;
1698
+ return database.query(aqlQry)
1699
+ .then((cursor) =&gt; cursor.next())
1700
+ .then((post: PostType) =&gt; {
1701
+ const {
1702
+ _id: postDocId,
1703
+ userId,
1704
+ groupId,
1705
+ privacy = 'default'
1706
+ }: PostType = post;
1707
+ &nbsp;
1708
+ let privacyAqlQry: string | undefined;
1709
+ &nbsp;
1710
+ if(userId === sessionId) {
1711
+ return post;
1712
+ }
1713
+ &nbsp;
1714
+ if(groupId &amp;&amp; privacy === 'group') {
1715
+ privacyAqlQry = `LET p = DOCUMENT("${postDocId}")
1716
+ ${selectQueries.join('\n')}
1717
+ FOR group IN groups
1718
+ FILTER group._key == p.groupId
1719
+ FOR u, e IN OUTBOUND group._id hasConnection
1720
+ FILTER u._key == "${sessionId}"
1721
+ LIMIT 1
1722
+ RETURN MERGE(p, {${selectObjects.join(', ')}})`;
1723
+ } else if(privacy === 'public') {
1724
+ privacyAqlQry = `LET p = DOCUMENT("${postDocId}")
1725
+ ${selectQueries.join('\n')}
1726
+ LIMIT 1
1727
+ RETURN MERGE(p, {${selectObjects.join(', ')}})`;
1728
+ }
1729
+ &nbsp;
1730
+ if(privacyAqlQry) {
1731
+ return database.query(privacyAqlQry)
1732
+ .then((cursor) =&gt; cursor.next())
1733
+ .catch((error: Error) =&gt; logError({
1734
+ action,
1735
+ category: eventCategory,
1736
+ label: ErrorTypes.DATABASE_ERROR
1737
+ }, error, context));
1738
+ }
1739
+ &nbsp;
1740
+ return {};
1741
+ })
1742
+ .catch((error: Error) =&gt; logError({
1743
+ action,
1744
+ category: eventCategory,
1745
+ label: ErrorTypes.DATABASE_ERROR
1746
+ }, error, context));
1747
+ };
1748
+ &nbsp;
1749
+ &nbsp;
1750
+ // export const getPostList = (context: ApiContext, options?: PostOptions): Promise&lt;PostType[]&gt; =&gt; {
1751
+ // // const action: string = 'getListByApp';
1752
+ // const {database, fields, session: {userId: sessionId}} = context;
1753
+ // const {limit, type} = parsePostOptions(options);
1754
+ // const {objects: selectObjects, queries: selectQueries} = getPostOptional(fields, sessionId);
1755
+ // const aqlQry: string = `FOR p IN posts
1756
+ // FILTER p.type == "${type}" &amp;&amp; p.privacy == "public" &amp;&amp; p.parent == null
1757
+ // ${selectQueries.join('\n')}
1758
+ // ${limit.aql}
1759
+ // SORT p.added
1760
+ // RETURN DISTINCT MERGE(p, {${selectObjects.join(', ')}})`;
1761
+ &nbsp;
1762
+ // return database.query(aqlQry)
1763
+ // .then((cursor) =&gt; cursor.all())
1764
+ // .catch((error: Error) =&gt; {
1765
+ // throw error;
1766
+ // });
1767
+ // };
1768
+ &nbsp;
1769
+ export const getPostsByArea = (
1770
+ context: ApiContext,
1771
+ latitude: number,
1772
+ longitude: number,
1773
+ options?: PostOptions
1774
+ ): Promise&lt;PostType[]&gt; =&gt; {
1775
+ const action: string = 'getPostsByArea';
1776
+ const {databaseName, fields, session: {userId: sessionId} = <span class="branch-0 cbranch-no" title="branch not covered" >{}}</span> = context;
1777
+ const {limit, type} = parsePostOptions(options);
1778
+ const formatLatitude: number = parseNum(latitude);
1779
+ const formatLongitude: number = parseNum(longitude);
1780
+ const {objects: selectObjects, queries: selectQueries} = getPostOptional(fields, sessionId);
1781
+ selectQueries.push(`LET distance = DISTANCE(
1782
+ ${formatLatitude},
1783
+ ${formatLongitude},
1784
+ NOT_NULL(p.latitude, 0),
1785
+ NOT_NULL(p.longitude, 0))
1786
+ `);
1787
+ selectObjects.push('distance:distance');
1788
+ &nbsp;
1789
+ const aqlQry: string = `FOR p IN posts
1790
+ ${selectQueries.join('\n')}
1791
+ FILTER p.type == "${type}" &amp;&amp; p.privacy == "public" &amp;&amp; p.parentId == null
1792
+ ${limit.aql}
1793
+ SORT distance, p.added
1794
+ RETURN DISTINCT MERGE(p, {${selectObjects.join(', ')}})`;
1795
+ &nbsp;
1796
+ return useDb(databaseName).query(aqlQry)
1797
+ .then((cursor) =&gt; cursor.all() as unknown as PostType[])
1798
+ .catch((error: Error) =&gt; {
1799
+ logError({
1800
+ action,
1801
+ category: eventCategory,
1802
+ label: ErrorTypes.DATABASE_ERROR
1803
+ }, error, context);
1804
+ &nbsp;
1805
+ <span class="cstat-no" title="statement not covered" > return [] as PostType[];</span>
1806
+ });
1807
+ };
1808
+ &nbsp;
1809
+ // export const getPostsByGroup = (
1810
+ // context: ApiContext,
1811
+ // groupId: string,
1812
+ // options?: PostOptions
1813
+ // ): Promise&lt;PostType[]&gt; =&gt; {
1814
+ // // const action: string = 'getListByGroup';
1815
+ // const {database, fields, session: {userId: sessionId}} = context;
1816
+ // const {objects: selectObjects, queries: selectQueries} = getPostOptional(fields, sessionId);
1817
+ &nbsp;
1818
+ // // Group id
1819
+ // const formatGroupId: string = parseId(groupId);
1820
+ // const db = database;
1821
+ // const aqlQry: string = `FOR u, g IN INBOUND ${formatGroupId} hasGroup
1822
+ // FILTER u._key == ${sessionId}
1823
+ // RETURN g`;
1824
+ &nbsp;
1825
+ // return db.query(aqlQry)
1826
+ // .then((cursor) =&gt; cursor.all())
1827
+ // .then((groups: GroupType[] = []) =&gt; {
1828
+ // if(groups.length) {
1829
+ // const {limit, type} = parsePostOptions(options);
1830
+ // const postAqlQry: string = `FOR p IN posts
1831
+ // FILTER p.type == "${type}" &amp;&amp; p.groupId == "${formatGroupId}" &amp;&amp; p.parent == null
1832
+ // ${selectQueries.join('\n')}
1833
+ // ${limit.aql}
1834
+ // SORT p.added
1835
+ // RETURN DISTINCT MERGE(p, {${selectObjects.join(', ')}})`;
1836
+ &nbsp;
1837
+ // return db.query(postAqlQry)
1838
+ // .then((cursor) =&gt; cursor.all())
1839
+ // .catch((error: Error) =&gt; {
1840
+ // throw error;
1841
+ // });
1842
+ // }
1843
+ &nbsp;
1844
+ // return [];
1845
+ // })
1846
+ // .catch((error: Error) =&gt; {
1847
+ // throw error;
1848
+ // });
1849
+ // };
1850
+ &nbsp;
1851
+ export const getPostsByLatest = (context: ApiContext, options?: PostOptions): Promise&lt;PostType[]&gt; =&gt; {
1852
+ // const action: string = 'getListByLatest';
1853
+ const {databaseName, fields, session: {userId: sessionId} = <span class="branch-0 cbranch-no" title="branch not covered" >{}}</span> = context;
1854
+ const {limit, type} = parsePostOptions(options);
1855
+ const {objects: selectObjects, queries: selectQueries} = getPostOptional(fields, sessionId);
1856
+ const aqlQry: string = `FOR p IN posts
1857
+ FILTER p.type == "${type}" &amp;&amp; p.privacy == "public" &amp;&amp; p.parent == null
1858
+ ${selectQueries.join('\n')}
1859
+ ${limit.aql}
1860
+ SORT p.added DESC
1861
+ RETURN DISTINCT MERGE(p, {${selectObjects.join(', ')}})`;
1862
+ &nbsp;
1863
+ return useDb(databaseName).query(aqlQry)
1864
+ .then((cursor) =&gt; cursor.all())
1865
+ .catch((error: Error) =&gt; {
1866
+ throw error;
1867
+ });
1868
+ };
1869
+ &nbsp;
1870
+ export const getPostsByReactions = (
1871
+ context: ApiContext,
1872
+ reactions: string[] = [],
1873
+ options?: PostOptions
1874
+ ): Promise&lt;PostType[]&gt; =&gt; {
1875
+ const action: string = 'getPostsByReactions';
1876
+ const {databaseName, fields, session: {userId: sessionId} = <span class="branch-0 cbranch-no" title="branch not covered" >{}}</span> = context;
1877
+ const {latitude, limit, longitude, type} = parsePostOptions(options);
1878
+ const {objects: selectObjects, queries: selectQueries} = getPostOptional(fields, sessionId);
1879
+ const formatSessionId: string = `users/${sessionId}`;
1880
+ const formatReactions: string = JSON.stringify(reactions.map((reaction) =&gt; parseChar(reaction, 32).toLowerCase()));
1881
+ const sortBy: string[] = [];
1882
+ const filters: string[] = [`p.type == "${type}"`, 'p.privacy == "public"'];
1883
+ const formatLatitude: number = parseNum(latitude);
1884
+ const formatLongitude: number = parseNum(longitude);
1885
+ &nbsp;
1886
+ if(formatLatitude &amp;&amp; formatLongitude) {
1887
+ selectQueries.push(`LET distance = DISTANCE(
1888
+ ${formatLatitude},
1889
+ ${formatLongitude},
1890
+ NOT_NULL(p.latitude, 0),
1891
+ NOT_NULL(p.longitude, 0))
1892
+ `);
1893
+ selectObjects.push('distance:distance');
1894
+ sortBy.push('distance');
1895
+ }
1896
+ &nbsp;
1897
+ if(reactions.length) {
1898
+ sortBy.push('matchedTags DESC');
1899
+ selectQueries.push(`LET matchedReactions = LENGTH(
1900
+ FOR mr IN reactions
1901
+ FILTER mr.matched == true
1902
+ RETURN mr
1903
+ )`);
1904
+ selectObjects.push('matchedReactions:matchedReactions');
1905
+ filters.push('matchedReactions &gt; 0');
1906
+ }
1907
+ &nbsp;
1908
+ sortBy.push('p.added DESC');
1909
+ selectObjects.push('reactions:reactions');
1910
+ &nbsp;
1911
+ // Get data from database
1912
+ const aqlQry: string = `FOR p, r IN OUTBOUND "${formatSessionId}" hasReaction
1913
+ LET reactions = (
1914
+ FOR reaction, hr IN 1..1 INBOUND p isTagged
1915
+ LET matched = LENGTH(${formatReactions}) &gt; 0 &amp;&amp; POSITION(${formatReactions}, reaction.name)
1916
+ SORT reaction.name
1917
+ RETURN MERGE(reaction, {matched:matched})
1918
+ )
1919
+ ${selectQueries.join('\n')}
1920
+ FILTER ${filters.join(' &amp;&amp; ')}
1921
+ ${limit.aql}
1922
+ RETURN DISTINCT MERGE(p, {${selectObjects.join(', ')}})`;
1923
+ &nbsp;
1924
+ return useDb(databaseName).query(aqlQry)
1925
+ .then((cursor) =&gt; cursor.all() as unknown as PostType[])
1926
+ .catch((error: Error) =&gt; {
1927
+ logError({
1928
+ action,
1929
+ category: eventCategory,
1930
+ label: ErrorTypes.DATABASE_ERROR
1931
+ }, error, context);
1932
+ &nbsp;
1933
+ <span class="cstat-no" title="statement not covered" > return [] as PostType[];</span>
1934
+ });
1935
+ };
1936
+ &nbsp;
1937
+ export const getPostsByTags = (
1938
+ context: ApiContext,
1939
+ tags: string[] = [],
1940
+ options?: PostOptions
1941
+ ): Promise&lt;PostType[]&gt; =&gt; {
1942
+ const action: string = 'getPostsByTags';
1943
+ const {databaseName, fields, session: {userId: sessionId} = <span class="branch-0 cbranch-no" title="branch not covered" >{}}</span> = context;
1944
+ const {latitude, limit, longitude, type} = parsePostOptions(options);
1945
+ const {objects: selectObjects, queries: selectQueries} = getPostOptional(fields, sessionId);
1946
+ const formatTagNames: string = JSON.stringify(tags.map((tag) =&gt; parseChar(tag, 32).toLowerCase()));
1947
+ const sortBy: string[] = [];
1948
+ const filters: string[] = [`p.type == "${type}"`, 'p.privacy == "public"'];
1949
+ const formatLatitude: number = parseNum(latitude);
1950
+ const formatLongitude: number = parseNum(longitude);
1951
+ &nbsp;
1952
+ if(formatLatitude &amp;&amp; formatLongitude) {
1953
+ selectQueries.push(`LET distance = DISTANCE(
1954
+ ${formatLatitude},
1955
+ ${formatLongitude},
1956
+ NOT_NULL(p.latitude, 0),
1957
+ NOT_NULL(p.longitude, 0))
1958
+ `);
1959
+ selectObjects.push('distance:distance');
1960
+ sortBy.push('distance');
1961
+ }
1962
+ &nbsp;
1963
+ if(tags.length) {
1964
+ sortBy.push('matchedTags DESC');
1965
+ selectQueries.push(`LET matchedTags = LENGTH(
1966
+ FOR t IN tags
1967
+ FILTER t.matched == true
1968
+ RETURN t
1969
+ )`);
1970
+ selectObjects.push('matchedTags:matchedTags');
1971
+ filters.push('matchedTags &gt; 0');
1972
+ }
1973
+ &nbsp;
1974
+ sortBy.push('p.added DESC');
1975
+ selectObjects.push('tags:tags');
1976
+ &nbsp;
1977
+ const aqlQry: string = `FOR p IN posts
1978
+ LET tags = (
1979
+ FOR tag, it IN 1..1 INBOUND p isTagged
1980
+ LET matched = LENGTH(${formatTagNames}) &gt; 0 &amp;&amp; POSITION(${formatTagNames}, tag.name)
1981
+ SORT tag.name
1982
+ RETURN MERGE(tag, {matched:matched})
1983
+ )
1984
+ ${selectQueries.join('\n')}
1985
+ FILTER ${filters.join(' &amp;&amp; ')}
1986
+ ${limit.aql}
1987
+ SORT ${sortBy.join(', ')}
1988
+ RETURN DISTINCT MERGE(p, {${selectObjects.join(', ')}})`;
1989
+ &nbsp;
1990
+ return useDb(databaseName).query(aqlQry)
1991
+ .then((cursor) =&gt; cursor.all() as unknown as PostType[])
1992
+ .catch((error: Error) =&gt; {
1993
+ logError({
1994
+ action,
1995
+ category: eventCategory,
1996
+ label: ErrorTypes.DATABASE_ERROR
1997
+ }, error, context);
1998
+ &nbsp;
1999
+ <span class="cstat-no" title="statement not covered" > return [] as PostType[];</span>
2000
+ });
2001
+ };
2002
+ &nbsp;
2003
+ export const getPostsByUser = (context: ApiContext, userId: string, options?: PostOptions): Promise&lt;PostType[]&gt; =&gt; {
2004
+ const action: string = 'getPostsByUser';
2005
+ const {databaseName, fields, session: {userId: sessionId} = <span class="branch-0 cbranch-no" title="branch not covered" >{}}</span> = context;
2006
+ const {limit, type} = parsePostOptions(options);
2007
+ const formatUserId: string = parseId(userId);
2008
+ const {objects: selectObjects, queries: selectQueries} = getPostOptional(fields, sessionId);
2009
+ const aqlQry: string = `FOR p IN posts
2010
+ FILTER p.userId == "${formatUserId}" &amp;&amp; p.type == "${type}" &amp;&amp; p.privacy == "public" &amp;&amp; p.parent == null
2011
+ ${selectQueries.join('\n')}
2012
+ ${limit.aql}
2013
+ SORT p.added
2014
+ RETURN DISTINCT MERGE(p, {${selectObjects.join(', ')}})`;
2015
+ &nbsp;
2016
+ return useDb(databaseName).query(aqlQry)
2017
+ .then((cursor) =&gt; cursor.all() as unknown as PostType[])
2018
+ .catch((error: Error) =&gt; {
2019
+ logError({
2020
+ action,
2021
+ category: eventCategory,
2022
+ label: ErrorTypes.DATABASE_ERROR
2023
+ }, error, context);
2024
+ &nbsp;
2025
+ <span class="cstat-no" title="statement not covered" > return [] as PostType[];</span>
2026
+ });
2027
+ };
2028
+ &nbsp;
2029
+ export const getPostComments = (context: ApiContext, postId: string, options?: PostOptions): Promise&lt;PostType[]&gt; =&gt; {
2030
+ const action: string = 'getPostComments';
2031
+ const {databaseName, session: {userId: sessionId} = <span class="branch-0 cbranch-no" title="branch not covered" >{}}</span> = context;
2032
+ const {limit, type} = parsePostOptions(options);
2033
+ const formatItemId: string = parseId(postId);
2034
+ &nbsp;
2035
+ // Get the parent post to get restrictions
2036
+ const aqlQry: AqlQuery = aql`FOR p IN posts
2037
+ FILTER p.type == ${type} &amp;&amp; p._key == ${formatItemId}
2038
+ LIMIT 1
2039
+ RETURN p`;
2040
+ &nbsp;
2041
+ return useDb(databaseName).query(aqlQry)
2042
+ .then((cursor) =&gt; cursor.next())
2043
+ .then((post: PostType) =&gt; {
2044
+ const {
2045
+ _key,
2046
+ groupId,
2047
+ privacy = 'default'
2048
+ }: PostType = post;
2049
+ &nbsp;
2050
+ // Query based on privacy level
2051
+ let privacyAqlQry: string | undefined;
2052
+ &nbsp;
2053
+ if(groupId &amp;&amp; privacy === 'group') {
2054
+ privacyAqlQry = `FOR p IN posts
2055
+ FOR user IN users
2056
+ FILTER p.parent == "${_key}" &amp;&amp; user._key == p.userId
2057
+ LET reactions = (
2058
+ FOR post, r IN INBOUND p._id reactions
2059
+ COLLECT reactionName = r.value INTO reactionItems
2060
+ RETURN {name: reactionName, count: LENGTH(reactionItems[*].r.value)}
2061
+ )
2062
+ FOR group IN groups
2063
+ FILTER group._key == p.groupId
2064
+ FOR u, e IN OUTBOUND group._id hasConnection
2065
+ FILTER u._key == "${sessionId}"
2066
+ SORT p.added
2067
+ ${limit.aql}
2068
+ RETURN MERGE(p, {user: user, reactions: reactions})`;
2069
+ } else if(privacy === 'public') {
2070
+ privacyAqlQry = `FOR p IN posts
2071
+ FOR user IN users
2072
+ FILTER p.parent == "${_key}" &amp;&amp; user._key == p.userId
2073
+ LET reactions = (
2074
+ FOR post, r IN INBOUND p._id reactions
2075
+ COLLECT reactionName = r.value INTO reactionItems
2076
+ RETURN {name: reactionName, count: LENGTH(reactionItems[*].r.value)}
2077
+ )
2078
+ SORT p.added
2079
+ ${limit.aql}
2080
+ RETURN MERGE(p, {user: user, reactions: reactions})`;
2081
+ }
2082
+ &nbsp;
2083
+ if(privacyAqlQry) {
2084
+ return useDb(databaseName).query(privacyAqlQry)
2085
+ .then((cursor) =&gt; cursor.all() as unknown as PostType[])
2086
+ .catch((error: Error) =&gt; {
2087
+ logError({
2088
+ action,
2089
+ category: eventCategory,
2090
+ label: ErrorTypes.DATABASE_ERROR
2091
+ }, error, context);
2092
+ &nbsp;
2093
+ <span class="cstat-no" title="statement not covered" > return [] as PostType[];</span>
2094
+ });
2095
+ }
2096
+ &nbsp;
2097
+ return [] as PostType[];
2098
+ })
2099
+ .catch((error: Error) =&gt; {
2100
+ logError({
2101
+ action,
2102
+ category: eventCategory,
2103
+ label: ErrorTypes.DATABASE_ERROR
2104
+ }, error, context);
2105
+ &nbsp;
2106
+ <span class="cstat-no" title="statement not covered" > return [] as PostType[];</span>
2107
+ });
2108
+ };
2109
+ &nbsp;
2110
+ export const addPost = async (
2111
+ context: ApiContext,
2112
+ {
2113
+ content = '',
2114
+ endDate,
2115
+ groupId = '',
2116
+ location,
2117
+ latitude,
2118
+ longitude,
2119
+ name = '',
2120
+ parentId = '',
2121
+ privacy = 'public',
2122
+ tags = [],
2123
+ startDate,
2124
+ type = 'default'
2125
+ }: PostInputType
2126
+ ): Promise&lt;PostType&gt; =&gt; {
2127
+ const action: string = 'addPost';
2128
+ const {databaseName, session: {userId: sessionId} = <span class="branch-0 cbranch-no" title="branch not covered" >{}}</span> = context;
2129
+ const now = Date.now();
2130
+ const postId = createHash(`post-${sessionId}`);
2131
+ const insert: PostType = {
2132
+ _id: `posts/${postId}`,
2133
+ _key: postId,
2134
+ added: now,
2135
+ content: parseString(content, MAX_CONTENT_LENGTH) || '',
2136
+ endDate: endDate ? parseNum(endDate, 13) : undefined,
2137
+ groupId: groupId ? parseId(groupId) : undefined,
2138
+ latitude: latitude !== undefined ? parseNum(latitude) : undefined,
2139
+ location: location ? parseString(location, 160) : undefined,
2140
+ longitude: longitude !== undefined ? parseNum(longitude) : undefined,
2141
+ modified: now,
2142
+ name: parseString(name, 160),
2143
+ parentId: parentId ? parseId(parentId) : undefined,
2144
+ privacy: parseVarChar(privacy, 16),
2145
+ startDate: startDate ? parseNum(startDate, 13) : undefined,
2146
+ type: parseChar(type, 32),
2147
+ userId: sessionId
2148
+ };
2149
+ const aqlQry: AqlQuery = aql`INSERT ${insert} IN posts RETURN NEW`;
2150
+ &nbsp;
2151
+ try {
2152
+ const savedPost: PostType = await useDb(databaseName).query(aqlQry)
2153
+ .then((cursor) =&gt; cursor.next())
2154
+ .catch((error: Error) =&gt; logError({
2155
+ action,
2156
+ category: eventCategory,
2157
+ label: ErrorTypes.DATABASE_ERROR
2158
+ }, error, context));
2159
+ const {_id: postDocId} = savedPost;
2160
+ const contentTagNames = await extractTags(insert.content || '');
2161
+ &nbsp;
2162
+ if(tags.length || contentTagNames.length) {
2163
+ const userTags = (await getTagsByName(context, tags.map(({name}) =&gt; name || <span class="branch-1 cbranch-no" title="branch not covered" >'')</span>))
2164
+ .map((tag) =&gt; ({...tag, tagBy: sessionId}));
2165
+ const contentTags = (await getTagsByName(context, contentTagNames || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span>)
2166
+ .map((tag) =&gt; ({...tag, tagBy: 'extract'}));
2167
+ const updatedTags: TagType[] = await updateTagsInItem(
2168
+ context,
2169
+ {
2170
+ itemDocId: postDocId,
2171
+ tags: [...contentTags, ...userTags]
2172
+ }
2173
+ );
2174
+ &nbsp;
2175
+ return {
2176
+ ...savedPost,
2177
+ tags: updatedTags
2178
+ };
2179
+ }
2180
+ &nbsp;
2181
+ return savedPost;
2182
+ } catch(error) {
2183
+ throw error;
2184
+ }
2185
+ };
2186
+ &nbsp;
2187
+ export const updatePost = async (context: ApiContext, post: PostInputType): Promise&lt;PostType&gt; =&gt; {
2188
+ const action: string = 'updatePost';
2189
+ const {databaseName, session: {userId: sessionId} = <span class="branch-0 cbranch-no" title="branch not covered" >{}}</span> = context;
2190
+ const now: number = Date.now();
2191
+ const parsedPost = parsePost(post);
2192
+ const {
2193
+ postId,
2194
+ tags = []
2195
+ } = parsedPost;
2196
+ &nbsp;
2197
+ const update: PostType = {
2198
+ ...parsedPost,
2199
+ modified: now
2200
+ };
2201
+ &nbsp;
2202
+ if(!postId) {
2203
+ throw logException({
2204
+ action,
2205
+ category: eventCategory,
2206
+ value: ErrorTypes.INVALID_ID
2207
+ }, context);
2208
+ }
2209
+ &nbsp;
2210
+ const insert = {
2211
+ ...update,
2212
+ _key: postId,
2213
+ added: now,
2214
+ userId: sessionId
2215
+ };
2216
+ const aqlQry: AqlQuery = aql`UPSERT {_key: ${postId}, userId: ${sessionId}}
2217
+ INSERT ${insert}
2218
+ UPDATE ${update}
2219
+ IN posts RETURN NEW`;
2220
+ &nbsp;
2221
+ try {
2222
+ const updatedPost: PostType = await useDb(databaseName)
2223
+ .query(aqlQry)
2224
+ .then((cursor) =&gt; cursor.next())
2225
+ .catch((error: Error) =&gt; logError({
2226
+ action,
2227
+ category: eventCategory,
2228
+ value: ErrorTypes.DATABASE_ERROR
2229
+ }, error, {}));
2230
+ const {_id: updatedPostId} = updatedPost;
2231
+ const contentTagNames = await extractTags(insert.content || '');
2232
+ &nbsp;
2233
+ if(tags?.length || contentTagNames?.length) {
2234
+ const userTags = tags?.length ? (await getTagsByName(context, tags.map(({name}) =&gt; name || <span class="branch-1 cbranch-no" title="branch not covered" >'')</span>))
2235
+ .map((tag) =&gt; ({...tag, tagBy: sessionId})) : <span class="branch-1 cbranch-no" title="branch not covered" >[];</span>
2236
+ const contentTags = contentTagNames?.length ? <span class="branch-0 cbranch-no" title="branch not covered" >(await getTagsByName(context, contentTagNames || []))</span>
2237
+ .map(<span class="fstat-no" title="function not covered" >(t</span>ag) =&gt; (<span class="cstat-no" title="statement not covered" >{...tag, tagBy: 'extract'})</span>) : [];
2238
+ const updatedTags: TagType[] = await updateTagsInItem(
2239
+ context,
2240
+ {
2241
+ itemDocId: updatedPostId,
2242
+ tags: [...contentTags, ...userTags]
2243
+ }
2244
+ );
2245
+ &nbsp;
2246
+ return {
2247
+ ...updatedPost,
2248
+ tags: updatedTags
2249
+ };
2250
+ }
2251
+ &nbsp;
2252
+ return updatedPost;
2253
+ } catch(error) {
2254
+ throw error;
2255
+ }
2256
+ };
2257
+ &nbsp;
2258
+ export const deletePost = async (context: ApiContext, postDocId: string): Promise&lt;PostType&gt; =&gt; {
2259
+ const action: string = 'deletePost';
2260
+ const {databaseName, session: {userId: sessionId} = <span class="branch-0 cbranch-no" title="branch not covered" >{}}</span> = context;
2261
+ const formatPostId: string = parseArangoId(postDocId);
2262
+ &nbsp;
2263
+ if(!formatPostId) {
2264
+ throw logException({
2265
+ action,
2266
+ category: eventCategory,
2267
+ value: ErrorTypes.INVALID_ID
2268
+ }, context);
2269
+ }
2270
+ &nbsp;
2271
+ const edgeAqlQry: AqlQuery = aql`FOR t IN isTagged
2272
+ FILTER t._to == ${formatPostId}
2273
+ REMOVE t IN isTagged`;
2274
+ &nbsp;
2275
+ await useDb(databaseName).query(edgeAqlQry)
2276
+ .catch((error: Error) =&gt; {
2277
+ throw error;
2278
+ });
2279
+ &nbsp;
2280
+ const fileAqlQry: AqlQuery = aql`FOR f IN hasFile
2281
+ FILTER f._to == ${formatPostId}
2282
+ REMOVE f IN hasFile`;
2283
+ &nbsp;
2284
+ await useDb(databaseName).query(fileAqlQry)
2285
+ .catch((error: Error) =&gt; {
2286
+ throw error;
2287
+ });
2288
+ &nbsp;
2289
+ const aqlQry = aql`FOR p IN posts
2290
+ FILTER p._id == ${formatPostId} &amp;&amp; p.userId == ${sessionId}
2291
+ LIMIT 1
2292
+ REMOVE p IN posts
2293
+ RETURN OLD`;
2294
+ &nbsp;
2295
+ return useDb(databaseName).query(aqlQry)
2296
+ .then((cursor) =&gt; cursor.next())
2297
+ .catch((error: Error) =&gt; {
2298
+ throw error;
2299
+ });
2300
+ };
2301
+ &nbsp;
2302
+ export const createPostEdge = (
2303
+ context: ApiContext,
2304
+ postDocId: string,
2305
+ itemDocId: string,
2306
+ edgeType: string = 'isPosted',
2307
+ props = {}
2308
+ ): Promise&lt;FileType&gt; =&gt; {
2309
+ const action = 'createPostEdge';
2310
+ const {databaseName} = context;
2311
+ const edgeCollection: EdgeCollection = useDb(databaseName).collection(edgeType);
2312
+ const formatPostId: string = parseArangoId(postDocId);
2313
+ const formatDocId: string = parseArangoId(itemDocId);
2314
+ &nbsp;
2315
+ if(!formatDocId || !formatPostId) {
2316
+ throw new Error(ErrorTypes.INVALID_ID);
2317
+ }
2318
+ &nbsp;
2319
+ const edgeId: string = createHash(`postEdge-${formatPostId}-${formatDocId}`);
2320
+ const edge = {
2321
+ _from: formatPostId,
2322
+ _key: edgeId,
2323
+ _to: formatDocId,
2324
+ added: Date.now(),
2325
+ ...props
2326
+ };
2327
+ &nbsp;
2328
+ return edgeCollection.save(edge, {returnNew: true})
2329
+ .catch((error: Error) =&gt; {
2330
+ throw logError({
2331
+ action,
2332
+ category: eventCategory,
2333
+ value: ErrorTypes.DATABASE_ERROR
2334
+ }, error, context);
2335
+ });
2336
+ };
2337
+ &nbsp;</pre></td></tr></table></pre>
2338
+
2339
+ <div class='push'></div><!-- for sticky footer -->
2340
+ </div><!-- /wrapper -->
2341
+ <div class='footer quiet pad2 space-top1 center small'>
2342
+ Code coverage generated by
2343
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2344
+ at 2025-08-12T16:14:39.389Z
2345
+ </div>
2346
+ <script src="../prettify.js"></script>
2347
+ <script>
2348
+ window.onload = function () {
2349
+ prettyPrint();
2350
+ };
2351
+ </script>
2352
+ <script src="../sorter.js"></script>
2353
+ <script src="../block-navigation.js"></script>
2354
+ </body>
2355
+ </html>
2356
+