fedipod-server 0.20.0 → 0.26.0

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 (4016) hide show
  1. package/README.md +5 -4
  2. package/dist/claims.d.ts +3 -1
  3. package/dist/claims.js +20 -7
  4. package/dist/components/context.jsonld +6 -0
  5. package/dist/handler.d.ts +29 -1
  6. package/dist/handler.js +85 -4
  7. package/dist/handler.jsonld +36 -1
  8. package/lib/client/c2s.mjs +100 -3
  9. package/lib/client/masto/accounts.mjs +44 -4
  10. package/lib/client/masto/body.mjs +90 -3
  11. package/lib/client/masto/index.mjs +5 -1
  12. package/lib/client/masto/instance.mjs +11 -3
  13. package/lib/client/masto/media.mjs +3 -57
  14. package/lib/client/masto/oauth.mjs +66 -9
  15. package/lib/client/masto/render.mjs +63 -6
  16. package/lib/client/masto/statuses.mjs +25 -1
  17. package/lib/client/masto/timelines.mjs +128 -6
  18. package/lib/connections/tagfeed.mjs +42 -5
  19. package/lib/core/as2.mjs +36 -5
  20. package/lib/core/contexts/index.mjs +14 -0
  21. package/lib/core/contexts/litepub-0.1.json +60 -0
  22. package/lib/core/contexts/map.json +3 -1
  23. package/lib/core/contexts/quotes.json +18 -0
  24. package/lib/core/graphview.mjs +41 -3
  25. package/lib/core/intake/activities.mjs +136 -2
  26. package/lib/core/intake/activity.mjs +79 -1
  27. package/lib/core/intake/group.mjs +37 -3
  28. package/lib/core/intake/index.mjs +32 -2
  29. package/lib/core/intake/notes.mjs +60 -3
  30. package/lib/core/lease.mjs +12 -2
  31. package/lib/core/profile-page.mjs +104 -0
  32. package/lib/core/publisher/collections.mjs +6 -1
  33. package/lib/core/publisher/index.mjs +81 -27
  34. package/lib/core/publisher/notes.mjs +104 -3
  35. package/lib/core/shapes/activitystreams.ttl +28 -0
  36. package/lib/core/shapes/index.mjs +26 -1
  37. package/lib/core/social.mjs +3 -0
  38. package/lib/core/wire-quotes.mjs +71 -0
  39. package/lib/core/wire.mjs +49 -66
  40. package/lib/device/admin/routes/lifecycle.mjs +9 -0
  41. package/lib/device/admin/static.mjs +4 -1
  42. package/lib/device/admin/surface.mjs +26 -2
  43. package/lib/device/certs.mjs +18 -2
  44. package/lib/device/cli/commands/setup.mjs +1 -0
  45. package/lib/device/cli/commands/state.mjs +3 -1
  46. package/lib/device/setup.mjs +1 -0
  47. package/lib/gateway/front-core.mjs +189 -17
  48. package/lib/pod/root.mjs +6 -3
  49. package/lib/pod/transport.mjs +5 -1
  50. package/lib/server/embed.mjs +1 -0
  51. package/lib/session/README.md +123 -0
  52. package/lib/session/demo.html +94 -0
  53. package/lib/session/fedi-account.mjs +346 -0
  54. package/lib/session/fedi-login.mjs +123 -0
  55. package/lib/session/oidc-session.mjs +233 -0
  56. package/lib/session/package.json +41 -0
  57. package/package.json +1 -1
  58. package/run-agent.mjs +13 -0
  59. package/vendor/gate.cjs +6 -3
  60. package/web/admin/bar.css +32 -0
  61. package/web/admin/bar.js +38 -0
  62. package/web/admin/client/index.html +2 -1
  63. package/web/admin/client-pick.js +79 -0
  64. package/web/admin/index.html +2 -1
  65. package/web/admin/oauth-signin.mjs +37 -0
  66. package/web/admin/setup/index.html +2 -1
  67. package/web/admin/tokens.css +15 -3
  68. package/web/app/admin-facade.mjs +25 -2
  69. package/web/app/agent.mjs +100 -3
  70. package/web/app/authorize_interaction.html +56 -0
  71. package/web/app/authorize_interaction.js +69 -0
  72. package/web/app/boot.mjs +81 -5
  73. package/web/app/dist/boot.js +246 -156
  74. package/web/app/dist/boot.js.map +4 -4
  75. package/web/app/dist/sw.js +1742 -444
  76. package/web/app/dist/sw.js.map +4 -4
  77. package/web/app/index.html +4 -3
  78. package/web/app/oidc-session.mjs +5 -188
  79. package/web/app/signup.mjs +1 -0
  80. package/web/app/site/_headers +22 -0
  81. package/web/app/site/_redirects +17 -0
  82. package/web/app/site/admin/bar.css +32 -0
  83. package/web/app/site/admin/bar.js +38 -0
  84. package/web/app/site/admin/client/index.html +21 -3
  85. package/web/app/site/admin/client-phanpy/index.html +61 -0
  86. package/web/app/site/admin/client-pick.js +79 -0
  87. package/web/app/site/admin/index.html +19 -1
  88. package/web/app/site/admin/oauth-signin.mjs +37 -0
  89. package/web/app/site/admin/setup/index.html +5 -1
  90. package/web/app/site/admin/tokens.css +15 -3
  91. package/web/app/site/app/compose/index.html +4 -1
  92. package/web/app/site/app/index.html +4 -1
  93. package/web/app/site/authorize_interaction.html +59 -0
  94. package/web/app/site/authorize_interaction.js +69 -0
  95. package/web/app/site/bb/bb.js +1617 -0
  96. package/web/app/site/bb/index.html +300 -0
  97. package/web/app/site/bb/markdown.mjs +0 -0
  98. package/web/app/site/bb/masto.mjs +179 -0
  99. package/web/app/site/bb/mine.mjs +48 -0
  100. package/web/app/site/bb/oidc-session.mjs +6 -0
  101. package/web/app/site/bb/pod.mjs +340 -0
  102. package/web/app/site/bb/private.mjs +98 -0
  103. package/web/app/site/bb/read.mjs +296 -0
  104. package/web/app/site/bb/seen.mjs +64 -0
  105. package/web/app/site/bb/solid-oidc-session.mjs +233 -0
  106. package/web/app/site/bb/tokens.css +68 -0
  107. package/web/app/site/boot.js +246 -156
  108. package/web/app/site/build.json +1 -0
  109. package/web/app/site/demo/fedi-account.mjs +346 -0
  110. package/web/app/site/demo/fedi-login.mjs +123 -0
  111. package/web/app/site/demo/index.html +94 -0
  112. package/web/app/site/demo/oidc-session.mjs +233 -0
  113. package/web/app/site/demo/tokens.css +68 -0
  114. package/web/app/site/icons/forum.svg +11 -0
  115. package/web/app/site/icons/gateway.svg +14 -0
  116. package/web/app/site/icons/local.svg +11 -0
  117. package/web/app/site/index.html +7 -3
  118. package/web/app/site/sengi/3rdpartylicenses.txt +832 -0
  119. package/web/app/site/sengi/Roboto-Black.72f6fd218b59c42e804c.woff2 +0 -0
  120. package/web/app/site/sengi/Roboto-Black.fdd88b742a9f6304f05b.woff +0 -0
  121. package/web/app/site/sengi/Roboto-Bold.08cb8f79715774f9a628.woff +0 -0
  122. package/web/app/site/sengi/Roboto-Bold.f3a02e2578bee50e620e.woff2 +0 -0
  123. package/web/app/site/sengi/Roboto-Light.10ad0f861c0c58077340.woff +0 -0
  124. package/web/app/site/sengi/Roboto-Light.ed4b08d2702fa26acc32.woff2 +0 -0
  125. package/web/app/site/sengi/Roboto-Medium.50d01d3e6c994995bcaf.woff2 +0 -0
  126. package/web/app/site/sengi/Roboto-Medium.9a3bf7acae14d9b5ed5a.woff +0 -0
  127. package/web/app/site/sengi/Roboto-Regular.94dac78eee406a8c8f04.woff +0 -0
  128. package/web/app/site/sengi/Roboto-Regular.9feb0110b6dff9ee2b9e.woff2 +0 -0
  129. package/web/app/site/sengi/Roboto-Thin.46888f279ddb7baaf897.woff2 +0 -0
  130. package/web/app/site/sengi/Roboto-Thin.f09d9b5e8e8a5f3843c1.woff +0 -0
  131. package/web/app/site/sengi/arrow_1.bc5b1e3edc01f84c94d7.png +0 -0
  132. package/web/app/site/sengi/arrow_2.4ca4d04924079fc62d23.png +0 -0
  133. package/web/app/site/sengi/assets/audio/all-eyes-on-me.mp3 +0 -0
  134. package/web/app/site/sengi/assets/audio/appointed.mp3 +0 -0
  135. package/web/app/site/sengi/assets/audio/boop.mp3 +0 -0
  136. package/web/app/site/sengi/assets/audio/exquisite.mp3 +0 -0
  137. package/web/app/site/sengi/assets/docs/privacy.html +20 -0
  138. package/web/app/site/sengi/assets/emoji/64/0023-20e3.png +0 -0
  139. package/web/app/site/sengi/assets/emoji/64/0023.png +0 -0
  140. package/web/app/site/sengi/assets/emoji/64/002a-20e3.png +0 -0
  141. package/web/app/site/sengi/assets/emoji/64/002a.png +0 -0
  142. package/web/app/site/sengi/assets/emoji/64/0030-20e3.png +0 -0
  143. package/web/app/site/sengi/assets/emoji/64/0030.png +0 -0
  144. package/web/app/site/sengi/assets/emoji/64/0031-20e3.png +0 -0
  145. package/web/app/site/sengi/assets/emoji/64/0031.png +0 -0
  146. package/web/app/site/sengi/assets/emoji/64/0032-20e3.png +0 -0
  147. package/web/app/site/sengi/assets/emoji/64/0032.png +0 -0
  148. package/web/app/site/sengi/assets/emoji/64/0033-20e3.png +0 -0
  149. package/web/app/site/sengi/assets/emoji/64/0033.png +0 -0
  150. package/web/app/site/sengi/assets/emoji/64/0034-20e3.png +0 -0
  151. package/web/app/site/sengi/assets/emoji/64/0034.png +0 -0
  152. package/web/app/site/sengi/assets/emoji/64/0035-20e3.png +0 -0
  153. package/web/app/site/sengi/assets/emoji/64/0035.png +0 -0
  154. package/web/app/site/sengi/assets/emoji/64/0036-20e3.png +0 -0
  155. package/web/app/site/sengi/assets/emoji/64/0036.png +0 -0
  156. package/web/app/site/sengi/assets/emoji/64/0037-20e3.png +0 -0
  157. package/web/app/site/sengi/assets/emoji/64/0037.png +0 -0
  158. package/web/app/site/sengi/assets/emoji/64/0038-20e3.png +0 -0
  159. package/web/app/site/sengi/assets/emoji/64/0038.png +0 -0
  160. package/web/app/site/sengi/assets/emoji/64/0039-20e3.png +0 -0
  161. package/web/app/site/sengi/assets/emoji/64/0039.png +0 -0
  162. package/web/app/site/sengi/assets/emoji/64/00a9.png +0 -0
  163. package/web/app/site/sengi/assets/emoji/64/00ae.png +0 -0
  164. package/web/app/site/sengi/assets/emoji/64/1f004.png +0 -0
  165. package/web/app/site/sengi/assets/emoji/64/1f0cf.png +0 -0
  166. package/web/app/site/sengi/assets/emoji/64/1f170.png +0 -0
  167. package/web/app/site/sengi/assets/emoji/64/1f171.png +0 -0
  168. package/web/app/site/sengi/assets/emoji/64/1f17e.png +0 -0
  169. package/web/app/site/sengi/assets/emoji/64/1f17f.png +0 -0
  170. package/web/app/site/sengi/assets/emoji/64/1f18e.png +0 -0
  171. package/web/app/site/sengi/assets/emoji/64/1f191.png +0 -0
  172. package/web/app/site/sengi/assets/emoji/64/1f192.png +0 -0
  173. package/web/app/site/sengi/assets/emoji/64/1f193.png +0 -0
  174. package/web/app/site/sengi/assets/emoji/64/1f194.png +0 -0
  175. package/web/app/site/sengi/assets/emoji/64/1f195.png +0 -0
  176. package/web/app/site/sengi/assets/emoji/64/1f196.png +0 -0
  177. package/web/app/site/sengi/assets/emoji/64/1f197.png +0 -0
  178. package/web/app/site/sengi/assets/emoji/64/1f198.png +0 -0
  179. package/web/app/site/sengi/assets/emoji/64/1f199.png +0 -0
  180. package/web/app/site/sengi/assets/emoji/64/1f19a.png +0 -0
  181. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1e8.png +0 -0
  182. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1e9.png +0 -0
  183. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1ea.png +0 -0
  184. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1eb.png +0 -0
  185. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1ec.png +0 -0
  186. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1ee.png +0 -0
  187. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1f1.png +0 -0
  188. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1f2.png +0 -0
  189. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1f4.png +0 -0
  190. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1f6.png +0 -0
  191. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1f7.png +0 -0
  192. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1f8.png +0 -0
  193. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1f9.png +0 -0
  194. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1fa.png +0 -0
  195. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1fc.png +0 -0
  196. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1fd.png +0 -0
  197. package/web/app/site/sengi/assets/emoji/64/1f1e6-1f1ff.png +0 -0
  198. package/web/app/site/sengi/assets/emoji/64/1f1e6.png +0 -0
  199. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1e6.png +0 -0
  200. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1e7.png +0 -0
  201. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1e9.png +0 -0
  202. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1ea.png +0 -0
  203. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1eb.png +0 -0
  204. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1ec.png +0 -0
  205. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1ed.png +0 -0
  206. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1ee.png +0 -0
  207. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1ef.png +0 -0
  208. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1f1.png +0 -0
  209. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1f2.png +0 -0
  210. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1f3.png +0 -0
  211. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1f4.png +0 -0
  212. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1f6.png +0 -0
  213. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1f7.png +0 -0
  214. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1f8.png +0 -0
  215. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1f9.png +0 -0
  216. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1fb.png +0 -0
  217. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1fc.png +0 -0
  218. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1fe.png +0 -0
  219. package/web/app/site/sengi/assets/emoji/64/1f1e7-1f1ff.png +0 -0
  220. package/web/app/site/sengi/assets/emoji/64/1f1e7.png +0 -0
  221. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1e6.png +0 -0
  222. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1e8.png +0 -0
  223. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1e9.png +0 -0
  224. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1eb.png +0 -0
  225. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1ec.png +0 -0
  226. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1ed.png +0 -0
  227. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1ee.png +0 -0
  228. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1f0.png +0 -0
  229. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1f1.png +0 -0
  230. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1f2.png +0 -0
  231. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1f3.png +0 -0
  232. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1f4.png +0 -0
  233. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1f5.png +0 -0
  234. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1f6.png +0 -0
  235. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1f7.png +0 -0
  236. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1fa.png +0 -0
  237. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1fb.png +0 -0
  238. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1fc.png +0 -0
  239. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1fd.png +0 -0
  240. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1fe.png +0 -0
  241. package/web/app/site/sengi/assets/emoji/64/1f1e8-1f1ff.png +0 -0
  242. package/web/app/site/sengi/assets/emoji/64/1f1e8.png +0 -0
  243. package/web/app/site/sengi/assets/emoji/64/1f1e9-1f1ea.png +0 -0
  244. package/web/app/site/sengi/assets/emoji/64/1f1e9-1f1ec.png +0 -0
  245. package/web/app/site/sengi/assets/emoji/64/1f1e9-1f1ef.png +0 -0
  246. package/web/app/site/sengi/assets/emoji/64/1f1e9-1f1f0.png +0 -0
  247. package/web/app/site/sengi/assets/emoji/64/1f1e9-1f1f2.png +0 -0
  248. package/web/app/site/sengi/assets/emoji/64/1f1e9-1f1f4.png +0 -0
  249. package/web/app/site/sengi/assets/emoji/64/1f1e9-1f1ff.png +0 -0
  250. package/web/app/site/sengi/assets/emoji/64/1f1e9.png +0 -0
  251. package/web/app/site/sengi/assets/emoji/64/1f1ea-1f1e6.png +0 -0
  252. package/web/app/site/sengi/assets/emoji/64/1f1ea-1f1e8.png +0 -0
  253. package/web/app/site/sengi/assets/emoji/64/1f1ea-1f1ea.png +0 -0
  254. package/web/app/site/sengi/assets/emoji/64/1f1ea-1f1ec.png +0 -0
  255. package/web/app/site/sengi/assets/emoji/64/1f1ea-1f1ed.png +0 -0
  256. package/web/app/site/sengi/assets/emoji/64/1f1ea-1f1f7.png +0 -0
  257. package/web/app/site/sengi/assets/emoji/64/1f1ea-1f1f8.png +0 -0
  258. package/web/app/site/sengi/assets/emoji/64/1f1ea-1f1f9.png +0 -0
  259. package/web/app/site/sengi/assets/emoji/64/1f1ea-1f1fa.png +0 -0
  260. package/web/app/site/sengi/assets/emoji/64/1f1ea.png +0 -0
  261. package/web/app/site/sengi/assets/emoji/64/1f1eb-1f1ee.png +0 -0
  262. package/web/app/site/sengi/assets/emoji/64/1f1eb-1f1ef.png +0 -0
  263. package/web/app/site/sengi/assets/emoji/64/1f1eb-1f1f0.png +0 -0
  264. package/web/app/site/sengi/assets/emoji/64/1f1eb-1f1f2.png +0 -0
  265. package/web/app/site/sengi/assets/emoji/64/1f1eb-1f1f4.png +0 -0
  266. package/web/app/site/sengi/assets/emoji/64/1f1eb-1f1f7.png +0 -0
  267. package/web/app/site/sengi/assets/emoji/64/1f1eb.png +0 -0
  268. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1e6.png +0 -0
  269. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1e7.png +0 -0
  270. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1e9.png +0 -0
  271. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1ea.png +0 -0
  272. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1eb.png +0 -0
  273. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1ec.png +0 -0
  274. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1ed.png +0 -0
  275. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1ee.png +0 -0
  276. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1f1.png +0 -0
  277. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1f2.png +0 -0
  278. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1f3.png +0 -0
  279. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1f5.png +0 -0
  280. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1f6.png +0 -0
  281. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1f7.png +0 -0
  282. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1f8.png +0 -0
  283. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1f9.png +0 -0
  284. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1fa.png +0 -0
  285. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1fc.png +0 -0
  286. package/web/app/site/sengi/assets/emoji/64/1f1ec-1f1fe.png +0 -0
  287. package/web/app/site/sengi/assets/emoji/64/1f1ec.png +0 -0
  288. package/web/app/site/sengi/assets/emoji/64/1f1ed-1f1f0.png +0 -0
  289. package/web/app/site/sengi/assets/emoji/64/1f1ed-1f1f2.png +0 -0
  290. package/web/app/site/sengi/assets/emoji/64/1f1ed-1f1f3.png +0 -0
  291. package/web/app/site/sengi/assets/emoji/64/1f1ed-1f1f7.png +0 -0
  292. package/web/app/site/sengi/assets/emoji/64/1f1ed-1f1f9.png +0 -0
  293. package/web/app/site/sengi/assets/emoji/64/1f1ed-1f1fa.png +0 -0
  294. package/web/app/site/sengi/assets/emoji/64/1f1ed.png +0 -0
  295. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1e8.png +0 -0
  296. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1e9.png +0 -0
  297. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1ea.png +0 -0
  298. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1f1.png +0 -0
  299. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1f2.png +0 -0
  300. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1f3.png +0 -0
  301. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1f4.png +0 -0
  302. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1f6.png +0 -0
  303. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1f7.png +0 -0
  304. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1f8.png +0 -0
  305. package/web/app/site/sengi/assets/emoji/64/1f1ee-1f1f9.png +0 -0
  306. package/web/app/site/sengi/assets/emoji/64/1f1ee.png +0 -0
  307. package/web/app/site/sengi/assets/emoji/64/1f1ef-1f1ea.png +0 -0
  308. package/web/app/site/sengi/assets/emoji/64/1f1ef-1f1f2.png +0 -0
  309. package/web/app/site/sengi/assets/emoji/64/1f1ef-1f1f4.png +0 -0
  310. package/web/app/site/sengi/assets/emoji/64/1f1ef-1f1f5.png +0 -0
  311. package/web/app/site/sengi/assets/emoji/64/1f1ef.png +0 -0
  312. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1ea.png +0 -0
  313. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1ec.png +0 -0
  314. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1ed.png +0 -0
  315. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1ee.png +0 -0
  316. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1f2.png +0 -0
  317. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1f3.png +0 -0
  318. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1f5.png +0 -0
  319. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1f7.png +0 -0
  320. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1fc.png +0 -0
  321. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1fe.png +0 -0
  322. package/web/app/site/sengi/assets/emoji/64/1f1f0-1f1ff.png +0 -0
  323. package/web/app/site/sengi/assets/emoji/64/1f1f0.png +0 -0
  324. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1e6.png +0 -0
  325. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1e7.png +0 -0
  326. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1e8.png +0 -0
  327. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1ee.png +0 -0
  328. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1f0.png +0 -0
  329. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1f7.png +0 -0
  330. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1f8.png +0 -0
  331. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1f9.png +0 -0
  332. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1fa.png +0 -0
  333. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1fb.png +0 -0
  334. package/web/app/site/sengi/assets/emoji/64/1f1f1-1f1fe.png +0 -0
  335. package/web/app/site/sengi/assets/emoji/64/1f1f1.png +0 -0
  336. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1e6.png +0 -0
  337. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1e8.png +0 -0
  338. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1e9.png +0 -0
  339. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1ea.png +0 -0
  340. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1eb.png +0 -0
  341. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1ec.png +0 -0
  342. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1ed.png +0 -0
  343. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f0.png +0 -0
  344. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f1.png +0 -0
  345. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f2.png +0 -0
  346. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f3.png +0 -0
  347. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f4.png +0 -0
  348. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f5.png +0 -0
  349. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f6.png +0 -0
  350. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f7.png +0 -0
  351. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f8.png +0 -0
  352. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1f9.png +0 -0
  353. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1fa.png +0 -0
  354. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1fb.png +0 -0
  355. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1fc.png +0 -0
  356. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1fd.png +0 -0
  357. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1fe.png +0 -0
  358. package/web/app/site/sengi/assets/emoji/64/1f1f2-1f1ff.png +0 -0
  359. package/web/app/site/sengi/assets/emoji/64/1f1f2.png +0 -0
  360. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1e6.png +0 -0
  361. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1e8.png +0 -0
  362. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1ea.png +0 -0
  363. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1eb.png +0 -0
  364. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1ec.png +0 -0
  365. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1ee.png +0 -0
  366. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1f1.png +0 -0
  367. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1f4.png +0 -0
  368. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1f5.png +0 -0
  369. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1f7.png +0 -0
  370. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1fa.png +0 -0
  371. package/web/app/site/sengi/assets/emoji/64/1f1f3-1f1ff.png +0 -0
  372. package/web/app/site/sengi/assets/emoji/64/1f1f3.png +0 -0
  373. package/web/app/site/sengi/assets/emoji/64/1f1f4-1f1f2.png +0 -0
  374. package/web/app/site/sengi/assets/emoji/64/1f1f4.png +0 -0
  375. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1e6.png +0 -0
  376. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1ea.png +0 -0
  377. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1eb.png +0 -0
  378. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1ec.png +0 -0
  379. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1ed.png +0 -0
  380. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1f0.png +0 -0
  381. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1f1.png +0 -0
  382. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1f2.png +0 -0
  383. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1f3.png +0 -0
  384. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1f7.png +0 -0
  385. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1f8.png +0 -0
  386. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1f9.png +0 -0
  387. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1fc.png +0 -0
  388. package/web/app/site/sengi/assets/emoji/64/1f1f5-1f1fe.png +0 -0
  389. package/web/app/site/sengi/assets/emoji/64/1f1f5.png +0 -0
  390. package/web/app/site/sengi/assets/emoji/64/1f1f6-1f1e6.png +0 -0
  391. package/web/app/site/sengi/assets/emoji/64/1f1f6.png +0 -0
  392. package/web/app/site/sengi/assets/emoji/64/1f1f7-1f1ea.png +0 -0
  393. package/web/app/site/sengi/assets/emoji/64/1f1f7-1f1f4.png +0 -0
  394. package/web/app/site/sengi/assets/emoji/64/1f1f7-1f1f8.png +0 -0
  395. package/web/app/site/sengi/assets/emoji/64/1f1f7-1f1fa.png +0 -0
  396. package/web/app/site/sengi/assets/emoji/64/1f1f7-1f1fc.png +0 -0
  397. package/web/app/site/sengi/assets/emoji/64/1f1f7.png +0 -0
  398. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1e6.png +0 -0
  399. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1e7.png +0 -0
  400. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1e8.png +0 -0
  401. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1e9.png +0 -0
  402. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1ea.png +0 -0
  403. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1ec.png +0 -0
  404. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1ed.png +0 -0
  405. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1ee.png +0 -0
  406. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1ef.png +0 -0
  407. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1f0.png +0 -0
  408. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1f1.png +0 -0
  409. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1f2.png +0 -0
  410. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1f3.png +0 -0
  411. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1f4.png +0 -0
  412. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1f7.png +0 -0
  413. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1f8.png +0 -0
  414. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1f9.png +0 -0
  415. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1fb.png +0 -0
  416. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1fd.png +0 -0
  417. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1fe.png +0 -0
  418. package/web/app/site/sengi/assets/emoji/64/1f1f8-1f1ff.png +0 -0
  419. package/web/app/site/sengi/assets/emoji/64/1f1f8.png +0 -0
  420. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1e6.png +0 -0
  421. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1e8.png +0 -0
  422. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1e9.png +0 -0
  423. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1eb.png +0 -0
  424. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1ec.png +0 -0
  425. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1ed.png +0 -0
  426. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1ef.png +0 -0
  427. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1f0.png +0 -0
  428. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1f1.png +0 -0
  429. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1f2.png +0 -0
  430. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1f3.png +0 -0
  431. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1f4.png +0 -0
  432. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1f7.png +0 -0
  433. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1f9.png +0 -0
  434. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1fb.png +0 -0
  435. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1fc.png +0 -0
  436. package/web/app/site/sengi/assets/emoji/64/1f1f9-1f1ff.png +0 -0
  437. package/web/app/site/sengi/assets/emoji/64/1f1f9.png +0 -0
  438. package/web/app/site/sengi/assets/emoji/64/1f1fa-1f1e6.png +0 -0
  439. package/web/app/site/sengi/assets/emoji/64/1f1fa-1f1ec.png +0 -0
  440. package/web/app/site/sengi/assets/emoji/64/1f1fa-1f1f2.png +0 -0
  441. package/web/app/site/sengi/assets/emoji/64/1f1fa-1f1f3.png +0 -0
  442. package/web/app/site/sengi/assets/emoji/64/1f1fa-1f1f8.png +0 -0
  443. package/web/app/site/sengi/assets/emoji/64/1f1fa-1f1fe.png +0 -0
  444. package/web/app/site/sengi/assets/emoji/64/1f1fa-1f1ff.png +0 -0
  445. package/web/app/site/sengi/assets/emoji/64/1f1fa.png +0 -0
  446. package/web/app/site/sengi/assets/emoji/64/1f1fb-1f1e6.png +0 -0
  447. package/web/app/site/sengi/assets/emoji/64/1f1fb-1f1e8.png +0 -0
  448. package/web/app/site/sengi/assets/emoji/64/1f1fb-1f1ea.png +0 -0
  449. package/web/app/site/sengi/assets/emoji/64/1f1fb-1f1ec.png +0 -0
  450. package/web/app/site/sengi/assets/emoji/64/1f1fb-1f1ee.png +0 -0
  451. package/web/app/site/sengi/assets/emoji/64/1f1fb-1f1f3.png +0 -0
  452. package/web/app/site/sengi/assets/emoji/64/1f1fb-1f1fa.png +0 -0
  453. package/web/app/site/sengi/assets/emoji/64/1f1fb.png +0 -0
  454. package/web/app/site/sengi/assets/emoji/64/1f1fc-1f1eb.png +0 -0
  455. package/web/app/site/sengi/assets/emoji/64/1f1fc-1f1f8.png +0 -0
  456. package/web/app/site/sengi/assets/emoji/64/1f1fc.png +0 -0
  457. package/web/app/site/sengi/assets/emoji/64/1f1fd-1f1f0.png +0 -0
  458. package/web/app/site/sengi/assets/emoji/64/1f1fd.png +0 -0
  459. package/web/app/site/sengi/assets/emoji/64/1f1fe-1f1ea.png +0 -0
  460. package/web/app/site/sengi/assets/emoji/64/1f1fe-1f1f9.png +0 -0
  461. package/web/app/site/sengi/assets/emoji/64/1f1fe.png +0 -0
  462. package/web/app/site/sengi/assets/emoji/64/1f1ff-1f1e6.png +0 -0
  463. package/web/app/site/sengi/assets/emoji/64/1f1ff-1f1f2.png +0 -0
  464. package/web/app/site/sengi/assets/emoji/64/1f1ff-1f1fc.png +0 -0
  465. package/web/app/site/sengi/assets/emoji/64/1f1ff.png +0 -0
  466. package/web/app/site/sengi/assets/emoji/64/1f201.png +0 -0
  467. package/web/app/site/sengi/assets/emoji/64/1f202.png +0 -0
  468. package/web/app/site/sengi/assets/emoji/64/1f21a.png +0 -0
  469. package/web/app/site/sengi/assets/emoji/64/1f22f.png +0 -0
  470. package/web/app/site/sengi/assets/emoji/64/1f232.png +0 -0
  471. package/web/app/site/sengi/assets/emoji/64/1f233.png +0 -0
  472. package/web/app/site/sengi/assets/emoji/64/1f234.png +0 -0
  473. package/web/app/site/sengi/assets/emoji/64/1f235.png +0 -0
  474. package/web/app/site/sengi/assets/emoji/64/1f236.png +0 -0
  475. package/web/app/site/sengi/assets/emoji/64/1f237.png +0 -0
  476. package/web/app/site/sengi/assets/emoji/64/1f238.png +0 -0
  477. package/web/app/site/sengi/assets/emoji/64/1f239.png +0 -0
  478. package/web/app/site/sengi/assets/emoji/64/1f23a.png +0 -0
  479. package/web/app/site/sengi/assets/emoji/64/1f250.png +0 -0
  480. package/web/app/site/sengi/assets/emoji/64/1f251.png +0 -0
  481. package/web/app/site/sengi/assets/emoji/64/1f300.png +0 -0
  482. package/web/app/site/sengi/assets/emoji/64/1f301.png +0 -0
  483. package/web/app/site/sengi/assets/emoji/64/1f302.png +0 -0
  484. package/web/app/site/sengi/assets/emoji/64/1f303.png +0 -0
  485. package/web/app/site/sengi/assets/emoji/64/1f304.png +0 -0
  486. package/web/app/site/sengi/assets/emoji/64/1f305.png +0 -0
  487. package/web/app/site/sengi/assets/emoji/64/1f306.png +0 -0
  488. package/web/app/site/sengi/assets/emoji/64/1f307.png +0 -0
  489. package/web/app/site/sengi/assets/emoji/64/1f308.png +0 -0
  490. package/web/app/site/sengi/assets/emoji/64/1f309.png +0 -0
  491. package/web/app/site/sengi/assets/emoji/64/1f30a.png +0 -0
  492. package/web/app/site/sengi/assets/emoji/64/1f30b.png +0 -0
  493. package/web/app/site/sengi/assets/emoji/64/1f30c.png +0 -0
  494. package/web/app/site/sengi/assets/emoji/64/1f30d.png +0 -0
  495. package/web/app/site/sengi/assets/emoji/64/1f30e.png +0 -0
  496. package/web/app/site/sengi/assets/emoji/64/1f30f.png +0 -0
  497. package/web/app/site/sengi/assets/emoji/64/1f310.png +0 -0
  498. package/web/app/site/sengi/assets/emoji/64/1f311.png +0 -0
  499. package/web/app/site/sengi/assets/emoji/64/1f312.png +0 -0
  500. package/web/app/site/sengi/assets/emoji/64/1f313.png +0 -0
  501. package/web/app/site/sengi/assets/emoji/64/1f314.png +0 -0
  502. package/web/app/site/sengi/assets/emoji/64/1f315.png +0 -0
  503. package/web/app/site/sengi/assets/emoji/64/1f316.png +0 -0
  504. package/web/app/site/sengi/assets/emoji/64/1f317.png +0 -0
  505. package/web/app/site/sengi/assets/emoji/64/1f318.png +0 -0
  506. package/web/app/site/sengi/assets/emoji/64/1f319.png +0 -0
  507. package/web/app/site/sengi/assets/emoji/64/1f31a.png +0 -0
  508. package/web/app/site/sengi/assets/emoji/64/1f31b.png +0 -0
  509. package/web/app/site/sengi/assets/emoji/64/1f31c.png +0 -0
  510. package/web/app/site/sengi/assets/emoji/64/1f31d.png +0 -0
  511. package/web/app/site/sengi/assets/emoji/64/1f31e.png +0 -0
  512. package/web/app/site/sengi/assets/emoji/64/1f31f.png +0 -0
  513. package/web/app/site/sengi/assets/emoji/64/1f320.png +0 -0
  514. package/web/app/site/sengi/assets/emoji/64/1f321.png +0 -0
  515. package/web/app/site/sengi/assets/emoji/64/1f324.png +0 -0
  516. package/web/app/site/sengi/assets/emoji/64/1f325.png +0 -0
  517. package/web/app/site/sengi/assets/emoji/64/1f326.png +0 -0
  518. package/web/app/site/sengi/assets/emoji/64/1f327.png +0 -0
  519. package/web/app/site/sengi/assets/emoji/64/1f328.png +0 -0
  520. package/web/app/site/sengi/assets/emoji/64/1f329.png +0 -0
  521. package/web/app/site/sengi/assets/emoji/64/1f32a.png +0 -0
  522. package/web/app/site/sengi/assets/emoji/64/1f32b.png +0 -0
  523. package/web/app/site/sengi/assets/emoji/64/1f32c.png +0 -0
  524. package/web/app/site/sengi/assets/emoji/64/1f32d.png +0 -0
  525. package/web/app/site/sengi/assets/emoji/64/1f32e.png +0 -0
  526. package/web/app/site/sengi/assets/emoji/64/1f32f.png +0 -0
  527. package/web/app/site/sengi/assets/emoji/64/1f330.png +0 -0
  528. package/web/app/site/sengi/assets/emoji/64/1f331.png +0 -0
  529. package/web/app/site/sengi/assets/emoji/64/1f332.png +0 -0
  530. package/web/app/site/sengi/assets/emoji/64/1f333.png +0 -0
  531. package/web/app/site/sengi/assets/emoji/64/1f334.png +0 -0
  532. package/web/app/site/sengi/assets/emoji/64/1f335.png +0 -0
  533. package/web/app/site/sengi/assets/emoji/64/1f336.png +0 -0
  534. package/web/app/site/sengi/assets/emoji/64/1f337.png +0 -0
  535. package/web/app/site/sengi/assets/emoji/64/1f338.png +0 -0
  536. package/web/app/site/sengi/assets/emoji/64/1f339.png +0 -0
  537. package/web/app/site/sengi/assets/emoji/64/1f33a.png +0 -0
  538. package/web/app/site/sengi/assets/emoji/64/1f33b.png +0 -0
  539. package/web/app/site/sengi/assets/emoji/64/1f33c.png +0 -0
  540. package/web/app/site/sengi/assets/emoji/64/1f33d.png +0 -0
  541. package/web/app/site/sengi/assets/emoji/64/1f33e.png +0 -0
  542. package/web/app/site/sengi/assets/emoji/64/1f33f.png +0 -0
  543. package/web/app/site/sengi/assets/emoji/64/1f340.png +0 -0
  544. package/web/app/site/sengi/assets/emoji/64/1f341.png +0 -0
  545. package/web/app/site/sengi/assets/emoji/64/1f342.png +0 -0
  546. package/web/app/site/sengi/assets/emoji/64/1f343.png +0 -0
  547. package/web/app/site/sengi/assets/emoji/64/1f344-1f7eb.png +0 -0
  548. package/web/app/site/sengi/assets/emoji/64/1f344.png +0 -0
  549. package/web/app/site/sengi/assets/emoji/64/1f345.png +0 -0
  550. package/web/app/site/sengi/assets/emoji/64/1f346.png +0 -0
  551. package/web/app/site/sengi/assets/emoji/64/1f347.png +0 -0
  552. package/web/app/site/sengi/assets/emoji/64/1f348.png +0 -0
  553. package/web/app/site/sengi/assets/emoji/64/1f349.png +0 -0
  554. package/web/app/site/sengi/assets/emoji/64/1f34a.png +0 -0
  555. package/web/app/site/sengi/assets/emoji/64/1f34b-1f7e9.png +0 -0
  556. package/web/app/site/sengi/assets/emoji/64/1f34b.png +0 -0
  557. package/web/app/site/sengi/assets/emoji/64/1f34c.png +0 -0
  558. package/web/app/site/sengi/assets/emoji/64/1f34d.png +0 -0
  559. package/web/app/site/sengi/assets/emoji/64/1f34e.png +0 -0
  560. package/web/app/site/sengi/assets/emoji/64/1f34f.png +0 -0
  561. package/web/app/site/sengi/assets/emoji/64/1f350.png +0 -0
  562. package/web/app/site/sengi/assets/emoji/64/1f351.png +0 -0
  563. package/web/app/site/sengi/assets/emoji/64/1f352.png +0 -0
  564. package/web/app/site/sengi/assets/emoji/64/1f353.png +0 -0
  565. package/web/app/site/sengi/assets/emoji/64/1f354.png +0 -0
  566. package/web/app/site/sengi/assets/emoji/64/1f355.png +0 -0
  567. package/web/app/site/sengi/assets/emoji/64/1f356.png +0 -0
  568. package/web/app/site/sengi/assets/emoji/64/1f357.png +0 -0
  569. package/web/app/site/sengi/assets/emoji/64/1f358.png +0 -0
  570. package/web/app/site/sengi/assets/emoji/64/1f359.png +0 -0
  571. package/web/app/site/sengi/assets/emoji/64/1f35a.png +0 -0
  572. package/web/app/site/sengi/assets/emoji/64/1f35b.png +0 -0
  573. package/web/app/site/sengi/assets/emoji/64/1f35c.png +0 -0
  574. package/web/app/site/sengi/assets/emoji/64/1f35d.png +0 -0
  575. package/web/app/site/sengi/assets/emoji/64/1f35e.png +0 -0
  576. package/web/app/site/sengi/assets/emoji/64/1f35f.png +0 -0
  577. package/web/app/site/sengi/assets/emoji/64/1f360.png +0 -0
  578. package/web/app/site/sengi/assets/emoji/64/1f361.png +0 -0
  579. package/web/app/site/sengi/assets/emoji/64/1f362.png +0 -0
  580. package/web/app/site/sengi/assets/emoji/64/1f363.png +0 -0
  581. package/web/app/site/sengi/assets/emoji/64/1f364.png +0 -0
  582. package/web/app/site/sengi/assets/emoji/64/1f365.png +0 -0
  583. package/web/app/site/sengi/assets/emoji/64/1f366.png +0 -0
  584. package/web/app/site/sengi/assets/emoji/64/1f367.png +0 -0
  585. package/web/app/site/sengi/assets/emoji/64/1f368.png +0 -0
  586. package/web/app/site/sengi/assets/emoji/64/1f369.png +0 -0
  587. package/web/app/site/sengi/assets/emoji/64/1f36a.png +0 -0
  588. package/web/app/site/sengi/assets/emoji/64/1f36b.png +0 -0
  589. package/web/app/site/sengi/assets/emoji/64/1f36c.png +0 -0
  590. package/web/app/site/sengi/assets/emoji/64/1f36d.png +0 -0
  591. package/web/app/site/sengi/assets/emoji/64/1f36e.png +0 -0
  592. package/web/app/site/sengi/assets/emoji/64/1f36f.png +0 -0
  593. package/web/app/site/sengi/assets/emoji/64/1f370.png +0 -0
  594. package/web/app/site/sengi/assets/emoji/64/1f371.png +0 -0
  595. package/web/app/site/sengi/assets/emoji/64/1f372.png +0 -0
  596. package/web/app/site/sengi/assets/emoji/64/1f373.png +0 -0
  597. package/web/app/site/sengi/assets/emoji/64/1f374.png +0 -0
  598. package/web/app/site/sengi/assets/emoji/64/1f375.png +0 -0
  599. package/web/app/site/sengi/assets/emoji/64/1f376.png +0 -0
  600. package/web/app/site/sengi/assets/emoji/64/1f377.png +0 -0
  601. package/web/app/site/sengi/assets/emoji/64/1f378.png +0 -0
  602. package/web/app/site/sengi/assets/emoji/64/1f379.png +0 -0
  603. package/web/app/site/sengi/assets/emoji/64/1f37a.png +0 -0
  604. package/web/app/site/sengi/assets/emoji/64/1f37b.png +0 -0
  605. package/web/app/site/sengi/assets/emoji/64/1f37c.png +0 -0
  606. package/web/app/site/sengi/assets/emoji/64/1f37d.png +0 -0
  607. package/web/app/site/sengi/assets/emoji/64/1f37e.png +0 -0
  608. package/web/app/site/sengi/assets/emoji/64/1f37f.png +0 -0
  609. package/web/app/site/sengi/assets/emoji/64/1f380.png +0 -0
  610. package/web/app/site/sengi/assets/emoji/64/1f381.png +0 -0
  611. package/web/app/site/sengi/assets/emoji/64/1f382.png +0 -0
  612. package/web/app/site/sengi/assets/emoji/64/1f383.png +0 -0
  613. package/web/app/site/sengi/assets/emoji/64/1f384.png +0 -0
  614. package/web/app/site/sengi/assets/emoji/64/1f385-1f3fb.png +0 -0
  615. package/web/app/site/sengi/assets/emoji/64/1f385-1f3fc.png +0 -0
  616. package/web/app/site/sengi/assets/emoji/64/1f385-1f3fd.png +0 -0
  617. package/web/app/site/sengi/assets/emoji/64/1f385-1f3fe.png +0 -0
  618. package/web/app/site/sengi/assets/emoji/64/1f385-1f3ff.png +0 -0
  619. package/web/app/site/sengi/assets/emoji/64/1f385.png +0 -0
  620. package/web/app/site/sengi/assets/emoji/64/1f386.png +0 -0
  621. package/web/app/site/sengi/assets/emoji/64/1f387.png +0 -0
  622. package/web/app/site/sengi/assets/emoji/64/1f388.png +0 -0
  623. package/web/app/site/sengi/assets/emoji/64/1f389.png +0 -0
  624. package/web/app/site/sengi/assets/emoji/64/1f38a.png +0 -0
  625. package/web/app/site/sengi/assets/emoji/64/1f38b.png +0 -0
  626. package/web/app/site/sengi/assets/emoji/64/1f38c.png +0 -0
  627. package/web/app/site/sengi/assets/emoji/64/1f38d.png +0 -0
  628. package/web/app/site/sengi/assets/emoji/64/1f38e.png +0 -0
  629. package/web/app/site/sengi/assets/emoji/64/1f38f.png +0 -0
  630. package/web/app/site/sengi/assets/emoji/64/1f390.png +0 -0
  631. package/web/app/site/sengi/assets/emoji/64/1f391.png +0 -0
  632. package/web/app/site/sengi/assets/emoji/64/1f392.png +0 -0
  633. package/web/app/site/sengi/assets/emoji/64/1f393.png +0 -0
  634. package/web/app/site/sengi/assets/emoji/64/1f396.png +0 -0
  635. package/web/app/site/sengi/assets/emoji/64/1f397.png +0 -0
  636. package/web/app/site/sengi/assets/emoji/64/1f399.png +0 -0
  637. package/web/app/site/sengi/assets/emoji/64/1f39a.png +0 -0
  638. package/web/app/site/sengi/assets/emoji/64/1f39b.png +0 -0
  639. package/web/app/site/sengi/assets/emoji/64/1f39e.png +0 -0
  640. package/web/app/site/sengi/assets/emoji/64/1f39f.png +0 -0
  641. package/web/app/site/sengi/assets/emoji/64/1f3a0.png +0 -0
  642. package/web/app/site/sengi/assets/emoji/64/1f3a1.png +0 -0
  643. package/web/app/site/sengi/assets/emoji/64/1f3a2.png +0 -0
  644. package/web/app/site/sengi/assets/emoji/64/1f3a3.png +0 -0
  645. package/web/app/site/sengi/assets/emoji/64/1f3a4.png +0 -0
  646. package/web/app/site/sengi/assets/emoji/64/1f3a5.png +0 -0
  647. package/web/app/site/sengi/assets/emoji/64/1f3a6.png +0 -0
  648. package/web/app/site/sengi/assets/emoji/64/1f3a7.png +0 -0
  649. package/web/app/site/sengi/assets/emoji/64/1f3a8.png +0 -0
  650. package/web/app/site/sengi/assets/emoji/64/1f3a9.png +0 -0
  651. package/web/app/site/sengi/assets/emoji/64/1f3aa.png +0 -0
  652. package/web/app/site/sengi/assets/emoji/64/1f3ab.png +0 -0
  653. package/web/app/site/sengi/assets/emoji/64/1f3ac.png +0 -0
  654. package/web/app/site/sengi/assets/emoji/64/1f3ad.png +0 -0
  655. package/web/app/site/sengi/assets/emoji/64/1f3ae.png +0 -0
  656. package/web/app/site/sengi/assets/emoji/64/1f3af.png +0 -0
  657. package/web/app/site/sengi/assets/emoji/64/1f3b0.png +0 -0
  658. package/web/app/site/sengi/assets/emoji/64/1f3b1.png +0 -0
  659. package/web/app/site/sengi/assets/emoji/64/1f3b2.png +0 -0
  660. package/web/app/site/sengi/assets/emoji/64/1f3b3.png +0 -0
  661. package/web/app/site/sengi/assets/emoji/64/1f3b4.png +0 -0
  662. package/web/app/site/sengi/assets/emoji/64/1f3b5.png +0 -0
  663. package/web/app/site/sengi/assets/emoji/64/1f3b6.png +0 -0
  664. package/web/app/site/sengi/assets/emoji/64/1f3b7.png +0 -0
  665. package/web/app/site/sengi/assets/emoji/64/1f3b8.png +0 -0
  666. package/web/app/site/sengi/assets/emoji/64/1f3b9.png +0 -0
  667. package/web/app/site/sengi/assets/emoji/64/1f3ba.png +0 -0
  668. package/web/app/site/sengi/assets/emoji/64/1f3bb.png +0 -0
  669. package/web/app/site/sengi/assets/emoji/64/1f3bc.png +0 -0
  670. package/web/app/site/sengi/assets/emoji/64/1f3bd.png +0 -0
  671. package/web/app/site/sengi/assets/emoji/64/1f3be.png +0 -0
  672. package/web/app/site/sengi/assets/emoji/64/1f3bf.png +0 -0
  673. package/web/app/site/sengi/assets/emoji/64/1f3c0.png +0 -0
  674. package/web/app/site/sengi/assets/emoji/64/1f3c1.png +0 -0
  675. package/web/app/site/sengi/assets/emoji/64/1f3c2-1f3fb.png +0 -0
  676. package/web/app/site/sengi/assets/emoji/64/1f3c2-1f3fc.png +0 -0
  677. package/web/app/site/sengi/assets/emoji/64/1f3c2-1f3fd.png +0 -0
  678. package/web/app/site/sengi/assets/emoji/64/1f3c2-1f3fe.png +0 -0
  679. package/web/app/site/sengi/assets/emoji/64/1f3c2-1f3ff.png +0 -0
  680. package/web/app/site/sengi/assets/emoji/64/1f3c2.png +0 -0
  681. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fb-2640-27a1.png +0 -0
  682. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fb-2640.png +0 -0
  683. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fb-2642-27a1.png +0 -0
  684. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fb-2642.png +0 -0
  685. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fb-27a1.png +0 -0
  686. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fb.png +0 -0
  687. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fc-2640-27a1.png +0 -0
  688. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fc-2640.png +0 -0
  689. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fc-2642-27a1.png +0 -0
  690. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fc-2642.png +0 -0
  691. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fc-27a1.png +0 -0
  692. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fc.png +0 -0
  693. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fd-2640-27a1.png +0 -0
  694. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fd-2640.png +0 -0
  695. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fd-2642-27a1.png +0 -0
  696. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fd-2642.png +0 -0
  697. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fd-27a1.png +0 -0
  698. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fd.png +0 -0
  699. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fe-2640-27a1.png +0 -0
  700. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fe-2640.png +0 -0
  701. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fe-2642-27a1.png +0 -0
  702. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fe-2642.png +0 -0
  703. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fe-27a1.png +0 -0
  704. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3fe.png +0 -0
  705. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3ff-2640-27a1.png +0 -0
  706. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3ff-2640.png +0 -0
  707. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3ff-2642-27a1.png +0 -0
  708. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3ff-2642.png +0 -0
  709. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3ff-27a1.png +0 -0
  710. package/web/app/site/sengi/assets/emoji/64/1f3c3-1f3ff.png +0 -0
  711. package/web/app/site/sengi/assets/emoji/64/1f3c3-2640-27a1.png +0 -0
  712. package/web/app/site/sengi/assets/emoji/64/1f3c3-2640.png +0 -0
  713. package/web/app/site/sengi/assets/emoji/64/1f3c3-2642-27a1.png +0 -0
  714. package/web/app/site/sengi/assets/emoji/64/1f3c3-2642.png +0 -0
  715. package/web/app/site/sengi/assets/emoji/64/1f3c3-27a1.png +0 -0
  716. package/web/app/site/sengi/assets/emoji/64/1f3c3.png +0 -0
  717. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fb-2640.png +0 -0
  718. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fb-2642.png +0 -0
  719. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fb.png +0 -0
  720. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fc-2640.png +0 -0
  721. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fc-2642.png +0 -0
  722. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fc.png +0 -0
  723. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fd-2640.png +0 -0
  724. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fd-2642.png +0 -0
  725. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fd.png +0 -0
  726. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fe-2640.png +0 -0
  727. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fe-2642.png +0 -0
  728. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3fe.png +0 -0
  729. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3ff-2640.png +0 -0
  730. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3ff-2642.png +0 -0
  731. package/web/app/site/sengi/assets/emoji/64/1f3c4-1f3ff.png +0 -0
  732. package/web/app/site/sengi/assets/emoji/64/1f3c4-2640.png +0 -0
  733. package/web/app/site/sengi/assets/emoji/64/1f3c4-2642.png +0 -0
  734. package/web/app/site/sengi/assets/emoji/64/1f3c4.png +0 -0
  735. package/web/app/site/sengi/assets/emoji/64/1f3c5.png +0 -0
  736. package/web/app/site/sengi/assets/emoji/64/1f3c6.png +0 -0
  737. package/web/app/site/sengi/assets/emoji/64/1f3c7-1f3fb.png +0 -0
  738. package/web/app/site/sengi/assets/emoji/64/1f3c7-1f3fc.png +0 -0
  739. package/web/app/site/sengi/assets/emoji/64/1f3c7-1f3fd.png +0 -0
  740. package/web/app/site/sengi/assets/emoji/64/1f3c7-1f3fe.png +0 -0
  741. package/web/app/site/sengi/assets/emoji/64/1f3c7-1f3ff.png +0 -0
  742. package/web/app/site/sengi/assets/emoji/64/1f3c7.png +0 -0
  743. package/web/app/site/sengi/assets/emoji/64/1f3c8.png +0 -0
  744. package/web/app/site/sengi/assets/emoji/64/1f3c9.png +0 -0
  745. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fb-2640.png +0 -0
  746. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fb-2642.png +0 -0
  747. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fb.png +0 -0
  748. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fc-2640.png +0 -0
  749. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fc-2642.png +0 -0
  750. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fc.png +0 -0
  751. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fd-2640.png +0 -0
  752. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fd-2642.png +0 -0
  753. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fd.png +0 -0
  754. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fe-2640.png +0 -0
  755. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fe-2642.png +0 -0
  756. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3fe.png +0 -0
  757. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3ff-2640.png +0 -0
  758. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3ff-2642.png +0 -0
  759. package/web/app/site/sengi/assets/emoji/64/1f3ca-1f3ff.png +0 -0
  760. package/web/app/site/sengi/assets/emoji/64/1f3ca-2640.png +0 -0
  761. package/web/app/site/sengi/assets/emoji/64/1f3ca-2642.png +0 -0
  762. package/web/app/site/sengi/assets/emoji/64/1f3ca.png +0 -0
  763. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fb-2640.png +0 -0
  764. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fb-2642.png +0 -0
  765. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fb.png +0 -0
  766. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fc-2640.png +0 -0
  767. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fc-2642.png +0 -0
  768. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fc.png +0 -0
  769. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fd-2640.png +0 -0
  770. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fd-2642.png +0 -0
  771. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fd.png +0 -0
  772. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fe-2640.png +0 -0
  773. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fe-2642.png +0 -0
  774. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3fe.png +0 -0
  775. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3ff-2640.png +0 -0
  776. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3ff-2642.png +0 -0
  777. package/web/app/site/sengi/assets/emoji/64/1f3cb-1f3ff.png +0 -0
  778. package/web/app/site/sengi/assets/emoji/64/1f3cb-2640.png +0 -0
  779. package/web/app/site/sengi/assets/emoji/64/1f3cb-2642.png +0 -0
  780. package/web/app/site/sengi/assets/emoji/64/1f3cb.png +0 -0
  781. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fb-2640.png +0 -0
  782. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fb-2642.png +0 -0
  783. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fb.png +0 -0
  784. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fc-2640.png +0 -0
  785. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fc-2642.png +0 -0
  786. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fc.png +0 -0
  787. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fd-2640.png +0 -0
  788. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fd-2642.png +0 -0
  789. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fd.png +0 -0
  790. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fe-2640.png +0 -0
  791. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fe-2642.png +0 -0
  792. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3fe.png +0 -0
  793. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3ff-2640.png +0 -0
  794. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3ff-2642.png +0 -0
  795. package/web/app/site/sengi/assets/emoji/64/1f3cc-1f3ff.png +0 -0
  796. package/web/app/site/sengi/assets/emoji/64/1f3cc-2640.png +0 -0
  797. package/web/app/site/sengi/assets/emoji/64/1f3cc-2642.png +0 -0
  798. package/web/app/site/sengi/assets/emoji/64/1f3cc.png +0 -0
  799. package/web/app/site/sengi/assets/emoji/64/1f3cd.png +0 -0
  800. package/web/app/site/sengi/assets/emoji/64/1f3ce.png +0 -0
  801. package/web/app/site/sengi/assets/emoji/64/1f3cf.png +0 -0
  802. package/web/app/site/sengi/assets/emoji/64/1f3d0.png +0 -0
  803. package/web/app/site/sengi/assets/emoji/64/1f3d1.png +0 -0
  804. package/web/app/site/sengi/assets/emoji/64/1f3d2.png +0 -0
  805. package/web/app/site/sengi/assets/emoji/64/1f3d3.png +0 -0
  806. package/web/app/site/sengi/assets/emoji/64/1f3d4.png +0 -0
  807. package/web/app/site/sengi/assets/emoji/64/1f3d5.png +0 -0
  808. package/web/app/site/sengi/assets/emoji/64/1f3d6.png +0 -0
  809. package/web/app/site/sengi/assets/emoji/64/1f3d7.png +0 -0
  810. package/web/app/site/sengi/assets/emoji/64/1f3d8.png +0 -0
  811. package/web/app/site/sengi/assets/emoji/64/1f3d9.png +0 -0
  812. package/web/app/site/sengi/assets/emoji/64/1f3da.png +0 -0
  813. package/web/app/site/sengi/assets/emoji/64/1f3db.png +0 -0
  814. package/web/app/site/sengi/assets/emoji/64/1f3dc.png +0 -0
  815. package/web/app/site/sengi/assets/emoji/64/1f3dd.png +0 -0
  816. package/web/app/site/sengi/assets/emoji/64/1f3de.png +0 -0
  817. package/web/app/site/sengi/assets/emoji/64/1f3df.png +0 -0
  818. package/web/app/site/sengi/assets/emoji/64/1f3e0.png +0 -0
  819. package/web/app/site/sengi/assets/emoji/64/1f3e1.png +0 -0
  820. package/web/app/site/sengi/assets/emoji/64/1f3e2.png +0 -0
  821. package/web/app/site/sengi/assets/emoji/64/1f3e3.png +0 -0
  822. package/web/app/site/sengi/assets/emoji/64/1f3e4.png +0 -0
  823. package/web/app/site/sengi/assets/emoji/64/1f3e5.png +0 -0
  824. package/web/app/site/sengi/assets/emoji/64/1f3e6.png +0 -0
  825. package/web/app/site/sengi/assets/emoji/64/1f3e7.png +0 -0
  826. package/web/app/site/sengi/assets/emoji/64/1f3e8.png +0 -0
  827. package/web/app/site/sengi/assets/emoji/64/1f3e9.png +0 -0
  828. package/web/app/site/sengi/assets/emoji/64/1f3ea.png +0 -0
  829. package/web/app/site/sengi/assets/emoji/64/1f3eb.png +0 -0
  830. package/web/app/site/sengi/assets/emoji/64/1f3ec.png +0 -0
  831. package/web/app/site/sengi/assets/emoji/64/1f3ed.png +0 -0
  832. package/web/app/site/sengi/assets/emoji/64/1f3ee.png +0 -0
  833. package/web/app/site/sengi/assets/emoji/64/1f3ef.png +0 -0
  834. package/web/app/site/sengi/assets/emoji/64/1f3f0.png +0 -0
  835. package/web/app/site/sengi/assets/emoji/64/1f3f3-1f308.png +0 -0
  836. package/web/app/site/sengi/assets/emoji/64/1f3f3-26a7.png +0 -0
  837. package/web/app/site/sengi/assets/emoji/64/1f3f3.png +0 -0
  838. package/web/app/site/sengi/assets/emoji/64/1f3f4-2620.png +0 -0
  839. package/web/app/site/sengi/assets/emoji/64/1f3f4-e0067-e0062-e0065-e006e-e0067-e007f.png +0 -0
  840. package/web/app/site/sengi/assets/emoji/64/1f3f4-e0067-e0062-e0073-e0063-e0074-e007f.png +0 -0
  841. package/web/app/site/sengi/assets/emoji/64/1f3f4-e0067-e0062-e0077-e006c-e0073-e007f.png +0 -0
  842. package/web/app/site/sengi/assets/emoji/64/1f3f4.png +0 -0
  843. package/web/app/site/sengi/assets/emoji/64/1f3f5.png +0 -0
  844. package/web/app/site/sengi/assets/emoji/64/1f3f7.png +0 -0
  845. package/web/app/site/sengi/assets/emoji/64/1f3f8.png +0 -0
  846. package/web/app/site/sengi/assets/emoji/64/1f3f9.png +0 -0
  847. package/web/app/site/sengi/assets/emoji/64/1f3fa.png +0 -0
  848. package/web/app/site/sengi/assets/emoji/64/1f3fb.png +0 -0
  849. package/web/app/site/sengi/assets/emoji/64/1f3fc.png +0 -0
  850. package/web/app/site/sengi/assets/emoji/64/1f3fd.png +0 -0
  851. package/web/app/site/sengi/assets/emoji/64/1f3fe.png +0 -0
  852. package/web/app/site/sengi/assets/emoji/64/1f3ff.png +0 -0
  853. package/web/app/site/sengi/assets/emoji/64/1f400.png +0 -0
  854. package/web/app/site/sengi/assets/emoji/64/1f401.png +0 -0
  855. package/web/app/site/sengi/assets/emoji/64/1f402.png +0 -0
  856. package/web/app/site/sengi/assets/emoji/64/1f403.png +0 -0
  857. package/web/app/site/sengi/assets/emoji/64/1f404.png +0 -0
  858. package/web/app/site/sengi/assets/emoji/64/1f405.png +0 -0
  859. package/web/app/site/sengi/assets/emoji/64/1f406.png +0 -0
  860. package/web/app/site/sengi/assets/emoji/64/1f407.png +0 -0
  861. package/web/app/site/sengi/assets/emoji/64/1f408-2b1b.png +0 -0
  862. package/web/app/site/sengi/assets/emoji/64/1f408.png +0 -0
  863. package/web/app/site/sengi/assets/emoji/64/1f409.png +0 -0
  864. package/web/app/site/sengi/assets/emoji/64/1f40a.png +0 -0
  865. package/web/app/site/sengi/assets/emoji/64/1f40b.png +0 -0
  866. package/web/app/site/sengi/assets/emoji/64/1f40c.png +0 -0
  867. package/web/app/site/sengi/assets/emoji/64/1f40d.png +0 -0
  868. package/web/app/site/sengi/assets/emoji/64/1f40e.png +0 -0
  869. package/web/app/site/sengi/assets/emoji/64/1f40f.png +0 -0
  870. package/web/app/site/sengi/assets/emoji/64/1f410.png +0 -0
  871. package/web/app/site/sengi/assets/emoji/64/1f411.png +0 -0
  872. package/web/app/site/sengi/assets/emoji/64/1f412.png +0 -0
  873. package/web/app/site/sengi/assets/emoji/64/1f413.png +0 -0
  874. package/web/app/site/sengi/assets/emoji/64/1f414.png +0 -0
  875. package/web/app/site/sengi/assets/emoji/64/1f415-1f9ba.png +0 -0
  876. package/web/app/site/sengi/assets/emoji/64/1f415.png +0 -0
  877. package/web/app/site/sengi/assets/emoji/64/1f416.png +0 -0
  878. package/web/app/site/sengi/assets/emoji/64/1f417.png +0 -0
  879. package/web/app/site/sengi/assets/emoji/64/1f418.png +0 -0
  880. package/web/app/site/sengi/assets/emoji/64/1f419.png +0 -0
  881. package/web/app/site/sengi/assets/emoji/64/1f41a.png +0 -0
  882. package/web/app/site/sengi/assets/emoji/64/1f41b.png +0 -0
  883. package/web/app/site/sengi/assets/emoji/64/1f41c.png +0 -0
  884. package/web/app/site/sengi/assets/emoji/64/1f41d.png +0 -0
  885. package/web/app/site/sengi/assets/emoji/64/1f41e.png +0 -0
  886. package/web/app/site/sengi/assets/emoji/64/1f41f.png +0 -0
  887. package/web/app/site/sengi/assets/emoji/64/1f420.png +0 -0
  888. package/web/app/site/sengi/assets/emoji/64/1f421.png +0 -0
  889. package/web/app/site/sengi/assets/emoji/64/1f422.png +0 -0
  890. package/web/app/site/sengi/assets/emoji/64/1f423.png +0 -0
  891. package/web/app/site/sengi/assets/emoji/64/1f424.png +0 -0
  892. package/web/app/site/sengi/assets/emoji/64/1f425.png +0 -0
  893. package/web/app/site/sengi/assets/emoji/64/1f426-1f525.png +0 -0
  894. package/web/app/site/sengi/assets/emoji/64/1f426-2b1b.png +0 -0
  895. package/web/app/site/sengi/assets/emoji/64/1f426.png +0 -0
  896. package/web/app/site/sengi/assets/emoji/64/1f427.png +0 -0
  897. package/web/app/site/sengi/assets/emoji/64/1f428.png +0 -0
  898. package/web/app/site/sengi/assets/emoji/64/1f429.png +0 -0
  899. package/web/app/site/sengi/assets/emoji/64/1f42a.png +0 -0
  900. package/web/app/site/sengi/assets/emoji/64/1f42b.png +0 -0
  901. package/web/app/site/sengi/assets/emoji/64/1f42c.png +0 -0
  902. package/web/app/site/sengi/assets/emoji/64/1f42d.png +0 -0
  903. package/web/app/site/sengi/assets/emoji/64/1f42e.png +0 -0
  904. package/web/app/site/sengi/assets/emoji/64/1f42f.png +0 -0
  905. package/web/app/site/sengi/assets/emoji/64/1f430.png +0 -0
  906. package/web/app/site/sengi/assets/emoji/64/1f431.png +0 -0
  907. package/web/app/site/sengi/assets/emoji/64/1f432.png +0 -0
  908. package/web/app/site/sengi/assets/emoji/64/1f433.png +0 -0
  909. package/web/app/site/sengi/assets/emoji/64/1f434.png +0 -0
  910. package/web/app/site/sengi/assets/emoji/64/1f435.png +0 -0
  911. package/web/app/site/sengi/assets/emoji/64/1f436.png +0 -0
  912. package/web/app/site/sengi/assets/emoji/64/1f437.png +0 -0
  913. package/web/app/site/sengi/assets/emoji/64/1f438.png +0 -0
  914. package/web/app/site/sengi/assets/emoji/64/1f439.png +0 -0
  915. package/web/app/site/sengi/assets/emoji/64/1f43a.png +0 -0
  916. package/web/app/site/sengi/assets/emoji/64/1f43b-2744.png +0 -0
  917. package/web/app/site/sengi/assets/emoji/64/1f43b.png +0 -0
  918. package/web/app/site/sengi/assets/emoji/64/1f43c.png +0 -0
  919. package/web/app/site/sengi/assets/emoji/64/1f43d.png +0 -0
  920. package/web/app/site/sengi/assets/emoji/64/1f43e.png +0 -0
  921. package/web/app/site/sengi/assets/emoji/64/1f43f.png +0 -0
  922. package/web/app/site/sengi/assets/emoji/64/1f440.png +0 -0
  923. package/web/app/site/sengi/assets/emoji/64/1f441-1f5e8.png +0 -0
  924. package/web/app/site/sengi/assets/emoji/64/1f441.png +0 -0
  925. package/web/app/site/sengi/assets/emoji/64/1f442-1f3fb.png +0 -0
  926. package/web/app/site/sengi/assets/emoji/64/1f442-1f3fc.png +0 -0
  927. package/web/app/site/sengi/assets/emoji/64/1f442-1f3fd.png +0 -0
  928. package/web/app/site/sengi/assets/emoji/64/1f442-1f3fe.png +0 -0
  929. package/web/app/site/sengi/assets/emoji/64/1f442-1f3ff.png +0 -0
  930. package/web/app/site/sengi/assets/emoji/64/1f442.png +0 -0
  931. package/web/app/site/sengi/assets/emoji/64/1f443-1f3fb.png +0 -0
  932. package/web/app/site/sengi/assets/emoji/64/1f443-1f3fc.png +0 -0
  933. package/web/app/site/sengi/assets/emoji/64/1f443-1f3fd.png +0 -0
  934. package/web/app/site/sengi/assets/emoji/64/1f443-1f3fe.png +0 -0
  935. package/web/app/site/sengi/assets/emoji/64/1f443-1f3ff.png +0 -0
  936. package/web/app/site/sengi/assets/emoji/64/1f443.png +0 -0
  937. package/web/app/site/sengi/assets/emoji/64/1f444.png +0 -0
  938. package/web/app/site/sengi/assets/emoji/64/1f445.png +0 -0
  939. package/web/app/site/sengi/assets/emoji/64/1f446-1f3fb.png +0 -0
  940. package/web/app/site/sengi/assets/emoji/64/1f446-1f3fc.png +0 -0
  941. package/web/app/site/sengi/assets/emoji/64/1f446-1f3fd.png +0 -0
  942. package/web/app/site/sengi/assets/emoji/64/1f446-1f3fe.png +0 -0
  943. package/web/app/site/sengi/assets/emoji/64/1f446-1f3ff.png +0 -0
  944. package/web/app/site/sengi/assets/emoji/64/1f446.png +0 -0
  945. package/web/app/site/sengi/assets/emoji/64/1f447-1f3fb.png +0 -0
  946. package/web/app/site/sengi/assets/emoji/64/1f447-1f3fc.png +0 -0
  947. package/web/app/site/sengi/assets/emoji/64/1f447-1f3fd.png +0 -0
  948. package/web/app/site/sengi/assets/emoji/64/1f447-1f3fe.png +0 -0
  949. package/web/app/site/sengi/assets/emoji/64/1f447-1f3ff.png +0 -0
  950. package/web/app/site/sengi/assets/emoji/64/1f447.png +0 -0
  951. package/web/app/site/sengi/assets/emoji/64/1f448-1f3fb.png +0 -0
  952. package/web/app/site/sengi/assets/emoji/64/1f448-1f3fc.png +0 -0
  953. package/web/app/site/sengi/assets/emoji/64/1f448-1f3fd.png +0 -0
  954. package/web/app/site/sengi/assets/emoji/64/1f448-1f3fe.png +0 -0
  955. package/web/app/site/sengi/assets/emoji/64/1f448-1f3ff.png +0 -0
  956. package/web/app/site/sengi/assets/emoji/64/1f448.png +0 -0
  957. package/web/app/site/sengi/assets/emoji/64/1f449-1f3fb.png +0 -0
  958. package/web/app/site/sengi/assets/emoji/64/1f449-1f3fc.png +0 -0
  959. package/web/app/site/sengi/assets/emoji/64/1f449-1f3fd.png +0 -0
  960. package/web/app/site/sengi/assets/emoji/64/1f449-1f3fe.png +0 -0
  961. package/web/app/site/sengi/assets/emoji/64/1f449-1f3ff.png +0 -0
  962. package/web/app/site/sengi/assets/emoji/64/1f449.png +0 -0
  963. package/web/app/site/sengi/assets/emoji/64/1f44a-1f3fb.png +0 -0
  964. package/web/app/site/sengi/assets/emoji/64/1f44a-1f3fc.png +0 -0
  965. package/web/app/site/sengi/assets/emoji/64/1f44a-1f3fd.png +0 -0
  966. package/web/app/site/sengi/assets/emoji/64/1f44a-1f3fe.png +0 -0
  967. package/web/app/site/sengi/assets/emoji/64/1f44a-1f3ff.png +0 -0
  968. package/web/app/site/sengi/assets/emoji/64/1f44a.png +0 -0
  969. package/web/app/site/sengi/assets/emoji/64/1f44b-1f3fb.png +0 -0
  970. package/web/app/site/sengi/assets/emoji/64/1f44b-1f3fc.png +0 -0
  971. package/web/app/site/sengi/assets/emoji/64/1f44b-1f3fd.png +0 -0
  972. package/web/app/site/sengi/assets/emoji/64/1f44b-1f3fe.png +0 -0
  973. package/web/app/site/sengi/assets/emoji/64/1f44b-1f3ff.png +0 -0
  974. package/web/app/site/sengi/assets/emoji/64/1f44b.png +0 -0
  975. package/web/app/site/sengi/assets/emoji/64/1f44c-1f3fb.png +0 -0
  976. package/web/app/site/sengi/assets/emoji/64/1f44c-1f3fc.png +0 -0
  977. package/web/app/site/sengi/assets/emoji/64/1f44c-1f3fd.png +0 -0
  978. package/web/app/site/sengi/assets/emoji/64/1f44c-1f3fe.png +0 -0
  979. package/web/app/site/sengi/assets/emoji/64/1f44c-1f3ff.png +0 -0
  980. package/web/app/site/sengi/assets/emoji/64/1f44c.png +0 -0
  981. package/web/app/site/sengi/assets/emoji/64/1f44d-1f3fb.png +0 -0
  982. package/web/app/site/sengi/assets/emoji/64/1f44d-1f3fc.png +0 -0
  983. package/web/app/site/sengi/assets/emoji/64/1f44d-1f3fd.png +0 -0
  984. package/web/app/site/sengi/assets/emoji/64/1f44d-1f3fe.png +0 -0
  985. package/web/app/site/sengi/assets/emoji/64/1f44d-1f3ff.png +0 -0
  986. package/web/app/site/sengi/assets/emoji/64/1f44d.png +0 -0
  987. package/web/app/site/sengi/assets/emoji/64/1f44e-1f3fb.png +0 -0
  988. package/web/app/site/sengi/assets/emoji/64/1f44e-1f3fc.png +0 -0
  989. package/web/app/site/sengi/assets/emoji/64/1f44e-1f3fd.png +0 -0
  990. package/web/app/site/sengi/assets/emoji/64/1f44e-1f3fe.png +0 -0
  991. package/web/app/site/sengi/assets/emoji/64/1f44e-1f3ff.png +0 -0
  992. package/web/app/site/sengi/assets/emoji/64/1f44e.png +0 -0
  993. package/web/app/site/sengi/assets/emoji/64/1f44f-1f3fb.png +0 -0
  994. package/web/app/site/sengi/assets/emoji/64/1f44f-1f3fc.png +0 -0
  995. package/web/app/site/sengi/assets/emoji/64/1f44f-1f3fd.png +0 -0
  996. package/web/app/site/sengi/assets/emoji/64/1f44f-1f3fe.png +0 -0
  997. package/web/app/site/sengi/assets/emoji/64/1f44f-1f3ff.png +0 -0
  998. package/web/app/site/sengi/assets/emoji/64/1f44f.png +0 -0
  999. package/web/app/site/sengi/assets/emoji/64/1f450-1f3fb.png +0 -0
  1000. package/web/app/site/sengi/assets/emoji/64/1f450-1f3fc.png +0 -0
  1001. package/web/app/site/sengi/assets/emoji/64/1f450-1f3fd.png +0 -0
  1002. package/web/app/site/sengi/assets/emoji/64/1f450-1f3fe.png +0 -0
  1003. package/web/app/site/sengi/assets/emoji/64/1f450-1f3ff.png +0 -0
  1004. package/web/app/site/sengi/assets/emoji/64/1f450.png +0 -0
  1005. package/web/app/site/sengi/assets/emoji/64/1f451.png +0 -0
  1006. package/web/app/site/sengi/assets/emoji/64/1f452.png +0 -0
  1007. package/web/app/site/sengi/assets/emoji/64/1f453.png +0 -0
  1008. package/web/app/site/sengi/assets/emoji/64/1f454.png +0 -0
  1009. package/web/app/site/sengi/assets/emoji/64/1f455.png +0 -0
  1010. package/web/app/site/sengi/assets/emoji/64/1f456.png +0 -0
  1011. package/web/app/site/sengi/assets/emoji/64/1f457.png +0 -0
  1012. package/web/app/site/sengi/assets/emoji/64/1f458.png +0 -0
  1013. package/web/app/site/sengi/assets/emoji/64/1f459.png +0 -0
  1014. package/web/app/site/sengi/assets/emoji/64/1f45a.png +0 -0
  1015. package/web/app/site/sengi/assets/emoji/64/1f45b.png +0 -0
  1016. package/web/app/site/sengi/assets/emoji/64/1f45c.png +0 -0
  1017. package/web/app/site/sengi/assets/emoji/64/1f45d.png +0 -0
  1018. package/web/app/site/sengi/assets/emoji/64/1f45e.png +0 -0
  1019. package/web/app/site/sengi/assets/emoji/64/1f45f.png +0 -0
  1020. package/web/app/site/sengi/assets/emoji/64/1f460.png +0 -0
  1021. package/web/app/site/sengi/assets/emoji/64/1f461.png +0 -0
  1022. package/web/app/site/sengi/assets/emoji/64/1f462.png +0 -0
  1023. package/web/app/site/sengi/assets/emoji/64/1f463.png +0 -0
  1024. package/web/app/site/sengi/assets/emoji/64/1f464.png +0 -0
  1025. package/web/app/site/sengi/assets/emoji/64/1f465.png +0 -0
  1026. package/web/app/site/sengi/assets/emoji/64/1f466-1f3fb.png +0 -0
  1027. package/web/app/site/sengi/assets/emoji/64/1f466-1f3fc.png +0 -0
  1028. package/web/app/site/sengi/assets/emoji/64/1f466-1f3fd.png +0 -0
  1029. package/web/app/site/sengi/assets/emoji/64/1f466-1f3fe.png +0 -0
  1030. package/web/app/site/sengi/assets/emoji/64/1f466-1f3ff.png +0 -0
  1031. package/web/app/site/sengi/assets/emoji/64/1f466.png +0 -0
  1032. package/web/app/site/sengi/assets/emoji/64/1f467-1f3fb.png +0 -0
  1033. package/web/app/site/sengi/assets/emoji/64/1f467-1f3fc.png +0 -0
  1034. package/web/app/site/sengi/assets/emoji/64/1f467-1f3fd.png +0 -0
  1035. package/web/app/site/sengi/assets/emoji/64/1f467-1f3fe.png +0 -0
  1036. package/web/app/site/sengi/assets/emoji/64/1f467-1f3ff.png +0 -0
  1037. package/web/app/site/sengi/assets/emoji/64/1f467.png +0 -0
  1038. package/web/app/site/sengi/assets/emoji/64/1f468-1f33e.png +0 -0
  1039. package/web/app/site/sengi/assets/emoji/64/1f468-1f373.png +0 -0
  1040. package/web/app/site/sengi/assets/emoji/64/1f468-1f37c.png +0 -0
  1041. package/web/app/site/sengi/assets/emoji/64/1f468-1f393.png +0 -0
  1042. package/web/app/site/sengi/assets/emoji/64/1f468-1f3a4.png +0 -0
  1043. package/web/app/site/sengi/assets/emoji/64/1f468-1f3a8.png +0 -0
  1044. package/web/app/site/sengi/assets/emoji/64/1f468-1f3eb.png +0 -0
  1045. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ed.png +0 -0
  1046. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f33e.png +0 -0
  1047. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f373.png +0 -0
  1048. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f37c.png +0 -0
  1049. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f393.png +0 -0
  1050. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f3a4.png +0 -0
  1051. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f3a8.png +0 -0
  1052. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f3eb.png +0 -0
  1053. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f3ed.png +0 -0
  1054. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f4bb.png +0 -0
  1055. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f4bc.png +0 -0
  1056. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f527.png +0 -0
  1057. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f52c.png +0 -0
  1058. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f680.png +0 -0
  1059. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f692.png +0 -0
  1060. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f91d-1f468-1f3fc.png +0 -0
  1061. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f91d-1f468-1f3fd.png +0 -0
  1062. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f91d-1f468-1f3fe.png +0 -0
  1063. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f91d-1f468-1f3ff.png +0 -0
  1064. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9af-27a1.png +0 -0
  1065. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9af.png +0 -0
  1066. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9b0.png +0 -0
  1067. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9b1.png +0 -0
  1068. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9b2.png +0 -0
  1069. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9b3.png +0 -0
  1070. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9bc-27a1.png +0 -0
  1071. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9bc.png +0 -0
  1072. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9bd-27a1.png +0 -0
  1073. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-1f9bd.png +0 -0
  1074. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2695.png +0 -0
  1075. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2696.png +0 -0
  1076. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2708.png +0 -0
  1077. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f468-1f3fb.png +0 -0
  1078. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f468-1f3fc.png +0 -0
  1079. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f468-1f3fd.png +0 -0
  1080. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f468-1f3fe.png +0 -0
  1081. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f468-1f3ff.png +0 -0
  1082. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f48b-1f468-1f3fb.png +0 -0
  1083. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f48b-1f468-1f3fc.png +0 -0
  1084. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f48b-1f468-1f3fd.png +0 -0
  1085. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f48b-1f468-1f3fe.png +0 -0
  1086. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb-2764-1f48b-1f468-1f3ff.png +0 -0
  1087. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fb.png +0 -0
  1088. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f33e.png +0 -0
  1089. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f373.png +0 -0
  1090. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f37c.png +0 -0
  1091. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f393.png +0 -0
  1092. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f3a4.png +0 -0
  1093. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f3a8.png +0 -0
  1094. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f3eb.png +0 -0
  1095. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f3ed.png +0 -0
  1096. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f4bb.png +0 -0
  1097. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f4bc.png +0 -0
  1098. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f527.png +0 -0
  1099. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f52c.png +0 -0
  1100. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f680.png +0 -0
  1101. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f692.png +0 -0
  1102. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f91d-1f468-1f3fb.png +0 -0
  1103. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f91d-1f468-1f3fd.png +0 -0
  1104. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f91d-1f468-1f3fe.png +0 -0
  1105. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f91d-1f468-1f3ff.png +0 -0
  1106. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9af-27a1.png +0 -0
  1107. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9af.png +0 -0
  1108. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9b0.png +0 -0
  1109. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9b1.png +0 -0
  1110. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9b2.png +0 -0
  1111. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9b3.png +0 -0
  1112. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9bc-27a1.png +0 -0
  1113. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9bc.png +0 -0
  1114. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9bd-27a1.png +0 -0
  1115. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-1f9bd.png +0 -0
  1116. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2695.png +0 -0
  1117. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2696.png +0 -0
  1118. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2708.png +0 -0
  1119. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f468-1f3fb.png +0 -0
  1120. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f468-1f3fc.png +0 -0
  1121. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f468-1f3fd.png +0 -0
  1122. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f468-1f3fe.png +0 -0
  1123. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f468-1f3ff.png +0 -0
  1124. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f48b-1f468-1f3fb.png +0 -0
  1125. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f48b-1f468-1f3fc.png +0 -0
  1126. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f48b-1f468-1f3fd.png +0 -0
  1127. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f48b-1f468-1f3fe.png +0 -0
  1128. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc-2764-1f48b-1f468-1f3ff.png +0 -0
  1129. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fc.png +0 -0
  1130. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f33e.png +0 -0
  1131. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f373.png +0 -0
  1132. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f37c.png +0 -0
  1133. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f393.png +0 -0
  1134. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f3a4.png +0 -0
  1135. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f3a8.png +0 -0
  1136. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f3eb.png +0 -0
  1137. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f3ed.png +0 -0
  1138. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f4bb.png +0 -0
  1139. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f4bc.png +0 -0
  1140. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f527.png +0 -0
  1141. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f52c.png +0 -0
  1142. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f680.png +0 -0
  1143. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f692.png +0 -0
  1144. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f91d-1f468-1f3fb.png +0 -0
  1145. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f91d-1f468-1f3fc.png +0 -0
  1146. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f91d-1f468-1f3fe.png +0 -0
  1147. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f91d-1f468-1f3ff.png +0 -0
  1148. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9af-27a1.png +0 -0
  1149. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9af.png +0 -0
  1150. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9b0.png +0 -0
  1151. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9b1.png +0 -0
  1152. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9b2.png +0 -0
  1153. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9b3.png +0 -0
  1154. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9bc-27a1.png +0 -0
  1155. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9bc.png +0 -0
  1156. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9bd-27a1.png +0 -0
  1157. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-1f9bd.png +0 -0
  1158. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2695.png +0 -0
  1159. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2696.png +0 -0
  1160. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2708.png +0 -0
  1161. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f468-1f3fb.png +0 -0
  1162. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f468-1f3fc.png +0 -0
  1163. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f468-1f3fd.png +0 -0
  1164. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f468-1f3fe.png +0 -0
  1165. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f468-1f3ff.png +0 -0
  1166. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f48b-1f468-1f3fb.png +0 -0
  1167. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f48b-1f468-1f3fc.png +0 -0
  1168. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f48b-1f468-1f3fd.png +0 -0
  1169. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f48b-1f468-1f3fe.png +0 -0
  1170. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd-2764-1f48b-1f468-1f3ff.png +0 -0
  1171. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fd.png +0 -0
  1172. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f33e.png +0 -0
  1173. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f373.png +0 -0
  1174. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f37c.png +0 -0
  1175. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f393.png +0 -0
  1176. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f3a4.png +0 -0
  1177. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f3a8.png +0 -0
  1178. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f3eb.png +0 -0
  1179. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f3ed.png +0 -0
  1180. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f4bb.png +0 -0
  1181. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f4bc.png +0 -0
  1182. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f527.png +0 -0
  1183. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f52c.png +0 -0
  1184. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f680.png +0 -0
  1185. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f692.png +0 -0
  1186. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f91d-1f468-1f3fb.png +0 -0
  1187. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f91d-1f468-1f3fc.png +0 -0
  1188. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f91d-1f468-1f3fd.png +0 -0
  1189. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f91d-1f468-1f3ff.png +0 -0
  1190. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9af-27a1.png +0 -0
  1191. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9af.png +0 -0
  1192. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9b0.png +0 -0
  1193. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9b1.png +0 -0
  1194. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9b2.png +0 -0
  1195. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9b3.png +0 -0
  1196. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9bc-27a1.png +0 -0
  1197. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9bc.png +0 -0
  1198. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9bd-27a1.png +0 -0
  1199. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-1f9bd.png +0 -0
  1200. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2695.png +0 -0
  1201. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2696.png +0 -0
  1202. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2708.png +0 -0
  1203. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f468-1f3fb.png +0 -0
  1204. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f468-1f3fc.png +0 -0
  1205. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f468-1f3fd.png +0 -0
  1206. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f468-1f3fe.png +0 -0
  1207. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f468-1f3ff.png +0 -0
  1208. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f48b-1f468-1f3fb.png +0 -0
  1209. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f48b-1f468-1f3fc.png +0 -0
  1210. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f48b-1f468-1f3fd.png +0 -0
  1211. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f48b-1f468-1f3fe.png +0 -0
  1212. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe-2764-1f48b-1f468-1f3ff.png +0 -0
  1213. package/web/app/site/sengi/assets/emoji/64/1f468-1f3fe.png +0 -0
  1214. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f33e.png +0 -0
  1215. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f373.png +0 -0
  1216. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f37c.png +0 -0
  1217. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f393.png +0 -0
  1218. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f3a4.png +0 -0
  1219. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f3a8.png +0 -0
  1220. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f3eb.png +0 -0
  1221. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f3ed.png +0 -0
  1222. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f4bb.png +0 -0
  1223. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f4bc.png +0 -0
  1224. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f527.png +0 -0
  1225. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f52c.png +0 -0
  1226. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f680.png +0 -0
  1227. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f692.png +0 -0
  1228. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f91d-1f468-1f3fb.png +0 -0
  1229. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f91d-1f468-1f3fc.png +0 -0
  1230. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f91d-1f468-1f3fd.png +0 -0
  1231. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f91d-1f468-1f3fe.png +0 -0
  1232. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9af-27a1.png +0 -0
  1233. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9af.png +0 -0
  1234. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9b0.png +0 -0
  1235. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9b1.png +0 -0
  1236. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9b2.png +0 -0
  1237. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9b3.png +0 -0
  1238. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9bc-27a1.png +0 -0
  1239. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9bc.png +0 -0
  1240. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9bd-27a1.png +0 -0
  1241. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-1f9bd.png +0 -0
  1242. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2695.png +0 -0
  1243. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2696.png +0 -0
  1244. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2708.png +0 -0
  1245. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f468-1f3fb.png +0 -0
  1246. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f468-1f3fc.png +0 -0
  1247. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f468-1f3fd.png +0 -0
  1248. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f468-1f3fe.png +0 -0
  1249. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f468-1f3ff.png +0 -0
  1250. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f48b-1f468-1f3fb.png +0 -0
  1251. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f48b-1f468-1f3fc.png +0 -0
  1252. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f48b-1f468-1f3fd.png +0 -0
  1253. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f48b-1f468-1f3fe.png +0 -0
  1254. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff-2764-1f48b-1f468-1f3ff.png +0 -0
  1255. package/web/app/site/sengi/assets/emoji/64/1f468-1f3ff.png +0 -0
  1256. package/web/app/site/sengi/assets/emoji/64/1f468-1f466-1f466.png +0 -0
  1257. package/web/app/site/sengi/assets/emoji/64/1f468-1f466.png +0 -0
  1258. package/web/app/site/sengi/assets/emoji/64/1f468-1f467-1f466.png +0 -0
  1259. package/web/app/site/sengi/assets/emoji/64/1f468-1f467-1f467.png +0 -0
  1260. package/web/app/site/sengi/assets/emoji/64/1f468-1f467.png +0 -0
  1261. package/web/app/site/sengi/assets/emoji/64/1f468-1f468-1f466-1f466.png +0 -0
  1262. package/web/app/site/sengi/assets/emoji/64/1f468-1f468-1f466.png +0 -0
  1263. package/web/app/site/sengi/assets/emoji/64/1f468-1f468-1f467-1f466.png +0 -0
  1264. package/web/app/site/sengi/assets/emoji/64/1f468-1f468-1f467-1f467.png +0 -0
  1265. package/web/app/site/sengi/assets/emoji/64/1f468-1f468-1f467.png +0 -0
  1266. package/web/app/site/sengi/assets/emoji/64/1f468-1f469-1f466-1f466.png +0 -0
  1267. package/web/app/site/sengi/assets/emoji/64/1f468-1f469-1f466.png +0 -0
  1268. package/web/app/site/sengi/assets/emoji/64/1f468-1f469-1f467-1f466.png +0 -0
  1269. package/web/app/site/sengi/assets/emoji/64/1f468-1f469-1f467-1f467.png +0 -0
  1270. package/web/app/site/sengi/assets/emoji/64/1f468-1f469-1f467.png +0 -0
  1271. package/web/app/site/sengi/assets/emoji/64/1f468-1f4bb.png +0 -0
  1272. package/web/app/site/sengi/assets/emoji/64/1f468-1f4bc.png +0 -0
  1273. package/web/app/site/sengi/assets/emoji/64/1f468-1f527.png +0 -0
  1274. package/web/app/site/sengi/assets/emoji/64/1f468-1f52c.png +0 -0
  1275. package/web/app/site/sengi/assets/emoji/64/1f468-1f680.png +0 -0
  1276. package/web/app/site/sengi/assets/emoji/64/1f468-1f692.png +0 -0
  1277. package/web/app/site/sengi/assets/emoji/64/1f468-1f9af-27a1.png +0 -0
  1278. package/web/app/site/sengi/assets/emoji/64/1f468-1f9af.png +0 -0
  1279. package/web/app/site/sengi/assets/emoji/64/1f468-1f9b0.png +0 -0
  1280. package/web/app/site/sengi/assets/emoji/64/1f468-1f9b1.png +0 -0
  1281. package/web/app/site/sengi/assets/emoji/64/1f468-1f9b2.png +0 -0
  1282. package/web/app/site/sengi/assets/emoji/64/1f468-1f9b3.png +0 -0
  1283. package/web/app/site/sengi/assets/emoji/64/1f468-1f9bc-27a1.png +0 -0
  1284. package/web/app/site/sengi/assets/emoji/64/1f468-1f9bc.png +0 -0
  1285. package/web/app/site/sengi/assets/emoji/64/1f468-1f9bd-27a1.png +0 -0
  1286. package/web/app/site/sengi/assets/emoji/64/1f468-1f9bd.png +0 -0
  1287. package/web/app/site/sengi/assets/emoji/64/1f468-2695.png +0 -0
  1288. package/web/app/site/sengi/assets/emoji/64/1f468-2696.png +0 -0
  1289. package/web/app/site/sengi/assets/emoji/64/1f468-2708.png +0 -0
  1290. package/web/app/site/sengi/assets/emoji/64/1f468-2764-1f468.png +0 -0
  1291. package/web/app/site/sengi/assets/emoji/64/1f468-2764-1f48b-1f468.png +0 -0
  1292. package/web/app/site/sengi/assets/emoji/64/1f468.png +0 -0
  1293. package/web/app/site/sengi/assets/emoji/64/1f469-1f33e.png +0 -0
  1294. package/web/app/site/sengi/assets/emoji/64/1f469-1f373.png +0 -0
  1295. package/web/app/site/sengi/assets/emoji/64/1f469-1f37c.png +0 -0
  1296. package/web/app/site/sengi/assets/emoji/64/1f469-1f393.png +0 -0
  1297. package/web/app/site/sengi/assets/emoji/64/1f469-1f3a4.png +0 -0
  1298. package/web/app/site/sengi/assets/emoji/64/1f469-1f3a8.png +0 -0
  1299. package/web/app/site/sengi/assets/emoji/64/1f469-1f3eb.png +0 -0
  1300. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ed.png +0 -0
  1301. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f33e.png +0 -0
  1302. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f373.png +0 -0
  1303. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f37c.png +0 -0
  1304. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f393.png +0 -0
  1305. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f3a4.png +0 -0
  1306. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f3a8.png +0 -0
  1307. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f3eb.png +0 -0
  1308. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f3ed.png +0 -0
  1309. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f4bb.png +0 -0
  1310. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f4bc.png +0 -0
  1311. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f527.png +0 -0
  1312. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f52c.png +0 -0
  1313. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f680.png +0 -0
  1314. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f692.png +0 -0
  1315. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f91d-1f468-1f3fc.png +0 -0
  1316. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f91d-1f468-1f3fd.png +0 -0
  1317. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f91d-1f468-1f3fe.png +0 -0
  1318. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f91d-1f468-1f3ff.png +0 -0
  1319. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f91d-1f469-1f3fc.png +0 -0
  1320. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f91d-1f469-1f3fd.png +0 -0
  1321. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f91d-1f469-1f3fe.png +0 -0
  1322. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f91d-1f469-1f3ff.png +0 -0
  1323. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9af-27a1.png +0 -0
  1324. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9af.png +0 -0
  1325. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9b0.png +0 -0
  1326. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9b1.png +0 -0
  1327. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9b2.png +0 -0
  1328. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9b3.png +0 -0
  1329. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9bc-27a1.png +0 -0
  1330. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9bc.png +0 -0
  1331. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9bd-27a1.png +0 -0
  1332. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-1f9bd.png +0 -0
  1333. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2695.png +0 -0
  1334. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2696.png +0 -0
  1335. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2708.png +0 -0
  1336. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f468-1f3fb.png +0 -0
  1337. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f468-1f3fc.png +0 -0
  1338. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f468-1f3fd.png +0 -0
  1339. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f468-1f3fe.png +0 -0
  1340. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f468-1f3ff.png +0 -0
  1341. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f469-1f3fb.png +0 -0
  1342. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f469-1f3fc.png +0 -0
  1343. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f469-1f3fd.png +0 -0
  1344. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f469-1f3fe.png +0 -0
  1345. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f469-1f3ff.png +0 -0
  1346. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f468-1f3fb.png +0 -0
  1347. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f468-1f3fc.png +0 -0
  1348. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f468-1f3fd.png +0 -0
  1349. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f468-1f3fe.png +0 -0
  1350. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f468-1f3ff.png +0 -0
  1351. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f469-1f3fb.png +0 -0
  1352. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f469-1f3fc.png +0 -0
  1353. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f469-1f3fd.png +0 -0
  1354. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f469-1f3fe.png +0 -0
  1355. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb-2764-1f48b-1f469-1f3ff.png +0 -0
  1356. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fb.png +0 -0
  1357. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f33e.png +0 -0
  1358. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f373.png +0 -0
  1359. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f37c.png +0 -0
  1360. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f393.png +0 -0
  1361. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f3a4.png +0 -0
  1362. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f3a8.png +0 -0
  1363. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f3eb.png +0 -0
  1364. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f3ed.png +0 -0
  1365. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f4bb.png +0 -0
  1366. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f4bc.png +0 -0
  1367. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f527.png +0 -0
  1368. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f52c.png +0 -0
  1369. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f680.png +0 -0
  1370. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f692.png +0 -0
  1371. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f91d-1f468-1f3fb.png +0 -0
  1372. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f91d-1f468-1f3fd.png +0 -0
  1373. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f91d-1f468-1f3fe.png +0 -0
  1374. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f91d-1f468-1f3ff.png +0 -0
  1375. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f91d-1f469-1f3fb.png +0 -0
  1376. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f91d-1f469-1f3fd.png +0 -0
  1377. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f91d-1f469-1f3fe.png +0 -0
  1378. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f91d-1f469-1f3ff.png +0 -0
  1379. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9af-27a1.png +0 -0
  1380. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9af.png +0 -0
  1381. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9b0.png +0 -0
  1382. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9b1.png +0 -0
  1383. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9b2.png +0 -0
  1384. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9b3.png +0 -0
  1385. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9bc-27a1.png +0 -0
  1386. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9bc.png +0 -0
  1387. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9bd-27a1.png +0 -0
  1388. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-1f9bd.png +0 -0
  1389. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2695.png +0 -0
  1390. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2696.png +0 -0
  1391. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2708.png +0 -0
  1392. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f468-1f3fb.png +0 -0
  1393. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f468-1f3fc.png +0 -0
  1394. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f468-1f3fd.png +0 -0
  1395. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f468-1f3fe.png +0 -0
  1396. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f468-1f3ff.png +0 -0
  1397. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f469-1f3fb.png +0 -0
  1398. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f469-1f3fc.png +0 -0
  1399. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f469-1f3fd.png +0 -0
  1400. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f469-1f3fe.png +0 -0
  1401. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f469-1f3ff.png +0 -0
  1402. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f468-1f3fb.png +0 -0
  1403. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f468-1f3fc.png +0 -0
  1404. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f468-1f3fd.png +0 -0
  1405. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f468-1f3fe.png +0 -0
  1406. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f468-1f3ff.png +0 -0
  1407. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f469-1f3fb.png +0 -0
  1408. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f469-1f3fc.png +0 -0
  1409. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f469-1f3fd.png +0 -0
  1410. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f469-1f3fe.png +0 -0
  1411. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc-2764-1f48b-1f469-1f3ff.png +0 -0
  1412. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fc.png +0 -0
  1413. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f33e.png +0 -0
  1414. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f373.png +0 -0
  1415. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f37c.png +0 -0
  1416. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f393.png +0 -0
  1417. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f3a4.png +0 -0
  1418. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f3a8.png +0 -0
  1419. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f3eb.png +0 -0
  1420. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f3ed.png +0 -0
  1421. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f4bb.png +0 -0
  1422. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f4bc.png +0 -0
  1423. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f527.png +0 -0
  1424. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f52c.png +0 -0
  1425. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f680.png +0 -0
  1426. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f692.png +0 -0
  1427. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f91d-1f468-1f3fb.png +0 -0
  1428. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f91d-1f468-1f3fc.png +0 -0
  1429. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f91d-1f468-1f3fe.png +0 -0
  1430. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f91d-1f468-1f3ff.png +0 -0
  1431. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f91d-1f469-1f3fb.png +0 -0
  1432. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f91d-1f469-1f3fc.png +0 -0
  1433. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f91d-1f469-1f3fe.png +0 -0
  1434. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f91d-1f469-1f3ff.png +0 -0
  1435. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9af-27a1.png +0 -0
  1436. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9af.png +0 -0
  1437. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9b0.png +0 -0
  1438. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9b1.png +0 -0
  1439. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9b2.png +0 -0
  1440. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9b3.png +0 -0
  1441. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9bc-27a1.png +0 -0
  1442. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9bc.png +0 -0
  1443. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9bd-27a1.png +0 -0
  1444. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-1f9bd.png +0 -0
  1445. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2695.png +0 -0
  1446. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2696.png +0 -0
  1447. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2708.png +0 -0
  1448. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f468-1f3fb.png +0 -0
  1449. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f468-1f3fc.png +0 -0
  1450. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f468-1f3fd.png +0 -0
  1451. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f468-1f3fe.png +0 -0
  1452. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f468-1f3ff.png +0 -0
  1453. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f469-1f3fb.png +0 -0
  1454. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f469-1f3fc.png +0 -0
  1455. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f469-1f3fd.png +0 -0
  1456. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f469-1f3fe.png +0 -0
  1457. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f469-1f3ff.png +0 -0
  1458. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f468-1f3fb.png +0 -0
  1459. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f468-1f3fc.png +0 -0
  1460. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f468-1f3fd.png +0 -0
  1461. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f468-1f3fe.png +0 -0
  1462. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f468-1f3ff.png +0 -0
  1463. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f469-1f3fb.png +0 -0
  1464. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f469-1f3fc.png +0 -0
  1465. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f469-1f3fd.png +0 -0
  1466. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f469-1f3fe.png +0 -0
  1467. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd-2764-1f48b-1f469-1f3ff.png +0 -0
  1468. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fd.png +0 -0
  1469. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f33e.png +0 -0
  1470. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f373.png +0 -0
  1471. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f37c.png +0 -0
  1472. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f393.png +0 -0
  1473. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f3a4.png +0 -0
  1474. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f3a8.png +0 -0
  1475. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f3eb.png +0 -0
  1476. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f3ed.png +0 -0
  1477. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f4bb.png +0 -0
  1478. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f4bc.png +0 -0
  1479. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f527.png +0 -0
  1480. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f52c.png +0 -0
  1481. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f680.png +0 -0
  1482. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f692.png +0 -0
  1483. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f91d-1f468-1f3fb.png +0 -0
  1484. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f91d-1f468-1f3fc.png +0 -0
  1485. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f91d-1f468-1f3fd.png +0 -0
  1486. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f91d-1f468-1f3ff.png +0 -0
  1487. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f91d-1f469-1f3fb.png +0 -0
  1488. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f91d-1f469-1f3fc.png +0 -0
  1489. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f91d-1f469-1f3fd.png +0 -0
  1490. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f91d-1f469-1f3ff.png +0 -0
  1491. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9af-27a1.png +0 -0
  1492. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9af.png +0 -0
  1493. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9b0.png +0 -0
  1494. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9b1.png +0 -0
  1495. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9b2.png +0 -0
  1496. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9b3.png +0 -0
  1497. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9bc-27a1.png +0 -0
  1498. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9bc.png +0 -0
  1499. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9bd-27a1.png +0 -0
  1500. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-1f9bd.png +0 -0
  1501. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2695.png +0 -0
  1502. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2696.png +0 -0
  1503. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2708.png +0 -0
  1504. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f468-1f3fb.png +0 -0
  1505. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f468-1f3fc.png +0 -0
  1506. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f468-1f3fd.png +0 -0
  1507. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f468-1f3fe.png +0 -0
  1508. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f468-1f3ff.png +0 -0
  1509. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f469-1f3fb.png +0 -0
  1510. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f469-1f3fc.png +0 -0
  1511. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f469-1f3fd.png +0 -0
  1512. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f469-1f3fe.png +0 -0
  1513. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f469-1f3ff.png +0 -0
  1514. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f468-1f3fb.png +0 -0
  1515. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f468-1f3fc.png +0 -0
  1516. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f468-1f3fd.png +0 -0
  1517. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f468-1f3fe.png +0 -0
  1518. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f468-1f3ff.png +0 -0
  1519. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f469-1f3fb.png +0 -0
  1520. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f469-1f3fc.png +0 -0
  1521. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f469-1f3fd.png +0 -0
  1522. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f469-1f3fe.png +0 -0
  1523. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe-2764-1f48b-1f469-1f3ff.png +0 -0
  1524. package/web/app/site/sengi/assets/emoji/64/1f469-1f3fe.png +0 -0
  1525. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f33e.png +0 -0
  1526. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f373.png +0 -0
  1527. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f37c.png +0 -0
  1528. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f393.png +0 -0
  1529. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f3a4.png +0 -0
  1530. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f3a8.png +0 -0
  1531. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f3eb.png +0 -0
  1532. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f3ed.png +0 -0
  1533. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f4bb.png +0 -0
  1534. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f4bc.png +0 -0
  1535. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f527.png +0 -0
  1536. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f52c.png +0 -0
  1537. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f680.png +0 -0
  1538. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f692.png +0 -0
  1539. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f91d-1f468-1f3fb.png +0 -0
  1540. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f91d-1f468-1f3fc.png +0 -0
  1541. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f91d-1f468-1f3fd.png +0 -0
  1542. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f91d-1f468-1f3fe.png +0 -0
  1543. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f91d-1f469-1f3fb.png +0 -0
  1544. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f91d-1f469-1f3fc.png +0 -0
  1545. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f91d-1f469-1f3fd.png +0 -0
  1546. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f91d-1f469-1f3fe.png +0 -0
  1547. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9af-27a1.png +0 -0
  1548. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9af.png +0 -0
  1549. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9b0.png +0 -0
  1550. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9b1.png +0 -0
  1551. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9b2.png +0 -0
  1552. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9b3.png +0 -0
  1553. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9bc-27a1.png +0 -0
  1554. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9bc.png +0 -0
  1555. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9bd-27a1.png +0 -0
  1556. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-1f9bd.png +0 -0
  1557. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2695.png +0 -0
  1558. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2696.png +0 -0
  1559. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2708.png +0 -0
  1560. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f468-1f3fb.png +0 -0
  1561. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f468-1f3fc.png +0 -0
  1562. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f468-1f3fd.png +0 -0
  1563. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f468-1f3fe.png +0 -0
  1564. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f468-1f3ff.png +0 -0
  1565. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f469-1f3fb.png +0 -0
  1566. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f469-1f3fc.png +0 -0
  1567. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f469-1f3fd.png +0 -0
  1568. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f469-1f3fe.png +0 -0
  1569. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f469-1f3ff.png +0 -0
  1570. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f468-1f3fb.png +0 -0
  1571. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f468-1f3fc.png +0 -0
  1572. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f468-1f3fd.png +0 -0
  1573. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f468-1f3fe.png +0 -0
  1574. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f468-1f3ff.png +0 -0
  1575. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f469-1f3fb.png +0 -0
  1576. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f469-1f3fc.png +0 -0
  1577. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f469-1f3fd.png +0 -0
  1578. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f469-1f3fe.png +0 -0
  1579. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff-2764-1f48b-1f469-1f3ff.png +0 -0
  1580. package/web/app/site/sengi/assets/emoji/64/1f469-1f3ff.png +0 -0
  1581. package/web/app/site/sengi/assets/emoji/64/1f469-1f466-1f466.png +0 -0
  1582. package/web/app/site/sengi/assets/emoji/64/1f469-1f466.png +0 -0
  1583. package/web/app/site/sengi/assets/emoji/64/1f469-1f467-1f466.png +0 -0
  1584. package/web/app/site/sengi/assets/emoji/64/1f469-1f467-1f467.png +0 -0
  1585. package/web/app/site/sengi/assets/emoji/64/1f469-1f467.png +0 -0
  1586. package/web/app/site/sengi/assets/emoji/64/1f469-1f469-1f466-1f466.png +0 -0
  1587. package/web/app/site/sengi/assets/emoji/64/1f469-1f469-1f466.png +0 -0
  1588. package/web/app/site/sengi/assets/emoji/64/1f469-1f469-1f467-1f466.png +0 -0
  1589. package/web/app/site/sengi/assets/emoji/64/1f469-1f469-1f467-1f467.png +0 -0
  1590. package/web/app/site/sengi/assets/emoji/64/1f469-1f469-1f467.png +0 -0
  1591. package/web/app/site/sengi/assets/emoji/64/1f469-1f4bb.png +0 -0
  1592. package/web/app/site/sengi/assets/emoji/64/1f469-1f4bc.png +0 -0
  1593. package/web/app/site/sengi/assets/emoji/64/1f469-1f527.png +0 -0
  1594. package/web/app/site/sengi/assets/emoji/64/1f469-1f52c.png +0 -0
  1595. package/web/app/site/sengi/assets/emoji/64/1f469-1f680.png +0 -0
  1596. package/web/app/site/sengi/assets/emoji/64/1f469-1f692.png +0 -0
  1597. package/web/app/site/sengi/assets/emoji/64/1f469-1f9af-27a1.png +0 -0
  1598. package/web/app/site/sengi/assets/emoji/64/1f469-1f9af.png +0 -0
  1599. package/web/app/site/sengi/assets/emoji/64/1f469-1f9b0.png +0 -0
  1600. package/web/app/site/sengi/assets/emoji/64/1f469-1f9b1.png +0 -0
  1601. package/web/app/site/sengi/assets/emoji/64/1f469-1f9b2.png +0 -0
  1602. package/web/app/site/sengi/assets/emoji/64/1f469-1f9b3.png +0 -0
  1603. package/web/app/site/sengi/assets/emoji/64/1f469-1f9bc-27a1.png +0 -0
  1604. package/web/app/site/sengi/assets/emoji/64/1f469-1f9bc.png +0 -0
  1605. package/web/app/site/sengi/assets/emoji/64/1f469-1f9bd-27a1.png +0 -0
  1606. package/web/app/site/sengi/assets/emoji/64/1f469-1f9bd.png +0 -0
  1607. package/web/app/site/sengi/assets/emoji/64/1f469-2695.png +0 -0
  1608. package/web/app/site/sengi/assets/emoji/64/1f469-2696.png +0 -0
  1609. package/web/app/site/sengi/assets/emoji/64/1f469-2708.png +0 -0
  1610. package/web/app/site/sengi/assets/emoji/64/1f469-2764-1f468.png +0 -0
  1611. package/web/app/site/sengi/assets/emoji/64/1f469-2764-1f469.png +0 -0
  1612. package/web/app/site/sengi/assets/emoji/64/1f469-2764-1f48b-1f468.png +0 -0
  1613. package/web/app/site/sengi/assets/emoji/64/1f469-2764-1f48b-1f469.png +0 -0
  1614. package/web/app/site/sengi/assets/emoji/64/1f469.png +0 -0
  1615. package/web/app/site/sengi/assets/emoji/64/1f46a.png +0 -0
  1616. package/web/app/site/sengi/assets/emoji/64/1f46b-1f3fb.png +0 -0
  1617. package/web/app/site/sengi/assets/emoji/64/1f46b-1f3fc.png +0 -0
  1618. package/web/app/site/sengi/assets/emoji/64/1f46b-1f3fd.png +0 -0
  1619. package/web/app/site/sengi/assets/emoji/64/1f46b-1f3fe.png +0 -0
  1620. package/web/app/site/sengi/assets/emoji/64/1f46b-1f3ff.png +0 -0
  1621. package/web/app/site/sengi/assets/emoji/64/1f46b.png +0 -0
  1622. package/web/app/site/sengi/assets/emoji/64/1f46c-1f3fb.png +0 -0
  1623. package/web/app/site/sengi/assets/emoji/64/1f46c-1f3fc.png +0 -0
  1624. package/web/app/site/sengi/assets/emoji/64/1f46c-1f3fd.png +0 -0
  1625. package/web/app/site/sengi/assets/emoji/64/1f46c-1f3fe.png +0 -0
  1626. package/web/app/site/sengi/assets/emoji/64/1f46c-1f3ff.png +0 -0
  1627. package/web/app/site/sengi/assets/emoji/64/1f46c.png +0 -0
  1628. package/web/app/site/sengi/assets/emoji/64/1f46d-1f3fb.png +0 -0
  1629. package/web/app/site/sengi/assets/emoji/64/1f46d-1f3fc.png +0 -0
  1630. package/web/app/site/sengi/assets/emoji/64/1f46d-1f3fd.png +0 -0
  1631. package/web/app/site/sengi/assets/emoji/64/1f46d-1f3fe.png +0 -0
  1632. package/web/app/site/sengi/assets/emoji/64/1f46d-1f3ff.png +0 -0
  1633. package/web/app/site/sengi/assets/emoji/64/1f46d.png +0 -0
  1634. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fb-2640.png +0 -0
  1635. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fb-2642.png +0 -0
  1636. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fb.png +0 -0
  1637. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fc-2640.png +0 -0
  1638. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fc-2642.png +0 -0
  1639. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fc.png +0 -0
  1640. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fd-2640.png +0 -0
  1641. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fd-2642.png +0 -0
  1642. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fd.png +0 -0
  1643. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fe-2640.png +0 -0
  1644. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fe-2642.png +0 -0
  1645. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3fe.png +0 -0
  1646. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3ff-2640.png +0 -0
  1647. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3ff-2642.png +0 -0
  1648. package/web/app/site/sengi/assets/emoji/64/1f46e-1f3ff.png +0 -0
  1649. package/web/app/site/sengi/assets/emoji/64/1f46e-2640.png +0 -0
  1650. package/web/app/site/sengi/assets/emoji/64/1f46e-2642.png +0 -0
  1651. package/web/app/site/sengi/assets/emoji/64/1f46e.png +0 -0
  1652. package/web/app/site/sengi/assets/emoji/64/1f46f-2640.png +0 -0
  1653. package/web/app/site/sengi/assets/emoji/64/1f46f-2642.png +0 -0
  1654. package/web/app/site/sengi/assets/emoji/64/1f46f.png +0 -0
  1655. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fb-2640.png +0 -0
  1656. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fb-2642.png +0 -0
  1657. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fb.png +0 -0
  1658. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fc-2640.png +0 -0
  1659. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fc-2642.png +0 -0
  1660. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fc.png +0 -0
  1661. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fd-2640.png +0 -0
  1662. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fd-2642.png +0 -0
  1663. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fd.png +0 -0
  1664. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fe-2640.png +0 -0
  1665. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fe-2642.png +0 -0
  1666. package/web/app/site/sengi/assets/emoji/64/1f470-1f3fe.png +0 -0
  1667. package/web/app/site/sengi/assets/emoji/64/1f470-1f3ff-2640.png +0 -0
  1668. package/web/app/site/sengi/assets/emoji/64/1f470-1f3ff-2642.png +0 -0
  1669. package/web/app/site/sengi/assets/emoji/64/1f470-1f3ff.png +0 -0
  1670. package/web/app/site/sengi/assets/emoji/64/1f470-2640.png +0 -0
  1671. package/web/app/site/sengi/assets/emoji/64/1f470-2642.png +0 -0
  1672. package/web/app/site/sengi/assets/emoji/64/1f470.png +0 -0
  1673. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fb-2640.png +0 -0
  1674. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fb-2642.png +0 -0
  1675. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fb.png +0 -0
  1676. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fc-2640.png +0 -0
  1677. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fc-2642.png +0 -0
  1678. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fc.png +0 -0
  1679. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fd-2640.png +0 -0
  1680. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fd-2642.png +0 -0
  1681. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fd.png +0 -0
  1682. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fe-2640.png +0 -0
  1683. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fe-2642.png +0 -0
  1684. package/web/app/site/sengi/assets/emoji/64/1f471-1f3fe.png +0 -0
  1685. package/web/app/site/sengi/assets/emoji/64/1f471-1f3ff-2640.png +0 -0
  1686. package/web/app/site/sengi/assets/emoji/64/1f471-1f3ff-2642.png +0 -0
  1687. package/web/app/site/sengi/assets/emoji/64/1f471-1f3ff.png +0 -0
  1688. package/web/app/site/sengi/assets/emoji/64/1f471-2640.png +0 -0
  1689. package/web/app/site/sengi/assets/emoji/64/1f471-2642.png +0 -0
  1690. package/web/app/site/sengi/assets/emoji/64/1f471.png +0 -0
  1691. package/web/app/site/sengi/assets/emoji/64/1f472-1f3fb.png +0 -0
  1692. package/web/app/site/sengi/assets/emoji/64/1f472-1f3fc.png +0 -0
  1693. package/web/app/site/sengi/assets/emoji/64/1f472-1f3fd.png +0 -0
  1694. package/web/app/site/sengi/assets/emoji/64/1f472-1f3fe.png +0 -0
  1695. package/web/app/site/sengi/assets/emoji/64/1f472-1f3ff.png +0 -0
  1696. package/web/app/site/sengi/assets/emoji/64/1f472.png +0 -0
  1697. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fb-2640.png +0 -0
  1698. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fb-2642.png +0 -0
  1699. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fb.png +0 -0
  1700. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fc-2640.png +0 -0
  1701. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fc-2642.png +0 -0
  1702. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fc.png +0 -0
  1703. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fd-2640.png +0 -0
  1704. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fd-2642.png +0 -0
  1705. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fd.png +0 -0
  1706. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fe-2640.png +0 -0
  1707. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fe-2642.png +0 -0
  1708. package/web/app/site/sengi/assets/emoji/64/1f473-1f3fe.png +0 -0
  1709. package/web/app/site/sengi/assets/emoji/64/1f473-1f3ff-2640.png +0 -0
  1710. package/web/app/site/sengi/assets/emoji/64/1f473-1f3ff-2642.png +0 -0
  1711. package/web/app/site/sengi/assets/emoji/64/1f473-1f3ff.png +0 -0
  1712. package/web/app/site/sengi/assets/emoji/64/1f473-2640.png +0 -0
  1713. package/web/app/site/sengi/assets/emoji/64/1f473-2642.png +0 -0
  1714. package/web/app/site/sengi/assets/emoji/64/1f473.png +0 -0
  1715. package/web/app/site/sengi/assets/emoji/64/1f474-1f3fb.png +0 -0
  1716. package/web/app/site/sengi/assets/emoji/64/1f474-1f3fc.png +0 -0
  1717. package/web/app/site/sengi/assets/emoji/64/1f474-1f3fd.png +0 -0
  1718. package/web/app/site/sengi/assets/emoji/64/1f474-1f3fe.png +0 -0
  1719. package/web/app/site/sengi/assets/emoji/64/1f474-1f3ff.png +0 -0
  1720. package/web/app/site/sengi/assets/emoji/64/1f474.png +0 -0
  1721. package/web/app/site/sengi/assets/emoji/64/1f475-1f3fb.png +0 -0
  1722. package/web/app/site/sengi/assets/emoji/64/1f475-1f3fc.png +0 -0
  1723. package/web/app/site/sengi/assets/emoji/64/1f475-1f3fd.png +0 -0
  1724. package/web/app/site/sengi/assets/emoji/64/1f475-1f3fe.png +0 -0
  1725. package/web/app/site/sengi/assets/emoji/64/1f475-1f3ff.png +0 -0
  1726. package/web/app/site/sengi/assets/emoji/64/1f475.png +0 -0
  1727. package/web/app/site/sengi/assets/emoji/64/1f476-1f3fb.png +0 -0
  1728. package/web/app/site/sengi/assets/emoji/64/1f476-1f3fc.png +0 -0
  1729. package/web/app/site/sengi/assets/emoji/64/1f476-1f3fd.png +0 -0
  1730. package/web/app/site/sengi/assets/emoji/64/1f476-1f3fe.png +0 -0
  1731. package/web/app/site/sengi/assets/emoji/64/1f476-1f3ff.png +0 -0
  1732. package/web/app/site/sengi/assets/emoji/64/1f476.png +0 -0
  1733. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fb-2640.png +0 -0
  1734. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fb-2642.png +0 -0
  1735. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fb.png +0 -0
  1736. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fc-2640.png +0 -0
  1737. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fc-2642.png +0 -0
  1738. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fc.png +0 -0
  1739. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fd-2640.png +0 -0
  1740. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fd-2642.png +0 -0
  1741. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fd.png +0 -0
  1742. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fe-2640.png +0 -0
  1743. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fe-2642.png +0 -0
  1744. package/web/app/site/sengi/assets/emoji/64/1f477-1f3fe.png +0 -0
  1745. package/web/app/site/sengi/assets/emoji/64/1f477-1f3ff-2640.png +0 -0
  1746. package/web/app/site/sengi/assets/emoji/64/1f477-1f3ff-2642.png +0 -0
  1747. package/web/app/site/sengi/assets/emoji/64/1f477-1f3ff.png +0 -0
  1748. package/web/app/site/sengi/assets/emoji/64/1f477-2640.png +0 -0
  1749. package/web/app/site/sengi/assets/emoji/64/1f477-2642.png +0 -0
  1750. package/web/app/site/sengi/assets/emoji/64/1f477.png +0 -0
  1751. package/web/app/site/sengi/assets/emoji/64/1f478-1f3fb.png +0 -0
  1752. package/web/app/site/sengi/assets/emoji/64/1f478-1f3fc.png +0 -0
  1753. package/web/app/site/sengi/assets/emoji/64/1f478-1f3fd.png +0 -0
  1754. package/web/app/site/sengi/assets/emoji/64/1f478-1f3fe.png +0 -0
  1755. package/web/app/site/sengi/assets/emoji/64/1f478-1f3ff.png +0 -0
  1756. package/web/app/site/sengi/assets/emoji/64/1f478.png +0 -0
  1757. package/web/app/site/sengi/assets/emoji/64/1f479.png +0 -0
  1758. package/web/app/site/sengi/assets/emoji/64/1f47a.png +0 -0
  1759. package/web/app/site/sengi/assets/emoji/64/1f47b.png +0 -0
  1760. package/web/app/site/sengi/assets/emoji/64/1f47c-1f3fb.png +0 -0
  1761. package/web/app/site/sengi/assets/emoji/64/1f47c-1f3fc.png +0 -0
  1762. package/web/app/site/sengi/assets/emoji/64/1f47c-1f3fd.png +0 -0
  1763. package/web/app/site/sengi/assets/emoji/64/1f47c-1f3fe.png +0 -0
  1764. package/web/app/site/sengi/assets/emoji/64/1f47c-1f3ff.png +0 -0
  1765. package/web/app/site/sengi/assets/emoji/64/1f47c.png +0 -0
  1766. package/web/app/site/sengi/assets/emoji/64/1f47d.png +0 -0
  1767. package/web/app/site/sengi/assets/emoji/64/1f47e.png +0 -0
  1768. package/web/app/site/sengi/assets/emoji/64/1f47f.png +0 -0
  1769. package/web/app/site/sengi/assets/emoji/64/1f480.png +0 -0
  1770. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fb-2640.png +0 -0
  1771. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fb-2642.png +0 -0
  1772. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fb.png +0 -0
  1773. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fc-2640.png +0 -0
  1774. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fc-2642.png +0 -0
  1775. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fc.png +0 -0
  1776. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fd-2640.png +0 -0
  1777. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fd-2642.png +0 -0
  1778. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fd.png +0 -0
  1779. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fe-2640.png +0 -0
  1780. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fe-2642.png +0 -0
  1781. package/web/app/site/sengi/assets/emoji/64/1f481-1f3fe.png +0 -0
  1782. package/web/app/site/sengi/assets/emoji/64/1f481-1f3ff-2640.png +0 -0
  1783. package/web/app/site/sengi/assets/emoji/64/1f481-1f3ff-2642.png +0 -0
  1784. package/web/app/site/sengi/assets/emoji/64/1f481-1f3ff.png +0 -0
  1785. package/web/app/site/sengi/assets/emoji/64/1f481-2640.png +0 -0
  1786. package/web/app/site/sengi/assets/emoji/64/1f481-2642.png +0 -0
  1787. package/web/app/site/sengi/assets/emoji/64/1f481.png +0 -0
  1788. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fb-2640.png +0 -0
  1789. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fb-2642.png +0 -0
  1790. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fb.png +0 -0
  1791. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fc-2640.png +0 -0
  1792. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fc-2642.png +0 -0
  1793. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fc.png +0 -0
  1794. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fd-2640.png +0 -0
  1795. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fd-2642.png +0 -0
  1796. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fd.png +0 -0
  1797. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fe-2640.png +0 -0
  1798. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fe-2642.png +0 -0
  1799. package/web/app/site/sengi/assets/emoji/64/1f482-1f3fe.png +0 -0
  1800. package/web/app/site/sengi/assets/emoji/64/1f482-1f3ff-2640.png +0 -0
  1801. package/web/app/site/sengi/assets/emoji/64/1f482-1f3ff-2642.png +0 -0
  1802. package/web/app/site/sengi/assets/emoji/64/1f482-1f3ff.png +0 -0
  1803. package/web/app/site/sengi/assets/emoji/64/1f482-2640.png +0 -0
  1804. package/web/app/site/sengi/assets/emoji/64/1f482-2642.png +0 -0
  1805. package/web/app/site/sengi/assets/emoji/64/1f482.png +0 -0
  1806. package/web/app/site/sengi/assets/emoji/64/1f483-1f3fb.png +0 -0
  1807. package/web/app/site/sengi/assets/emoji/64/1f483-1f3fc.png +0 -0
  1808. package/web/app/site/sengi/assets/emoji/64/1f483-1f3fd.png +0 -0
  1809. package/web/app/site/sengi/assets/emoji/64/1f483-1f3fe.png +0 -0
  1810. package/web/app/site/sengi/assets/emoji/64/1f483-1f3ff.png +0 -0
  1811. package/web/app/site/sengi/assets/emoji/64/1f483.png +0 -0
  1812. package/web/app/site/sengi/assets/emoji/64/1f484.png +0 -0
  1813. package/web/app/site/sengi/assets/emoji/64/1f485-1f3fb.png +0 -0
  1814. package/web/app/site/sengi/assets/emoji/64/1f485-1f3fc.png +0 -0
  1815. package/web/app/site/sengi/assets/emoji/64/1f485-1f3fd.png +0 -0
  1816. package/web/app/site/sengi/assets/emoji/64/1f485-1f3fe.png +0 -0
  1817. package/web/app/site/sengi/assets/emoji/64/1f485-1f3ff.png +0 -0
  1818. package/web/app/site/sengi/assets/emoji/64/1f485.png +0 -0
  1819. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fb-2640.png +0 -0
  1820. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fb-2642.png +0 -0
  1821. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fb.png +0 -0
  1822. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fc-2640.png +0 -0
  1823. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fc-2642.png +0 -0
  1824. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fc.png +0 -0
  1825. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fd-2640.png +0 -0
  1826. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fd-2642.png +0 -0
  1827. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fd.png +0 -0
  1828. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fe-2640.png +0 -0
  1829. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fe-2642.png +0 -0
  1830. package/web/app/site/sengi/assets/emoji/64/1f486-1f3fe.png +0 -0
  1831. package/web/app/site/sengi/assets/emoji/64/1f486-1f3ff-2640.png +0 -0
  1832. package/web/app/site/sengi/assets/emoji/64/1f486-1f3ff-2642.png +0 -0
  1833. package/web/app/site/sengi/assets/emoji/64/1f486-1f3ff.png +0 -0
  1834. package/web/app/site/sengi/assets/emoji/64/1f486-2640.png +0 -0
  1835. package/web/app/site/sengi/assets/emoji/64/1f486-2642.png +0 -0
  1836. package/web/app/site/sengi/assets/emoji/64/1f486.png +0 -0
  1837. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fb-2640.png +0 -0
  1838. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fb-2642.png +0 -0
  1839. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fb.png +0 -0
  1840. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fc-2640.png +0 -0
  1841. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fc-2642.png +0 -0
  1842. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fc.png +0 -0
  1843. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fd-2640.png +0 -0
  1844. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fd-2642.png +0 -0
  1845. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fd.png +0 -0
  1846. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fe-2640.png +0 -0
  1847. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fe-2642.png +0 -0
  1848. package/web/app/site/sengi/assets/emoji/64/1f487-1f3fe.png +0 -0
  1849. package/web/app/site/sengi/assets/emoji/64/1f487-1f3ff-2640.png +0 -0
  1850. package/web/app/site/sengi/assets/emoji/64/1f487-1f3ff-2642.png +0 -0
  1851. package/web/app/site/sengi/assets/emoji/64/1f487-1f3ff.png +0 -0
  1852. package/web/app/site/sengi/assets/emoji/64/1f487-2640.png +0 -0
  1853. package/web/app/site/sengi/assets/emoji/64/1f487-2642.png +0 -0
  1854. package/web/app/site/sengi/assets/emoji/64/1f487.png +0 -0
  1855. package/web/app/site/sengi/assets/emoji/64/1f488.png +0 -0
  1856. package/web/app/site/sengi/assets/emoji/64/1f489.png +0 -0
  1857. package/web/app/site/sengi/assets/emoji/64/1f48a.png +0 -0
  1858. package/web/app/site/sengi/assets/emoji/64/1f48b.png +0 -0
  1859. package/web/app/site/sengi/assets/emoji/64/1f48c.png +0 -0
  1860. package/web/app/site/sengi/assets/emoji/64/1f48d.png +0 -0
  1861. package/web/app/site/sengi/assets/emoji/64/1f48e.png +0 -0
  1862. package/web/app/site/sengi/assets/emoji/64/1f48f-1f3fb.png +0 -0
  1863. package/web/app/site/sengi/assets/emoji/64/1f48f-1f3fc.png +0 -0
  1864. package/web/app/site/sengi/assets/emoji/64/1f48f-1f3fd.png +0 -0
  1865. package/web/app/site/sengi/assets/emoji/64/1f48f-1f3fe.png +0 -0
  1866. package/web/app/site/sengi/assets/emoji/64/1f48f-1f3ff.png +0 -0
  1867. package/web/app/site/sengi/assets/emoji/64/1f48f.png +0 -0
  1868. package/web/app/site/sengi/assets/emoji/64/1f490.png +0 -0
  1869. package/web/app/site/sengi/assets/emoji/64/1f491-1f3fb.png +0 -0
  1870. package/web/app/site/sengi/assets/emoji/64/1f491-1f3fc.png +0 -0
  1871. package/web/app/site/sengi/assets/emoji/64/1f491-1f3fd.png +0 -0
  1872. package/web/app/site/sengi/assets/emoji/64/1f491-1f3fe.png +0 -0
  1873. package/web/app/site/sengi/assets/emoji/64/1f491-1f3ff.png +0 -0
  1874. package/web/app/site/sengi/assets/emoji/64/1f491.png +0 -0
  1875. package/web/app/site/sengi/assets/emoji/64/1f492.png +0 -0
  1876. package/web/app/site/sengi/assets/emoji/64/1f493.png +0 -0
  1877. package/web/app/site/sengi/assets/emoji/64/1f494.png +0 -0
  1878. package/web/app/site/sengi/assets/emoji/64/1f495.png +0 -0
  1879. package/web/app/site/sengi/assets/emoji/64/1f496.png +0 -0
  1880. package/web/app/site/sengi/assets/emoji/64/1f497.png +0 -0
  1881. package/web/app/site/sengi/assets/emoji/64/1f498.png +0 -0
  1882. package/web/app/site/sengi/assets/emoji/64/1f499.png +0 -0
  1883. package/web/app/site/sengi/assets/emoji/64/1f49a.png +0 -0
  1884. package/web/app/site/sengi/assets/emoji/64/1f49b.png +0 -0
  1885. package/web/app/site/sengi/assets/emoji/64/1f49c.png +0 -0
  1886. package/web/app/site/sengi/assets/emoji/64/1f49d.png +0 -0
  1887. package/web/app/site/sengi/assets/emoji/64/1f49e.png +0 -0
  1888. package/web/app/site/sengi/assets/emoji/64/1f49f.png +0 -0
  1889. package/web/app/site/sengi/assets/emoji/64/1f4a0.png +0 -0
  1890. package/web/app/site/sengi/assets/emoji/64/1f4a1.png +0 -0
  1891. package/web/app/site/sengi/assets/emoji/64/1f4a2.png +0 -0
  1892. package/web/app/site/sengi/assets/emoji/64/1f4a3.png +0 -0
  1893. package/web/app/site/sengi/assets/emoji/64/1f4a4.png +0 -0
  1894. package/web/app/site/sengi/assets/emoji/64/1f4a5.png +0 -0
  1895. package/web/app/site/sengi/assets/emoji/64/1f4a6.png +0 -0
  1896. package/web/app/site/sengi/assets/emoji/64/1f4a7.png +0 -0
  1897. package/web/app/site/sengi/assets/emoji/64/1f4a8.png +0 -0
  1898. package/web/app/site/sengi/assets/emoji/64/1f4a9.png +0 -0
  1899. package/web/app/site/sengi/assets/emoji/64/1f4aa-1f3fb.png +0 -0
  1900. package/web/app/site/sengi/assets/emoji/64/1f4aa-1f3fc.png +0 -0
  1901. package/web/app/site/sengi/assets/emoji/64/1f4aa-1f3fd.png +0 -0
  1902. package/web/app/site/sengi/assets/emoji/64/1f4aa-1f3fe.png +0 -0
  1903. package/web/app/site/sengi/assets/emoji/64/1f4aa-1f3ff.png +0 -0
  1904. package/web/app/site/sengi/assets/emoji/64/1f4aa.png +0 -0
  1905. package/web/app/site/sengi/assets/emoji/64/1f4ab.png +0 -0
  1906. package/web/app/site/sengi/assets/emoji/64/1f4ac.png +0 -0
  1907. package/web/app/site/sengi/assets/emoji/64/1f4ad.png +0 -0
  1908. package/web/app/site/sengi/assets/emoji/64/1f4ae.png +0 -0
  1909. package/web/app/site/sengi/assets/emoji/64/1f4af.png +0 -0
  1910. package/web/app/site/sengi/assets/emoji/64/1f4b0.png +0 -0
  1911. package/web/app/site/sengi/assets/emoji/64/1f4b1.png +0 -0
  1912. package/web/app/site/sengi/assets/emoji/64/1f4b2.png +0 -0
  1913. package/web/app/site/sengi/assets/emoji/64/1f4b3.png +0 -0
  1914. package/web/app/site/sengi/assets/emoji/64/1f4b4.png +0 -0
  1915. package/web/app/site/sengi/assets/emoji/64/1f4b5.png +0 -0
  1916. package/web/app/site/sengi/assets/emoji/64/1f4b6.png +0 -0
  1917. package/web/app/site/sengi/assets/emoji/64/1f4b7.png +0 -0
  1918. package/web/app/site/sengi/assets/emoji/64/1f4b8.png +0 -0
  1919. package/web/app/site/sengi/assets/emoji/64/1f4b9.png +0 -0
  1920. package/web/app/site/sengi/assets/emoji/64/1f4ba.png +0 -0
  1921. package/web/app/site/sengi/assets/emoji/64/1f4bb.png +0 -0
  1922. package/web/app/site/sengi/assets/emoji/64/1f4bc.png +0 -0
  1923. package/web/app/site/sengi/assets/emoji/64/1f4bd.png +0 -0
  1924. package/web/app/site/sengi/assets/emoji/64/1f4be.png +0 -0
  1925. package/web/app/site/sengi/assets/emoji/64/1f4bf.png +0 -0
  1926. package/web/app/site/sengi/assets/emoji/64/1f4c0.png +0 -0
  1927. package/web/app/site/sengi/assets/emoji/64/1f4c1.png +0 -0
  1928. package/web/app/site/sengi/assets/emoji/64/1f4c2.png +0 -0
  1929. package/web/app/site/sengi/assets/emoji/64/1f4c3.png +0 -0
  1930. package/web/app/site/sengi/assets/emoji/64/1f4c4.png +0 -0
  1931. package/web/app/site/sengi/assets/emoji/64/1f4c5.png +0 -0
  1932. package/web/app/site/sengi/assets/emoji/64/1f4c6.png +0 -0
  1933. package/web/app/site/sengi/assets/emoji/64/1f4c7.png +0 -0
  1934. package/web/app/site/sengi/assets/emoji/64/1f4c8.png +0 -0
  1935. package/web/app/site/sengi/assets/emoji/64/1f4c9.png +0 -0
  1936. package/web/app/site/sengi/assets/emoji/64/1f4ca.png +0 -0
  1937. package/web/app/site/sengi/assets/emoji/64/1f4cb.png +0 -0
  1938. package/web/app/site/sengi/assets/emoji/64/1f4cc.png +0 -0
  1939. package/web/app/site/sengi/assets/emoji/64/1f4cd.png +0 -0
  1940. package/web/app/site/sengi/assets/emoji/64/1f4ce.png +0 -0
  1941. package/web/app/site/sengi/assets/emoji/64/1f4cf.png +0 -0
  1942. package/web/app/site/sengi/assets/emoji/64/1f4d0.png +0 -0
  1943. package/web/app/site/sengi/assets/emoji/64/1f4d1.png +0 -0
  1944. package/web/app/site/sengi/assets/emoji/64/1f4d2.png +0 -0
  1945. package/web/app/site/sengi/assets/emoji/64/1f4d3.png +0 -0
  1946. package/web/app/site/sengi/assets/emoji/64/1f4d4.png +0 -0
  1947. package/web/app/site/sengi/assets/emoji/64/1f4d5.png +0 -0
  1948. package/web/app/site/sengi/assets/emoji/64/1f4d6.png +0 -0
  1949. package/web/app/site/sengi/assets/emoji/64/1f4d7.png +0 -0
  1950. package/web/app/site/sengi/assets/emoji/64/1f4d8.png +0 -0
  1951. package/web/app/site/sengi/assets/emoji/64/1f4d9.png +0 -0
  1952. package/web/app/site/sengi/assets/emoji/64/1f4da.png +0 -0
  1953. package/web/app/site/sengi/assets/emoji/64/1f4db.png +0 -0
  1954. package/web/app/site/sengi/assets/emoji/64/1f4dc.png +0 -0
  1955. package/web/app/site/sengi/assets/emoji/64/1f4dd.png +0 -0
  1956. package/web/app/site/sengi/assets/emoji/64/1f4de.png +0 -0
  1957. package/web/app/site/sengi/assets/emoji/64/1f4df.png +0 -0
  1958. package/web/app/site/sengi/assets/emoji/64/1f4e0.png +0 -0
  1959. package/web/app/site/sengi/assets/emoji/64/1f4e1.png +0 -0
  1960. package/web/app/site/sengi/assets/emoji/64/1f4e2.png +0 -0
  1961. package/web/app/site/sengi/assets/emoji/64/1f4e3.png +0 -0
  1962. package/web/app/site/sengi/assets/emoji/64/1f4e4.png +0 -0
  1963. package/web/app/site/sengi/assets/emoji/64/1f4e5.png +0 -0
  1964. package/web/app/site/sengi/assets/emoji/64/1f4e6.png +0 -0
  1965. package/web/app/site/sengi/assets/emoji/64/1f4e7.png +0 -0
  1966. package/web/app/site/sengi/assets/emoji/64/1f4e8.png +0 -0
  1967. package/web/app/site/sengi/assets/emoji/64/1f4e9.png +0 -0
  1968. package/web/app/site/sengi/assets/emoji/64/1f4ea.png +0 -0
  1969. package/web/app/site/sengi/assets/emoji/64/1f4eb.png +0 -0
  1970. package/web/app/site/sengi/assets/emoji/64/1f4ec.png +0 -0
  1971. package/web/app/site/sengi/assets/emoji/64/1f4ed.png +0 -0
  1972. package/web/app/site/sengi/assets/emoji/64/1f4ee.png +0 -0
  1973. package/web/app/site/sengi/assets/emoji/64/1f4ef.png +0 -0
  1974. package/web/app/site/sengi/assets/emoji/64/1f4f0.png +0 -0
  1975. package/web/app/site/sengi/assets/emoji/64/1f4f1.png +0 -0
  1976. package/web/app/site/sengi/assets/emoji/64/1f4f2.png +0 -0
  1977. package/web/app/site/sengi/assets/emoji/64/1f4f3.png +0 -0
  1978. package/web/app/site/sengi/assets/emoji/64/1f4f4.png +0 -0
  1979. package/web/app/site/sengi/assets/emoji/64/1f4f5.png +0 -0
  1980. package/web/app/site/sengi/assets/emoji/64/1f4f6.png +0 -0
  1981. package/web/app/site/sengi/assets/emoji/64/1f4f7.png +0 -0
  1982. package/web/app/site/sengi/assets/emoji/64/1f4f8.png +0 -0
  1983. package/web/app/site/sengi/assets/emoji/64/1f4f9.png +0 -0
  1984. package/web/app/site/sengi/assets/emoji/64/1f4fa.png +0 -0
  1985. package/web/app/site/sengi/assets/emoji/64/1f4fb.png +0 -0
  1986. package/web/app/site/sengi/assets/emoji/64/1f4fc.png +0 -0
  1987. package/web/app/site/sengi/assets/emoji/64/1f4fd.png +0 -0
  1988. package/web/app/site/sengi/assets/emoji/64/1f4ff.png +0 -0
  1989. package/web/app/site/sengi/assets/emoji/64/1f500.png +0 -0
  1990. package/web/app/site/sengi/assets/emoji/64/1f501.png +0 -0
  1991. package/web/app/site/sengi/assets/emoji/64/1f502.png +0 -0
  1992. package/web/app/site/sengi/assets/emoji/64/1f503.png +0 -0
  1993. package/web/app/site/sengi/assets/emoji/64/1f504.png +0 -0
  1994. package/web/app/site/sengi/assets/emoji/64/1f505.png +0 -0
  1995. package/web/app/site/sengi/assets/emoji/64/1f506.png +0 -0
  1996. package/web/app/site/sengi/assets/emoji/64/1f507.png +0 -0
  1997. package/web/app/site/sengi/assets/emoji/64/1f508.png +0 -0
  1998. package/web/app/site/sengi/assets/emoji/64/1f509.png +0 -0
  1999. package/web/app/site/sengi/assets/emoji/64/1f50a.png +0 -0
  2000. package/web/app/site/sengi/assets/emoji/64/1f50b.png +0 -0
  2001. package/web/app/site/sengi/assets/emoji/64/1f50c.png +0 -0
  2002. package/web/app/site/sengi/assets/emoji/64/1f50d.png +0 -0
  2003. package/web/app/site/sengi/assets/emoji/64/1f50e.png +0 -0
  2004. package/web/app/site/sengi/assets/emoji/64/1f50f.png +0 -0
  2005. package/web/app/site/sengi/assets/emoji/64/1f510.png +0 -0
  2006. package/web/app/site/sengi/assets/emoji/64/1f511.png +0 -0
  2007. package/web/app/site/sengi/assets/emoji/64/1f512.png +0 -0
  2008. package/web/app/site/sengi/assets/emoji/64/1f513.png +0 -0
  2009. package/web/app/site/sengi/assets/emoji/64/1f514.png +0 -0
  2010. package/web/app/site/sengi/assets/emoji/64/1f515.png +0 -0
  2011. package/web/app/site/sengi/assets/emoji/64/1f516.png +0 -0
  2012. package/web/app/site/sengi/assets/emoji/64/1f517.png +0 -0
  2013. package/web/app/site/sengi/assets/emoji/64/1f518.png +0 -0
  2014. package/web/app/site/sengi/assets/emoji/64/1f519.png +0 -0
  2015. package/web/app/site/sengi/assets/emoji/64/1f51a.png +0 -0
  2016. package/web/app/site/sengi/assets/emoji/64/1f51b.png +0 -0
  2017. package/web/app/site/sengi/assets/emoji/64/1f51c.png +0 -0
  2018. package/web/app/site/sengi/assets/emoji/64/1f51d.png +0 -0
  2019. package/web/app/site/sengi/assets/emoji/64/1f51e.png +0 -0
  2020. package/web/app/site/sengi/assets/emoji/64/1f51f.png +0 -0
  2021. package/web/app/site/sengi/assets/emoji/64/1f520.png +0 -0
  2022. package/web/app/site/sengi/assets/emoji/64/1f521.png +0 -0
  2023. package/web/app/site/sengi/assets/emoji/64/1f522.png +0 -0
  2024. package/web/app/site/sengi/assets/emoji/64/1f523.png +0 -0
  2025. package/web/app/site/sengi/assets/emoji/64/1f524.png +0 -0
  2026. package/web/app/site/sengi/assets/emoji/64/1f525.png +0 -0
  2027. package/web/app/site/sengi/assets/emoji/64/1f526.png +0 -0
  2028. package/web/app/site/sengi/assets/emoji/64/1f527.png +0 -0
  2029. package/web/app/site/sengi/assets/emoji/64/1f528.png +0 -0
  2030. package/web/app/site/sengi/assets/emoji/64/1f529.png +0 -0
  2031. package/web/app/site/sengi/assets/emoji/64/1f52a.png +0 -0
  2032. package/web/app/site/sengi/assets/emoji/64/1f52b.png +0 -0
  2033. package/web/app/site/sengi/assets/emoji/64/1f52c.png +0 -0
  2034. package/web/app/site/sengi/assets/emoji/64/1f52d.png +0 -0
  2035. package/web/app/site/sengi/assets/emoji/64/1f52e.png +0 -0
  2036. package/web/app/site/sengi/assets/emoji/64/1f52f.png +0 -0
  2037. package/web/app/site/sengi/assets/emoji/64/1f530.png +0 -0
  2038. package/web/app/site/sengi/assets/emoji/64/1f531.png +0 -0
  2039. package/web/app/site/sengi/assets/emoji/64/1f532.png +0 -0
  2040. package/web/app/site/sengi/assets/emoji/64/1f533.png +0 -0
  2041. package/web/app/site/sengi/assets/emoji/64/1f534.png +0 -0
  2042. package/web/app/site/sengi/assets/emoji/64/1f535.png +0 -0
  2043. package/web/app/site/sengi/assets/emoji/64/1f536.png +0 -0
  2044. package/web/app/site/sengi/assets/emoji/64/1f537.png +0 -0
  2045. package/web/app/site/sengi/assets/emoji/64/1f538.png +0 -0
  2046. package/web/app/site/sengi/assets/emoji/64/1f539.png +0 -0
  2047. package/web/app/site/sengi/assets/emoji/64/1f53a.png +0 -0
  2048. package/web/app/site/sengi/assets/emoji/64/1f53b.png +0 -0
  2049. package/web/app/site/sengi/assets/emoji/64/1f53c.png +0 -0
  2050. package/web/app/site/sengi/assets/emoji/64/1f53d.png +0 -0
  2051. package/web/app/site/sengi/assets/emoji/64/1f549.png +0 -0
  2052. package/web/app/site/sengi/assets/emoji/64/1f54a.png +0 -0
  2053. package/web/app/site/sengi/assets/emoji/64/1f54b.png +0 -0
  2054. package/web/app/site/sengi/assets/emoji/64/1f54c.png +0 -0
  2055. package/web/app/site/sengi/assets/emoji/64/1f54d.png +0 -0
  2056. package/web/app/site/sengi/assets/emoji/64/1f54e.png +0 -0
  2057. package/web/app/site/sengi/assets/emoji/64/1f550.png +0 -0
  2058. package/web/app/site/sengi/assets/emoji/64/1f551.png +0 -0
  2059. package/web/app/site/sengi/assets/emoji/64/1f552.png +0 -0
  2060. package/web/app/site/sengi/assets/emoji/64/1f553.png +0 -0
  2061. package/web/app/site/sengi/assets/emoji/64/1f554.png +0 -0
  2062. package/web/app/site/sengi/assets/emoji/64/1f555.png +0 -0
  2063. package/web/app/site/sengi/assets/emoji/64/1f556.png +0 -0
  2064. package/web/app/site/sengi/assets/emoji/64/1f557.png +0 -0
  2065. package/web/app/site/sengi/assets/emoji/64/1f558.png +0 -0
  2066. package/web/app/site/sengi/assets/emoji/64/1f559.png +0 -0
  2067. package/web/app/site/sengi/assets/emoji/64/1f55a.png +0 -0
  2068. package/web/app/site/sengi/assets/emoji/64/1f55b.png +0 -0
  2069. package/web/app/site/sengi/assets/emoji/64/1f55c.png +0 -0
  2070. package/web/app/site/sengi/assets/emoji/64/1f55d.png +0 -0
  2071. package/web/app/site/sengi/assets/emoji/64/1f55e.png +0 -0
  2072. package/web/app/site/sengi/assets/emoji/64/1f55f.png +0 -0
  2073. package/web/app/site/sengi/assets/emoji/64/1f560.png +0 -0
  2074. package/web/app/site/sengi/assets/emoji/64/1f561.png +0 -0
  2075. package/web/app/site/sengi/assets/emoji/64/1f562.png +0 -0
  2076. package/web/app/site/sengi/assets/emoji/64/1f563.png +0 -0
  2077. package/web/app/site/sengi/assets/emoji/64/1f564.png +0 -0
  2078. package/web/app/site/sengi/assets/emoji/64/1f565.png +0 -0
  2079. package/web/app/site/sengi/assets/emoji/64/1f566.png +0 -0
  2080. package/web/app/site/sengi/assets/emoji/64/1f567.png +0 -0
  2081. package/web/app/site/sengi/assets/emoji/64/1f56f.png +0 -0
  2082. package/web/app/site/sengi/assets/emoji/64/1f570.png +0 -0
  2083. package/web/app/site/sengi/assets/emoji/64/1f573.png +0 -0
  2084. package/web/app/site/sengi/assets/emoji/64/1f574-1f3fb.png +0 -0
  2085. package/web/app/site/sengi/assets/emoji/64/1f574-1f3fc.png +0 -0
  2086. package/web/app/site/sengi/assets/emoji/64/1f574-1f3fd.png +0 -0
  2087. package/web/app/site/sengi/assets/emoji/64/1f574-1f3fe.png +0 -0
  2088. package/web/app/site/sengi/assets/emoji/64/1f574-1f3ff.png +0 -0
  2089. package/web/app/site/sengi/assets/emoji/64/1f574.png +0 -0
  2090. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fb-2640.png +0 -0
  2091. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fb-2642.png +0 -0
  2092. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fb.png +0 -0
  2093. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fc-2640.png +0 -0
  2094. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fc-2642.png +0 -0
  2095. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fc.png +0 -0
  2096. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fd-2640.png +0 -0
  2097. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fd-2642.png +0 -0
  2098. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fd.png +0 -0
  2099. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fe-2640.png +0 -0
  2100. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fe-2642.png +0 -0
  2101. package/web/app/site/sengi/assets/emoji/64/1f575-1f3fe.png +0 -0
  2102. package/web/app/site/sengi/assets/emoji/64/1f575-1f3ff-2640.png +0 -0
  2103. package/web/app/site/sengi/assets/emoji/64/1f575-1f3ff-2642.png +0 -0
  2104. package/web/app/site/sengi/assets/emoji/64/1f575-1f3ff.png +0 -0
  2105. package/web/app/site/sengi/assets/emoji/64/1f575-2640.png +0 -0
  2106. package/web/app/site/sengi/assets/emoji/64/1f575-2642.png +0 -0
  2107. package/web/app/site/sengi/assets/emoji/64/1f575.png +0 -0
  2108. package/web/app/site/sengi/assets/emoji/64/1f576.png +0 -0
  2109. package/web/app/site/sengi/assets/emoji/64/1f577.png +0 -0
  2110. package/web/app/site/sengi/assets/emoji/64/1f578.png +0 -0
  2111. package/web/app/site/sengi/assets/emoji/64/1f579.png +0 -0
  2112. package/web/app/site/sengi/assets/emoji/64/1f57a-1f3fb.png +0 -0
  2113. package/web/app/site/sengi/assets/emoji/64/1f57a-1f3fc.png +0 -0
  2114. package/web/app/site/sengi/assets/emoji/64/1f57a-1f3fd.png +0 -0
  2115. package/web/app/site/sengi/assets/emoji/64/1f57a-1f3fe.png +0 -0
  2116. package/web/app/site/sengi/assets/emoji/64/1f57a-1f3ff.png +0 -0
  2117. package/web/app/site/sengi/assets/emoji/64/1f57a.png +0 -0
  2118. package/web/app/site/sengi/assets/emoji/64/1f587.png +0 -0
  2119. package/web/app/site/sengi/assets/emoji/64/1f58a.png +0 -0
  2120. package/web/app/site/sengi/assets/emoji/64/1f58b.png +0 -0
  2121. package/web/app/site/sengi/assets/emoji/64/1f58c.png +0 -0
  2122. package/web/app/site/sengi/assets/emoji/64/1f58d.png +0 -0
  2123. package/web/app/site/sengi/assets/emoji/64/1f590-1f3fb.png +0 -0
  2124. package/web/app/site/sengi/assets/emoji/64/1f590-1f3fc.png +0 -0
  2125. package/web/app/site/sengi/assets/emoji/64/1f590-1f3fd.png +0 -0
  2126. package/web/app/site/sengi/assets/emoji/64/1f590-1f3fe.png +0 -0
  2127. package/web/app/site/sengi/assets/emoji/64/1f590-1f3ff.png +0 -0
  2128. package/web/app/site/sengi/assets/emoji/64/1f590.png +0 -0
  2129. package/web/app/site/sengi/assets/emoji/64/1f595-1f3fb.png +0 -0
  2130. package/web/app/site/sengi/assets/emoji/64/1f595-1f3fc.png +0 -0
  2131. package/web/app/site/sengi/assets/emoji/64/1f595-1f3fd.png +0 -0
  2132. package/web/app/site/sengi/assets/emoji/64/1f595-1f3fe.png +0 -0
  2133. package/web/app/site/sengi/assets/emoji/64/1f595-1f3ff.png +0 -0
  2134. package/web/app/site/sengi/assets/emoji/64/1f595.png +0 -0
  2135. package/web/app/site/sengi/assets/emoji/64/1f596-1f3fb.png +0 -0
  2136. package/web/app/site/sengi/assets/emoji/64/1f596-1f3fc.png +0 -0
  2137. package/web/app/site/sengi/assets/emoji/64/1f596-1f3fd.png +0 -0
  2138. package/web/app/site/sengi/assets/emoji/64/1f596-1f3fe.png +0 -0
  2139. package/web/app/site/sengi/assets/emoji/64/1f596-1f3ff.png +0 -0
  2140. package/web/app/site/sengi/assets/emoji/64/1f596.png +0 -0
  2141. package/web/app/site/sengi/assets/emoji/64/1f5a4.png +0 -0
  2142. package/web/app/site/sengi/assets/emoji/64/1f5a5.png +0 -0
  2143. package/web/app/site/sengi/assets/emoji/64/1f5a8.png +0 -0
  2144. package/web/app/site/sengi/assets/emoji/64/1f5b1.png +0 -0
  2145. package/web/app/site/sengi/assets/emoji/64/1f5b2.png +0 -0
  2146. package/web/app/site/sengi/assets/emoji/64/1f5bc.png +0 -0
  2147. package/web/app/site/sengi/assets/emoji/64/1f5c2.png +0 -0
  2148. package/web/app/site/sengi/assets/emoji/64/1f5c3.png +0 -0
  2149. package/web/app/site/sengi/assets/emoji/64/1f5c4.png +0 -0
  2150. package/web/app/site/sengi/assets/emoji/64/1f5d1.png +0 -0
  2151. package/web/app/site/sengi/assets/emoji/64/1f5d2.png +0 -0
  2152. package/web/app/site/sengi/assets/emoji/64/1f5d3.png +0 -0
  2153. package/web/app/site/sengi/assets/emoji/64/1f5dc.png +0 -0
  2154. package/web/app/site/sengi/assets/emoji/64/1f5dd.png +0 -0
  2155. package/web/app/site/sengi/assets/emoji/64/1f5de.png +0 -0
  2156. package/web/app/site/sengi/assets/emoji/64/1f5e1.png +0 -0
  2157. package/web/app/site/sengi/assets/emoji/64/1f5e3.png +0 -0
  2158. package/web/app/site/sengi/assets/emoji/64/1f5e8.png +0 -0
  2159. package/web/app/site/sengi/assets/emoji/64/1f5ef.png +0 -0
  2160. package/web/app/site/sengi/assets/emoji/64/1f5f3.png +0 -0
  2161. package/web/app/site/sengi/assets/emoji/64/1f5fa.png +0 -0
  2162. package/web/app/site/sengi/assets/emoji/64/1f5fb.png +0 -0
  2163. package/web/app/site/sengi/assets/emoji/64/1f5fc.png +0 -0
  2164. package/web/app/site/sengi/assets/emoji/64/1f5fd.png +0 -0
  2165. package/web/app/site/sengi/assets/emoji/64/1f5fe.png +0 -0
  2166. package/web/app/site/sengi/assets/emoji/64/1f5ff.png +0 -0
  2167. package/web/app/site/sengi/assets/emoji/64/1f600.png +0 -0
  2168. package/web/app/site/sengi/assets/emoji/64/1f601.png +0 -0
  2169. package/web/app/site/sengi/assets/emoji/64/1f602.png +0 -0
  2170. package/web/app/site/sengi/assets/emoji/64/1f603.png +0 -0
  2171. package/web/app/site/sengi/assets/emoji/64/1f604.png +0 -0
  2172. package/web/app/site/sengi/assets/emoji/64/1f605.png +0 -0
  2173. package/web/app/site/sengi/assets/emoji/64/1f606.png +0 -0
  2174. package/web/app/site/sengi/assets/emoji/64/1f607.png +0 -0
  2175. package/web/app/site/sengi/assets/emoji/64/1f608.png +0 -0
  2176. package/web/app/site/sengi/assets/emoji/64/1f609.png +0 -0
  2177. package/web/app/site/sengi/assets/emoji/64/1f60a.png +0 -0
  2178. package/web/app/site/sengi/assets/emoji/64/1f60b.png +0 -0
  2179. package/web/app/site/sengi/assets/emoji/64/1f60c.png +0 -0
  2180. package/web/app/site/sengi/assets/emoji/64/1f60d.png +0 -0
  2181. package/web/app/site/sengi/assets/emoji/64/1f60e.png +0 -0
  2182. package/web/app/site/sengi/assets/emoji/64/1f60f.png +0 -0
  2183. package/web/app/site/sengi/assets/emoji/64/1f610.png +0 -0
  2184. package/web/app/site/sengi/assets/emoji/64/1f611.png +0 -0
  2185. package/web/app/site/sengi/assets/emoji/64/1f612.png +0 -0
  2186. package/web/app/site/sengi/assets/emoji/64/1f613.png +0 -0
  2187. package/web/app/site/sengi/assets/emoji/64/1f614.png +0 -0
  2188. package/web/app/site/sengi/assets/emoji/64/1f615.png +0 -0
  2189. package/web/app/site/sengi/assets/emoji/64/1f616.png +0 -0
  2190. package/web/app/site/sengi/assets/emoji/64/1f617.png +0 -0
  2191. package/web/app/site/sengi/assets/emoji/64/1f618.png +0 -0
  2192. package/web/app/site/sengi/assets/emoji/64/1f619.png +0 -0
  2193. package/web/app/site/sengi/assets/emoji/64/1f61a.png +0 -0
  2194. package/web/app/site/sengi/assets/emoji/64/1f61b.png +0 -0
  2195. package/web/app/site/sengi/assets/emoji/64/1f61c.png +0 -0
  2196. package/web/app/site/sengi/assets/emoji/64/1f61d.png +0 -0
  2197. package/web/app/site/sengi/assets/emoji/64/1f61e.png +0 -0
  2198. package/web/app/site/sengi/assets/emoji/64/1f61f.png +0 -0
  2199. package/web/app/site/sengi/assets/emoji/64/1f620.png +0 -0
  2200. package/web/app/site/sengi/assets/emoji/64/1f621.png +0 -0
  2201. package/web/app/site/sengi/assets/emoji/64/1f622.png +0 -0
  2202. package/web/app/site/sengi/assets/emoji/64/1f623.png +0 -0
  2203. package/web/app/site/sengi/assets/emoji/64/1f624.png +0 -0
  2204. package/web/app/site/sengi/assets/emoji/64/1f625.png +0 -0
  2205. package/web/app/site/sengi/assets/emoji/64/1f626.png +0 -0
  2206. package/web/app/site/sengi/assets/emoji/64/1f627.png +0 -0
  2207. package/web/app/site/sengi/assets/emoji/64/1f628.png +0 -0
  2208. package/web/app/site/sengi/assets/emoji/64/1f629.png +0 -0
  2209. package/web/app/site/sengi/assets/emoji/64/1f62a.png +0 -0
  2210. package/web/app/site/sengi/assets/emoji/64/1f62b.png +0 -0
  2211. package/web/app/site/sengi/assets/emoji/64/1f62c.png +0 -0
  2212. package/web/app/site/sengi/assets/emoji/64/1f62d.png +0 -0
  2213. package/web/app/site/sengi/assets/emoji/64/1f62e-1f4a8.png +0 -0
  2214. package/web/app/site/sengi/assets/emoji/64/1f62e.png +0 -0
  2215. package/web/app/site/sengi/assets/emoji/64/1f62f.png +0 -0
  2216. package/web/app/site/sengi/assets/emoji/64/1f630.png +0 -0
  2217. package/web/app/site/sengi/assets/emoji/64/1f631.png +0 -0
  2218. package/web/app/site/sengi/assets/emoji/64/1f632.png +0 -0
  2219. package/web/app/site/sengi/assets/emoji/64/1f633.png +0 -0
  2220. package/web/app/site/sengi/assets/emoji/64/1f634.png +0 -0
  2221. package/web/app/site/sengi/assets/emoji/64/1f635-1f4ab.png +0 -0
  2222. package/web/app/site/sengi/assets/emoji/64/1f635.png +0 -0
  2223. package/web/app/site/sengi/assets/emoji/64/1f636-1f32b.png +0 -0
  2224. package/web/app/site/sengi/assets/emoji/64/1f636.png +0 -0
  2225. package/web/app/site/sengi/assets/emoji/64/1f637.png +0 -0
  2226. package/web/app/site/sengi/assets/emoji/64/1f638.png +0 -0
  2227. package/web/app/site/sengi/assets/emoji/64/1f639.png +0 -0
  2228. package/web/app/site/sengi/assets/emoji/64/1f63a.png +0 -0
  2229. package/web/app/site/sengi/assets/emoji/64/1f63b.png +0 -0
  2230. package/web/app/site/sengi/assets/emoji/64/1f63c.png +0 -0
  2231. package/web/app/site/sengi/assets/emoji/64/1f63d.png +0 -0
  2232. package/web/app/site/sengi/assets/emoji/64/1f63e.png +0 -0
  2233. package/web/app/site/sengi/assets/emoji/64/1f63f.png +0 -0
  2234. package/web/app/site/sengi/assets/emoji/64/1f640.png +0 -0
  2235. package/web/app/site/sengi/assets/emoji/64/1f641.png +0 -0
  2236. package/web/app/site/sengi/assets/emoji/64/1f642-2194.png +0 -0
  2237. package/web/app/site/sengi/assets/emoji/64/1f642-2195.png +0 -0
  2238. package/web/app/site/sengi/assets/emoji/64/1f642.png +0 -0
  2239. package/web/app/site/sengi/assets/emoji/64/1f643.png +0 -0
  2240. package/web/app/site/sengi/assets/emoji/64/1f644.png +0 -0
  2241. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fb-2640.png +0 -0
  2242. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fb-2642.png +0 -0
  2243. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fb.png +0 -0
  2244. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fc-2640.png +0 -0
  2245. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fc-2642.png +0 -0
  2246. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fc.png +0 -0
  2247. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fd-2640.png +0 -0
  2248. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fd-2642.png +0 -0
  2249. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fd.png +0 -0
  2250. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fe-2640.png +0 -0
  2251. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fe-2642.png +0 -0
  2252. package/web/app/site/sengi/assets/emoji/64/1f645-1f3fe.png +0 -0
  2253. package/web/app/site/sengi/assets/emoji/64/1f645-1f3ff-2640.png +0 -0
  2254. package/web/app/site/sengi/assets/emoji/64/1f645-1f3ff-2642.png +0 -0
  2255. package/web/app/site/sengi/assets/emoji/64/1f645-1f3ff.png +0 -0
  2256. package/web/app/site/sengi/assets/emoji/64/1f645-2640.png +0 -0
  2257. package/web/app/site/sengi/assets/emoji/64/1f645-2642.png +0 -0
  2258. package/web/app/site/sengi/assets/emoji/64/1f645.png +0 -0
  2259. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fb-2640.png +0 -0
  2260. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fb-2642.png +0 -0
  2261. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fb.png +0 -0
  2262. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fc-2640.png +0 -0
  2263. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fc-2642.png +0 -0
  2264. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fc.png +0 -0
  2265. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fd-2640.png +0 -0
  2266. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fd-2642.png +0 -0
  2267. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fd.png +0 -0
  2268. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fe-2640.png +0 -0
  2269. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fe-2642.png +0 -0
  2270. package/web/app/site/sengi/assets/emoji/64/1f646-1f3fe.png +0 -0
  2271. package/web/app/site/sengi/assets/emoji/64/1f646-1f3ff-2640.png +0 -0
  2272. package/web/app/site/sengi/assets/emoji/64/1f646-1f3ff-2642.png +0 -0
  2273. package/web/app/site/sengi/assets/emoji/64/1f646-1f3ff.png +0 -0
  2274. package/web/app/site/sengi/assets/emoji/64/1f646-2640.png +0 -0
  2275. package/web/app/site/sengi/assets/emoji/64/1f646-2642.png +0 -0
  2276. package/web/app/site/sengi/assets/emoji/64/1f646.png +0 -0
  2277. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fb-2640.png +0 -0
  2278. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fb-2642.png +0 -0
  2279. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fb.png +0 -0
  2280. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fc-2640.png +0 -0
  2281. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fc-2642.png +0 -0
  2282. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fc.png +0 -0
  2283. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fd-2640.png +0 -0
  2284. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fd-2642.png +0 -0
  2285. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fd.png +0 -0
  2286. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fe-2640.png +0 -0
  2287. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fe-2642.png +0 -0
  2288. package/web/app/site/sengi/assets/emoji/64/1f647-1f3fe.png +0 -0
  2289. package/web/app/site/sengi/assets/emoji/64/1f647-1f3ff-2640.png +0 -0
  2290. package/web/app/site/sengi/assets/emoji/64/1f647-1f3ff-2642.png +0 -0
  2291. package/web/app/site/sengi/assets/emoji/64/1f647-1f3ff.png +0 -0
  2292. package/web/app/site/sengi/assets/emoji/64/1f647-2640.png +0 -0
  2293. package/web/app/site/sengi/assets/emoji/64/1f647-2642.png +0 -0
  2294. package/web/app/site/sengi/assets/emoji/64/1f647.png +0 -0
  2295. package/web/app/site/sengi/assets/emoji/64/1f648.png +0 -0
  2296. package/web/app/site/sengi/assets/emoji/64/1f649.png +0 -0
  2297. package/web/app/site/sengi/assets/emoji/64/1f64a.png +0 -0
  2298. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fb-2640.png +0 -0
  2299. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fb-2642.png +0 -0
  2300. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fb.png +0 -0
  2301. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fc-2640.png +0 -0
  2302. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fc-2642.png +0 -0
  2303. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fc.png +0 -0
  2304. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fd-2640.png +0 -0
  2305. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fd-2642.png +0 -0
  2306. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fd.png +0 -0
  2307. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fe-2640.png +0 -0
  2308. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fe-2642.png +0 -0
  2309. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3fe.png +0 -0
  2310. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3ff-2640.png +0 -0
  2311. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3ff-2642.png +0 -0
  2312. package/web/app/site/sengi/assets/emoji/64/1f64b-1f3ff.png +0 -0
  2313. package/web/app/site/sengi/assets/emoji/64/1f64b-2640.png +0 -0
  2314. package/web/app/site/sengi/assets/emoji/64/1f64b-2642.png +0 -0
  2315. package/web/app/site/sengi/assets/emoji/64/1f64b.png +0 -0
  2316. package/web/app/site/sengi/assets/emoji/64/1f64c-1f3fb.png +0 -0
  2317. package/web/app/site/sengi/assets/emoji/64/1f64c-1f3fc.png +0 -0
  2318. package/web/app/site/sengi/assets/emoji/64/1f64c-1f3fd.png +0 -0
  2319. package/web/app/site/sengi/assets/emoji/64/1f64c-1f3fe.png +0 -0
  2320. package/web/app/site/sengi/assets/emoji/64/1f64c-1f3ff.png +0 -0
  2321. package/web/app/site/sengi/assets/emoji/64/1f64c.png +0 -0
  2322. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fb-2640.png +0 -0
  2323. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fb-2642.png +0 -0
  2324. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fb.png +0 -0
  2325. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fc-2640.png +0 -0
  2326. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fc-2642.png +0 -0
  2327. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fc.png +0 -0
  2328. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fd-2640.png +0 -0
  2329. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fd-2642.png +0 -0
  2330. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fd.png +0 -0
  2331. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fe-2640.png +0 -0
  2332. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fe-2642.png +0 -0
  2333. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3fe.png +0 -0
  2334. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3ff-2640.png +0 -0
  2335. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3ff-2642.png +0 -0
  2336. package/web/app/site/sengi/assets/emoji/64/1f64d-1f3ff.png +0 -0
  2337. package/web/app/site/sengi/assets/emoji/64/1f64d-2640.png +0 -0
  2338. package/web/app/site/sengi/assets/emoji/64/1f64d-2642.png +0 -0
  2339. package/web/app/site/sengi/assets/emoji/64/1f64d.png +0 -0
  2340. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fb-2640.png +0 -0
  2341. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fb-2642.png +0 -0
  2342. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fb.png +0 -0
  2343. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fc-2640.png +0 -0
  2344. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fc-2642.png +0 -0
  2345. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fc.png +0 -0
  2346. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fd-2640.png +0 -0
  2347. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fd-2642.png +0 -0
  2348. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fd.png +0 -0
  2349. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fe-2640.png +0 -0
  2350. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fe-2642.png +0 -0
  2351. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3fe.png +0 -0
  2352. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3ff-2640.png +0 -0
  2353. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3ff-2642.png +0 -0
  2354. package/web/app/site/sengi/assets/emoji/64/1f64e-1f3ff.png +0 -0
  2355. package/web/app/site/sengi/assets/emoji/64/1f64e-2640.png +0 -0
  2356. package/web/app/site/sengi/assets/emoji/64/1f64e-2642.png +0 -0
  2357. package/web/app/site/sengi/assets/emoji/64/1f64e.png +0 -0
  2358. package/web/app/site/sengi/assets/emoji/64/1f64f-1f3fb.png +0 -0
  2359. package/web/app/site/sengi/assets/emoji/64/1f64f-1f3fc.png +0 -0
  2360. package/web/app/site/sengi/assets/emoji/64/1f64f-1f3fd.png +0 -0
  2361. package/web/app/site/sengi/assets/emoji/64/1f64f-1f3fe.png +0 -0
  2362. package/web/app/site/sengi/assets/emoji/64/1f64f-1f3ff.png +0 -0
  2363. package/web/app/site/sengi/assets/emoji/64/1f64f.png +0 -0
  2364. package/web/app/site/sengi/assets/emoji/64/1f680.png +0 -0
  2365. package/web/app/site/sengi/assets/emoji/64/1f681.png +0 -0
  2366. package/web/app/site/sengi/assets/emoji/64/1f682.png +0 -0
  2367. package/web/app/site/sengi/assets/emoji/64/1f683.png +0 -0
  2368. package/web/app/site/sengi/assets/emoji/64/1f684.png +0 -0
  2369. package/web/app/site/sengi/assets/emoji/64/1f685.png +0 -0
  2370. package/web/app/site/sengi/assets/emoji/64/1f686.png +0 -0
  2371. package/web/app/site/sengi/assets/emoji/64/1f687.png +0 -0
  2372. package/web/app/site/sengi/assets/emoji/64/1f688.png +0 -0
  2373. package/web/app/site/sengi/assets/emoji/64/1f689.png +0 -0
  2374. package/web/app/site/sengi/assets/emoji/64/1f68a.png +0 -0
  2375. package/web/app/site/sengi/assets/emoji/64/1f68b.png +0 -0
  2376. package/web/app/site/sengi/assets/emoji/64/1f68c.png +0 -0
  2377. package/web/app/site/sengi/assets/emoji/64/1f68d.png +0 -0
  2378. package/web/app/site/sengi/assets/emoji/64/1f68e.png +0 -0
  2379. package/web/app/site/sengi/assets/emoji/64/1f68f.png +0 -0
  2380. package/web/app/site/sengi/assets/emoji/64/1f690.png +0 -0
  2381. package/web/app/site/sengi/assets/emoji/64/1f691.png +0 -0
  2382. package/web/app/site/sengi/assets/emoji/64/1f692.png +0 -0
  2383. package/web/app/site/sengi/assets/emoji/64/1f693.png +0 -0
  2384. package/web/app/site/sengi/assets/emoji/64/1f694.png +0 -0
  2385. package/web/app/site/sengi/assets/emoji/64/1f695.png +0 -0
  2386. package/web/app/site/sengi/assets/emoji/64/1f696.png +0 -0
  2387. package/web/app/site/sengi/assets/emoji/64/1f697.png +0 -0
  2388. package/web/app/site/sengi/assets/emoji/64/1f698.png +0 -0
  2389. package/web/app/site/sengi/assets/emoji/64/1f699.png +0 -0
  2390. package/web/app/site/sengi/assets/emoji/64/1f69a.png +0 -0
  2391. package/web/app/site/sengi/assets/emoji/64/1f69b.png +0 -0
  2392. package/web/app/site/sengi/assets/emoji/64/1f69c.png +0 -0
  2393. package/web/app/site/sengi/assets/emoji/64/1f69d.png +0 -0
  2394. package/web/app/site/sengi/assets/emoji/64/1f69e.png +0 -0
  2395. package/web/app/site/sengi/assets/emoji/64/1f69f.png +0 -0
  2396. package/web/app/site/sengi/assets/emoji/64/1f6a0.png +0 -0
  2397. package/web/app/site/sengi/assets/emoji/64/1f6a1.png +0 -0
  2398. package/web/app/site/sengi/assets/emoji/64/1f6a2.png +0 -0
  2399. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fb-2640.png +0 -0
  2400. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fb-2642.png +0 -0
  2401. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fb.png +0 -0
  2402. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fc-2640.png +0 -0
  2403. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fc-2642.png +0 -0
  2404. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fc.png +0 -0
  2405. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fd-2640.png +0 -0
  2406. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fd-2642.png +0 -0
  2407. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fd.png +0 -0
  2408. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fe-2640.png +0 -0
  2409. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fe-2642.png +0 -0
  2410. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3fe.png +0 -0
  2411. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3ff-2640.png +0 -0
  2412. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3ff-2642.png +0 -0
  2413. package/web/app/site/sengi/assets/emoji/64/1f6a3-1f3ff.png +0 -0
  2414. package/web/app/site/sengi/assets/emoji/64/1f6a3-2640.png +0 -0
  2415. package/web/app/site/sengi/assets/emoji/64/1f6a3-2642.png +0 -0
  2416. package/web/app/site/sengi/assets/emoji/64/1f6a3.png +0 -0
  2417. package/web/app/site/sengi/assets/emoji/64/1f6a4.png +0 -0
  2418. package/web/app/site/sengi/assets/emoji/64/1f6a5.png +0 -0
  2419. package/web/app/site/sengi/assets/emoji/64/1f6a6.png +0 -0
  2420. package/web/app/site/sengi/assets/emoji/64/1f6a7.png +0 -0
  2421. package/web/app/site/sengi/assets/emoji/64/1f6a8.png +0 -0
  2422. package/web/app/site/sengi/assets/emoji/64/1f6a9.png +0 -0
  2423. package/web/app/site/sengi/assets/emoji/64/1f6aa.png +0 -0
  2424. package/web/app/site/sengi/assets/emoji/64/1f6ab.png +0 -0
  2425. package/web/app/site/sengi/assets/emoji/64/1f6ac.png +0 -0
  2426. package/web/app/site/sengi/assets/emoji/64/1f6ad.png +0 -0
  2427. package/web/app/site/sengi/assets/emoji/64/1f6ae.png +0 -0
  2428. package/web/app/site/sengi/assets/emoji/64/1f6af.png +0 -0
  2429. package/web/app/site/sengi/assets/emoji/64/1f6b0.png +0 -0
  2430. package/web/app/site/sengi/assets/emoji/64/1f6b1.png +0 -0
  2431. package/web/app/site/sengi/assets/emoji/64/1f6b2.png +0 -0
  2432. package/web/app/site/sengi/assets/emoji/64/1f6b3.png +0 -0
  2433. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fb-2640.png +0 -0
  2434. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fb-2642.png +0 -0
  2435. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fb.png +0 -0
  2436. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fc-2640.png +0 -0
  2437. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fc-2642.png +0 -0
  2438. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fc.png +0 -0
  2439. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fd-2640.png +0 -0
  2440. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fd-2642.png +0 -0
  2441. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fd.png +0 -0
  2442. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fe-2640.png +0 -0
  2443. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fe-2642.png +0 -0
  2444. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3fe.png +0 -0
  2445. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3ff-2640.png +0 -0
  2446. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3ff-2642.png +0 -0
  2447. package/web/app/site/sengi/assets/emoji/64/1f6b4-1f3ff.png +0 -0
  2448. package/web/app/site/sengi/assets/emoji/64/1f6b4-2640.png +0 -0
  2449. package/web/app/site/sengi/assets/emoji/64/1f6b4-2642.png +0 -0
  2450. package/web/app/site/sengi/assets/emoji/64/1f6b4.png +0 -0
  2451. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fb-2640.png +0 -0
  2452. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fb-2642.png +0 -0
  2453. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fb.png +0 -0
  2454. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fc-2640.png +0 -0
  2455. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fc-2642.png +0 -0
  2456. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fc.png +0 -0
  2457. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fd-2640.png +0 -0
  2458. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fd-2642.png +0 -0
  2459. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fd.png +0 -0
  2460. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fe-2640.png +0 -0
  2461. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fe-2642.png +0 -0
  2462. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3fe.png +0 -0
  2463. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3ff-2640.png +0 -0
  2464. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3ff-2642.png +0 -0
  2465. package/web/app/site/sengi/assets/emoji/64/1f6b5-1f3ff.png +0 -0
  2466. package/web/app/site/sengi/assets/emoji/64/1f6b5-2640.png +0 -0
  2467. package/web/app/site/sengi/assets/emoji/64/1f6b5-2642.png +0 -0
  2468. package/web/app/site/sengi/assets/emoji/64/1f6b5.png +0 -0
  2469. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fb-2640-27a1.png +0 -0
  2470. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fb-2640.png +0 -0
  2471. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fb-2642-27a1.png +0 -0
  2472. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fb-2642.png +0 -0
  2473. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fb-27a1.png +0 -0
  2474. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fb.png +0 -0
  2475. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fc-2640-27a1.png +0 -0
  2476. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fc-2640.png +0 -0
  2477. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fc-2642-27a1.png +0 -0
  2478. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fc-2642.png +0 -0
  2479. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fc-27a1.png +0 -0
  2480. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fc.png +0 -0
  2481. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fd-2640-27a1.png +0 -0
  2482. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fd-2640.png +0 -0
  2483. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fd-2642-27a1.png +0 -0
  2484. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fd-2642.png +0 -0
  2485. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fd-27a1.png +0 -0
  2486. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fd.png +0 -0
  2487. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fe-2640-27a1.png +0 -0
  2488. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fe-2640.png +0 -0
  2489. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fe-2642-27a1.png +0 -0
  2490. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fe-2642.png +0 -0
  2491. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fe-27a1.png +0 -0
  2492. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3fe.png +0 -0
  2493. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3ff-2640-27a1.png +0 -0
  2494. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3ff-2640.png +0 -0
  2495. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3ff-2642-27a1.png +0 -0
  2496. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3ff-2642.png +0 -0
  2497. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3ff-27a1.png +0 -0
  2498. package/web/app/site/sengi/assets/emoji/64/1f6b6-1f3ff.png +0 -0
  2499. package/web/app/site/sengi/assets/emoji/64/1f6b6-2640-27a1.png +0 -0
  2500. package/web/app/site/sengi/assets/emoji/64/1f6b6-2640.png +0 -0
  2501. package/web/app/site/sengi/assets/emoji/64/1f6b6-2642-27a1.png +0 -0
  2502. package/web/app/site/sengi/assets/emoji/64/1f6b6-2642.png +0 -0
  2503. package/web/app/site/sengi/assets/emoji/64/1f6b6-27a1.png +0 -0
  2504. package/web/app/site/sengi/assets/emoji/64/1f6b6.png +0 -0
  2505. package/web/app/site/sengi/assets/emoji/64/1f6b7.png +0 -0
  2506. package/web/app/site/sengi/assets/emoji/64/1f6b8.png +0 -0
  2507. package/web/app/site/sengi/assets/emoji/64/1f6b9.png +0 -0
  2508. package/web/app/site/sengi/assets/emoji/64/1f6ba.png +0 -0
  2509. package/web/app/site/sengi/assets/emoji/64/1f6bb.png +0 -0
  2510. package/web/app/site/sengi/assets/emoji/64/1f6bc.png +0 -0
  2511. package/web/app/site/sengi/assets/emoji/64/1f6bd.png +0 -0
  2512. package/web/app/site/sengi/assets/emoji/64/1f6be.png +0 -0
  2513. package/web/app/site/sengi/assets/emoji/64/1f6bf.png +0 -0
  2514. package/web/app/site/sengi/assets/emoji/64/1f6c0-1f3fb.png +0 -0
  2515. package/web/app/site/sengi/assets/emoji/64/1f6c0-1f3fc.png +0 -0
  2516. package/web/app/site/sengi/assets/emoji/64/1f6c0-1f3fd.png +0 -0
  2517. package/web/app/site/sengi/assets/emoji/64/1f6c0-1f3fe.png +0 -0
  2518. package/web/app/site/sengi/assets/emoji/64/1f6c0-1f3ff.png +0 -0
  2519. package/web/app/site/sengi/assets/emoji/64/1f6c0.png +0 -0
  2520. package/web/app/site/sengi/assets/emoji/64/1f6c1.png +0 -0
  2521. package/web/app/site/sengi/assets/emoji/64/1f6c2.png +0 -0
  2522. package/web/app/site/sengi/assets/emoji/64/1f6c3.png +0 -0
  2523. package/web/app/site/sengi/assets/emoji/64/1f6c4.png +0 -0
  2524. package/web/app/site/sengi/assets/emoji/64/1f6c5.png +0 -0
  2525. package/web/app/site/sengi/assets/emoji/64/1f6cb.png +0 -0
  2526. package/web/app/site/sengi/assets/emoji/64/1f6cc-1f3fb.png +0 -0
  2527. package/web/app/site/sengi/assets/emoji/64/1f6cc-1f3fc.png +0 -0
  2528. package/web/app/site/sengi/assets/emoji/64/1f6cc-1f3fd.png +0 -0
  2529. package/web/app/site/sengi/assets/emoji/64/1f6cc-1f3fe.png +0 -0
  2530. package/web/app/site/sengi/assets/emoji/64/1f6cc-1f3ff.png +0 -0
  2531. package/web/app/site/sengi/assets/emoji/64/1f6cc.png +0 -0
  2532. package/web/app/site/sengi/assets/emoji/64/1f6cd.png +0 -0
  2533. package/web/app/site/sengi/assets/emoji/64/1f6ce.png +0 -0
  2534. package/web/app/site/sengi/assets/emoji/64/1f6cf.png +0 -0
  2535. package/web/app/site/sengi/assets/emoji/64/1f6d0.png +0 -0
  2536. package/web/app/site/sengi/assets/emoji/64/1f6d1.png +0 -0
  2537. package/web/app/site/sengi/assets/emoji/64/1f6d2.png +0 -0
  2538. package/web/app/site/sengi/assets/emoji/64/1f6d5.png +0 -0
  2539. package/web/app/site/sengi/assets/emoji/64/1f6d6.png +0 -0
  2540. package/web/app/site/sengi/assets/emoji/64/1f6d7.png +0 -0
  2541. package/web/app/site/sengi/assets/emoji/64/1f6dc.png +0 -0
  2542. package/web/app/site/sengi/assets/emoji/64/1f6dd.png +0 -0
  2543. package/web/app/site/sengi/assets/emoji/64/1f6de.png +0 -0
  2544. package/web/app/site/sengi/assets/emoji/64/1f6df.png +0 -0
  2545. package/web/app/site/sengi/assets/emoji/64/1f6e0.png +0 -0
  2546. package/web/app/site/sengi/assets/emoji/64/1f6e1.png +0 -0
  2547. package/web/app/site/sengi/assets/emoji/64/1f6e2.png +0 -0
  2548. package/web/app/site/sengi/assets/emoji/64/1f6e3.png +0 -0
  2549. package/web/app/site/sengi/assets/emoji/64/1f6e4.png +0 -0
  2550. package/web/app/site/sengi/assets/emoji/64/1f6e5.png +0 -0
  2551. package/web/app/site/sengi/assets/emoji/64/1f6e9.png +0 -0
  2552. package/web/app/site/sengi/assets/emoji/64/1f6eb.png +0 -0
  2553. package/web/app/site/sengi/assets/emoji/64/1f6ec.png +0 -0
  2554. package/web/app/site/sengi/assets/emoji/64/1f6f0.png +0 -0
  2555. package/web/app/site/sengi/assets/emoji/64/1f6f3.png +0 -0
  2556. package/web/app/site/sengi/assets/emoji/64/1f6f4.png +0 -0
  2557. package/web/app/site/sengi/assets/emoji/64/1f6f5.png +0 -0
  2558. package/web/app/site/sengi/assets/emoji/64/1f6f6.png +0 -0
  2559. package/web/app/site/sengi/assets/emoji/64/1f6f7.png +0 -0
  2560. package/web/app/site/sengi/assets/emoji/64/1f6f8.png +0 -0
  2561. package/web/app/site/sengi/assets/emoji/64/1f6f9.png +0 -0
  2562. package/web/app/site/sengi/assets/emoji/64/1f6fa.png +0 -0
  2563. package/web/app/site/sengi/assets/emoji/64/1f6fb.png +0 -0
  2564. package/web/app/site/sengi/assets/emoji/64/1f6fc.png +0 -0
  2565. package/web/app/site/sengi/assets/emoji/64/1f7e0.png +0 -0
  2566. package/web/app/site/sengi/assets/emoji/64/1f7e1.png +0 -0
  2567. package/web/app/site/sengi/assets/emoji/64/1f7e2.png +0 -0
  2568. package/web/app/site/sengi/assets/emoji/64/1f7e3.png +0 -0
  2569. package/web/app/site/sengi/assets/emoji/64/1f7e4.png +0 -0
  2570. package/web/app/site/sengi/assets/emoji/64/1f7e5.png +0 -0
  2571. package/web/app/site/sengi/assets/emoji/64/1f7e6.png +0 -0
  2572. package/web/app/site/sengi/assets/emoji/64/1f7e7.png +0 -0
  2573. package/web/app/site/sengi/assets/emoji/64/1f7e8.png +0 -0
  2574. package/web/app/site/sengi/assets/emoji/64/1f7e9.png +0 -0
  2575. package/web/app/site/sengi/assets/emoji/64/1f7ea.png +0 -0
  2576. package/web/app/site/sengi/assets/emoji/64/1f7eb.png +0 -0
  2577. package/web/app/site/sengi/assets/emoji/64/1f7f0.png +0 -0
  2578. package/web/app/site/sengi/assets/emoji/64/1f90c-1f3fb.png +0 -0
  2579. package/web/app/site/sengi/assets/emoji/64/1f90c-1f3fc.png +0 -0
  2580. package/web/app/site/sengi/assets/emoji/64/1f90c-1f3fd.png +0 -0
  2581. package/web/app/site/sengi/assets/emoji/64/1f90c-1f3fe.png +0 -0
  2582. package/web/app/site/sengi/assets/emoji/64/1f90c-1f3ff.png +0 -0
  2583. package/web/app/site/sengi/assets/emoji/64/1f90c.png +0 -0
  2584. package/web/app/site/sengi/assets/emoji/64/1f90d.png +0 -0
  2585. package/web/app/site/sengi/assets/emoji/64/1f90e.png +0 -0
  2586. package/web/app/site/sengi/assets/emoji/64/1f90f-1f3fb.png +0 -0
  2587. package/web/app/site/sengi/assets/emoji/64/1f90f-1f3fc.png +0 -0
  2588. package/web/app/site/sengi/assets/emoji/64/1f90f-1f3fd.png +0 -0
  2589. package/web/app/site/sengi/assets/emoji/64/1f90f-1f3fe.png +0 -0
  2590. package/web/app/site/sengi/assets/emoji/64/1f90f-1f3ff.png +0 -0
  2591. package/web/app/site/sengi/assets/emoji/64/1f90f.png +0 -0
  2592. package/web/app/site/sengi/assets/emoji/64/1f910.png +0 -0
  2593. package/web/app/site/sengi/assets/emoji/64/1f911.png +0 -0
  2594. package/web/app/site/sengi/assets/emoji/64/1f912.png +0 -0
  2595. package/web/app/site/sengi/assets/emoji/64/1f913.png +0 -0
  2596. package/web/app/site/sengi/assets/emoji/64/1f914.png +0 -0
  2597. package/web/app/site/sengi/assets/emoji/64/1f915.png +0 -0
  2598. package/web/app/site/sengi/assets/emoji/64/1f916.png +0 -0
  2599. package/web/app/site/sengi/assets/emoji/64/1f917.png +0 -0
  2600. package/web/app/site/sengi/assets/emoji/64/1f918-1f3fb.png +0 -0
  2601. package/web/app/site/sengi/assets/emoji/64/1f918-1f3fc.png +0 -0
  2602. package/web/app/site/sengi/assets/emoji/64/1f918-1f3fd.png +0 -0
  2603. package/web/app/site/sengi/assets/emoji/64/1f918-1f3fe.png +0 -0
  2604. package/web/app/site/sengi/assets/emoji/64/1f918-1f3ff.png +0 -0
  2605. package/web/app/site/sengi/assets/emoji/64/1f918.png +0 -0
  2606. package/web/app/site/sengi/assets/emoji/64/1f919-1f3fb.png +0 -0
  2607. package/web/app/site/sengi/assets/emoji/64/1f919-1f3fc.png +0 -0
  2608. package/web/app/site/sengi/assets/emoji/64/1f919-1f3fd.png +0 -0
  2609. package/web/app/site/sengi/assets/emoji/64/1f919-1f3fe.png +0 -0
  2610. package/web/app/site/sengi/assets/emoji/64/1f919-1f3ff.png +0 -0
  2611. package/web/app/site/sengi/assets/emoji/64/1f919.png +0 -0
  2612. package/web/app/site/sengi/assets/emoji/64/1f91a-1f3fb.png +0 -0
  2613. package/web/app/site/sengi/assets/emoji/64/1f91a-1f3fc.png +0 -0
  2614. package/web/app/site/sengi/assets/emoji/64/1f91a-1f3fd.png +0 -0
  2615. package/web/app/site/sengi/assets/emoji/64/1f91a-1f3fe.png +0 -0
  2616. package/web/app/site/sengi/assets/emoji/64/1f91a-1f3ff.png +0 -0
  2617. package/web/app/site/sengi/assets/emoji/64/1f91a.png +0 -0
  2618. package/web/app/site/sengi/assets/emoji/64/1f91b-1f3fb.png +0 -0
  2619. package/web/app/site/sengi/assets/emoji/64/1f91b-1f3fc.png +0 -0
  2620. package/web/app/site/sengi/assets/emoji/64/1f91b-1f3fd.png +0 -0
  2621. package/web/app/site/sengi/assets/emoji/64/1f91b-1f3fe.png +0 -0
  2622. package/web/app/site/sengi/assets/emoji/64/1f91b-1f3ff.png +0 -0
  2623. package/web/app/site/sengi/assets/emoji/64/1f91b.png +0 -0
  2624. package/web/app/site/sengi/assets/emoji/64/1f91c-1f3fb.png +0 -0
  2625. package/web/app/site/sengi/assets/emoji/64/1f91c-1f3fc.png +0 -0
  2626. package/web/app/site/sengi/assets/emoji/64/1f91c-1f3fd.png +0 -0
  2627. package/web/app/site/sengi/assets/emoji/64/1f91c-1f3fe.png +0 -0
  2628. package/web/app/site/sengi/assets/emoji/64/1f91c-1f3ff.png +0 -0
  2629. package/web/app/site/sengi/assets/emoji/64/1f91c.png +0 -0
  2630. package/web/app/site/sengi/assets/emoji/64/1f91d-1f3fb.png +0 -0
  2631. package/web/app/site/sengi/assets/emoji/64/1f91d-1f3fc.png +0 -0
  2632. package/web/app/site/sengi/assets/emoji/64/1f91d-1f3fd.png +0 -0
  2633. package/web/app/site/sengi/assets/emoji/64/1f91d-1f3fe.png +0 -0
  2634. package/web/app/site/sengi/assets/emoji/64/1f91d-1f3ff.png +0 -0
  2635. package/web/app/site/sengi/assets/emoji/64/1f91d.png +0 -0
  2636. package/web/app/site/sengi/assets/emoji/64/1f91e-1f3fb.png +0 -0
  2637. package/web/app/site/sengi/assets/emoji/64/1f91e-1f3fc.png +0 -0
  2638. package/web/app/site/sengi/assets/emoji/64/1f91e-1f3fd.png +0 -0
  2639. package/web/app/site/sengi/assets/emoji/64/1f91e-1f3fe.png +0 -0
  2640. package/web/app/site/sengi/assets/emoji/64/1f91e-1f3ff.png +0 -0
  2641. package/web/app/site/sengi/assets/emoji/64/1f91e.png +0 -0
  2642. package/web/app/site/sengi/assets/emoji/64/1f91f-1f3fb.png +0 -0
  2643. package/web/app/site/sengi/assets/emoji/64/1f91f-1f3fc.png +0 -0
  2644. package/web/app/site/sengi/assets/emoji/64/1f91f-1f3fd.png +0 -0
  2645. package/web/app/site/sengi/assets/emoji/64/1f91f-1f3fe.png +0 -0
  2646. package/web/app/site/sengi/assets/emoji/64/1f91f-1f3ff.png +0 -0
  2647. package/web/app/site/sengi/assets/emoji/64/1f91f.png +0 -0
  2648. package/web/app/site/sengi/assets/emoji/64/1f920.png +0 -0
  2649. package/web/app/site/sengi/assets/emoji/64/1f921.png +0 -0
  2650. package/web/app/site/sengi/assets/emoji/64/1f922.png +0 -0
  2651. package/web/app/site/sengi/assets/emoji/64/1f923.png +0 -0
  2652. package/web/app/site/sengi/assets/emoji/64/1f924.png +0 -0
  2653. package/web/app/site/sengi/assets/emoji/64/1f925.png +0 -0
  2654. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fb-2640.png +0 -0
  2655. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fb-2642.png +0 -0
  2656. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fb.png +0 -0
  2657. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fc-2640.png +0 -0
  2658. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fc-2642.png +0 -0
  2659. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fc.png +0 -0
  2660. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fd-2640.png +0 -0
  2661. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fd-2642.png +0 -0
  2662. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fd.png +0 -0
  2663. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fe-2640.png +0 -0
  2664. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fe-2642.png +0 -0
  2665. package/web/app/site/sengi/assets/emoji/64/1f926-1f3fe.png +0 -0
  2666. package/web/app/site/sengi/assets/emoji/64/1f926-1f3ff-2640.png +0 -0
  2667. package/web/app/site/sengi/assets/emoji/64/1f926-1f3ff-2642.png +0 -0
  2668. package/web/app/site/sengi/assets/emoji/64/1f926-1f3ff.png +0 -0
  2669. package/web/app/site/sengi/assets/emoji/64/1f926-2640.png +0 -0
  2670. package/web/app/site/sengi/assets/emoji/64/1f926-2642.png +0 -0
  2671. package/web/app/site/sengi/assets/emoji/64/1f926.png +0 -0
  2672. package/web/app/site/sengi/assets/emoji/64/1f927.png +0 -0
  2673. package/web/app/site/sengi/assets/emoji/64/1f928.png +0 -0
  2674. package/web/app/site/sengi/assets/emoji/64/1f929.png +0 -0
  2675. package/web/app/site/sengi/assets/emoji/64/1f92a.png +0 -0
  2676. package/web/app/site/sengi/assets/emoji/64/1f92b.png +0 -0
  2677. package/web/app/site/sengi/assets/emoji/64/1f92c.png +0 -0
  2678. package/web/app/site/sengi/assets/emoji/64/1f92d.png +0 -0
  2679. package/web/app/site/sengi/assets/emoji/64/1f92e.png +0 -0
  2680. package/web/app/site/sengi/assets/emoji/64/1f92f.png +0 -0
  2681. package/web/app/site/sengi/assets/emoji/64/1f930-1f3fb.png +0 -0
  2682. package/web/app/site/sengi/assets/emoji/64/1f930-1f3fc.png +0 -0
  2683. package/web/app/site/sengi/assets/emoji/64/1f930-1f3fd.png +0 -0
  2684. package/web/app/site/sengi/assets/emoji/64/1f930-1f3fe.png +0 -0
  2685. package/web/app/site/sengi/assets/emoji/64/1f930-1f3ff.png +0 -0
  2686. package/web/app/site/sengi/assets/emoji/64/1f930.png +0 -0
  2687. package/web/app/site/sengi/assets/emoji/64/1f931-1f3fb.png +0 -0
  2688. package/web/app/site/sengi/assets/emoji/64/1f931-1f3fc.png +0 -0
  2689. package/web/app/site/sengi/assets/emoji/64/1f931-1f3fd.png +0 -0
  2690. package/web/app/site/sengi/assets/emoji/64/1f931-1f3fe.png +0 -0
  2691. package/web/app/site/sengi/assets/emoji/64/1f931-1f3ff.png +0 -0
  2692. package/web/app/site/sengi/assets/emoji/64/1f931.png +0 -0
  2693. package/web/app/site/sengi/assets/emoji/64/1f932-1f3fb.png +0 -0
  2694. package/web/app/site/sengi/assets/emoji/64/1f932-1f3fc.png +0 -0
  2695. package/web/app/site/sengi/assets/emoji/64/1f932-1f3fd.png +0 -0
  2696. package/web/app/site/sengi/assets/emoji/64/1f932-1f3fe.png +0 -0
  2697. package/web/app/site/sengi/assets/emoji/64/1f932-1f3ff.png +0 -0
  2698. package/web/app/site/sengi/assets/emoji/64/1f932.png +0 -0
  2699. package/web/app/site/sengi/assets/emoji/64/1f933-1f3fb.png +0 -0
  2700. package/web/app/site/sengi/assets/emoji/64/1f933-1f3fc.png +0 -0
  2701. package/web/app/site/sengi/assets/emoji/64/1f933-1f3fd.png +0 -0
  2702. package/web/app/site/sengi/assets/emoji/64/1f933-1f3fe.png +0 -0
  2703. package/web/app/site/sengi/assets/emoji/64/1f933-1f3ff.png +0 -0
  2704. package/web/app/site/sengi/assets/emoji/64/1f933.png +0 -0
  2705. package/web/app/site/sengi/assets/emoji/64/1f934-1f3fb.png +0 -0
  2706. package/web/app/site/sengi/assets/emoji/64/1f934-1f3fc.png +0 -0
  2707. package/web/app/site/sengi/assets/emoji/64/1f934-1f3fd.png +0 -0
  2708. package/web/app/site/sengi/assets/emoji/64/1f934-1f3fe.png +0 -0
  2709. package/web/app/site/sengi/assets/emoji/64/1f934-1f3ff.png +0 -0
  2710. package/web/app/site/sengi/assets/emoji/64/1f934.png +0 -0
  2711. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fb-2640.png +0 -0
  2712. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fb-2642.png +0 -0
  2713. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fb.png +0 -0
  2714. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fc-2640.png +0 -0
  2715. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fc-2642.png +0 -0
  2716. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fc.png +0 -0
  2717. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fd-2640.png +0 -0
  2718. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fd-2642.png +0 -0
  2719. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fd.png +0 -0
  2720. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fe-2640.png +0 -0
  2721. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fe-2642.png +0 -0
  2722. package/web/app/site/sengi/assets/emoji/64/1f935-1f3fe.png +0 -0
  2723. package/web/app/site/sengi/assets/emoji/64/1f935-1f3ff-2640.png +0 -0
  2724. package/web/app/site/sengi/assets/emoji/64/1f935-1f3ff-2642.png +0 -0
  2725. package/web/app/site/sengi/assets/emoji/64/1f935-1f3ff.png +0 -0
  2726. package/web/app/site/sengi/assets/emoji/64/1f935-2640.png +0 -0
  2727. package/web/app/site/sengi/assets/emoji/64/1f935-2642.png +0 -0
  2728. package/web/app/site/sengi/assets/emoji/64/1f935.png +0 -0
  2729. package/web/app/site/sengi/assets/emoji/64/1f936-1f3fb.png +0 -0
  2730. package/web/app/site/sengi/assets/emoji/64/1f936-1f3fc.png +0 -0
  2731. package/web/app/site/sengi/assets/emoji/64/1f936-1f3fd.png +0 -0
  2732. package/web/app/site/sengi/assets/emoji/64/1f936-1f3fe.png +0 -0
  2733. package/web/app/site/sengi/assets/emoji/64/1f936-1f3ff.png +0 -0
  2734. package/web/app/site/sengi/assets/emoji/64/1f936.png +0 -0
  2735. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fb-2640.png +0 -0
  2736. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fb-2642.png +0 -0
  2737. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fb.png +0 -0
  2738. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fc-2640.png +0 -0
  2739. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fc-2642.png +0 -0
  2740. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fc.png +0 -0
  2741. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fd-2640.png +0 -0
  2742. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fd-2642.png +0 -0
  2743. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fd.png +0 -0
  2744. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fe-2640.png +0 -0
  2745. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fe-2642.png +0 -0
  2746. package/web/app/site/sengi/assets/emoji/64/1f937-1f3fe.png +0 -0
  2747. package/web/app/site/sengi/assets/emoji/64/1f937-1f3ff-2640.png +0 -0
  2748. package/web/app/site/sengi/assets/emoji/64/1f937-1f3ff-2642.png +0 -0
  2749. package/web/app/site/sengi/assets/emoji/64/1f937-1f3ff.png +0 -0
  2750. package/web/app/site/sengi/assets/emoji/64/1f937-2640.png +0 -0
  2751. package/web/app/site/sengi/assets/emoji/64/1f937-2642.png +0 -0
  2752. package/web/app/site/sengi/assets/emoji/64/1f937.png +0 -0
  2753. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fb-2640.png +0 -0
  2754. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fb-2642.png +0 -0
  2755. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fb.png +0 -0
  2756. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fc-2640.png +0 -0
  2757. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fc-2642.png +0 -0
  2758. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fc.png +0 -0
  2759. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fd-2640.png +0 -0
  2760. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fd-2642.png +0 -0
  2761. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fd.png +0 -0
  2762. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fe-2640.png +0 -0
  2763. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fe-2642.png +0 -0
  2764. package/web/app/site/sengi/assets/emoji/64/1f938-1f3fe.png +0 -0
  2765. package/web/app/site/sengi/assets/emoji/64/1f938-1f3ff-2640.png +0 -0
  2766. package/web/app/site/sengi/assets/emoji/64/1f938-1f3ff-2642.png +0 -0
  2767. package/web/app/site/sengi/assets/emoji/64/1f938-1f3ff.png +0 -0
  2768. package/web/app/site/sengi/assets/emoji/64/1f938-2640.png +0 -0
  2769. package/web/app/site/sengi/assets/emoji/64/1f938-2642.png +0 -0
  2770. package/web/app/site/sengi/assets/emoji/64/1f938.png +0 -0
  2771. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fb-2640.png +0 -0
  2772. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fb-2642.png +0 -0
  2773. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fb.png +0 -0
  2774. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fc-2640.png +0 -0
  2775. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fc-2642.png +0 -0
  2776. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fc.png +0 -0
  2777. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fd-2640.png +0 -0
  2778. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fd-2642.png +0 -0
  2779. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fd.png +0 -0
  2780. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fe-2640.png +0 -0
  2781. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fe-2642.png +0 -0
  2782. package/web/app/site/sengi/assets/emoji/64/1f939-1f3fe.png +0 -0
  2783. package/web/app/site/sengi/assets/emoji/64/1f939-1f3ff-2640.png +0 -0
  2784. package/web/app/site/sengi/assets/emoji/64/1f939-1f3ff-2642.png +0 -0
  2785. package/web/app/site/sengi/assets/emoji/64/1f939-1f3ff.png +0 -0
  2786. package/web/app/site/sengi/assets/emoji/64/1f939-2640.png +0 -0
  2787. package/web/app/site/sengi/assets/emoji/64/1f939-2642.png +0 -0
  2788. package/web/app/site/sengi/assets/emoji/64/1f939.png +0 -0
  2789. package/web/app/site/sengi/assets/emoji/64/1f93a.png +0 -0
  2790. package/web/app/site/sengi/assets/emoji/64/1f93c-2640.png +0 -0
  2791. package/web/app/site/sengi/assets/emoji/64/1f93c-2642.png +0 -0
  2792. package/web/app/site/sengi/assets/emoji/64/1f93c.png +0 -0
  2793. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fb-2640.png +0 -0
  2794. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fb-2642.png +0 -0
  2795. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fb.png +0 -0
  2796. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fc-2640.png +0 -0
  2797. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fc-2642.png +0 -0
  2798. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fc.png +0 -0
  2799. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fd-2640.png +0 -0
  2800. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fd-2642.png +0 -0
  2801. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fd.png +0 -0
  2802. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fe-2640.png +0 -0
  2803. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fe-2642.png +0 -0
  2804. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3fe.png +0 -0
  2805. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3ff-2640.png +0 -0
  2806. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3ff-2642.png +0 -0
  2807. package/web/app/site/sengi/assets/emoji/64/1f93d-1f3ff.png +0 -0
  2808. package/web/app/site/sengi/assets/emoji/64/1f93d-2640.png +0 -0
  2809. package/web/app/site/sengi/assets/emoji/64/1f93d-2642.png +0 -0
  2810. package/web/app/site/sengi/assets/emoji/64/1f93d.png +0 -0
  2811. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fb-2640.png +0 -0
  2812. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fb-2642.png +0 -0
  2813. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fb.png +0 -0
  2814. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fc-2640.png +0 -0
  2815. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fc-2642.png +0 -0
  2816. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fc.png +0 -0
  2817. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fd-2640.png +0 -0
  2818. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fd-2642.png +0 -0
  2819. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fd.png +0 -0
  2820. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fe-2640.png +0 -0
  2821. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fe-2642.png +0 -0
  2822. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3fe.png +0 -0
  2823. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3ff-2640.png +0 -0
  2824. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3ff-2642.png +0 -0
  2825. package/web/app/site/sengi/assets/emoji/64/1f93e-1f3ff.png +0 -0
  2826. package/web/app/site/sengi/assets/emoji/64/1f93e-2640.png +0 -0
  2827. package/web/app/site/sengi/assets/emoji/64/1f93e-2642.png +0 -0
  2828. package/web/app/site/sengi/assets/emoji/64/1f93e.png +0 -0
  2829. package/web/app/site/sengi/assets/emoji/64/1f93f.png +0 -0
  2830. package/web/app/site/sengi/assets/emoji/64/1f940.png +0 -0
  2831. package/web/app/site/sengi/assets/emoji/64/1f941.png +0 -0
  2832. package/web/app/site/sengi/assets/emoji/64/1f942.png +0 -0
  2833. package/web/app/site/sengi/assets/emoji/64/1f943.png +0 -0
  2834. package/web/app/site/sengi/assets/emoji/64/1f944.png +0 -0
  2835. package/web/app/site/sengi/assets/emoji/64/1f945.png +0 -0
  2836. package/web/app/site/sengi/assets/emoji/64/1f947.png +0 -0
  2837. package/web/app/site/sengi/assets/emoji/64/1f948.png +0 -0
  2838. package/web/app/site/sengi/assets/emoji/64/1f949.png +0 -0
  2839. package/web/app/site/sengi/assets/emoji/64/1f94a.png +0 -0
  2840. package/web/app/site/sengi/assets/emoji/64/1f94b.png +0 -0
  2841. package/web/app/site/sengi/assets/emoji/64/1f94c.png +0 -0
  2842. package/web/app/site/sengi/assets/emoji/64/1f94d.png +0 -0
  2843. package/web/app/site/sengi/assets/emoji/64/1f94e.png +0 -0
  2844. package/web/app/site/sengi/assets/emoji/64/1f94f.png +0 -0
  2845. package/web/app/site/sengi/assets/emoji/64/1f950.png +0 -0
  2846. package/web/app/site/sengi/assets/emoji/64/1f951.png +0 -0
  2847. package/web/app/site/sengi/assets/emoji/64/1f952.png +0 -0
  2848. package/web/app/site/sengi/assets/emoji/64/1f953.png +0 -0
  2849. package/web/app/site/sengi/assets/emoji/64/1f954.png +0 -0
  2850. package/web/app/site/sengi/assets/emoji/64/1f955.png +0 -0
  2851. package/web/app/site/sengi/assets/emoji/64/1f956.png +0 -0
  2852. package/web/app/site/sengi/assets/emoji/64/1f957.png +0 -0
  2853. package/web/app/site/sengi/assets/emoji/64/1f958.png +0 -0
  2854. package/web/app/site/sengi/assets/emoji/64/1f959.png +0 -0
  2855. package/web/app/site/sengi/assets/emoji/64/1f95a.png +0 -0
  2856. package/web/app/site/sengi/assets/emoji/64/1f95b.png +0 -0
  2857. package/web/app/site/sengi/assets/emoji/64/1f95c.png +0 -0
  2858. package/web/app/site/sengi/assets/emoji/64/1f95d.png +0 -0
  2859. package/web/app/site/sengi/assets/emoji/64/1f95e.png +0 -0
  2860. package/web/app/site/sengi/assets/emoji/64/1f95f.png +0 -0
  2861. package/web/app/site/sengi/assets/emoji/64/1f960.png +0 -0
  2862. package/web/app/site/sengi/assets/emoji/64/1f961.png +0 -0
  2863. package/web/app/site/sengi/assets/emoji/64/1f962.png +0 -0
  2864. package/web/app/site/sengi/assets/emoji/64/1f963.png +0 -0
  2865. package/web/app/site/sengi/assets/emoji/64/1f964.png +0 -0
  2866. package/web/app/site/sengi/assets/emoji/64/1f965.png +0 -0
  2867. package/web/app/site/sengi/assets/emoji/64/1f966.png +0 -0
  2868. package/web/app/site/sengi/assets/emoji/64/1f967.png +0 -0
  2869. package/web/app/site/sengi/assets/emoji/64/1f968.png +0 -0
  2870. package/web/app/site/sengi/assets/emoji/64/1f969.png +0 -0
  2871. package/web/app/site/sengi/assets/emoji/64/1f96a.png +0 -0
  2872. package/web/app/site/sengi/assets/emoji/64/1f96b.png +0 -0
  2873. package/web/app/site/sengi/assets/emoji/64/1f96c.png +0 -0
  2874. package/web/app/site/sengi/assets/emoji/64/1f96d.png +0 -0
  2875. package/web/app/site/sengi/assets/emoji/64/1f96e.png +0 -0
  2876. package/web/app/site/sengi/assets/emoji/64/1f96f.png +0 -0
  2877. package/web/app/site/sengi/assets/emoji/64/1f970.png +0 -0
  2878. package/web/app/site/sengi/assets/emoji/64/1f971.png +0 -0
  2879. package/web/app/site/sengi/assets/emoji/64/1f972.png +0 -0
  2880. package/web/app/site/sengi/assets/emoji/64/1f973.png +0 -0
  2881. package/web/app/site/sengi/assets/emoji/64/1f974.png +0 -0
  2882. package/web/app/site/sengi/assets/emoji/64/1f975.png +0 -0
  2883. package/web/app/site/sengi/assets/emoji/64/1f976.png +0 -0
  2884. package/web/app/site/sengi/assets/emoji/64/1f977-1f3fb.png +0 -0
  2885. package/web/app/site/sengi/assets/emoji/64/1f977-1f3fc.png +0 -0
  2886. package/web/app/site/sengi/assets/emoji/64/1f977-1f3fd.png +0 -0
  2887. package/web/app/site/sengi/assets/emoji/64/1f977-1f3fe.png +0 -0
  2888. package/web/app/site/sengi/assets/emoji/64/1f977-1f3ff.png +0 -0
  2889. package/web/app/site/sengi/assets/emoji/64/1f977.png +0 -0
  2890. package/web/app/site/sengi/assets/emoji/64/1f978.png +0 -0
  2891. package/web/app/site/sengi/assets/emoji/64/1f979.png +0 -0
  2892. package/web/app/site/sengi/assets/emoji/64/1f97a.png +0 -0
  2893. package/web/app/site/sengi/assets/emoji/64/1f97b.png +0 -0
  2894. package/web/app/site/sengi/assets/emoji/64/1f97c.png +0 -0
  2895. package/web/app/site/sengi/assets/emoji/64/1f97d.png +0 -0
  2896. package/web/app/site/sengi/assets/emoji/64/1f97e.png +0 -0
  2897. package/web/app/site/sengi/assets/emoji/64/1f97f.png +0 -0
  2898. package/web/app/site/sengi/assets/emoji/64/1f980.png +0 -0
  2899. package/web/app/site/sengi/assets/emoji/64/1f981.png +0 -0
  2900. package/web/app/site/sengi/assets/emoji/64/1f982.png +0 -0
  2901. package/web/app/site/sengi/assets/emoji/64/1f983.png +0 -0
  2902. package/web/app/site/sengi/assets/emoji/64/1f984.png +0 -0
  2903. package/web/app/site/sengi/assets/emoji/64/1f985.png +0 -0
  2904. package/web/app/site/sengi/assets/emoji/64/1f986.png +0 -0
  2905. package/web/app/site/sengi/assets/emoji/64/1f987.png +0 -0
  2906. package/web/app/site/sengi/assets/emoji/64/1f988.png +0 -0
  2907. package/web/app/site/sengi/assets/emoji/64/1f989.png +0 -0
  2908. package/web/app/site/sengi/assets/emoji/64/1f98a.png +0 -0
  2909. package/web/app/site/sengi/assets/emoji/64/1f98b.png +0 -0
  2910. package/web/app/site/sengi/assets/emoji/64/1f98c.png +0 -0
  2911. package/web/app/site/sengi/assets/emoji/64/1f98d.png +0 -0
  2912. package/web/app/site/sengi/assets/emoji/64/1f98e.png +0 -0
  2913. package/web/app/site/sengi/assets/emoji/64/1f98f.png +0 -0
  2914. package/web/app/site/sengi/assets/emoji/64/1f990.png +0 -0
  2915. package/web/app/site/sengi/assets/emoji/64/1f991.png +0 -0
  2916. package/web/app/site/sengi/assets/emoji/64/1f992.png +0 -0
  2917. package/web/app/site/sengi/assets/emoji/64/1f993.png +0 -0
  2918. package/web/app/site/sengi/assets/emoji/64/1f994.png +0 -0
  2919. package/web/app/site/sengi/assets/emoji/64/1f995.png +0 -0
  2920. package/web/app/site/sengi/assets/emoji/64/1f996.png +0 -0
  2921. package/web/app/site/sengi/assets/emoji/64/1f997.png +0 -0
  2922. package/web/app/site/sengi/assets/emoji/64/1f998.png +0 -0
  2923. package/web/app/site/sengi/assets/emoji/64/1f999.png +0 -0
  2924. package/web/app/site/sengi/assets/emoji/64/1f99a.png +0 -0
  2925. package/web/app/site/sengi/assets/emoji/64/1f99b.png +0 -0
  2926. package/web/app/site/sengi/assets/emoji/64/1f99c.png +0 -0
  2927. package/web/app/site/sengi/assets/emoji/64/1f99d.png +0 -0
  2928. package/web/app/site/sengi/assets/emoji/64/1f99e.png +0 -0
  2929. package/web/app/site/sengi/assets/emoji/64/1f99f.png +0 -0
  2930. package/web/app/site/sengi/assets/emoji/64/1f9a0.png +0 -0
  2931. package/web/app/site/sengi/assets/emoji/64/1f9a1.png +0 -0
  2932. package/web/app/site/sengi/assets/emoji/64/1f9a2.png +0 -0
  2933. package/web/app/site/sengi/assets/emoji/64/1f9a3.png +0 -0
  2934. package/web/app/site/sengi/assets/emoji/64/1f9a4.png +0 -0
  2935. package/web/app/site/sengi/assets/emoji/64/1f9a5.png +0 -0
  2936. package/web/app/site/sengi/assets/emoji/64/1f9a6.png +0 -0
  2937. package/web/app/site/sengi/assets/emoji/64/1f9a7.png +0 -0
  2938. package/web/app/site/sengi/assets/emoji/64/1f9a8.png +0 -0
  2939. package/web/app/site/sengi/assets/emoji/64/1f9a9.png +0 -0
  2940. package/web/app/site/sengi/assets/emoji/64/1f9aa.png +0 -0
  2941. package/web/app/site/sengi/assets/emoji/64/1f9ab.png +0 -0
  2942. package/web/app/site/sengi/assets/emoji/64/1f9ac.png +0 -0
  2943. package/web/app/site/sengi/assets/emoji/64/1f9ad.png +0 -0
  2944. package/web/app/site/sengi/assets/emoji/64/1f9ae.png +0 -0
  2945. package/web/app/site/sengi/assets/emoji/64/1f9af.png +0 -0
  2946. package/web/app/site/sengi/assets/emoji/64/1f9b0.png +0 -0
  2947. package/web/app/site/sengi/assets/emoji/64/1f9b1.png +0 -0
  2948. package/web/app/site/sengi/assets/emoji/64/1f9b2.png +0 -0
  2949. package/web/app/site/sengi/assets/emoji/64/1f9b3.png +0 -0
  2950. package/web/app/site/sengi/assets/emoji/64/1f9b4.png +0 -0
  2951. package/web/app/site/sengi/assets/emoji/64/1f9b5-1f3fb.png +0 -0
  2952. package/web/app/site/sengi/assets/emoji/64/1f9b5-1f3fc.png +0 -0
  2953. package/web/app/site/sengi/assets/emoji/64/1f9b5-1f3fd.png +0 -0
  2954. package/web/app/site/sengi/assets/emoji/64/1f9b5-1f3fe.png +0 -0
  2955. package/web/app/site/sengi/assets/emoji/64/1f9b5-1f3ff.png +0 -0
  2956. package/web/app/site/sengi/assets/emoji/64/1f9b5.png +0 -0
  2957. package/web/app/site/sengi/assets/emoji/64/1f9b6-1f3fb.png +0 -0
  2958. package/web/app/site/sengi/assets/emoji/64/1f9b6-1f3fc.png +0 -0
  2959. package/web/app/site/sengi/assets/emoji/64/1f9b6-1f3fd.png +0 -0
  2960. package/web/app/site/sengi/assets/emoji/64/1f9b6-1f3fe.png +0 -0
  2961. package/web/app/site/sengi/assets/emoji/64/1f9b6-1f3ff.png +0 -0
  2962. package/web/app/site/sengi/assets/emoji/64/1f9b6.png +0 -0
  2963. package/web/app/site/sengi/assets/emoji/64/1f9b7.png +0 -0
  2964. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fb-2640.png +0 -0
  2965. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fb-2642.png +0 -0
  2966. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fb.png +0 -0
  2967. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fc-2640.png +0 -0
  2968. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fc-2642.png +0 -0
  2969. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fc.png +0 -0
  2970. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fd-2640.png +0 -0
  2971. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fd-2642.png +0 -0
  2972. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fd.png +0 -0
  2973. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fe-2640.png +0 -0
  2974. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fe-2642.png +0 -0
  2975. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3fe.png +0 -0
  2976. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3ff-2640.png +0 -0
  2977. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3ff-2642.png +0 -0
  2978. package/web/app/site/sengi/assets/emoji/64/1f9b8-1f3ff.png +0 -0
  2979. package/web/app/site/sengi/assets/emoji/64/1f9b8-2640.png +0 -0
  2980. package/web/app/site/sengi/assets/emoji/64/1f9b8-2642.png +0 -0
  2981. package/web/app/site/sengi/assets/emoji/64/1f9b8.png +0 -0
  2982. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fb-2640.png +0 -0
  2983. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fb-2642.png +0 -0
  2984. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fb.png +0 -0
  2985. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fc-2640.png +0 -0
  2986. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fc-2642.png +0 -0
  2987. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fc.png +0 -0
  2988. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fd-2640.png +0 -0
  2989. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fd-2642.png +0 -0
  2990. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fd.png +0 -0
  2991. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fe-2640.png +0 -0
  2992. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fe-2642.png +0 -0
  2993. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3fe.png +0 -0
  2994. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3ff-2640.png +0 -0
  2995. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3ff-2642.png +0 -0
  2996. package/web/app/site/sengi/assets/emoji/64/1f9b9-1f3ff.png +0 -0
  2997. package/web/app/site/sengi/assets/emoji/64/1f9b9-2640.png +0 -0
  2998. package/web/app/site/sengi/assets/emoji/64/1f9b9-2642.png +0 -0
  2999. package/web/app/site/sengi/assets/emoji/64/1f9b9.png +0 -0
  3000. package/web/app/site/sengi/assets/emoji/64/1f9ba.png +0 -0
  3001. package/web/app/site/sengi/assets/emoji/64/1f9bb-1f3fb.png +0 -0
  3002. package/web/app/site/sengi/assets/emoji/64/1f9bb-1f3fc.png +0 -0
  3003. package/web/app/site/sengi/assets/emoji/64/1f9bb-1f3fd.png +0 -0
  3004. package/web/app/site/sengi/assets/emoji/64/1f9bb-1f3fe.png +0 -0
  3005. package/web/app/site/sengi/assets/emoji/64/1f9bb-1f3ff.png +0 -0
  3006. package/web/app/site/sengi/assets/emoji/64/1f9bb.png +0 -0
  3007. package/web/app/site/sengi/assets/emoji/64/1f9bc.png +0 -0
  3008. package/web/app/site/sengi/assets/emoji/64/1f9bd.png +0 -0
  3009. package/web/app/site/sengi/assets/emoji/64/1f9be.png +0 -0
  3010. package/web/app/site/sengi/assets/emoji/64/1f9bf.png +0 -0
  3011. package/web/app/site/sengi/assets/emoji/64/1f9c0.png +0 -0
  3012. package/web/app/site/sengi/assets/emoji/64/1f9c1.png +0 -0
  3013. package/web/app/site/sengi/assets/emoji/64/1f9c2.png +0 -0
  3014. package/web/app/site/sengi/assets/emoji/64/1f9c3.png +0 -0
  3015. package/web/app/site/sengi/assets/emoji/64/1f9c4.png +0 -0
  3016. package/web/app/site/sengi/assets/emoji/64/1f9c5.png +0 -0
  3017. package/web/app/site/sengi/assets/emoji/64/1f9c6.png +0 -0
  3018. package/web/app/site/sengi/assets/emoji/64/1f9c7.png +0 -0
  3019. package/web/app/site/sengi/assets/emoji/64/1f9c8.png +0 -0
  3020. package/web/app/site/sengi/assets/emoji/64/1f9c9.png +0 -0
  3021. package/web/app/site/sengi/assets/emoji/64/1f9ca.png +0 -0
  3022. package/web/app/site/sengi/assets/emoji/64/1f9cb.png +0 -0
  3023. package/web/app/site/sengi/assets/emoji/64/1f9cc.png +0 -0
  3024. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fb-2640.png +0 -0
  3025. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fb-2642.png +0 -0
  3026. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fb.png +0 -0
  3027. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fc-2640.png +0 -0
  3028. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fc-2642.png +0 -0
  3029. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fc.png +0 -0
  3030. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fd-2640.png +0 -0
  3031. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fd-2642.png +0 -0
  3032. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fd.png +0 -0
  3033. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fe-2640.png +0 -0
  3034. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fe-2642.png +0 -0
  3035. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3fe.png +0 -0
  3036. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3ff-2640.png +0 -0
  3037. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3ff-2642.png +0 -0
  3038. package/web/app/site/sengi/assets/emoji/64/1f9cd-1f3ff.png +0 -0
  3039. package/web/app/site/sengi/assets/emoji/64/1f9cd-2640.png +0 -0
  3040. package/web/app/site/sengi/assets/emoji/64/1f9cd-2642.png +0 -0
  3041. package/web/app/site/sengi/assets/emoji/64/1f9cd.png +0 -0
  3042. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fb-2640-27a1.png +0 -0
  3043. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fb-2640.png +0 -0
  3044. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fb-2642-27a1.png +0 -0
  3045. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fb-2642.png +0 -0
  3046. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fb-27a1.png +0 -0
  3047. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fb.png +0 -0
  3048. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fc-2640-27a1.png +0 -0
  3049. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fc-2640.png +0 -0
  3050. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fc-2642-27a1.png +0 -0
  3051. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fc-2642.png +0 -0
  3052. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fc-27a1.png +0 -0
  3053. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fc.png +0 -0
  3054. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fd-2640-27a1.png +0 -0
  3055. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fd-2640.png +0 -0
  3056. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fd-2642-27a1.png +0 -0
  3057. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fd-2642.png +0 -0
  3058. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fd-27a1.png +0 -0
  3059. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fd.png +0 -0
  3060. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fe-2640-27a1.png +0 -0
  3061. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fe-2640.png +0 -0
  3062. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fe-2642-27a1.png +0 -0
  3063. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fe-2642.png +0 -0
  3064. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fe-27a1.png +0 -0
  3065. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3fe.png +0 -0
  3066. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3ff-2640-27a1.png +0 -0
  3067. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3ff-2640.png +0 -0
  3068. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3ff-2642-27a1.png +0 -0
  3069. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3ff-2642.png +0 -0
  3070. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3ff-27a1.png +0 -0
  3071. package/web/app/site/sengi/assets/emoji/64/1f9ce-1f3ff.png +0 -0
  3072. package/web/app/site/sengi/assets/emoji/64/1f9ce-2640-27a1.png +0 -0
  3073. package/web/app/site/sengi/assets/emoji/64/1f9ce-2640.png +0 -0
  3074. package/web/app/site/sengi/assets/emoji/64/1f9ce-2642-27a1.png +0 -0
  3075. package/web/app/site/sengi/assets/emoji/64/1f9ce-2642.png +0 -0
  3076. package/web/app/site/sengi/assets/emoji/64/1f9ce-27a1.png +0 -0
  3077. package/web/app/site/sengi/assets/emoji/64/1f9ce.png +0 -0
  3078. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fb-2640.png +0 -0
  3079. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fb-2642.png +0 -0
  3080. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fb.png +0 -0
  3081. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fc-2640.png +0 -0
  3082. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fc-2642.png +0 -0
  3083. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fc.png +0 -0
  3084. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fd-2640.png +0 -0
  3085. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fd-2642.png +0 -0
  3086. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fd.png +0 -0
  3087. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fe-2640.png +0 -0
  3088. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fe-2642.png +0 -0
  3089. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3fe.png +0 -0
  3090. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3ff-2640.png +0 -0
  3091. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3ff-2642.png +0 -0
  3092. package/web/app/site/sengi/assets/emoji/64/1f9cf-1f3ff.png +0 -0
  3093. package/web/app/site/sengi/assets/emoji/64/1f9cf-2640.png +0 -0
  3094. package/web/app/site/sengi/assets/emoji/64/1f9cf-2642.png +0 -0
  3095. package/web/app/site/sengi/assets/emoji/64/1f9cf.png +0 -0
  3096. package/web/app/site/sengi/assets/emoji/64/1f9d0.png +0 -0
  3097. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f33e.png +0 -0
  3098. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f373.png +0 -0
  3099. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f37c.png +0 -0
  3100. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f384.png +0 -0
  3101. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f393.png +0 -0
  3102. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3a4.png +0 -0
  3103. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3a8.png +0 -0
  3104. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3eb.png +0 -0
  3105. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ed.png +0 -0
  3106. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f33e.png +0 -0
  3107. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f373.png +0 -0
  3108. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f37c.png +0 -0
  3109. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f384.png +0 -0
  3110. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f393.png +0 -0
  3111. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f3a4.png +0 -0
  3112. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f3a8.png +0 -0
  3113. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f3eb.png +0 -0
  3114. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f3ed.png +0 -0
  3115. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f4bb.png +0 -0
  3116. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f4bc.png +0 -0
  3117. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f527.png +0 -0
  3118. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f52c.png +0 -0
  3119. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f680.png +0 -0
  3120. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f692.png +0 -0
  3121. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f91d-1f9d1-1f3fb.png +0 -0
  3122. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f91d-1f9d1-1f3fc.png +0 -0
  3123. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f91d-1f9d1-1f3fd.png +0 -0
  3124. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f91d-1f9d1-1f3fe.png +0 -0
  3125. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f91d-1f9d1-1f3ff.png +0 -0
  3126. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9af-27a1.png +0 -0
  3127. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9af.png +0 -0
  3128. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9b0.png +0 -0
  3129. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9b1.png +0 -0
  3130. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9b2.png +0 -0
  3131. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9b3.png +0 -0
  3132. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9bc-27a1.png +0 -0
  3133. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9bc.png +0 -0
  3134. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9bd-27a1.png +0 -0
  3135. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-1f9bd.png +0 -0
  3136. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2695.png +0 -0
  3137. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2696.png +0 -0
  3138. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2708.png +0 -0
  3139. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2764-1f48b-1f9d1-1f3fc.png +0 -0
  3140. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2764-1f48b-1f9d1-1f3fd.png +0 -0
  3141. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2764-1f48b-1f9d1-1f3fe.png +0 -0
  3142. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2764-1f48b-1f9d1-1f3ff.png +0 -0
  3143. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2764-1f9d1-1f3fc.png +0 -0
  3144. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2764-1f9d1-1f3fd.png +0 -0
  3145. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2764-1f9d1-1f3fe.png +0 -0
  3146. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb-2764-1f9d1-1f3ff.png +0 -0
  3147. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fb.png +0 -0
  3148. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f33e.png +0 -0
  3149. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f373.png +0 -0
  3150. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f37c.png +0 -0
  3151. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f384.png +0 -0
  3152. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f393.png +0 -0
  3153. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f3a4.png +0 -0
  3154. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f3a8.png +0 -0
  3155. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f3eb.png +0 -0
  3156. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f3ed.png +0 -0
  3157. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f4bb.png +0 -0
  3158. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f4bc.png +0 -0
  3159. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f527.png +0 -0
  3160. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f52c.png +0 -0
  3161. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f680.png +0 -0
  3162. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f692.png +0 -0
  3163. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f91d-1f9d1-1f3fb.png +0 -0
  3164. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f91d-1f9d1-1f3fc.png +0 -0
  3165. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f91d-1f9d1-1f3fd.png +0 -0
  3166. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f91d-1f9d1-1f3fe.png +0 -0
  3167. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f91d-1f9d1-1f3ff.png +0 -0
  3168. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9af-27a1.png +0 -0
  3169. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9af.png +0 -0
  3170. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9b0.png +0 -0
  3171. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9b1.png +0 -0
  3172. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9b2.png +0 -0
  3173. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9b3.png +0 -0
  3174. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9bc-27a1.png +0 -0
  3175. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9bc.png +0 -0
  3176. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9bd-27a1.png +0 -0
  3177. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-1f9bd.png +0 -0
  3178. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2695.png +0 -0
  3179. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2696.png +0 -0
  3180. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2708.png +0 -0
  3181. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2764-1f48b-1f9d1-1f3fb.png +0 -0
  3182. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2764-1f48b-1f9d1-1f3fd.png +0 -0
  3183. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2764-1f48b-1f9d1-1f3fe.png +0 -0
  3184. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2764-1f48b-1f9d1-1f3ff.png +0 -0
  3185. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2764-1f9d1-1f3fb.png +0 -0
  3186. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2764-1f9d1-1f3fd.png +0 -0
  3187. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2764-1f9d1-1f3fe.png +0 -0
  3188. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc-2764-1f9d1-1f3ff.png +0 -0
  3189. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fc.png +0 -0
  3190. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f33e.png +0 -0
  3191. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f373.png +0 -0
  3192. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f37c.png +0 -0
  3193. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f384.png +0 -0
  3194. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f393.png +0 -0
  3195. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f3a4.png +0 -0
  3196. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f3a8.png +0 -0
  3197. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f3eb.png +0 -0
  3198. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f3ed.png +0 -0
  3199. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f4bb.png +0 -0
  3200. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f4bc.png +0 -0
  3201. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f527.png +0 -0
  3202. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f52c.png +0 -0
  3203. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f680.png +0 -0
  3204. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f692.png +0 -0
  3205. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f91d-1f9d1-1f3fb.png +0 -0
  3206. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f91d-1f9d1-1f3fc.png +0 -0
  3207. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f91d-1f9d1-1f3fd.png +0 -0
  3208. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f91d-1f9d1-1f3fe.png +0 -0
  3209. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f91d-1f9d1-1f3ff.png +0 -0
  3210. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9af-27a1.png +0 -0
  3211. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9af.png +0 -0
  3212. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9b0.png +0 -0
  3213. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9b1.png +0 -0
  3214. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9b2.png +0 -0
  3215. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9b3.png +0 -0
  3216. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9bc-27a1.png +0 -0
  3217. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9bc.png +0 -0
  3218. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9bd-27a1.png +0 -0
  3219. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-1f9bd.png +0 -0
  3220. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2695.png +0 -0
  3221. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2696.png +0 -0
  3222. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2708.png +0 -0
  3223. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2764-1f48b-1f9d1-1f3fb.png +0 -0
  3224. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2764-1f48b-1f9d1-1f3fc.png +0 -0
  3225. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2764-1f48b-1f9d1-1f3fe.png +0 -0
  3226. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2764-1f48b-1f9d1-1f3ff.png +0 -0
  3227. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2764-1f9d1-1f3fb.png +0 -0
  3228. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2764-1f9d1-1f3fc.png +0 -0
  3229. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2764-1f9d1-1f3fe.png +0 -0
  3230. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd-2764-1f9d1-1f3ff.png +0 -0
  3231. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fd.png +0 -0
  3232. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f33e.png +0 -0
  3233. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f373.png +0 -0
  3234. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f37c.png +0 -0
  3235. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f384.png +0 -0
  3236. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f393.png +0 -0
  3237. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f3a4.png +0 -0
  3238. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f3a8.png +0 -0
  3239. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f3eb.png +0 -0
  3240. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f3ed.png +0 -0
  3241. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f4bb.png +0 -0
  3242. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f4bc.png +0 -0
  3243. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f527.png +0 -0
  3244. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f52c.png +0 -0
  3245. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f680.png +0 -0
  3246. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f692.png +0 -0
  3247. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f91d-1f9d1-1f3fb.png +0 -0
  3248. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f91d-1f9d1-1f3fc.png +0 -0
  3249. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f91d-1f9d1-1f3fd.png +0 -0
  3250. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f91d-1f9d1-1f3fe.png +0 -0
  3251. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f91d-1f9d1-1f3ff.png +0 -0
  3252. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9af-27a1.png +0 -0
  3253. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9af.png +0 -0
  3254. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9b0.png +0 -0
  3255. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9b1.png +0 -0
  3256. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9b2.png +0 -0
  3257. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9b3.png +0 -0
  3258. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9bc-27a1.png +0 -0
  3259. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9bc.png +0 -0
  3260. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9bd-27a1.png +0 -0
  3261. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-1f9bd.png +0 -0
  3262. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2695.png +0 -0
  3263. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2696.png +0 -0
  3264. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2708.png +0 -0
  3265. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2764-1f48b-1f9d1-1f3fb.png +0 -0
  3266. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2764-1f48b-1f9d1-1f3fc.png +0 -0
  3267. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2764-1f48b-1f9d1-1f3fd.png +0 -0
  3268. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2764-1f48b-1f9d1-1f3ff.png +0 -0
  3269. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2764-1f9d1-1f3fb.png +0 -0
  3270. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2764-1f9d1-1f3fc.png +0 -0
  3271. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2764-1f9d1-1f3fd.png +0 -0
  3272. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe-2764-1f9d1-1f3ff.png +0 -0
  3273. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3fe.png +0 -0
  3274. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f33e.png +0 -0
  3275. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f373.png +0 -0
  3276. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f37c.png +0 -0
  3277. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f384.png +0 -0
  3278. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f393.png +0 -0
  3279. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f3a4.png +0 -0
  3280. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f3a8.png +0 -0
  3281. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f3eb.png +0 -0
  3282. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f3ed.png +0 -0
  3283. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f4bb.png +0 -0
  3284. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f4bc.png +0 -0
  3285. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f527.png +0 -0
  3286. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f52c.png +0 -0
  3287. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f680.png +0 -0
  3288. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f692.png +0 -0
  3289. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f91d-1f9d1-1f3fb.png +0 -0
  3290. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f91d-1f9d1-1f3fc.png +0 -0
  3291. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f91d-1f9d1-1f3fd.png +0 -0
  3292. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f91d-1f9d1-1f3fe.png +0 -0
  3293. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f91d-1f9d1-1f3ff.png +0 -0
  3294. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9af-27a1.png +0 -0
  3295. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9af.png +0 -0
  3296. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9b0.png +0 -0
  3297. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9b1.png +0 -0
  3298. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9b2.png +0 -0
  3299. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9b3.png +0 -0
  3300. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9bc-27a1.png +0 -0
  3301. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9bc.png +0 -0
  3302. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9bd-27a1.png +0 -0
  3303. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-1f9bd.png +0 -0
  3304. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2695.png +0 -0
  3305. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2696.png +0 -0
  3306. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2708.png +0 -0
  3307. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2764-1f48b-1f9d1-1f3fb.png +0 -0
  3308. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2764-1f48b-1f9d1-1f3fc.png +0 -0
  3309. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2764-1f48b-1f9d1-1f3fd.png +0 -0
  3310. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2764-1f48b-1f9d1-1f3fe.png +0 -0
  3311. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2764-1f9d1-1f3fb.png +0 -0
  3312. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2764-1f9d1-1f3fc.png +0 -0
  3313. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2764-1f9d1-1f3fd.png +0 -0
  3314. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff-2764-1f9d1-1f3fe.png +0 -0
  3315. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f3ff.png +0 -0
  3316. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f4bb.png +0 -0
  3317. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f4bc.png +0 -0
  3318. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f527.png +0 -0
  3319. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f52c.png +0 -0
  3320. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f680.png +0 -0
  3321. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f692.png +0 -0
  3322. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f91d-1f9d1.png +0 -0
  3323. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9af-27a1.png +0 -0
  3324. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9af.png +0 -0
  3325. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9b0.png +0 -0
  3326. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9b1.png +0 -0
  3327. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9b2.png +0 -0
  3328. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9b3.png +0 -0
  3329. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9bc-27a1.png +0 -0
  3330. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9bc.png +0 -0
  3331. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9bd-27a1.png +0 -0
  3332. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9bd.png +0 -0
  3333. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9d1-1f9d2-1f9d2.png +0 -0
  3334. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9d1-1f9d2.png +0 -0
  3335. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9d2-1f9d2.png +0 -0
  3336. package/web/app/site/sengi/assets/emoji/64/1f9d1-1f9d2.png +0 -0
  3337. package/web/app/site/sengi/assets/emoji/64/1f9d1-2695.png +0 -0
  3338. package/web/app/site/sengi/assets/emoji/64/1f9d1-2696.png +0 -0
  3339. package/web/app/site/sengi/assets/emoji/64/1f9d1-2708.png +0 -0
  3340. package/web/app/site/sengi/assets/emoji/64/1f9d1.png +0 -0
  3341. package/web/app/site/sengi/assets/emoji/64/1f9d2-1f3fb.png +0 -0
  3342. package/web/app/site/sengi/assets/emoji/64/1f9d2-1f3fc.png +0 -0
  3343. package/web/app/site/sengi/assets/emoji/64/1f9d2-1f3fd.png +0 -0
  3344. package/web/app/site/sengi/assets/emoji/64/1f9d2-1f3fe.png +0 -0
  3345. package/web/app/site/sengi/assets/emoji/64/1f9d2-1f3ff.png +0 -0
  3346. package/web/app/site/sengi/assets/emoji/64/1f9d2.png +0 -0
  3347. package/web/app/site/sengi/assets/emoji/64/1f9d3-1f3fb.png +0 -0
  3348. package/web/app/site/sengi/assets/emoji/64/1f9d3-1f3fc.png +0 -0
  3349. package/web/app/site/sengi/assets/emoji/64/1f9d3-1f3fd.png +0 -0
  3350. package/web/app/site/sengi/assets/emoji/64/1f9d3-1f3fe.png +0 -0
  3351. package/web/app/site/sengi/assets/emoji/64/1f9d3-1f3ff.png +0 -0
  3352. package/web/app/site/sengi/assets/emoji/64/1f9d3.png +0 -0
  3353. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fb-2640.png +0 -0
  3354. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fb-2642.png +0 -0
  3355. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fb.png +0 -0
  3356. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fc-2640.png +0 -0
  3357. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fc-2642.png +0 -0
  3358. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fc.png +0 -0
  3359. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fd-2640.png +0 -0
  3360. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fd-2642.png +0 -0
  3361. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fd.png +0 -0
  3362. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fe-2640.png +0 -0
  3363. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fe-2642.png +0 -0
  3364. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3fe.png +0 -0
  3365. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3ff-2640.png +0 -0
  3366. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3ff-2642.png +0 -0
  3367. package/web/app/site/sengi/assets/emoji/64/1f9d4-1f3ff.png +0 -0
  3368. package/web/app/site/sengi/assets/emoji/64/1f9d4-2640.png +0 -0
  3369. package/web/app/site/sengi/assets/emoji/64/1f9d4-2642.png +0 -0
  3370. package/web/app/site/sengi/assets/emoji/64/1f9d4.png +0 -0
  3371. package/web/app/site/sengi/assets/emoji/64/1f9d5-1f3fb.png +0 -0
  3372. package/web/app/site/sengi/assets/emoji/64/1f9d5-1f3fc.png +0 -0
  3373. package/web/app/site/sengi/assets/emoji/64/1f9d5-1f3fd.png +0 -0
  3374. package/web/app/site/sengi/assets/emoji/64/1f9d5-1f3fe.png +0 -0
  3375. package/web/app/site/sengi/assets/emoji/64/1f9d5-1f3ff.png +0 -0
  3376. package/web/app/site/sengi/assets/emoji/64/1f9d5.png +0 -0
  3377. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fb-2640.png +0 -0
  3378. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fb-2642.png +0 -0
  3379. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fb.png +0 -0
  3380. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fc-2640.png +0 -0
  3381. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fc-2642.png +0 -0
  3382. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fc.png +0 -0
  3383. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fd-2640.png +0 -0
  3384. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fd-2642.png +0 -0
  3385. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fd.png +0 -0
  3386. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fe-2640.png +0 -0
  3387. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fe-2642.png +0 -0
  3388. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3fe.png +0 -0
  3389. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3ff-2640.png +0 -0
  3390. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3ff-2642.png +0 -0
  3391. package/web/app/site/sengi/assets/emoji/64/1f9d6-1f3ff.png +0 -0
  3392. package/web/app/site/sengi/assets/emoji/64/1f9d6-2640.png +0 -0
  3393. package/web/app/site/sengi/assets/emoji/64/1f9d6-2642.png +0 -0
  3394. package/web/app/site/sengi/assets/emoji/64/1f9d6.png +0 -0
  3395. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fb-2640.png +0 -0
  3396. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fb-2642.png +0 -0
  3397. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fb.png +0 -0
  3398. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fc-2640.png +0 -0
  3399. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fc-2642.png +0 -0
  3400. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fc.png +0 -0
  3401. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fd-2640.png +0 -0
  3402. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fd-2642.png +0 -0
  3403. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fd.png +0 -0
  3404. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fe-2640.png +0 -0
  3405. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fe-2642.png +0 -0
  3406. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3fe.png +0 -0
  3407. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3ff-2640.png +0 -0
  3408. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3ff-2642.png +0 -0
  3409. package/web/app/site/sengi/assets/emoji/64/1f9d7-1f3ff.png +0 -0
  3410. package/web/app/site/sengi/assets/emoji/64/1f9d7-2640.png +0 -0
  3411. package/web/app/site/sengi/assets/emoji/64/1f9d7-2642.png +0 -0
  3412. package/web/app/site/sengi/assets/emoji/64/1f9d7.png +0 -0
  3413. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fb-2640.png +0 -0
  3414. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fb-2642.png +0 -0
  3415. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fb.png +0 -0
  3416. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fc-2640.png +0 -0
  3417. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fc-2642.png +0 -0
  3418. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fc.png +0 -0
  3419. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fd-2640.png +0 -0
  3420. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fd-2642.png +0 -0
  3421. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fd.png +0 -0
  3422. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fe-2640.png +0 -0
  3423. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fe-2642.png +0 -0
  3424. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3fe.png +0 -0
  3425. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3ff-2640.png +0 -0
  3426. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3ff-2642.png +0 -0
  3427. package/web/app/site/sengi/assets/emoji/64/1f9d8-1f3ff.png +0 -0
  3428. package/web/app/site/sengi/assets/emoji/64/1f9d8-2640.png +0 -0
  3429. package/web/app/site/sengi/assets/emoji/64/1f9d8-2642.png +0 -0
  3430. package/web/app/site/sengi/assets/emoji/64/1f9d8.png +0 -0
  3431. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fb-2640.png +0 -0
  3432. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fb-2642.png +0 -0
  3433. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fb.png +0 -0
  3434. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fc-2640.png +0 -0
  3435. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fc-2642.png +0 -0
  3436. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fc.png +0 -0
  3437. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fd-2640.png +0 -0
  3438. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fd-2642.png +0 -0
  3439. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fd.png +0 -0
  3440. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fe-2640.png +0 -0
  3441. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fe-2642.png +0 -0
  3442. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3fe.png +0 -0
  3443. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3ff-2640.png +0 -0
  3444. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3ff-2642.png +0 -0
  3445. package/web/app/site/sengi/assets/emoji/64/1f9d9-1f3ff.png +0 -0
  3446. package/web/app/site/sengi/assets/emoji/64/1f9d9-2640.png +0 -0
  3447. package/web/app/site/sengi/assets/emoji/64/1f9d9-2642.png +0 -0
  3448. package/web/app/site/sengi/assets/emoji/64/1f9d9.png +0 -0
  3449. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fb-2640.png +0 -0
  3450. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fb-2642.png +0 -0
  3451. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fb.png +0 -0
  3452. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fc-2640.png +0 -0
  3453. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fc-2642.png +0 -0
  3454. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fc.png +0 -0
  3455. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fd-2640.png +0 -0
  3456. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fd-2642.png +0 -0
  3457. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fd.png +0 -0
  3458. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fe-2640.png +0 -0
  3459. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fe-2642.png +0 -0
  3460. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3fe.png +0 -0
  3461. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3ff-2640.png +0 -0
  3462. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3ff-2642.png +0 -0
  3463. package/web/app/site/sengi/assets/emoji/64/1f9da-1f3ff.png +0 -0
  3464. package/web/app/site/sengi/assets/emoji/64/1f9da-2640.png +0 -0
  3465. package/web/app/site/sengi/assets/emoji/64/1f9da-2642.png +0 -0
  3466. package/web/app/site/sengi/assets/emoji/64/1f9da.png +0 -0
  3467. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fb-2640.png +0 -0
  3468. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fb-2642.png +0 -0
  3469. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fb.png +0 -0
  3470. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fc-2640.png +0 -0
  3471. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fc-2642.png +0 -0
  3472. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fc.png +0 -0
  3473. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fd-2640.png +0 -0
  3474. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fd-2642.png +0 -0
  3475. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fd.png +0 -0
  3476. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fe-2640.png +0 -0
  3477. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fe-2642.png +0 -0
  3478. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3fe.png +0 -0
  3479. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3ff-2640.png +0 -0
  3480. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3ff-2642.png +0 -0
  3481. package/web/app/site/sengi/assets/emoji/64/1f9db-1f3ff.png +0 -0
  3482. package/web/app/site/sengi/assets/emoji/64/1f9db-2640.png +0 -0
  3483. package/web/app/site/sengi/assets/emoji/64/1f9db-2642.png +0 -0
  3484. package/web/app/site/sengi/assets/emoji/64/1f9db.png +0 -0
  3485. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fb-2640.png +0 -0
  3486. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fb-2642.png +0 -0
  3487. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fb.png +0 -0
  3488. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fc-2640.png +0 -0
  3489. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fc-2642.png +0 -0
  3490. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fc.png +0 -0
  3491. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fd-2640.png +0 -0
  3492. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fd-2642.png +0 -0
  3493. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fd.png +0 -0
  3494. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fe-2640.png +0 -0
  3495. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fe-2642.png +0 -0
  3496. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3fe.png +0 -0
  3497. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3ff-2640.png +0 -0
  3498. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3ff-2642.png +0 -0
  3499. package/web/app/site/sengi/assets/emoji/64/1f9dc-1f3ff.png +0 -0
  3500. package/web/app/site/sengi/assets/emoji/64/1f9dc-2640.png +0 -0
  3501. package/web/app/site/sengi/assets/emoji/64/1f9dc-2642.png +0 -0
  3502. package/web/app/site/sengi/assets/emoji/64/1f9dc.png +0 -0
  3503. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fb-2640.png +0 -0
  3504. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fb-2642.png +0 -0
  3505. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fb.png +0 -0
  3506. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fc-2640.png +0 -0
  3507. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fc-2642.png +0 -0
  3508. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fc.png +0 -0
  3509. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fd-2640.png +0 -0
  3510. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fd-2642.png +0 -0
  3511. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fd.png +0 -0
  3512. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fe-2640.png +0 -0
  3513. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fe-2642.png +0 -0
  3514. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3fe.png +0 -0
  3515. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3ff-2640.png +0 -0
  3516. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3ff-2642.png +0 -0
  3517. package/web/app/site/sengi/assets/emoji/64/1f9dd-1f3ff.png +0 -0
  3518. package/web/app/site/sengi/assets/emoji/64/1f9dd-2640.png +0 -0
  3519. package/web/app/site/sengi/assets/emoji/64/1f9dd-2642.png +0 -0
  3520. package/web/app/site/sengi/assets/emoji/64/1f9dd.png +0 -0
  3521. package/web/app/site/sengi/assets/emoji/64/1f9de-2640.png +0 -0
  3522. package/web/app/site/sengi/assets/emoji/64/1f9de-2642.png +0 -0
  3523. package/web/app/site/sengi/assets/emoji/64/1f9de.png +0 -0
  3524. package/web/app/site/sengi/assets/emoji/64/1f9df-2640.png +0 -0
  3525. package/web/app/site/sengi/assets/emoji/64/1f9df-2642.png +0 -0
  3526. package/web/app/site/sengi/assets/emoji/64/1f9df.png +0 -0
  3527. package/web/app/site/sengi/assets/emoji/64/1f9e0.png +0 -0
  3528. package/web/app/site/sengi/assets/emoji/64/1f9e1.png +0 -0
  3529. package/web/app/site/sengi/assets/emoji/64/1f9e2.png +0 -0
  3530. package/web/app/site/sengi/assets/emoji/64/1f9e3.png +0 -0
  3531. package/web/app/site/sengi/assets/emoji/64/1f9e4.png +0 -0
  3532. package/web/app/site/sengi/assets/emoji/64/1f9e5.png +0 -0
  3533. package/web/app/site/sengi/assets/emoji/64/1f9e6.png +0 -0
  3534. package/web/app/site/sengi/assets/emoji/64/1f9e7.png +0 -0
  3535. package/web/app/site/sengi/assets/emoji/64/1f9e8.png +0 -0
  3536. package/web/app/site/sengi/assets/emoji/64/1f9e9.png +0 -0
  3537. package/web/app/site/sengi/assets/emoji/64/1f9ea.png +0 -0
  3538. package/web/app/site/sengi/assets/emoji/64/1f9eb.png +0 -0
  3539. package/web/app/site/sengi/assets/emoji/64/1f9ec.png +0 -0
  3540. package/web/app/site/sengi/assets/emoji/64/1f9ed.png +0 -0
  3541. package/web/app/site/sengi/assets/emoji/64/1f9ee.png +0 -0
  3542. package/web/app/site/sengi/assets/emoji/64/1f9ef.png +0 -0
  3543. package/web/app/site/sengi/assets/emoji/64/1f9f0.png +0 -0
  3544. package/web/app/site/sengi/assets/emoji/64/1f9f1.png +0 -0
  3545. package/web/app/site/sengi/assets/emoji/64/1f9f2.png +0 -0
  3546. package/web/app/site/sengi/assets/emoji/64/1f9f3.png +0 -0
  3547. package/web/app/site/sengi/assets/emoji/64/1f9f4.png +0 -0
  3548. package/web/app/site/sengi/assets/emoji/64/1f9f5.png +0 -0
  3549. package/web/app/site/sengi/assets/emoji/64/1f9f6.png +0 -0
  3550. package/web/app/site/sengi/assets/emoji/64/1f9f7.png +0 -0
  3551. package/web/app/site/sengi/assets/emoji/64/1f9f8.png +0 -0
  3552. package/web/app/site/sengi/assets/emoji/64/1f9f9.png +0 -0
  3553. package/web/app/site/sengi/assets/emoji/64/1f9fa.png +0 -0
  3554. package/web/app/site/sengi/assets/emoji/64/1f9fb.png +0 -0
  3555. package/web/app/site/sengi/assets/emoji/64/1f9fc.png +0 -0
  3556. package/web/app/site/sengi/assets/emoji/64/1f9fd.png +0 -0
  3557. package/web/app/site/sengi/assets/emoji/64/1f9fe.png +0 -0
  3558. package/web/app/site/sengi/assets/emoji/64/1f9ff.png +0 -0
  3559. package/web/app/site/sengi/assets/emoji/64/1fa70.png +0 -0
  3560. package/web/app/site/sengi/assets/emoji/64/1fa71.png +0 -0
  3561. package/web/app/site/sengi/assets/emoji/64/1fa72.png +0 -0
  3562. package/web/app/site/sengi/assets/emoji/64/1fa73.png +0 -0
  3563. package/web/app/site/sengi/assets/emoji/64/1fa74.png +0 -0
  3564. package/web/app/site/sengi/assets/emoji/64/1fa75.png +0 -0
  3565. package/web/app/site/sengi/assets/emoji/64/1fa76.png +0 -0
  3566. package/web/app/site/sengi/assets/emoji/64/1fa77.png +0 -0
  3567. package/web/app/site/sengi/assets/emoji/64/1fa78.png +0 -0
  3568. package/web/app/site/sengi/assets/emoji/64/1fa79.png +0 -0
  3569. package/web/app/site/sengi/assets/emoji/64/1fa7a.png +0 -0
  3570. package/web/app/site/sengi/assets/emoji/64/1fa7b.png +0 -0
  3571. package/web/app/site/sengi/assets/emoji/64/1fa7c.png +0 -0
  3572. package/web/app/site/sengi/assets/emoji/64/1fa80.png +0 -0
  3573. package/web/app/site/sengi/assets/emoji/64/1fa81.png +0 -0
  3574. package/web/app/site/sengi/assets/emoji/64/1fa82.png +0 -0
  3575. package/web/app/site/sengi/assets/emoji/64/1fa83.png +0 -0
  3576. package/web/app/site/sengi/assets/emoji/64/1fa84.png +0 -0
  3577. package/web/app/site/sengi/assets/emoji/64/1fa85.png +0 -0
  3578. package/web/app/site/sengi/assets/emoji/64/1fa86.png +0 -0
  3579. package/web/app/site/sengi/assets/emoji/64/1fa87.png +0 -0
  3580. package/web/app/site/sengi/assets/emoji/64/1fa88.png +0 -0
  3581. package/web/app/site/sengi/assets/emoji/64/1fa89.png +0 -0
  3582. package/web/app/site/sengi/assets/emoji/64/1fa8f.png +0 -0
  3583. package/web/app/site/sengi/assets/emoji/64/1fa90.png +0 -0
  3584. package/web/app/site/sengi/assets/emoji/64/1fa91.png +0 -0
  3585. package/web/app/site/sengi/assets/emoji/64/1fa92.png +0 -0
  3586. package/web/app/site/sengi/assets/emoji/64/1fa93.png +0 -0
  3587. package/web/app/site/sengi/assets/emoji/64/1fa94.png +0 -0
  3588. package/web/app/site/sengi/assets/emoji/64/1fa95.png +0 -0
  3589. package/web/app/site/sengi/assets/emoji/64/1fa96.png +0 -0
  3590. package/web/app/site/sengi/assets/emoji/64/1fa97.png +0 -0
  3591. package/web/app/site/sengi/assets/emoji/64/1fa98.png +0 -0
  3592. package/web/app/site/sengi/assets/emoji/64/1fa99.png +0 -0
  3593. package/web/app/site/sengi/assets/emoji/64/1fa9a.png +0 -0
  3594. package/web/app/site/sengi/assets/emoji/64/1fa9b.png +0 -0
  3595. package/web/app/site/sengi/assets/emoji/64/1fa9c.png +0 -0
  3596. package/web/app/site/sengi/assets/emoji/64/1fa9d.png +0 -0
  3597. package/web/app/site/sengi/assets/emoji/64/1fa9e.png +0 -0
  3598. package/web/app/site/sengi/assets/emoji/64/1fa9f.png +0 -0
  3599. package/web/app/site/sengi/assets/emoji/64/1faa0.png +0 -0
  3600. package/web/app/site/sengi/assets/emoji/64/1faa1.png +0 -0
  3601. package/web/app/site/sengi/assets/emoji/64/1faa2.png +0 -0
  3602. package/web/app/site/sengi/assets/emoji/64/1faa3.png +0 -0
  3603. package/web/app/site/sengi/assets/emoji/64/1faa4.png +0 -0
  3604. package/web/app/site/sengi/assets/emoji/64/1faa5.png +0 -0
  3605. package/web/app/site/sengi/assets/emoji/64/1faa6.png +0 -0
  3606. package/web/app/site/sengi/assets/emoji/64/1faa7.png +0 -0
  3607. package/web/app/site/sengi/assets/emoji/64/1faa8.png +0 -0
  3608. package/web/app/site/sengi/assets/emoji/64/1faa9.png +0 -0
  3609. package/web/app/site/sengi/assets/emoji/64/1faaa.png +0 -0
  3610. package/web/app/site/sengi/assets/emoji/64/1faab.png +0 -0
  3611. package/web/app/site/sengi/assets/emoji/64/1faac.png +0 -0
  3612. package/web/app/site/sengi/assets/emoji/64/1faad.png +0 -0
  3613. package/web/app/site/sengi/assets/emoji/64/1faae.png +0 -0
  3614. package/web/app/site/sengi/assets/emoji/64/1faaf.png +0 -0
  3615. package/web/app/site/sengi/assets/emoji/64/1fab0.png +0 -0
  3616. package/web/app/site/sengi/assets/emoji/64/1fab1.png +0 -0
  3617. package/web/app/site/sengi/assets/emoji/64/1fab2.png +0 -0
  3618. package/web/app/site/sengi/assets/emoji/64/1fab3.png +0 -0
  3619. package/web/app/site/sengi/assets/emoji/64/1fab4.png +0 -0
  3620. package/web/app/site/sengi/assets/emoji/64/1fab5.png +0 -0
  3621. package/web/app/site/sengi/assets/emoji/64/1fab6.png +0 -0
  3622. package/web/app/site/sengi/assets/emoji/64/1fab7.png +0 -0
  3623. package/web/app/site/sengi/assets/emoji/64/1fab8.png +0 -0
  3624. package/web/app/site/sengi/assets/emoji/64/1fab9.png +0 -0
  3625. package/web/app/site/sengi/assets/emoji/64/1faba.png +0 -0
  3626. package/web/app/site/sengi/assets/emoji/64/1fabb.png +0 -0
  3627. package/web/app/site/sengi/assets/emoji/64/1fabc.png +0 -0
  3628. package/web/app/site/sengi/assets/emoji/64/1fabd.png +0 -0
  3629. package/web/app/site/sengi/assets/emoji/64/1fabe.png +0 -0
  3630. package/web/app/site/sengi/assets/emoji/64/1fabf.png +0 -0
  3631. package/web/app/site/sengi/assets/emoji/64/1fac0.png +0 -0
  3632. package/web/app/site/sengi/assets/emoji/64/1fac1.png +0 -0
  3633. package/web/app/site/sengi/assets/emoji/64/1fac2.png +0 -0
  3634. package/web/app/site/sengi/assets/emoji/64/1fac3-1f3fb.png +0 -0
  3635. package/web/app/site/sengi/assets/emoji/64/1fac3-1f3fc.png +0 -0
  3636. package/web/app/site/sengi/assets/emoji/64/1fac3-1f3fd.png +0 -0
  3637. package/web/app/site/sengi/assets/emoji/64/1fac3-1f3fe.png +0 -0
  3638. package/web/app/site/sengi/assets/emoji/64/1fac3-1f3ff.png +0 -0
  3639. package/web/app/site/sengi/assets/emoji/64/1fac3.png +0 -0
  3640. package/web/app/site/sengi/assets/emoji/64/1fac4-1f3fb.png +0 -0
  3641. package/web/app/site/sengi/assets/emoji/64/1fac4-1f3fc.png +0 -0
  3642. package/web/app/site/sengi/assets/emoji/64/1fac4-1f3fd.png +0 -0
  3643. package/web/app/site/sengi/assets/emoji/64/1fac4-1f3fe.png +0 -0
  3644. package/web/app/site/sengi/assets/emoji/64/1fac4-1f3ff.png +0 -0
  3645. package/web/app/site/sengi/assets/emoji/64/1fac4.png +0 -0
  3646. package/web/app/site/sengi/assets/emoji/64/1fac5-1f3fb.png +0 -0
  3647. package/web/app/site/sengi/assets/emoji/64/1fac5-1f3fc.png +0 -0
  3648. package/web/app/site/sengi/assets/emoji/64/1fac5-1f3fd.png +0 -0
  3649. package/web/app/site/sengi/assets/emoji/64/1fac5-1f3fe.png +0 -0
  3650. package/web/app/site/sengi/assets/emoji/64/1fac5-1f3ff.png +0 -0
  3651. package/web/app/site/sengi/assets/emoji/64/1fac5.png +0 -0
  3652. package/web/app/site/sengi/assets/emoji/64/1fac6.png +0 -0
  3653. package/web/app/site/sengi/assets/emoji/64/1face.png +0 -0
  3654. package/web/app/site/sengi/assets/emoji/64/1facf.png +0 -0
  3655. package/web/app/site/sengi/assets/emoji/64/1fad0.png +0 -0
  3656. package/web/app/site/sengi/assets/emoji/64/1fad1.png +0 -0
  3657. package/web/app/site/sengi/assets/emoji/64/1fad2.png +0 -0
  3658. package/web/app/site/sengi/assets/emoji/64/1fad3.png +0 -0
  3659. package/web/app/site/sengi/assets/emoji/64/1fad4.png +0 -0
  3660. package/web/app/site/sengi/assets/emoji/64/1fad5.png +0 -0
  3661. package/web/app/site/sengi/assets/emoji/64/1fad6.png +0 -0
  3662. package/web/app/site/sengi/assets/emoji/64/1fad7.png +0 -0
  3663. package/web/app/site/sengi/assets/emoji/64/1fad8.png +0 -0
  3664. package/web/app/site/sengi/assets/emoji/64/1fad9.png +0 -0
  3665. package/web/app/site/sengi/assets/emoji/64/1fada.png +0 -0
  3666. package/web/app/site/sengi/assets/emoji/64/1fadb.png +0 -0
  3667. package/web/app/site/sengi/assets/emoji/64/1fadc.png +0 -0
  3668. package/web/app/site/sengi/assets/emoji/64/1fadf.png +0 -0
  3669. package/web/app/site/sengi/assets/emoji/64/1fae0.png +0 -0
  3670. package/web/app/site/sengi/assets/emoji/64/1fae1.png +0 -0
  3671. package/web/app/site/sengi/assets/emoji/64/1fae2.png +0 -0
  3672. package/web/app/site/sengi/assets/emoji/64/1fae3.png +0 -0
  3673. package/web/app/site/sengi/assets/emoji/64/1fae4.png +0 -0
  3674. package/web/app/site/sengi/assets/emoji/64/1fae5.png +0 -0
  3675. package/web/app/site/sengi/assets/emoji/64/1fae6.png +0 -0
  3676. package/web/app/site/sengi/assets/emoji/64/1fae7.png +0 -0
  3677. package/web/app/site/sengi/assets/emoji/64/1fae8.png +0 -0
  3678. package/web/app/site/sengi/assets/emoji/64/1fae9.png +0 -0
  3679. package/web/app/site/sengi/assets/emoji/64/1faf0-1f3fb.png +0 -0
  3680. package/web/app/site/sengi/assets/emoji/64/1faf0-1f3fc.png +0 -0
  3681. package/web/app/site/sengi/assets/emoji/64/1faf0-1f3fd.png +0 -0
  3682. package/web/app/site/sengi/assets/emoji/64/1faf0-1f3fe.png +0 -0
  3683. package/web/app/site/sengi/assets/emoji/64/1faf0-1f3ff.png +0 -0
  3684. package/web/app/site/sengi/assets/emoji/64/1faf0.png +0 -0
  3685. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fb-1faf2-1f3fc.png +0 -0
  3686. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fb-1faf2-1f3fd.png +0 -0
  3687. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fb-1faf2-1f3fe.png +0 -0
  3688. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fb-1faf2-1f3ff.png +0 -0
  3689. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fb.png +0 -0
  3690. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fc-1faf2-1f3fb.png +0 -0
  3691. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fc-1faf2-1f3fd.png +0 -0
  3692. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fc-1faf2-1f3fe.png +0 -0
  3693. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fc-1faf2-1f3ff.png +0 -0
  3694. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fc.png +0 -0
  3695. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fd-1faf2-1f3fb.png +0 -0
  3696. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fd-1faf2-1f3fc.png +0 -0
  3697. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fd-1faf2-1f3fe.png +0 -0
  3698. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fd-1faf2-1f3ff.png +0 -0
  3699. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fd.png +0 -0
  3700. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fe-1faf2-1f3fb.png +0 -0
  3701. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fe-1faf2-1f3fc.png +0 -0
  3702. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fe-1faf2-1f3fd.png +0 -0
  3703. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fe-1faf2-1f3ff.png +0 -0
  3704. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3fe.png +0 -0
  3705. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3ff-1faf2-1f3fb.png +0 -0
  3706. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3ff-1faf2-1f3fc.png +0 -0
  3707. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3ff-1faf2-1f3fd.png +0 -0
  3708. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3ff-1faf2-1f3fe.png +0 -0
  3709. package/web/app/site/sengi/assets/emoji/64/1faf1-1f3ff.png +0 -0
  3710. package/web/app/site/sengi/assets/emoji/64/1faf1.png +0 -0
  3711. package/web/app/site/sengi/assets/emoji/64/1faf2-1f3fb.png +0 -0
  3712. package/web/app/site/sengi/assets/emoji/64/1faf2-1f3fc.png +0 -0
  3713. package/web/app/site/sengi/assets/emoji/64/1faf2-1f3fd.png +0 -0
  3714. package/web/app/site/sengi/assets/emoji/64/1faf2-1f3fe.png +0 -0
  3715. package/web/app/site/sengi/assets/emoji/64/1faf2-1f3ff.png +0 -0
  3716. package/web/app/site/sengi/assets/emoji/64/1faf2.png +0 -0
  3717. package/web/app/site/sengi/assets/emoji/64/1faf3-1f3fb.png +0 -0
  3718. package/web/app/site/sengi/assets/emoji/64/1faf3-1f3fc.png +0 -0
  3719. package/web/app/site/sengi/assets/emoji/64/1faf3-1f3fd.png +0 -0
  3720. package/web/app/site/sengi/assets/emoji/64/1faf3-1f3fe.png +0 -0
  3721. package/web/app/site/sengi/assets/emoji/64/1faf3-1f3ff.png +0 -0
  3722. package/web/app/site/sengi/assets/emoji/64/1faf3.png +0 -0
  3723. package/web/app/site/sengi/assets/emoji/64/1faf4-1f3fb.png +0 -0
  3724. package/web/app/site/sengi/assets/emoji/64/1faf4-1f3fc.png +0 -0
  3725. package/web/app/site/sengi/assets/emoji/64/1faf4-1f3fd.png +0 -0
  3726. package/web/app/site/sengi/assets/emoji/64/1faf4-1f3fe.png +0 -0
  3727. package/web/app/site/sengi/assets/emoji/64/1faf4-1f3ff.png +0 -0
  3728. package/web/app/site/sengi/assets/emoji/64/1faf4.png +0 -0
  3729. package/web/app/site/sengi/assets/emoji/64/1faf5-1f3fb.png +0 -0
  3730. package/web/app/site/sengi/assets/emoji/64/1faf5-1f3fc.png +0 -0
  3731. package/web/app/site/sengi/assets/emoji/64/1faf5-1f3fd.png +0 -0
  3732. package/web/app/site/sengi/assets/emoji/64/1faf5-1f3fe.png +0 -0
  3733. package/web/app/site/sengi/assets/emoji/64/1faf5-1f3ff.png +0 -0
  3734. package/web/app/site/sengi/assets/emoji/64/1faf5.png +0 -0
  3735. package/web/app/site/sengi/assets/emoji/64/1faf6-1f3fb.png +0 -0
  3736. package/web/app/site/sengi/assets/emoji/64/1faf6-1f3fc.png +0 -0
  3737. package/web/app/site/sengi/assets/emoji/64/1faf6-1f3fd.png +0 -0
  3738. package/web/app/site/sengi/assets/emoji/64/1faf6-1f3fe.png +0 -0
  3739. package/web/app/site/sengi/assets/emoji/64/1faf6-1f3ff.png +0 -0
  3740. package/web/app/site/sengi/assets/emoji/64/1faf6.png +0 -0
  3741. package/web/app/site/sengi/assets/emoji/64/1faf7-1f3fb.png +0 -0
  3742. package/web/app/site/sengi/assets/emoji/64/1faf7-1f3fc.png +0 -0
  3743. package/web/app/site/sengi/assets/emoji/64/1faf7-1f3fd.png +0 -0
  3744. package/web/app/site/sengi/assets/emoji/64/1faf7-1f3fe.png +0 -0
  3745. package/web/app/site/sengi/assets/emoji/64/1faf7-1f3ff.png +0 -0
  3746. package/web/app/site/sengi/assets/emoji/64/1faf7.png +0 -0
  3747. package/web/app/site/sengi/assets/emoji/64/1faf8-1f3fb.png +0 -0
  3748. package/web/app/site/sengi/assets/emoji/64/1faf8-1f3fc.png +0 -0
  3749. package/web/app/site/sengi/assets/emoji/64/1faf8-1f3fd.png +0 -0
  3750. package/web/app/site/sengi/assets/emoji/64/1faf8-1f3fe.png +0 -0
  3751. package/web/app/site/sengi/assets/emoji/64/1faf8-1f3ff.png +0 -0
  3752. package/web/app/site/sengi/assets/emoji/64/1faf8.png +0 -0
  3753. package/web/app/site/sengi/assets/emoji/64/203c.png +0 -0
  3754. package/web/app/site/sengi/assets/emoji/64/2049.png +0 -0
  3755. package/web/app/site/sengi/assets/emoji/64/2122.png +0 -0
  3756. package/web/app/site/sengi/assets/emoji/64/2139.png +0 -0
  3757. package/web/app/site/sengi/assets/emoji/64/2194.png +0 -0
  3758. package/web/app/site/sengi/assets/emoji/64/2195.png +0 -0
  3759. package/web/app/site/sengi/assets/emoji/64/2196.png +0 -0
  3760. package/web/app/site/sengi/assets/emoji/64/2197.png +0 -0
  3761. package/web/app/site/sengi/assets/emoji/64/2198.png +0 -0
  3762. package/web/app/site/sengi/assets/emoji/64/2199.png +0 -0
  3763. package/web/app/site/sengi/assets/emoji/64/21a9.png +0 -0
  3764. package/web/app/site/sengi/assets/emoji/64/21aa.png +0 -0
  3765. package/web/app/site/sengi/assets/emoji/64/231a.png +0 -0
  3766. package/web/app/site/sengi/assets/emoji/64/231b.png +0 -0
  3767. package/web/app/site/sengi/assets/emoji/64/2328.png +0 -0
  3768. package/web/app/site/sengi/assets/emoji/64/23cf.png +0 -0
  3769. package/web/app/site/sengi/assets/emoji/64/23e9.png +0 -0
  3770. package/web/app/site/sengi/assets/emoji/64/23ea.png +0 -0
  3771. package/web/app/site/sengi/assets/emoji/64/23eb.png +0 -0
  3772. package/web/app/site/sengi/assets/emoji/64/23ec.png +0 -0
  3773. package/web/app/site/sengi/assets/emoji/64/23ed.png +0 -0
  3774. package/web/app/site/sengi/assets/emoji/64/23ee.png +0 -0
  3775. package/web/app/site/sengi/assets/emoji/64/23ef.png +0 -0
  3776. package/web/app/site/sengi/assets/emoji/64/23f0.png +0 -0
  3777. package/web/app/site/sengi/assets/emoji/64/23f1.png +0 -0
  3778. package/web/app/site/sengi/assets/emoji/64/23f2.png +0 -0
  3779. package/web/app/site/sengi/assets/emoji/64/23f3.png +0 -0
  3780. package/web/app/site/sengi/assets/emoji/64/23f8.png +0 -0
  3781. package/web/app/site/sengi/assets/emoji/64/23f9.png +0 -0
  3782. package/web/app/site/sengi/assets/emoji/64/23fa.png +0 -0
  3783. package/web/app/site/sengi/assets/emoji/64/24c2.png +0 -0
  3784. package/web/app/site/sengi/assets/emoji/64/25aa.png +0 -0
  3785. package/web/app/site/sengi/assets/emoji/64/25ab.png +0 -0
  3786. package/web/app/site/sengi/assets/emoji/64/25b6.png +0 -0
  3787. package/web/app/site/sengi/assets/emoji/64/25c0.png +0 -0
  3788. package/web/app/site/sengi/assets/emoji/64/25fb.png +0 -0
  3789. package/web/app/site/sengi/assets/emoji/64/25fc.png +0 -0
  3790. package/web/app/site/sengi/assets/emoji/64/25fd.png +0 -0
  3791. package/web/app/site/sengi/assets/emoji/64/25fe.png +0 -0
  3792. package/web/app/site/sengi/assets/emoji/64/2600.png +0 -0
  3793. package/web/app/site/sengi/assets/emoji/64/2601.png +0 -0
  3794. package/web/app/site/sengi/assets/emoji/64/2602.png +0 -0
  3795. package/web/app/site/sengi/assets/emoji/64/2603.png +0 -0
  3796. package/web/app/site/sengi/assets/emoji/64/2604.png +0 -0
  3797. package/web/app/site/sengi/assets/emoji/64/260e.png +0 -0
  3798. package/web/app/site/sengi/assets/emoji/64/2611.png +0 -0
  3799. package/web/app/site/sengi/assets/emoji/64/2614.png +0 -0
  3800. package/web/app/site/sengi/assets/emoji/64/2615.png +0 -0
  3801. package/web/app/site/sengi/assets/emoji/64/2618.png +0 -0
  3802. package/web/app/site/sengi/assets/emoji/64/261d-1f3fb.png +0 -0
  3803. package/web/app/site/sengi/assets/emoji/64/261d-1f3fc.png +0 -0
  3804. package/web/app/site/sengi/assets/emoji/64/261d-1f3fd.png +0 -0
  3805. package/web/app/site/sengi/assets/emoji/64/261d-1f3fe.png +0 -0
  3806. package/web/app/site/sengi/assets/emoji/64/261d-1f3ff.png +0 -0
  3807. package/web/app/site/sengi/assets/emoji/64/261d.png +0 -0
  3808. package/web/app/site/sengi/assets/emoji/64/2620.png +0 -0
  3809. package/web/app/site/sengi/assets/emoji/64/2622.png +0 -0
  3810. package/web/app/site/sengi/assets/emoji/64/2623.png +0 -0
  3811. package/web/app/site/sengi/assets/emoji/64/2626.png +0 -0
  3812. package/web/app/site/sengi/assets/emoji/64/262a.png +0 -0
  3813. package/web/app/site/sengi/assets/emoji/64/262e.png +0 -0
  3814. package/web/app/site/sengi/assets/emoji/64/262f.png +0 -0
  3815. package/web/app/site/sengi/assets/emoji/64/2638.png +0 -0
  3816. package/web/app/site/sengi/assets/emoji/64/2639.png +0 -0
  3817. package/web/app/site/sengi/assets/emoji/64/263a.png +0 -0
  3818. package/web/app/site/sengi/assets/emoji/64/2640.png +0 -0
  3819. package/web/app/site/sengi/assets/emoji/64/2642.png +0 -0
  3820. package/web/app/site/sengi/assets/emoji/64/2648.png +0 -0
  3821. package/web/app/site/sengi/assets/emoji/64/2649.png +0 -0
  3822. package/web/app/site/sengi/assets/emoji/64/264a.png +0 -0
  3823. package/web/app/site/sengi/assets/emoji/64/264b.png +0 -0
  3824. package/web/app/site/sengi/assets/emoji/64/264c.png +0 -0
  3825. package/web/app/site/sengi/assets/emoji/64/264d.png +0 -0
  3826. package/web/app/site/sengi/assets/emoji/64/264e.png +0 -0
  3827. package/web/app/site/sengi/assets/emoji/64/264f.png +0 -0
  3828. package/web/app/site/sengi/assets/emoji/64/2650.png +0 -0
  3829. package/web/app/site/sengi/assets/emoji/64/2651.png +0 -0
  3830. package/web/app/site/sengi/assets/emoji/64/2652.png +0 -0
  3831. package/web/app/site/sengi/assets/emoji/64/2653.png +0 -0
  3832. package/web/app/site/sengi/assets/emoji/64/265f.png +0 -0
  3833. package/web/app/site/sengi/assets/emoji/64/2660.png +0 -0
  3834. package/web/app/site/sengi/assets/emoji/64/2663.png +0 -0
  3835. package/web/app/site/sengi/assets/emoji/64/2665.png +0 -0
  3836. package/web/app/site/sengi/assets/emoji/64/2666.png +0 -0
  3837. package/web/app/site/sengi/assets/emoji/64/2668.png +0 -0
  3838. package/web/app/site/sengi/assets/emoji/64/267b.png +0 -0
  3839. package/web/app/site/sengi/assets/emoji/64/267e.png +0 -0
  3840. package/web/app/site/sengi/assets/emoji/64/267f.png +0 -0
  3841. package/web/app/site/sengi/assets/emoji/64/2692.png +0 -0
  3842. package/web/app/site/sengi/assets/emoji/64/2693.png +0 -0
  3843. package/web/app/site/sengi/assets/emoji/64/2694.png +0 -0
  3844. package/web/app/site/sengi/assets/emoji/64/2695.png +0 -0
  3845. package/web/app/site/sengi/assets/emoji/64/2696.png +0 -0
  3846. package/web/app/site/sengi/assets/emoji/64/2697.png +0 -0
  3847. package/web/app/site/sengi/assets/emoji/64/2699.png +0 -0
  3848. package/web/app/site/sengi/assets/emoji/64/269b.png +0 -0
  3849. package/web/app/site/sengi/assets/emoji/64/269c.png +0 -0
  3850. package/web/app/site/sengi/assets/emoji/64/26a0.png +0 -0
  3851. package/web/app/site/sengi/assets/emoji/64/26a1.png +0 -0
  3852. package/web/app/site/sengi/assets/emoji/64/26a7.png +0 -0
  3853. package/web/app/site/sengi/assets/emoji/64/26aa.png +0 -0
  3854. package/web/app/site/sengi/assets/emoji/64/26ab.png +0 -0
  3855. package/web/app/site/sengi/assets/emoji/64/26b0.png +0 -0
  3856. package/web/app/site/sengi/assets/emoji/64/26b1.png +0 -0
  3857. package/web/app/site/sengi/assets/emoji/64/26bd.png +0 -0
  3858. package/web/app/site/sengi/assets/emoji/64/26be.png +0 -0
  3859. package/web/app/site/sengi/assets/emoji/64/26c4.png +0 -0
  3860. package/web/app/site/sengi/assets/emoji/64/26c5.png +0 -0
  3861. package/web/app/site/sengi/assets/emoji/64/26c8.png +0 -0
  3862. package/web/app/site/sengi/assets/emoji/64/26ce.png +0 -0
  3863. package/web/app/site/sengi/assets/emoji/64/26cf.png +0 -0
  3864. package/web/app/site/sengi/assets/emoji/64/26d1.png +0 -0
  3865. package/web/app/site/sengi/assets/emoji/64/26d3-1f4a5.png +0 -0
  3866. package/web/app/site/sengi/assets/emoji/64/26d3.png +0 -0
  3867. package/web/app/site/sengi/assets/emoji/64/26d4.png +0 -0
  3868. package/web/app/site/sengi/assets/emoji/64/26e9.png +0 -0
  3869. package/web/app/site/sengi/assets/emoji/64/26ea.png +0 -0
  3870. package/web/app/site/sengi/assets/emoji/64/26f0.png +0 -0
  3871. package/web/app/site/sengi/assets/emoji/64/26f1.png +0 -0
  3872. package/web/app/site/sengi/assets/emoji/64/26f2.png +0 -0
  3873. package/web/app/site/sengi/assets/emoji/64/26f3.png +0 -0
  3874. package/web/app/site/sengi/assets/emoji/64/26f4.png +0 -0
  3875. package/web/app/site/sengi/assets/emoji/64/26f5.png +0 -0
  3876. package/web/app/site/sengi/assets/emoji/64/26f7.png +0 -0
  3877. package/web/app/site/sengi/assets/emoji/64/26f8.png +0 -0
  3878. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fb-2640.png +0 -0
  3879. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fb-2642.png +0 -0
  3880. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fb.png +0 -0
  3881. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fc-2640.png +0 -0
  3882. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fc-2642.png +0 -0
  3883. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fc.png +0 -0
  3884. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fd-2640.png +0 -0
  3885. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fd-2642.png +0 -0
  3886. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fd.png +0 -0
  3887. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fe-2640.png +0 -0
  3888. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fe-2642.png +0 -0
  3889. package/web/app/site/sengi/assets/emoji/64/26f9-1f3fe.png +0 -0
  3890. package/web/app/site/sengi/assets/emoji/64/26f9-1f3ff-2640.png +0 -0
  3891. package/web/app/site/sengi/assets/emoji/64/26f9-1f3ff-2642.png +0 -0
  3892. package/web/app/site/sengi/assets/emoji/64/26f9-1f3ff.png +0 -0
  3893. package/web/app/site/sengi/assets/emoji/64/26f9-2640.png +0 -0
  3894. package/web/app/site/sengi/assets/emoji/64/26f9-2642.png +0 -0
  3895. package/web/app/site/sengi/assets/emoji/64/26f9.png +0 -0
  3896. package/web/app/site/sengi/assets/emoji/64/26fa.png +0 -0
  3897. package/web/app/site/sengi/assets/emoji/64/26fd.png +0 -0
  3898. package/web/app/site/sengi/assets/emoji/64/2702.png +0 -0
  3899. package/web/app/site/sengi/assets/emoji/64/2705.png +0 -0
  3900. package/web/app/site/sengi/assets/emoji/64/2708.png +0 -0
  3901. package/web/app/site/sengi/assets/emoji/64/2709.png +0 -0
  3902. package/web/app/site/sengi/assets/emoji/64/270a-1f3fb.png +0 -0
  3903. package/web/app/site/sengi/assets/emoji/64/270a-1f3fc.png +0 -0
  3904. package/web/app/site/sengi/assets/emoji/64/270a-1f3fd.png +0 -0
  3905. package/web/app/site/sengi/assets/emoji/64/270a-1f3fe.png +0 -0
  3906. package/web/app/site/sengi/assets/emoji/64/270a-1f3ff.png +0 -0
  3907. package/web/app/site/sengi/assets/emoji/64/270a.png +0 -0
  3908. package/web/app/site/sengi/assets/emoji/64/270b-1f3fb.png +0 -0
  3909. package/web/app/site/sengi/assets/emoji/64/270b-1f3fc.png +0 -0
  3910. package/web/app/site/sengi/assets/emoji/64/270b-1f3fd.png +0 -0
  3911. package/web/app/site/sengi/assets/emoji/64/270b-1f3fe.png +0 -0
  3912. package/web/app/site/sengi/assets/emoji/64/270b-1f3ff.png +0 -0
  3913. package/web/app/site/sengi/assets/emoji/64/270b.png +0 -0
  3914. package/web/app/site/sengi/assets/emoji/64/270c-1f3fb.png +0 -0
  3915. package/web/app/site/sengi/assets/emoji/64/270c-1f3fc.png +0 -0
  3916. package/web/app/site/sengi/assets/emoji/64/270c-1f3fd.png +0 -0
  3917. package/web/app/site/sengi/assets/emoji/64/270c-1f3fe.png +0 -0
  3918. package/web/app/site/sengi/assets/emoji/64/270c-1f3ff.png +0 -0
  3919. package/web/app/site/sengi/assets/emoji/64/270c.png +0 -0
  3920. package/web/app/site/sengi/assets/emoji/64/270d-1f3fb.png +0 -0
  3921. package/web/app/site/sengi/assets/emoji/64/270d-1f3fc.png +0 -0
  3922. package/web/app/site/sengi/assets/emoji/64/270d-1f3fd.png +0 -0
  3923. package/web/app/site/sengi/assets/emoji/64/270d-1f3fe.png +0 -0
  3924. package/web/app/site/sengi/assets/emoji/64/270d-1f3ff.png +0 -0
  3925. package/web/app/site/sengi/assets/emoji/64/270d.png +0 -0
  3926. package/web/app/site/sengi/assets/emoji/64/270f.png +0 -0
  3927. package/web/app/site/sengi/assets/emoji/64/2712.png +0 -0
  3928. package/web/app/site/sengi/assets/emoji/64/2714.png +0 -0
  3929. package/web/app/site/sengi/assets/emoji/64/2716.png +0 -0
  3930. package/web/app/site/sengi/assets/emoji/64/271d.png +0 -0
  3931. package/web/app/site/sengi/assets/emoji/64/2721.png +0 -0
  3932. package/web/app/site/sengi/assets/emoji/64/2728.png +0 -0
  3933. package/web/app/site/sengi/assets/emoji/64/2733.png +0 -0
  3934. package/web/app/site/sengi/assets/emoji/64/2734.png +0 -0
  3935. package/web/app/site/sengi/assets/emoji/64/2744.png +0 -0
  3936. package/web/app/site/sengi/assets/emoji/64/2747.png +0 -0
  3937. package/web/app/site/sengi/assets/emoji/64/274c.png +0 -0
  3938. package/web/app/site/sengi/assets/emoji/64/274e.png +0 -0
  3939. package/web/app/site/sengi/assets/emoji/64/2753.png +0 -0
  3940. package/web/app/site/sengi/assets/emoji/64/2754.png +0 -0
  3941. package/web/app/site/sengi/assets/emoji/64/2755.png +0 -0
  3942. package/web/app/site/sengi/assets/emoji/64/2757.png +0 -0
  3943. package/web/app/site/sengi/assets/emoji/64/2763.png +0 -0
  3944. package/web/app/site/sengi/assets/emoji/64/2764-1f525.png +0 -0
  3945. package/web/app/site/sengi/assets/emoji/64/2764-1fa79.png +0 -0
  3946. package/web/app/site/sengi/assets/emoji/64/2764.png +0 -0
  3947. package/web/app/site/sengi/assets/emoji/64/2795.png +0 -0
  3948. package/web/app/site/sengi/assets/emoji/64/2796.png +0 -0
  3949. package/web/app/site/sengi/assets/emoji/64/2797.png +0 -0
  3950. package/web/app/site/sengi/assets/emoji/64/27a1.png +0 -0
  3951. package/web/app/site/sengi/assets/emoji/64/27b0.png +0 -0
  3952. package/web/app/site/sengi/assets/emoji/64/27bf.png +0 -0
  3953. package/web/app/site/sengi/assets/emoji/64/2934.png +0 -0
  3954. package/web/app/site/sengi/assets/emoji/64/2935.png +0 -0
  3955. package/web/app/site/sengi/assets/emoji/64/2b05.png +0 -0
  3956. package/web/app/site/sengi/assets/emoji/64/2b06.png +0 -0
  3957. package/web/app/site/sengi/assets/emoji/64/2b07.png +0 -0
  3958. package/web/app/site/sengi/assets/emoji/64/2b1b.png +0 -0
  3959. package/web/app/site/sengi/assets/emoji/64/2b1c.png +0 -0
  3960. package/web/app/site/sengi/assets/emoji/64/2b50.png +0 -0
  3961. package/web/app/site/sengi/assets/emoji/64/2b55.png +0 -0
  3962. package/web/app/site/sengi/assets/emoji/64/3030.png +0 -0
  3963. package/web/app/site/sengi/assets/emoji/64/303d.png +0 -0
  3964. package/web/app/site/sengi/assets/emoji/64/3297.png +0 -0
  3965. package/web/app/site/sengi/assets/emoji/64/3299.png +0 -0
  3966. package/web/app/site/sengi/assets/fonts/Black/Roboto-Black.woff +0 -0
  3967. package/web/app/site/sengi/assets/fonts/Black/Roboto-Black.woff2 +0 -0
  3968. package/web/app/site/sengi/assets/fonts/Bold/Roboto-Bold.woff +0 -0
  3969. package/web/app/site/sengi/assets/fonts/Bold/Roboto-Bold.woff2 +0 -0
  3970. package/web/app/site/sengi/assets/fonts/Light/Roboto-Light.woff +0 -0
  3971. package/web/app/site/sengi/assets/fonts/Light/Roboto-Light.woff2 +0 -0
  3972. package/web/app/site/sengi/assets/fonts/Medium/Roboto-Medium.woff +0 -0
  3973. package/web/app/site/sengi/assets/fonts/Medium/Roboto-Medium.woff2 +0 -0
  3974. package/web/app/site/sengi/assets/fonts/Regular/Roboto-Regular.woff +0 -0
  3975. package/web/app/site/sengi/assets/fonts/Regular/Roboto-Regular.woff2 +0 -0
  3976. package/web/app/site/sengi/assets/fonts/Thin/Roboto-Thin.woff +0 -0
  3977. package/web/app/site/sengi/assets/fonts/Thin/Roboto-Thin.woff2 +0 -0
  3978. package/web/app/site/sengi/assets/icons/icon-128x128.png +0 -0
  3979. package/web/app/site/sengi/assets/icons/icon-144x144.png +0 -0
  3980. package/web/app/site/sengi/assets/icons/icon-152x152.png +0 -0
  3981. package/web/app/site/sengi/assets/icons/icon-192x192.png +0 -0
  3982. package/web/app/site/sengi/assets/icons/icon-384x384.png +0 -0
  3983. package/web/app/site/sengi/assets/icons/icon-512x512.png +0 -0
  3984. package/web/app/site/sengi/assets/icons/icon-72x72.png +0 -0
  3985. package/web/app/site/sengi/assets/icons/icon-96x96.png +0 -0
  3986. package/web/app/site/sengi/assets/img/account.png +0 -0
  3987. package/web/app/site/sengi/assets/img/arrow_1.png +0 -0
  3988. package/web/app/site/sengi/assets/img/arrow_1_dark.png +0 -0
  3989. package/web/app/site/sengi/assets/img/arrow_2.png +0 -0
  3990. package/web/app/site/sengi/assets/img/arrow_2_dark.png +0 -0
  3991. package/web/app/site/sengi/assets/img/avatar-not-found.png +0 -0
  3992. package/web/app/site/sengi/assets/img/juche-background.jpg +0 -0
  3993. package/web/app/site/sengi/assets/img/labels.png +0 -0
  3994. package/web/app/site/sengi/assets/scss/modules/_fonts.scss +48 -0
  3995. package/web/app/site/sengi/assets/video/flashing.gif +0 -0
  3996. package/web/app/site/sengi/assets/video/flashing.mp4 +0 -0
  3997. package/web/app/site/sengi/assets/video/notification.mp4 +0 -0
  3998. package/web/app/site/sengi/favicon.ico +0 -0
  3999. package/web/app/site/sengi/index.html +64 -0
  4000. package/web/app/site/sengi/juche-background.5779872958c0aa8356d2.jpg +0 -0
  4001. package/web/app/site/sengi/main.1f5d89d26480c74fad14.js +1 -0
  4002. package/web/app/site/sengi/manifest.json +51 -0
  4003. package/web/app/site/sengi/polyfills.c1e766542f6691fc86da.js +1 -0
  4004. package/web/app/site/sengi/runtime.26209474bfa8dc87a77c.js +1 -0
  4005. package/web/app/site/sengi/styles.6f7454aa4cf8f2d23457.css +6 -0
  4006. package/web/app/site/sw.js +1742 -444
  4007. package/web/app/site/update.js +66 -0
  4008. package/web/app/update.js +66 -0
  4009. package/web/front/admin.html +2 -2
  4010. package/web/front/admin.js +5 -1
  4011. package/web/front/new-account.html +2 -2
  4012. package/web/front/run.html +15 -8
  4013. package/web/front/run.js +124 -36
  4014. package/web/icons/forum.svg +11 -0
  4015. package/web/icons/gateway.svg +14 -0
  4016. package/web/icons/local.svg +11 -0
@@ -157,6 +157,116 @@ var init_urls = __esm({
157
157
  }
158
158
  });
159
159
 
160
+ // lib/core/profile-page.mjs
161
+ function profilePageHtml({
162
+ name,
163
+ address,
164
+ summary = null,
165
+ icon = null,
166
+ image = null,
167
+ fields = [],
168
+ joined = null,
169
+ pinned = [],
170
+ kind = "person"
171
+ }) {
172
+ const esc = (s) => String(s ?? "").replace(/[&<>"]/g, (c) => ({ ...HTML_ESCAPES, '"': "&quot;" })[c]);
173
+ const what = kind === "group" ? "a group" : "an account";
174
+ const month = (iso) => {
175
+ const d = new Date(iso);
176
+ return Number.isNaN(d.getTime()) ? null : d.toLocaleDateString("en", { month: "long", year: "numeric", timeZone: "UTC" });
177
+ };
178
+ const day = (iso) => {
179
+ const d = new Date(iso);
180
+ return Number.isNaN(d.getTime()) ? "" : d.toISOString().slice(0, 10);
181
+ };
182
+ const fieldRows = fields.filter((f) => f?.name && f?.value !== void 0 && f?.value !== null && String(f.value) !== "");
183
+ const joinedText = joined ? month(joined) : null;
184
+ const pins = pinned.filter((x) => x && typeof x.content === "string");
185
+ return `<!doctype html>
186
+ <html lang="en">
187
+ <head>
188
+ <meta charset="utf-8">
189
+ <meta name="viewport" content="width=device-width, initial-scale=1">
190
+ <title>${esc(name)} (${esc(address)})</title>
191
+ <style>
192
+ :root { color-scheme: light dark; }
193
+ body { font: 112.5%/1.5 system-ui, sans-serif; max-width: 34rem; margin: 3rem auto; padding: 0 1rem; }
194
+ img.header { width: 100%; max-height: 12rem; object-fit: cover; border-radius: 1rem; }
195
+ img.avatar { width: 6rem; height: 6rem; border-radius: 1rem; object-fit: cover; margin-top: 1rem; }
196
+ h1 { margin: .5rem 0 0; }
197
+ .address { font-size: 1.1rem; user-select: all; }
198
+ dl.fields { display: grid; grid-template-columns: max-content 1fr; gap: .4rem 1rem; margin: 1.5rem 0; }
199
+ dl.fields dt { font-weight: 600; }
200
+ dl.fields dd { margin: 0; overflow-wrap: anywhere; }
201
+ .joined { margin: 1rem 0; }
202
+ section.pinned h2 { font-size: 1.1rem; margin: 2rem 0 .5rem; }
203
+ article.pin { border: 1px solid #8884; border-radius: 1rem; padding: 1rem 1.2rem; margin: 1rem 0; }
204
+ article.pin p:last-child { margin-bottom: 0; }
205
+ article.pin .when { font-size: 1rem; }
206
+ form { margin-top: 2rem; }
207
+ label { display: block; margin-bottom: .3rem; }
208
+ input { font: inherit; padding: .5rem; width: 14rem; max-width: 100%; }
209
+ button { font: inherit; padding: .5rem 1rem; }
210
+ .hint { color: #666; font-size: 1rem; }
211
+ .err { color: #b00020; }
212
+ .err:empty { display: none; }
213
+ @media (prefers-color-scheme: dark) {
214
+ .hint { color: #aaa; }
215
+ .err { color: #ff8a80; }
216
+ }
217
+ </style>
218
+ </head>
219
+ <body>
220
+ <main>
221
+ ${image ? `<img class="header" src="${esc(image)}" alt="">` : ""}
222
+ ${icon ? `<img class="avatar" src="${esc(icon)}" alt="">` : ""}
223
+ <h1>${esc(name)}</h1>
224
+ <p class="address">${esc(address)}</p>
225
+ ${summary ? `<div>${summary}</div>` : ""}
226
+ ${fieldRows.length ? `<dl class="fields">
227
+ ${fieldRows.map((f) => `<dt>${esc(f.name)}</dt><dd>${esc(f.value)}</dd>`).join("\n")}
228
+ </dl>` : ""}
229
+ ${joinedText ? `<p class="joined">Joined ${esc(joinedText)}</p>` : ""}
230
+ ${pins.length ? `<section class="pinned">
231
+ <h2>Pinned</h2>
232
+ ${pins.map((x) => `<article class="pin">
233
+ ${x.content}
234
+ <p class="when">${x.url ? `<a href="${esc(x.url)}">${esc(day(x.published))}</a>` : esc(day(x.published))}</p>
235
+ </article>`).join("\n")}
236
+ </section>` : ""}
237
+ <p>This is ${what} on the Fediverse. To follow it, paste the address above
238
+ into the search box of Mastodon or any Fediverse app \u2014 or use the form.</p>
239
+ <form id="follow">
240
+ <label for="server">your server</label>
241
+ <input id="server" type="text" placeholder="mastodon.social" autocomplete="off"
242
+ required aria-describedby="follow-err">
243
+ <button type="submit">Follow</button>
244
+ <p class="err" id="follow-err" role="alert"></p>
245
+ </form>
246
+ <p class="hint">The form sends you to your own server's follow screen.</p>
247
+ </main>
248
+ <script>
249
+ document.getElementById('follow').addEventListener('submit', (ev) => {
250
+ ev.preventDefault();
251
+ const s = document.getElementById('server').value.trim().replace(/^https?:\\/\\//, '').replace(/\\/.*$/, '');
252
+ const err = document.getElementById('follow-err');
253
+ const addr = document.querySelector('.address').textContent.trim();
254
+ if (!s) { err.textContent = 'Enter your server, e.g. mastodon.social'; return; }
255
+ err.textContent = '';
256
+ location.href = 'https://' + s + '/authorize_interaction?uri=' + encodeURIComponent(addr);
257
+ });
258
+ <\/script>
259
+ </body>
260
+ </html>
261
+ `;
262
+ }
263
+ var HTML_ESCAPES;
264
+ var init_profile_page = __esm({
265
+ "lib/core/profile-page.mjs"() {
266
+ HTML_ESCAPES = { "&": "&amp;", "<": "&lt;", ">": "&gt;" };
267
+ }
268
+ });
269
+
160
270
  // node_modules/entities/dist/decode-codepoint.js
161
271
  function replaceCodePoint(codePoint) {
162
272
  if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
@@ -9592,7 +9702,9 @@ __export(wire_exports, {
9592
9702
  HASHTAG_RE: () => HASHTAG_RE,
9593
9703
  MENTION_RE: () => MENTION_RE,
9594
9704
  OUTBOX_PAGE_SIZE: () => OUTBOX_PAGE_SIZE,
9705
+ POLICY_CTX: () => POLICY_CTX,
9595
9706
  PUBLIC: () => PUBLIC,
9707
+ QUOTE_CTX: () => QUOTE_CTX,
9596
9708
  SEC_CTX: () => SEC_CTX,
9597
9709
  acceptActivity: () => acceptActivity,
9598
9710
  actorDoc: () => actorDoc,
@@ -9640,6 +9752,7 @@ __export(wire_exports, {
9640
9752
  profilePageHtml: () => profilePageHtml,
9641
9753
  publicHandle: () => publicHandle,
9642
9754
  questionDoc: () => questionDoc,
9755
+ quotePolicy: () => quotePolicy,
9643
9756
  rejectActivity: () => rejectActivity,
9644
9757
  repliesId: () => repliesId,
9645
9758
  sanitizeHtml: () => sanitizeHtml,
@@ -9728,7 +9841,9 @@ function actorDoc({
9728
9841
  return {
9729
9842
  "@context": context,
9730
9843
  id: urls.actor,
9731
- type: kind === "group" ? "Group" : "Person",
9844
+ // A group is a community; an application is a service that speaks for a
9845
+ // site rather than a person — the actor a forum publishes for itself.
9846
+ type: kind === "group" ? "Group" : kind === "application" ? "Application" : "Person",
9732
9847
  ...approveJoins ? { manuallyApprovesFollowers: true } : {},
9733
9848
  ...assertionKey ? { assertionMethod: [{
9734
9849
  id: assertionKeyId(urls),
@@ -9753,8 +9868,8 @@ function actorDoc({
9753
9868
  ...fields.length ? {
9754
9869
  attachment: fields.map((f) => ({
9755
9870
  type: "PropertyValue",
9756
- name: String(f.name).replace(/[&<>]/g, (c) => HTML_ESCAPES[c]),
9757
- value: String(f.value).replace(/[&<>]/g, (c) => HTML_ESCAPES[c])
9871
+ name: String(f.name).replace(/[&<>]/g, (c) => HTML_ESCAPES2[c]),
9872
+ value: String(f.value).replace(/[&<>]/g, (c) => HTML_ESCAPES2[c])
9758
9873
  }))
9759
9874
  } : {},
9760
9875
  // The human page. Remote servers send profile clicks here, so it must be
@@ -9797,66 +9912,6 @@ function actorDoc({
9797
9912
  publicKey: { id: urls.actor + "#main-key", owner: urls.actor, publicKeyPem }
9798
9913
  };
9799
9914
  }
9800
- function profilePageHtml({ name, address, summary = null, icon = null, kind = "person" }) {
9801
- const esc = (s) => String(s ?? "").replace(/[&<>"]/g, (c) => ({ ...HTML_ESCAPES, '"': "&quot;" })[c]);
9802
- const what = kind === "group" ? "a group" : "an account";
9803
- return `<!doctype html>
9804
- <html lang="en">
9805
- <head>
9806
- <meta charset="utf-8">
9807
- <meta name="viewport" content="width=device-width, initial-scale=1">
9808
- <title>${esc(name)} (${esc(address)})</title>
9809
- <style>
9810
- :root { color-scheme: light dark; }
9811
- body { font: 112.5%/1.5 system-ui, sans-serif; max-width: 34rem; margin: 3rem auto; padding: 0 1rem; }
9812
- img.avatar { width: 6rem; height: 6rem; border-radius: 1rem; object-fit: cover; }
9813
- h1 { margin: .5rem 0 0; }
9814
- .address { font-size: 1.1rem; user-select: all; }
9815
- form { margin-top: 2rem; }
9816
- label { display: block; margin-bottom: .3rem; }
9817
- input { font: inherit; padding: .5rem; width: 14rem; max-width: 100%; }
9818
- button { font: inherit; padding: .5rem 1rem; }
9819
- .hint { color: #777; font-size: .9rem; }
9820
- .err { color: #b00020; }
9821
- .err:empty { display: none; }
9822
- @media (prefers-color-scheme: dark) {
9823
- .hint { color: #aaa; }
9824
- .err { color: #ff8a80; }
9825
- }
9826
- </style>
9827
- </head>
9828
- <body>
9829
- <main>
9830
- ${icon ? `<img class="avatar" src="${esc(icon)}" alt="">` : ""}
9831
- <h1>${esc(name)}</h1>
9832
- <p class="address">${esc(address)}</p>
9833
- ${summary ? `<div>${summary}</div>` : ""}
9834
- <p>This is ${what} on the Fediverse. To follow it, paste the address above
9835
- into the search box of Mastodon or any Fediverse app \u2014 or use the form.</p>
9836
- <form id="follow">
9837
- <label for="server">your server</label>
9838
- <input id="server" type="text" placeholder="mastodon.social" autocomplete="off"
9839
- required aria-describedby="follow-err">
9840
- <button type="submit">Follow</button>
9841
- <p class="err" id="follow-err" role="alert"></p>
9842
- </form>
9843
- <p class="hint">The form sends you to your own server's follow screen.</p>
9844
- </main>
9845
- <script>
9846
- document.getElementById('follow').addEventListener('submit', (ev) => {
9847
- ev.preventDefault();
9848
- const s = document.getElementById('server').value.trim().replace(/^https?:\\/\\//, '').replace(/\\/.*$/, '');
9849
- const err = document.getElementById('follow-err');
9850
- const addr = document.querySelector('.address').textContent.trim();
9851
- if (!s) { err.textContent = 'Enter your server, e.g. mastodon.social'; return; }
9852
- err.textContent = '';
9853
- location.href = 'https://' + s + '/authorize_interaction?uri=' + encodeURIComponent(addr);
9854
- });
9855
- <\/script>
9856
- </body>
9857
- </html>
9858
- `;
9859
- }
9860
9915
  function deleteActorActivity(urls, stamp) {
9861
9916
  return {
9862
9917
  "@context": AS_CTX,
@@ -10040,7 +10095,7 @@ function titledContent(note) {
10040
10095
  if (!title || types.includes("Note")) return html;
10041
10096
  const opening = html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim().toLowerCase();
10042
10097
  if (opening.startsWith(title.toLowerCase())) return html;
10043
- const esc = String(title).replace(/[&<>]/g, (c) => HTML_ESCAPES[c]);
10098
+ const esc = String(title).replace(/[&<>]/g, (c) => HTML_ESCAPES2[c]);
10044
10099
  return `<p><strong>${esc}</strong></p>${html}`;
10045
10100
  }
10046
10101
  function attachmentsOf(note) {
@@ -10066,18 +10121,18 @@ function tagHref(urls, name) {
10066
10121
  return urls.profileHtml + "?tag=" + encodeURIComponent(String(name).toLowerCase());
10067
10122
  }
10068
10123
  function contentHtml(text, mentions = [], hashtags = []) {
10069
- let html = String(text).replace(/[&<>]/g, (c) => HTML_ESCAPES[c]);
10124
+ let html = String(text).replace(/[&<>]/g, (c) => HTML_ESCAPES2[c]);
10070
10125
  if (hashtags.length) {
10071
10126
  const byName = new Map(hashtags.filter((h) => h?.name && h?.href).map((h) => [h.name.toLowerCase(), h.href]));
10072
10127
  html = html.replace(HASHTAG_RE, (all, lead, name) => {
10073
10128
  const href = byName.get(name.toLowerCase());
10074
10129
  if (!href) return all;
10075
- return `${lead}<a href="${String(href).replace(/[&<>"]/g, (c) => HTML_ESCAPES[c] || "&quot;")}" class="mention hashtag" rel="tag">#<span>${name}</span></a>`;
10130
+ return `${lead}<a href="${String(href).replace(/[&<>"]/g, (c) => HTML_ESCAPES2[c] || "&quot;")}" class="mention hashtag" rel="tag">#<span>${name}</span></a>`;
10076
10131
  });
10077
10132
  }
10078
10133
  for (const m of mentions) {
10079
10134
  if (!m?.handle || !m?.actor) continue;
10080
- const href = String(m.page || m.actor).replace(/[&<>"]/g, (c) => HTML_ESCAPES[c] || "&quot;");
10135
+ const href = String(m.page || m.actor).replace(/[&<>"]/g, (c) => HTML_ESCAPES2[c] || "&quot;");
10081
10136
  html = html.split("@" + m.handle).join(
10082
10137
  `<a href="${href}" class="u-url mention">@${m.handle.split("@")[0]}</a>`
10083
10138
  );
@@ -10092,6 +10147,10 @@ function addressing(urls, visibility, who = []) {
10092
10147
  direct: { to: who, cc: [] }
10093
10148
  }[visibility] || { to: [PUBLIC], cc: [urls.followers, ...who] };
10094
10149
  }
10150
+ function quotePolicy(visibility) {
10151
+ const open2 = visibility === "public" || visibility === "unlisted";
10152
+ return { canQuote: { automaticApproval: open2 ? [PUBLIC] : [], manualApproval: [] } };
10153
+ }
10095
10154
  function noteDoc({
10096
10155
  urls,
10097
10156
  slug,
@@ -10105,7 +10164,8 @@ function noteDoc({
10105
10164
  sensitive = false,
10106
10165
  updated = null,
10107
10166
  container = null,
10108
- also = []
10167
+ also = [],
10168
+ quote = null
10109
10169
  }) {
10110
10170
  const id = (container || urls.notes) + slug;
10111
10171
  const who = mentions.map((m) => m.actor);
@@ -10113,7 +10173,7 @@ function noteDoc({
10113
10173
  const addressed = addressing(urls, visibility, [...who, ...extra]);
10114
10174
  const hashtags = hashtagsIn(content).map((name) => ({ name, href: tagHref(urls, name) }));
10115
10175
  const note = {
10116
- "@context": AS_CTX,
10176
+ "@context": [AS_CTX, { ...POLICY_CTX, ...quote?.id ? QUOTE_CTX : {} }],
10117
10177
  id,
10118
10178
  type: "Note",
10119
10179
  attributedTo: urls.actor,
@@ -10121,8 +10181,15 @@ function noteDoc({
10121
10181
  published,
10122
10182
  to: addressed.to,
10123
10183
  cc: addressed.cc,
10124
- replies: repliesId(id)
10184
+ replies: repliesId(id),
10185
+ interactionPolicy: quotePolicy(visibility)
10125
10186
  };
10187
+ if (quote?.id) {
10188
+ note.quote = quote.id;
10189
+ note.quoteUri = quote.id;
10190
+ note._misskey_quote = quote.id;
10191
+ if (quote.authorization) note.quoteAuthorization = quote.authorization;
10192
+ }
10126
10193
  if (summary) note.summary = summary;
10127
10194
  if (summary || sensitive) note.sensitive = true;
10128
10195
  if (updated) note.updated = updated;
@@ -10164,7 +10231,7 @@ function questionDoc({
10164
10231
  if (endTime) question.endTime = endTime;
10165
10232
  if (closed) question.closed = closed;
10166
10233
  if (votersCount !== null && votersCount !== void 0) {
10167
- question["@context"] = [AS_CTX, {
10234
+ question["@context"] = [...[].concat(note["@context"]), {
10168
10235
  toot: "http://joinmastodon.org/ns#",
10169
10236
  votersCount: {
10170
10237
  "@id": "toot:votersCount",
@@ -10259,10 +10326,10 @@ function updateActorActivity({ urls, actor, serial, published = (/* @__PURE__ */
10259
10326
  object
10260
10327
  };
10261
10328
  }
10262
- function updateActivity(note, urls) {
10329
+ function updateActivity(note, urls, { serial = null } = {}) {
10263
10330
  return {
10264
10331
  "@context": AS_CTX,
10265
- id: note.id + "#update-" + String(note.updated || "").replace(/[^0-9TZ]/g, ""),
10332
+ id: note.id + "#update-" + (note.updated ? String(note.updated).replace(/[^0-9TZ]/g, "") : "q" + (serial ?? Date.now())),
10266
10333
  type: "Update",
10267
10334
  actor: urls.actor,
10268
10335
  to: note.to,
@@ -10308,11 +10375,12 @@ function addRemoveActivity({ urls, type, object, target, serial }) {
10308
10375
  target
10309
10376
  };
10310
10377
  }
10311
- var import_sanitize_html, AS_CTX, SEC_CTX, PUBLIC, DEFAULT_ROOT, assertionKeyId, OUTBOX_PAGE_SIZE, outboxPageId, outboxPageCount, outboxItemId, outboxWireItem, outboxLocalItem, FOLLOWERS_PAGE_SIZE, followersPageId, followersPageCount, ALLOWED_TAGS, ALLOWED_ATTRS, MAX_ATTACHMENTS, MAX_ATTACHMENT_URL, attachmentUrl, HTML_ESCAPES, MENTION_RE, HASHTAG_RE;
10378
+ var import_sanitize_html, AS_CTX, SEC_CTX, PUBLIC, DEFAULT_ROOT, assertionKeyId, OUTBOX_PAGE_SIZE, outboxPageId, outboxPageCount, outboxItemId, outboxWireItem, outboxLocalItem, FOLLOWERS_PAGE_SIZE, followersPageId, followersPageCount, ALLOWED_TAGS, ALLOWED_ATTRS, MAX_ATTACHMENTS, MAX_ATTACHMENT_URL, attachmentUrl, HTML_ESCAPES2, MENTION_RE, HASHTAG_RE, QUOTE_CTX, POLICY_CTX;
10312
10379
  var init_wire = __esm({
10313
10380
  "lib/core/wire.mjs"() {
10314
10381
  init_urls();
10315
10382
  init_urls();
10383
+ init_profile_page();
10316
10384
  import_sanitize_html = __toESM(require_sanitize_html(), 1);
10317
10385
  AS_CTX = "https://www.w3.org/ns/activitystreams";
10318
10386
  SEC_CTX = "https://w3id.org/security/v1";
@@ -10363,9 +10431,22 @@ var init_wire = __esm({
10363
10431
  return null;
10364
10432
  }
10365
10433
  };
10366
- HTML_ESCAPES = { "&": "&amp;", "<": "&lt;", ">": "&gt;" };
10434
+ HTML_ESCAPES2 = { "&": "&amp;", "<": "&lt;", ">": "&gt;" };
10367
10435
  MENTION_RE = /@([A-Za-z0-9_.-]+)@([A-Za-z0-9.-]+\.[A-Za-z]{2,}(?::\d+)?)/g;
10368
10436
  HASHTAG_RE = /(^|[^\/\w)])#([\p{L}\p{N}_]*[\p{L}_][\p{L}\p{N}_]*)/gu;
10437
+ QUOTE_CTX = {
10438
+ quote: { "@id": "https://w3id.org/fep/044f#quote", "@type": "@id" },
10439
+ quoteUri: { "@id": "http://fedibird.com/ns#quoteUri", "@type": "@id" },
10440
+ _misskey_quote: { "@id": "https://misskey-hub.net/ns#_misskey_quote", "@type": "@id" },
10441
+ quoteAuthorization: { "@id": "https://w3id.org/fep/044f#quoteAuthorization", "@type": "@id" }
10442
+ };
10443
+ POLICY_CTX = {
10444
+ gts: "https://gotosocial.org/ns#",
10445
+ interactionPolicy: { "@id": "gts:interactionPolicy", "@type": "@id" },
10446
+ canQuote: { "@id": "gts:canQuote", "@type": "@id" },
10447
+ automaticApproval: { "@id": "gts:automaticApproval", "@type": "@id" },
10448
+ manualApproval: { "@id": "gts:manualApproval", "@type": "@id" }
10449
+ };
10369
10450
  }
10370
10451
  });
10371
10452
 
@@ -23558,7 +23639,7 @@ var require_constants = __commonJS({
23558
23639
  "node_modules/jsonld/lib/constants.js"(exports, module2) {
23559
23640
  "use strict";
23560
23641
  var RDF5 = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
23561
- var XSD2 = "http://www.w3.org/2001/XMLSchema#";
23642
+ var XSD3 = "http://www.w3.org/2001/XMLSchema#";
23562
23643
  module2.exports = {
23563
23644
  // TODO: Deprecated and will be removed later. Use LINK_HEADER_CONTEXT.
23564
23645
  LINK_HEADER_REL: "http://www.w3.org/ns/json-ld#context",
@@ -23574,11 +23655,11 @@ var require_constants = __commonJS({
23574
23655
  RDF_JSON_LITERAL: RDF5 + "JSON",
23575
23656
  RDF_OBJECT: RDF5 + "object",
23576
23657
  RDF_LANGSTRING: RDF5 + "langString",
23577
- XSD: XSD2,
23578
- XSD_BOOLEAN: XSD2 + "boolean",
23579
- XSD_DOUBLE: XSD2 + "double",
23580
- XSD_INTEGER: XSD2 + "integer",
23581
- XSD_STRING: XSD2 + "string"
23658
+ XSD: XSD3,
23659
+ XSD_BOOLEAN: XSD3 + "boolean",
23660
+ XSD_DOUBLE: XSD3 + "double",
23661
+ XSD_INTEGER: XSD3 + "integer",
23662
+ XSD_STRING: XSD3 + "string"
23582
23663
  };
23583
23664
  }
23584
23665
  });
@@ -32608,6 +32689,73 @@ var init_safefetch = __esm({
32608
32689
  }
32609
32690
  });
32610
32691
 
32692
+ // lib/core/wire-quotes.mjs
32693
+ var wire_quotes_exports = {};
32694
+ __export(wire_quotes_exports, {
32695
+ QUOTE_TYPES_CTX: () => QUOTE_TYPES_CTX,
32696
+ quoteAnswerActivity: () => quoteAnswerActivity,
32697
+ quoteAuthorizationDoc: () => quoteAuthorizationDoc,
32698
+ quoteAuthorizationId: () => quoteAuthorizationId,
32699
+ quoteRequestActivity: () => quoteRequestActivity
32700
+ });
32701
+ function quoteRequestActivity({ urls, note, quoted, quotedActor, serial }) {
32702
+ const { "@context": ctx, ...instrument } = note;
32703
+ return {
32704
+ "@context": [AS_CTX, { ...QUOTE_CTX, ...POLICY_CTX, QuoteRequest: QUOTE_TYPES_CTX.QuoteRequest }],
32705
+ id: urls.actor + "#quote-request-" + serial,
32706
+ type: "QuoteRequest",
32707
+ actor: urls.actor,
32708
+ to: [quotedActor],
32709
+ object: quoted,
32710
+ instrument
32711
+ };
32712
+ }
32713
+ function quoteAuthorizationId(noteId, instrumentId) {
32714
+ return noteId + "-quote-" + node_crypto_default.createHash("sha256").update(String(instrumentId)).digest("hex").slice(0, 16);
32715
+ }
32716
+ function quoteAuthorizationDoc({ urls, id, instrument, target }) {
32717
+ return {
32718
+ "@context": [AS_CTX, QUOTE_TYPES_CTX],
32719
+ id,
32720
+ type: "QuoteAuthorization",
32721
+ attributedTo: urls.actor,
32722
+ interactingObject: instrument,
32723
+ interactionTarget: target
32724
+ };
32725
+ }
32726
+ function quoteAnswerActivity({ urls, type, request, result = null, to, serial }) {
32727
+ const idOf3 = (v) => typeof v === "string" ? v : v?.id;
32728
+ return {
32729
+ "@context": [AS_CTX, { QuoteRequest: QUOTE_TYPES_CTX.QuoteRequest }],
32730
+ id: urls.actor + "#" + type.toLowerCase() + "-" + serial,
32731
+ type,
32732
+ actor: urls.actor,
32733
+ to: [to],
32734
+ object: {
32735
+ id: idOf3(request),
32736
+ type: "QuoteRequest",
32737
+ actor: idOf3(request?.actor),
32738
+ object: idOf3(request?.object),
32739
+ instrument: idOf3(request?.instrument)
32740
+ },
32741
+ ...result ? { result } : {}
32742
+ };
32743
+ }
32744
+ var QUOTE_TYPES_CTX;
32745
+ var init_wire_quotes = __esm({
32746
+ "lib/core/wire-quotes.mjs"() {
32747
+ init_node_crypto();
32748
+ init_wire();
32749
+ QUOTE_TYPES_CTX = {
32750
+ QuoteRequest: "https://w3id.org/fep/044f#QuoteRequest",
32751
+ QuoteAuthorization: "https://w3id.org/fep/044f#QuoteAuthorization",
32752
+ gts: "https://gotosocial.org/ns#",
32753
+ interactingObject: { "@id": "gts:interactingObject", "@type": "@id" },
32754
+ interactionTarget: { "@id": "gts:interactionTarget", "@type": "@id" }
32755
+ };
32756
+ }
32757
+ });
32758
+
32611
32759
  // web/app/shims/fedify-sig.mjs
32612
32760
  async function sign({ url, method = "POST", headers = {}, body }, privateKey, keyId) {
32613
32761
  const u = new URL(url);
@@ -34054,6 +34202,61 @@ var require_src = __commonJS({
34054
34202
  }
34055
34203
  });
34056
34204
 
34205
+ // web/app/idb-kv.mjs
34206
+ var DB = "fedipod-accounts";
34207
+ function open() {
34208
+ return new Promise((res, rej) => {
34209
+ const r = indexedDB.open(DB, 1);
34210
+ r.onupgradeneeded = () => {
34211
+ const db = r.result;
34212
+ if (!db.objectStoreNames.contains("kv")) db.createObjectStore("kv");
34213
+ };
34214
+ r.onsuccess = () => res(r.result);
34215
+ r.onerror = () => rej(r.error);
34216
+ });
34217
+ }
34218
+ async function kvGet(key) {
34219
+ const db = await open();
34220
+ return new Promise((res, rej) => {
34221
+ const rq = db.transaction("kv", "readonly").objectStore("kv").get(key);
34222
+ rq.onsuccess = () => res(rq.result ?? null);
34223
+ rq.onerror = () => rej(rq.error);
34224
+ });
34225
+ }
34226
+ async function kvAll() {
34227
+ const db = await open();
34228
+ return new Promise((res, rej) => {
34229
+ const out = {};
34230
+ const cur = db.transaction("kv", "readonly").objectStore("kv").openCursor();
34231
+ cur.onsuccess = () => {
34232
+ const c = cur.result;
34233
+ if (c) {
34234
+ out[c.key] = c.value;
34235
+ c.continue();
34236
+ } else res(out);
34237
+ };
34238
+ cur.onerror = () => rej(cur.error);
34239
+ });
34240
+ }
34241
+ async function kvPut(key, val) {
34242
+ const db = await open();
34243
+ return new Promise((res, rej) => {
34244
+ const tx = db.transaction("kv", "readwrite");
34245
+ tx.objectStore("kv").put(val, key);
34246
+ tx.oncomplete = () => res();
34247
+ tx.onerror = () => rej(tx.error);
34248
+ });
34249
+ }
34250
+ async function kvDel(key) {
34251
+ const db = await open();
34252
+ return new Promise((res, rej) => {
34253
+ const tx = db.transaction("kv", "readwrite");
34254
+ tx.objectStore("kv").delete(key);
34255
+ tx.oncomplete = () => res();
34256
+ tx.onerror = () => rej(tx.error);
34257
+ });
34258
+ }
34259
+
34057
34260
  // web/app/agent.mjs
34058
34261
  init_wire();
34059
34262
 
@@ -45440,7 +45643,8 @@ var ALL_COLLECTIONS = {
45440
45643
  outbox: true,
45441
45644
  acls: true,
45442
45645
  pending: true,
45443
- blocked: true
45646
+ blocked: true,
45647
+ featured: true
45444
45648
  };
45445
45649
  async function publishOutbox(publisher, outbox, { acls = false, force = false } = {}) {
45446
45650
  const { urls } = publisher;
@@ -45539,6 +45743,7 @@ async function publishCollections(publisher, which = ALL_COLLECTIONS) {
45539
45743
  }
45540
45744
  if (which.pending) await publisher.publishPending();
45541
45745
  if (which.blocked) await publisher.publishBlocked();
45746
+ if (which.featured) await publisher.publishFeatured();
45542
45747
  if (which.outbox) {
45543
45748
  const outbox = publisher.store.read("outbox.json", []);
45544
45749
  const known2 = publisher.store.read("published.json", {}).outboxIndex;
@@ -55662,6 +55867,88 @@ var anno_default = {
55662
55867
  }
55663
55868
  };
55664
55869
 
55870
+ // lib/core/contexts/litepub-0.1.json
55871
+ var litepub_0_1_default = {
55872
+ "@context": [
55873
+ "https://www.w3.org/ns/activitystreams",
55874
+ "https://w3id.org/security/v1",
55875
+ {
55876
+ Emoji: "toot:Emoji",
55877
+ Hashtag: "as:Hashtag",
55878
+ PropertyValue: "schema:PropertyValue",
55879
+ atomUri: "ostatus:atomUri",
55880
+ conversation: {
55881
+ "@id": "ostatus:conversation",
55882
+ "@type": "@id"
55883
+ },
55884
+ discoverable: "toot:discoverable",
55885
+ manuallyApprovesFollowers: "as:manuallyApprovesFollowers",
55886
+ capabilities: "litepub:capabilities",
55887
+ ostatus: "http://ostatus.org#",
55888
+ schema: "http://schema.org#",
55889
+ toot: "http://joinmastodon.org/ns#",
55890
+ misskey: "https://misskey-hub.net/ns#",
55891
+ fedibird: "http://fedibird.com/ns#",
55892
+ sharkey: "https://joinsharkey.org/ns#",
55893
+ value: "schema:value",
55894
+ sensitive: "as:sensitive",
55895
+ litepub: "http://litepub.social/ns#",
55896
+ invisible: "litepub:invisible",
55897
+ directMessage: "litepub:directMessage",
55898
+ listMessage: {
55899
+ "@id": "litepub:listMessage",
55900
+ "@type": "@id"
55901
+ },
55902
+ quoteUrl: "as:quoteUrl",
55903
+ quoteUri: "fedibird:quoteUri",
55904
+ oauthRegistrationEndpoint: {
55905
+ "@id": "litepub:oauthRegistrationEndpoint",
55906
+ "@type": "@id"
55907
+ },
55908
+ EmojiReact: "litepub:EmojiReact",
55909
+ ChatMessage: "litepub:ChatMessage",
55910
+ alsoKnownAs: {
55911
+ "@id": "as:alsoKnownAs",
55912
+ "@type": "@id"
55913
+ },
55914
+ vcard: "http://www.w3.org/2006/vcard/ns#",
55915
+ formerRepresentations: "litepub:formerRepresentations",
55916
+ contentMap: {
55917
+ "@id": "as:content",
55918
+ "@container": "@language"
55919
+ },
55920
+ featured: {
55921
+ "@id": "toot:featured",
55922
+ "@type": "@id"
55923
+ },
55924
+ backgroundUrl: {
55925
+ "@id": "sharkey:backgroundUrl",
55926
+ "@type": "@id"
55927
+ }
55928
+ }
55929
+ ]
55930
+ };
55931
+
55932
+ // lib/core/contexts/quotes.json
55933
+ var quotes_default = {
55934
+ "@context": {
55935
+ quote: {
55936
+ "@id": "https://w3id.org/fep/044f#quote",
55937
+ "@type": "@id"
55938
+ },
55939
+ quoteAuthorization: {
55940
+ "@id": "https://w3id.org/fep/044f#quoteAuthorization",
55941
+ "@type": "@id"
55942
+ },
55943
+ QuoteRequest: "https://w3id.org/fep/044f#QuoteRequest",
55944
+ QuoteAuthorization: "https://w3id.org/fep/044f#QuoteAuthorization",
55945
+ _misskey_quote: {
55946
+ "@id": "https://misskey-hub.net/ns#_misskey_quote",
55947
+ "@type": "@id"
55948
+ }
55949
+ }
55950
+ };
55951
+
55665
55952
  // lib/core/contexts/index.mjs
55666
55953
  var CONTEXTS = {
55667
55954
  "https://www.w3.org/ns/activitystreams": activitystreams_default,
@@ -55678,7 +55965,9 @@ var CONTEXTS = {
55678
55965
  "https://join-lemmy.org/context.json": join_lemmy_default,
55679
55966
  "http://joinmastodon.org/ns": joinmastodon_default,
55680
55967
  "https://purl.archive.org/miscellany": miscellany_default,
55681
- "http://www.w3.org/ns/anno.jsonld": anno_default
55968
+ "http://www.w3.org/ns/anno.jsonld": anno_default,
55969
+ "http://litepub.social/ns": litepub_0_1_default,
55970
+ "https://w3id.org/fep/044f": quotes_default
55682
55971
  };
55683
55972
 
55684
55973
  // lib/core/graphview.mjs
@@ -55715,8 +56004,10 @@ function buildTerms() {
55715
56004
  const terms = /* @__PURE__ */ new Map();
55716
56005
  const order = [AS_CTX, ...Object.keys(CONTEXTS).filter((u) => u !== AS_CTX)];
55717
56006
  for (const url of order) {
55718
- const ctx = CONTEXTS[url]?.["@context"];
55719
- if (!ctx || typeof ctx !== "object") continue;
56007
+ const body = CONTEXTS[url]?.["@context"];
56008
+ const maps = (Array.isArray(body) ? body : [body]).filter((c) => c && typeof c === "object");
56009
+ if (!maps.length) continue;
56010
+ const ctx = Object.assign({}, ...maps);
55720
56011
  const prefixes = {};
55721
56012
  for (const [k, v] of Object.entries(ctx)) {
55722
56013
  if (typeof v === "string" && /^https?:\/\//.test(v)) prefixes[k] = v;
@@ -55801,8 +56092,40 @@ function isListHead(term3, ctx) {
55801
56092
  if (term3.termType !== "BlankNode" && term3.termType !== "NamedNode") return false;
55802
56093
  return !!ctx.bySubject.get(term3.value)?.has(RDF_FIRST);
55803
56094
  }
56095
+ var XSD2 = "http://www.w3.org/2001/XMLSchema#";
56096
+ var NUMERIC = new Set([
56097
+ "integer",
56098
+ "decimal",
56099
+ "double",
56100
+ "float",
56101
+ "long",
56102
+ "int",
56103
+ "short",
56104
+ "byte",
56105
+ "nonNegativeInteger",
56106
+ "positiveInteger",
56107
+ "nonPositiveInteger",
56108
+ "negativeInteger",
56109
+ "unsignedLong",
56110
+ "unsignedInt",
56111
+ "unsignedShort",
56112
+ "unsignedByte"
56113
+ ].map((t) => XSD2 + t));
56114
+ function fromLiteral(term3) {
56115
+ const type = term3.datatype?.value || "";
56116
+ if (type === `${XSD2}boolean`) {
56117
+ if (term3.value === "true" || term3.value === "1") return true;
56118
+ if (term3.value === "false" || term3.value === "0") return false;
56119
+ return term3.value;
56120
+ }
56121
+ if (NUMERIC.has(type)) {
56122
+ const n = Number(term3.value);
56123
+ return Number.isFinite(n) ? n : term3.value;
56124
+ }
56125
+ return term3.value;
56126
+ }
55804
56127
  function toValue(term3, ctx, depth, path) {
55805
- if (term3.termType === "Literal") return term3.value;
56128
+ if (term3.termType === "Literal") return fromLiteral(term3);
55806
56129
  if (isListHead(term3, ctx)) return readList(term3.value, ctx, depth, path);
55807
56130
  const preds = ctx.bySubject.get(term3.value);
55808
56131
  if (preds && preds.size) return makeView(term3.value, ctx, depth + 1, path);
@@ -55870,8 +56193,10 @@ var AS2Error = class extends Error {
55870
56193
  this.context = context;
55871
56194
  }
55872
56195
  };
56196
+ var LITEPUB = "http://litepub.social/ns";
56197
+ var heldKey = (url) => typeof url === "string" && /\/schemas\/litepub-0\.1\.jsonld$/u.test(url) ? LITEPUB : url;
55873
56198
  function contextLoader(url) {
55874
- const doc = CONTEXTS[url];
56199
+ const doc = CONTEXTS[heldKey(url)];
55875
56200
  if (!doc) {
55876
56201
  return Promise.reject(new AS2Error(`context not held here: ${url}`, { context: url }));
55877
56202
  }
@@ -55906,7 +56231,7 @@ async function parseAS2(raw) {
55906
56231
  }
55907
56232
  function groundContext(input) {
55908
56233
  const ctx = input["@context"];
55909
- const held = (c) => typeof c === "string" ? Object.hasOwn(CONTEXTS, c) : c && typeof c === "object";
56234
+ const held = (c) => typeof c === "string" ? Object.hasOwn(CONTEXTS, heldKey(c)) : c && typeof c === "object";
55910
56235
  let kept;
55911
56236
  if (ctx === void 0 || ctx === null) kept = [];
55912
56237
  else if (Array.isArray(ctx)) kept = ctx.filter(held);
@@ -55914,6 +56239,17 @@ function groundContext(input) {
55914
56239
  if (!kept.some((c) => c === AS_CTX)) kept.unshift(AS_CTX);
55915
56240
  return { ...input, "@context": kept.length === 1 ? kept[0] : kept };
55916
56241
  }
56242
+ function carryRemovals(input, view) {
56243
+ if (!input || typeof input !== "object" || !view || typeof view !== "object") return view;
56244
+ for (const [key, value] of Object.entries(input)) {
56245
+ if (value === null) {
56246
+ if (!(key in view)) view[key] = null;
56247
+ } else if (key === "object" && typeof value === "object" && !Array.isArray(value) && view.object && typeof view.object === "object" && !Array.isArray(view.object)) {
56248
+ carryRemovals(value, view.object);
56249
+ }
56250
+ }
56251
+ return view;
56252
+ }
55917
56253
  async function readLenient(raw) {
55918
56254
  let input = null;
55919
56255
  try {
@@ -55924,12 +56260,12 @@ async function readLenient(raw) {
55924
56260
  const root = typeof own === "string" && /^https?:\/\//u.test(own) ? own : null;
55925
56261
  try {
55926
56262
  const { doc, graph: graph2 } = await parseAS2(raw);
55927
- return { doc, graph: graph2, view: graphView(graph2, { root }), degraded: null };
56263
+ return { doc, graph: graph2, view: carryRemovals(input, graphView(graph2, { root })), degraded: null };
55928
56264
  } catch (e) {
55929
56265
  if (!input || typeof input !== "object") return { doc: null, graph: null, view: null, degraded: e.message };
55930
56266
  try {
55931
56267
  const { graph: graph2 } = await parseAS2(groundContext(input));
55932
- return { doc: input, graph: graph2, view: graphView(graph2, { root }), degraded: e.message };
56268
+ return { doc: input, graph: graph2, view: carryRemovals(input, graphView(graph2, { root })), degraded: e.message };
55933
56269
  } catch (inner) {
55934
56270
  return { doc: input, graph: null, view: null, degraded: `${e.message}; grounded read also failed: ${inner.message}` };
55935
56271
  }
@@ -55939,6 +56275,7 @@ async function readLenient(raw) {
55939
56275
  // lib/core/publisher/notes.mjs
55940
56276
  init_node_crypto();
55941
56277
  init_wire();
56278
+ init_wire_quotes();
55942
56279
  async function ensureMediaContainer(publisher) {
55943
56280
  if (publisher._mediaReady) return;
55944
56281
  if (await exists(publisher.remote, publisher.urls.media)) {
@@ -56042,7 +56379,7 @@ function rowContent(obj) {
56042
56379
  const esc = (v) => String(v).replace(/[&<>"]/gu, (c) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;" })[c]);
56043
56380
  return `<p><a href="${esc(obj?.id || "")}">${esc(obj?.type || "object")}</a></p>`;
56044
56381
  }
56045
- async function publishNote(publisher, content, { inReplyTo, attachments, visibility = "public", spoilerText = null, sensitive = false, slug: wanted = null, also = [], deliverTo = [] } = {}) {
56382
+ async function publishNote(publisher, content, { inReplyTo, attachments, visibility = "public", spoilerText = null, sensitive = false, slug: wanted = null, also = [], deliverTo = [], quote = null } = {}) {
56046
56383
  const { urls } = publisher;
56047
56384
  const priv = visibility === "private" || visibility === "direct";
56048
56385
  if (priv) {
@@ -56054,6 +56391,12 @@ async function publishNote(publisher, content, { inReplyTo, attachments, visibil
56054
56391
  const mentions = await publisher._mentionsFor(content, inReplyTo);
56055
56392
  if (visibility === "direct") assertDirectAddressed(content, mentions);
56056
56393
  const reply = await replyTarget(publisher, inReplyTo, mentions, visibility);
56394
+ const selfQuote = quote?.id && quote.actor === urls.actor;
56395
+ const quoted = quote?.id ? {
56396
+ id: quote.id,
56397
+ // Our own post: the authorization is minted here, before the note goes out.
56398
+ authorization: selfQuote ? await grantQuote(publisher, quote.id, (priv ? urls.privateNotes : urls.notes) + slug) : null
56399
+ } : null;
56057
56400
  const note = noteDoc({
56058
56401
  urls,
56059
56402
  slug,
@@ -56066,9 +56409,10 @@ async function publishNote(publisher, content, { inReplyTo, attachments, visibil
56066
56409
  summary: spoilerText,
56067
56410
  sensitive,
56068
56411
  container: priv ? urls.privateNotes : urls.notes,
56069
- also: [...also, ...reply ? [reply.actor] : []]
56412
+ also: [...also, ...reply ? [reply.actor] : [], ...quote?.actor && !selfQuote ? [quote.actor] : []],
56413
+ quote: quoted
56070
56414
  });
56071
- const addressedInboxes = await inboxesFor(publisher, [...also, ...deliverTo]);
56415
+ const addressedInboxes = await inboxesFor(publisher, [...also, ...deliverTo, ...quote?.actor && !selfQuote ? [quote.actor] : []]);
56072
56416
  await write4(publisher.remote, note.id, note);
56073
56417
  await writeEmptyReplies(
56074
56418
  publisher.remote,
@@ -56076,6 +56420,7 @@ async function publishNote(publisher, content, { inReplyTo, attachments, visibil
56076
56420
  collection(repliesId(note.id), [])
56077
56421
  );
56078
56422
  if (!priv) await publisher.recordOutbox(note.id);
56423
+ const request = quote?.id && !selfQuote ? quoteRequestActivity({ urls, note, quoted: quote.id, quotedActor: quote.actor, serial: Date.now() }) : null;
56079
56424
  publisher.store.addStatus({
56080
56425
  noteId: note.id,
56081
56426
  actor: urls.actor,
@@ -56089,7 +56434,13 @@ async function publishNote(publisher, content, { inReplyTo, attachments, visibil
56089
56434
  ...spoilerText ? { spoiler: spoilerText } : {},
56090
56435
  ...note.sensitive ? { sensitive: true } : {},
56091
56436
  ...attachments?.length ? { attachments } : {},
56092
- ...rowTags(note)
56437
+ ...rowTags(note),
56438
+ ...quote?.id ? {
56439
+ quote: quote.id,
56440
+ quoteState: selfQuote ? "accepted" : "pending",
56441
+ ...quoted.authorization ? { quoteAuthorization: quoted.authorization } : {},
56442
+ ...request ? { quoteRequest: { id: request.id, actor: quote.actor } } : {}
56443
+ } : {}
56093
56444
  });
56094
56445
  if (await publisher.store.commit?.() === false) publisher.log(`post published but its timeline row was refused: ${note.id}`);
56095
56446
  const create = createActivity(note, urls);
@@ -56103,6 +56454,11 @@ async function publishNote(publisher, content, { inReplyTo, attachments, visibil
56103
56454
  ].filter(Boolean))];
56104
56455
  await publisher.deliverer.deliverToAll(inboxes, create);
56105
56456
  publisher.log(`note published: ${note.id} \u2192 ${inboxes.length} inbox(es)`);
56457
+ if (request) {
56458
+ const [inbox] = await inboxesFor(publisher, [quote.actor]);
56459
+ if (inbox) await publisher.deliverer.deliver(inbox, request);
56460
+ else publisher.log(`quote of ${quote.id}: no inbox found for ${quote.actor} \u2014 the quote stays pending`);
56461
+ }
56106
56462
  if (visibility === "public" && publisher.atproto?.connected() && publisher.store.getConfig()?.atproto?.crossPost) {
56107
56463
  try {
56108
56464
  const mirror = await publisher.atproto.crossPost(
@@ -56211,7 +56567,8 @@ async function updateNote(publisher, s, { content, spoilerText = null, sensitive
56211
56567
  sensitive: sensitive ?? !!s.sensitive,
56212
56568
  updated,
56213
56569
  container,
56214
- also: reply ? [reply.actor] : []
56570
+ also: reply ? [reply.actor] : [],
56571
+ quote: rowQuote(s)
56215
56572
  });
56216
56573
  await write4(publisher.remote, note.id, note);
56217
56574
  await writeCreate(publisher.remote, createActivityId(note.id), createActivity(note, urls));
@@ -56236,6 +56593,71 @@ async function updateNote(publisher, s, { content, spoilerText = null, sensitive
56236
56593
  publisher.log(`note edited: ${note.id} \u2192 ${inboxes.length} inbox(es)`);
56237
56594
  return patched;
56238
56595
  }
56596
+ function rowQuote(s) {
56597
+ if (!s?.quote || s.quoteState === "rejected") return null;
56598
+ return { id: s.quote, ...s.quoteAuthorization ? { authorization: s.quoteAuthorization } : {} };
56599
+ }
56600
+ async function restateNote(publisher, s, { quote }) {
56601
+ const { urls } = publisher;
56602
+ const content = s.text ?? "";
56603
+ const mentions = await publisher._mentionsFor(content, s.inReplyTo);
56604
+ const container = String(s.noteId).startsWith(urls.privateNotes) ? urls.privateNotes : urls.notes;
56605
+ const slug = s.slug || String(s.noteId).slice(container.length);
56606
+ const reply = await replyTarget(publisher, s.inReplyTo, mentions, s.visibility || "public");
56607
+ const note = noteDoc({
56608
+ urls,
56609
+ slug,
56610
+ content,
56611
+ published: s.published,
56612
+ inReplyTo: s.inReplyTo,
56613
+ attachments: s.attachments || [],
56614
+ mentions,
56615
+ visibility: s.visibility || "public",
56616
+ summary: s.spoiler || null,
56617
+ sensitive: !!s.sensitive,
56618
+ updated: s.editedAt || null,
56619
+ container,
56620
+ also: [...reply ? [reply.actor] : [], ...s.quoteRequest?.actor ? [s.quoteRequest.actor] : []],
56621
+ quote
56622
+ });
56623
+ await write4(publisher.remote, note.id, note);
56624
+ await writeCreate(publisher.remote, createActivityId(note.id), createActivity(note, urls));
56625
+ const update = updateActivity(note, urls, { serial: Date.now() });
56626
+ const contacts = publisher.store.getContacts();
56627
+ const inboxes = [...new Set([
56628
+ ...s.visibility === "direct" ? [] : contacts.followers.map((f) => f.sharedInbox || f.inbox),
56629
+ ...mentions.map((m) => m.inbox),
56630
+ reply?.inbox,
56631
+ ...await inboxesFor(publisher, s.quoteRequest?.actor ? [s.quoteRequest.actor] : [])
56632
+ ].filter(Boolean))];
56633
+ await publisher.deliverer.deliverToAll(inboxes, update);
56634
+ return inboxes.length;
56635
+ }
56636
+ async function authorizeQuote(publisher, s, authorizationId) {
56637
+ const patched = publisher.store.updateStatus(s.noteId, { quoteState: "accepted", quoteAuthorization: authorizationId });
56638
+ const n = await restateNote(publisher, patched || s, { quote: { id: s.quote, authorization: authorizationId } });
56639
+ publisher.log(`quote allowed by ${s.quoteRequest?.actor || "the author"}: ${s.noteId} \u2192 ${n} inbox(es)`);
56640
+ return patched;
56641
+ }
56642
+ async function withdrawQuote(publisher, s) {
56643
+ const patched = publisher.store.updateStatus(s.noteId, { quoteState: "rejected", quoteAuthorization: void 0 });
56644
+ const n = await restateNote(publisher, patched || s, { quote: null });
56645
+ publisher.log(`quote refused by ${s.quoteRequest?.actor || "the author"}: ${s.noteId} \u2192 ${n} inbox(es)`);
56646
+ return patched;
56647
+ }
56648
+ var MAX_QUOTED_BY = 200;
56649
+ async function grantQuote(publisher, noteId, instrumentId) {
56650
+ const { urls } = publisher;
56651
+ const id = quoteAuthorizationId(noteId, instrumentId);
56652
+ await write4(publisher.remote, id, quoteAuthorizationDoc({ urls, id, instrument: instrumentId, target: noteId }));
56653
+ const s = publisher.store.getStatuses().find((x) => x.noteId === noteId);
56654
+ if (s) {
56655
+ const quotedBy = (s.quotedBy || []).filter((q) => q.note !== instrumentId);
56656
+ quotedBy.unshift({ note: instrumentId, authorization: id });
56657
+ publisher.store.updateStatus(noteId, { quotedBy: quotedBy.slice(0, MAX_QUOTED_BY) });
56658
+ }
56659
+ return id;
56660
+ }
56239
56661
 
56240
56662
  // lib/core/publisher/restore.mjs
56241
56663
  var ACCEPT_AP = 'application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams"';
@@ -56289,11 +56711,11 @@ async function reconcileOutbox(publisher, outbox) {
56289
56711
  return 0;
56290
56712
  }
56291
56713
  if (!Array.isArray(published) || !published.length) return 0;
56292
- const idOf2 = (i) => typeof i === "string" ? i : i?.id || null;
56293
- const known2 = new Set(outbox.map(idOf2).filter(Boolean));
56714
+ const idOf3 = (i) => typeof i === "string" ? i : i?.id || null;
56715
+ const known2 = new Set(outbox.map(idOf3).filter(Boolean));
56294
56716
  const removed = new Set(publisher.store.read("outbox-removed.json", []).map((r) => r.id));
56295
56717
  const missing = published.filter((i) => {
56296
- const id = idOf2(i);
56718
+ const id = idOf3(i);
56297
56719
  return id && !known2.has(id) && !removed.has(id);
56298
56720
  });
56299
56721
  if (!missing.length) return 0;
@@ -56732,7 +57154,16 @@ var Publisher = class {
56732
57154
  // Every actor document this identity publishes, from one place: the
56733
57155
  // profile publish and a Move both write it, and a Move that rebuilt it
56734
57156
  // by hand dropped the gateway inbox, the outbox door and the collections.
56735
- actorDocFor({ priv = false, moderators = null, inbox = null, movedTo = this.config.movedTo || null } = {}) {
57157
+ // `clientOrigin` is overridden only by the agent serving a client its own
57158
+ // local actor: standalone, the published document cannot name a loopback
57159
+ // address, but a client already talking to that address can be told it.
57160
+ actorDocFor({
57161
+ priv = false,
57162
+ moderators = null,
57163
+ inbox = null,
57164
+ movedTo = this.config.movedTo || null,
57165
+ clientOrigin = this.clientOrigin
57166
+ } = {}) {
56736
57167
  const { urls } = this;
56737
57168
  return actorDoc({
56738
57169
  urls,
@@ -56757,13 +57188,47 @@ var Publisher = class {
56757
57188
  // The agent's own outbox endpoint, where it is reachable: a client
56758
57189
  // following the actor must arrive somewhere that will take a write.
56759
57190
  // Otherwise the Gateway's outbox door, when one is attached.
56760
- outbox: this.clientOrigin ? `${this.clientOrigin}ap/outbox` : this.gatewayOutbox(),
57191
+ outbox: clientOrigin ? `${clientOrigin}ap/outbox` : this.gatewayOutbox(),
56761
57192
  // How a client-to-server client finds the way in with nothing configured
56762
57193
  // by hand. Advertised only where the surface is publicly reachable.
56763
- oauthAuthorize: this.clientOrigin ? `${this.clientOrigin}oauth/authorize` : null,
56764
- oauthToken: this.clientOrigin ? `${this.clientOrigin}oauth/token` : null
57194
+ oauthAuthorize: clientOrigin ? `${clientOrigin}oauth/authorize` : null,
57195
+ oauthToken: clientOrigin ? `${clientOrigin}oauth/token` : null
56765
57196
  });
56766
57197
  }
57198
+ // The human half: a page a browser can open and follow from. The actor
57199
+ // document is for servers; this is the address you hand to a person. It
57200
+ // shows who the account is, its fields, when it joined and what it pinned;
57201
+ // the counts and the posts live in the collections. Written only when its
57202
+ // content changed.
57203
+ async publishProfilePage({ force = false } = {}) {
57204
+ const { urls } = this;
57205
+ const host = new URL(urls.base).host;
57206
+ if (!this.config.createdAt) {
57207
+ const oldest = this.store.getStatuses().filter((s) => s.kind === "post" && s.published).map((s) => s.published).sort()[0];
57208
+ this.config.createdAt = oldest || (/* @__PURE__ */ new Date()).toISOString();
57209
+ this.store.setConfig?.({ ...this.store.getConfig?.(), createdAt: this.config.createdAt });
57210
+ }
57211
+ const pinned = this.store.getStatuses().filter((s) => s.kind === "post" && s.pinned && s.visibility !== "private" && s.visibility !== "direct").sort((a, b) => String(b.published).localeCompare(String(a.published))).slice(0, 5).map((s) => ({ content: s.content, published: s.published, url: s.noteId }));
57212
+ const frontActor = this.config.gateway?.frontActor;
57213
+ const address = frontActor ? `@${publicHandle(this.config)}@${new URL(frontActor).host}` : webfingerHost(urls.base) ? `@${this.config.handle}@${host}` : urls.actor;
57214
+ const html = profilePageHtml({
57215
+ name: this.config.name || this.config.handle,
57216
+ address,
57217
+ summary: this.config.summary ? contentHtml(this.config.summary) : null,
57218
+ icon: this.config.icon || null,
57219
+ image: this.config.image || null,
57220
+ fields: this.config.fields || [],
57221
+ joined: this.config.createdAt,
57222
+ pinned,
57223
+ kind: this.config.kind
57224
+ });
57225
+ const digest = node_crypto_default.createHash("sha256").update(html).digest("hex").slice(0, 32);
57226
+ const seen = this.store.read("published.json", {});
57227
+ if (!force && seen.pageDigest === digest) return false;
57228
+ await writeProfilePage(this.remote, urls, html);
57229
+ this.store.write("published.json", { ...this.store.read("published.json", {}), pageDigest: digest });
57230
+ return true;
57231
+ }
56767
57232
  async publishProfile({ force = false } = {}) {
56768
57233
  const { urls } = this;
56769
57234
  const host = new URL(urls.base).host;
@@ -56771,7 +57236,7 @@ var Publisher = class {
56771
57236
  const moderators = (this.config.moderators || []).length ? urls.moderators : null;
56772
57237
  const gw = this.config.gateway;
56773
57238
  const gwActive = gw && gw.url && gw.mode && gw.mode !== "off";
56774
- const actorDoc2 = this.actorDocFor({ priv, moderators, inbox: gwActive ? gw.url : null });
57239
+ const actorDoc2 = this.actorDocFor({ priv, moderators, inbox: gwActive ? gw.url : this.config.inboxUrl || null });
56775
57240
  const surface = node_crypto_default.createHash("sha256").update(JSON.stringify({
56776
57241
  actor: actorDoc2,
56777
57242
  handle: this.config.handle,
@@ -56780,22 +57245,25 @@ var Publisher = class {
56780
57245
  version: AGENT_VERSION,
56781
57246
  moderators: this.config.moderators || []
56782
57247
  })).digest("hex").slice(0, 32);
57248
+ await this.publishProfilePage({ force });
56783
57249
  if (!force && this.store.read("published.json", {}).surfaceDigest === surface) {
56784
57250
  this.log("profile unchanged \u2014 nothing republished");
56785
57251
  return { unreachable: [], updated: 0, skipped: true };
56786
57252
  }
56787
- await writeWebfinger(
56788
- this.remote,
56789
- urls,
56790
- jrd({ handle: this.config.handle, host, actor: urls.actor, page: urls.profileHtml })
56791
- );
56792
- await writeHostMeta(this.remote, urls, hostMeta(urls.base));
56793
- const nodeinfoDocUrl = urls.home + "ap/nodeinfo-2.0";
56794
- const localPosts = this.store.getStatuses().filter((s) => s.kind === "post").length;
56795
- await writeNodeinfo(this.remote, urls, {
56796
- pointer: nodeinfoPointer(nodeinfoDocUrl),
56797
- doc: nodeinfoDoc({ version: AGENT_VERSION, localPosts })
56798
- });
57253
+ if (!this.config.forum) {
57254
+ await writeWebfinger(
57255
+ this.remote,
57256
+ urls,
57257
+ jrd({ handle: this.config.handle, host, actor: urls.actor, page: urls.profileHtml })
57258
+ );
57259
+ await writeHostMeta(this.remote, urls, hostMeta(urls.base));
57260
+ const nodeinfoDocUrl = urls.home + "ap/nodeinfo-2.0";
57261
+ const localPosts = this.store.getStatuses().filter((s) => s.kind === "post").length;
57262
+ await writeNodeinfo(this.remote, urls, {
57263
+ pointer: nodeinfoPointer(nodeinfoDocUrl),
57264
+ doc: nodeinfoDoc({ version: AGENT_VERSION, localPosts })
57265
+ });
57266
+ }
56799
57267
  const actor = actorDoc2;
56800
57268
  await write(this.remote, urls, actor);
56801
57269
  if (moderators) {
@@ -56806,14 +57274,8 @@ var Publisher = class {
56806
57274
  );
56807
57275
  }
56808
57276
  if (gwActive) await this.publishGatewayPolicy();
56809
- await writeProfilePage(this.remote, urls, profilePageHtml({
56810
- name: this.config.name || this.config.handle,
56811
- address: webfingerHost(urls.base) ? `@${this.config.handle}@${host}` : urls.actor,
56812
- summary: this.config.summary ? contentHtml(this.config.summary) : null,
56813
- icon: this.config.icon || null,
56814
- kind: this.config.kind
56815
- }));
56816
- try {
57277
+ if (this.config.forum) {
57278
+ } else try {
56817
57279
  const wrote = await linkInWebIdProfile(this.remote, {
56818
57280
  actorUrl: urls.actor,
56819
57281
  accountName: `@${this.config.handle}@${host}`,
@@ -56879,12 +57341,13 @@ var Publisher = class {
56879
57341
  async verifyPublicSurface() {
56880
57342
  const { urls } = this;
56881
57343
  const targets = [
56882
- ["webfinger", urls.webfinger],
56883
- ["host-meta", urls.base + ".well-known/host-meta"],
57344
+ // Discovery documents are the pod's, not a forum category's (see publishProfile).
57345
+ ...this.config.forum ? [] : [["webfinger", urls.webfinger], ["host-meta", urls.base + ".well-known/host-meta"]],
56884
57346
  ["actor", urls.actor],
56885
57347
  ["notes", urls.notes],
56886
57348
  ["followers", urls.followers],
56887
57349
  ["following", urls.following],
57350
+ ["featured", urls.featured],
56888
57351
  ["outbox", urls.outbox]
56889
57352
  ];
56890
57353
  const unreachable = [];
@@ -57082,6 +57545,15 @@ var Publisher = class {
57082
57545
  publishNote(...a) {
57083
57546
  return publishNote(this, ...a);
57084
57547
  }
57548
+ authorizeQuote(...a) {
57549
+ return authorizeQuote(this, ...a);
57550
+ }
57551
+ withdrawQuote(...a) {
57552
+ return withdrawQuote(this, ...a);
57553
+ }
57554
+ grantQuote(...a) {
57555
+ return grantQuote(this, ...a);
57556
+ }
57085
57557
  publishObject(...a) {
57086
57558
  return publishObject(this, ...a);
57087
57559
  }
@@ -57167,15 +57639,25 @@ var MAX_FORWARDS_PER_DRAIN = 20;
57167
57639
  var ACCEPT_AP2 = 'application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams"';
57168
57640
  function trimActivity(a) {
57169
57641
  if (!a || typeof a !== "object") return a ?? null;
57170
- const idOf2 = (v) => typeof v === "string" ? v : v?.id ?? null;
57642
+ const idOf3 = (v) => typeof v === "string" ? v : v?.id ?? null;
57171
57643
  const out = {};
57172
57644
  for (const k of ["id", "type", "actor", "target"]) {
57173
- const v = idOf2(a[k]);
57645
+ const v = idOf3(a[k]);
57174
57646
  if (v) out[k] = String(v).slice(0, 2048);
57175
57647
  }
57176
- const obj = idOf2(a.object);
57177
- if (obj) out.object = String(obj).slice(0, 2048);
57178
- else if (a.object && typeof a.object === "object" && a.object.type) {
57648
+ const obj = idOf3(a.object);
57649
+ if (obj) {
57650
+ const asked = a.object && typeof a.object === "object" ? a.object : null;
57651
+ const said = {};
57652
+ if (asked) {
57653
+ if (typeof asked.name === "string") said.name = asked.name.slice(0, 300);
57654
+ if ("closed" in asked) {
57655
+ const v = asked.closed;
57656
+ said.closed = v === "false" ? false : v === "true" ? true : typeof v === "string" ? v.slice(0, 64) : !!v;
57657
+ }
57658
+ }
57659
+ out.object = Object.keys(said).length ? { id: String(obj).slice(0, 2048), ...said } : String(obj).slice(0, 2048);
57660
+ } else if (a.object && typeof a.object === "object" && a.object.type) {
57179
57661
  out.object = { type: String(a.object.type).slice(0, 64) };
57180
57662
  }
57181
57663
  return out;
@@ -57227,6 +57709,40 @@ function authorOf(note, delivered = null) {
57227
57709
  if (!author) return null;
57228
57710
  return sameIdentity(note?.id, author) ? author : null;
57229
57711
  }
57712
+ var MAX_REACTION_CHARS = 64;
57713
+ function reactionOf(activity) {
57714
+ if (!activity || activity.type !== "EmojiReact" && activity.type !== "Like") return null;
57715
+ const content = typeof activity.content === "string" ? activity.content.trim() : "";
57716
+ if (!content) return null;
57717
+ const emoji = content.slice(0, MAX_REACTION_CHARS);
57718
+ const bare = emoji.replace(/^:|:$/g, "");
57719
+ const custom = emojisOf(activity).find((e) => e.shortcode === bare);
57720
+ return { emoji, ...custom ? { url: custom.url } : {} };
57721
+ }
57722
+ var QUOTE_REL = "https://misskey-hub.net/ns#_misskey_quote";
57723
+ function quoteOf(note) {
57724
+ const idOf3 = (v) => typeof v === "string" ? v : v?.id;
57725
+ const named = [note?.quote, note?.quoteUri, note?._misskey_quote, note?.quoteUrl].map((v) => idOf3(Array.isArray(v) ? v[0] : v)).find(Boolean);
57726
+ const linked = [].concat(note?.tag || []).find((t) => t?.type === "Link" && t.href && [].concat(t.rel || []).includes(QUOTE_REL))?.href;
57727
+ const q = named || linked;
57728
+ return q && q !== note?.id ? httpOnly(String(q).slice(0, MAX_URL_CHARS)) : null;
57729
+ }
57730
+ function quotePolicyOf(note, author) {
57731
+ const can = note?.interactionPolicy?.canQuote;
57732
+ if (!can || typeof can !== "object") return null;
57733
+ const word = (v) => {
57734
+ const id = typeof v === "string" ? v : v?.id;
57735
+ if (!id) return null;
57736
+ if (id === "https://www.w3.org/ns/activitystreams#Public" || id === "as:Public" || id === "Public") return "public";
57737
+ if (author && sameIdentity(id, author)) {
57738
+ if (/\/followers\/?$/u.test(id)) return "followers";
57739
+ if (/\/following\/?$/u.test(id)) return "following";
57740
+ }
57741
+ return null;
57742
+ };
57743
+ const list3 = (v) => [...new Set([].concat(v || []).map(word).filter(Boolean))];
57744
+ return { automatic: list3(can.automaticApproval), manual: list3(can.manualApproval) };
57745
+ }
57230
57746
 
57231
57747
  // lib/pod/links.mjs
57232
57748
  function linkTargets(headerValue, rel, baseUrl) {
@@ -57484,6 +58000,7 @@ async function isGone(intake, url) {
57484
58000
 
57485
58001
  // lib/core/intake/group.mjs
57486
58002
  function isModerationAsk(intake, activity) {
58003
+ if (intake.isModerationAskExtra?.(activity)) return true;
57487
58004
  if (activity.type === "Block") return true;
57488
58005
  if (activity.type === "Undo") {
57489
58006
  return typeof activity.object === "object" && activity.object?.type === "Block";
@@ -57533,14 +58050,23 @@ async function amplify(intake, noteId, { approved = false, activity = null } = {
57533
58050
  const s = intake.store.getStatuses().find((x) => x.noteId === noteId);
57534
58051
  if (!s) return;
57535
58052
  if (s.announcedAt) return;
57536
- if (s.direct || s.nonPublic) {
58053
+ if (s.direct || s.nonPublic && !intake.config.private) {
57537
58054
  intake.log(`not amplified \u2014 ${noteId} was not addressed publicly, and a group never widens a post's audience`);
57538
58055
  return;
57539
58056
  }
57540
58057
  const contacts = intake.store.getContacts();
57541
58058
  if (!contacts.followers.some((f) => f.actor === s.actor)) {
57542
- intake.log(`not amplified \u2014 ${s.actor} is not a member`);
57543
- return;
58059
+ if (intake.onStranger) {
58060
+ const held2 = await intake.onStranger({ noteId, actor: s.actor, activity }).catch(() => false);
58061
+ if (held2) {
58062
+ intake.log(`held for a moderator \u2014 ${s.actor} is not a member`);
58063
+ return;
58064
+ }
58065
+ }
58066
+ if (!intake.store.getContacts().followers.some((f) => f.actor === s.actor)) {
58067
+ intake.log(`not amplified \u2014 ${s.actor} is not a member`);
58068
+ return;
58069
+ }
57544
58070
  }
57545
58071
  if (intake.store.getMuted().actors.includes(s.actor)) {
57546
58072
  intake.log(`not amplified \u2014 ${s.actor} is muted`);
@@ -57585,6 +58111,9 @@ async function amplify(intake, noteId, { approved = false, activity = null } = {
57585
58111
  await intake.publisher.recordOutbox(act);
57586
58112
  intake.store.setPending(intake.store.getPending().filter((p) => p.noteId !== noteId));
57587
58113
  intake.log(`amplified ${noteId} \u2192 ${inboxes.length} inbox(es)`);
58114
+ if (intake.onCarried) {
58115
+ await intake.onCarried({ noteId, actor: s.actor, activity: act, sent: activity }).catch((e) => intake.log(`after the carry of ${noteId}: ${e.message}`));
58116
+ }
57588
58117
  await intake.bskyGroup?.mirrorCarry(s).catch((e) => intake.log(`bluesky mirror of the carry failed: ${e.message}`));
57589
58118
  }
57590
58119
  async function isCoMember(intake, actor) {
@@ -57632,6 +58161,7 @@ function announceTargets(intake, author) {
57632
58161
  }
57633
58162
 
57634
58163
  // lib/core/intake/activities.mjs
58164
+ var idOf = (v) => typeof v === "string" ? v : v?.id;
57635
58165
  function onAddRemove(intake, activity, actor) {
57636
58166
  const target = typeof activity.target === "string" ? activity.target : activity.target?.id;
57637
58167
  const ours = target && [intake.urls.followers, intake.urls.following, intake.urls.featured].filter(Boolean).includes(target);
@@ -57695,7 +58225,7 @@ async function onFollow(intake, activity, actor, { trusted = false } = {}) {
57695
58225
  }
57696
58226
  async function onUndo(intake, activity, actor, { trusted = false } = {}) {
57697
58227
  const inner = activity.object && typeof activity.object === "object" ? activity.object : null;
57698
- if (inner?.type === "Like" || inner?.type === "Announce") return onUndoReaction(intake, inner, actor, { trusted });
58228
+ if (inner?.type === "Like" || inner?.type === "Announce" || inner?.type === "EmojiReact") return onUndoReaction(intake, inner, actor, { trusted });
57699
58229
  if (typeof activity.object === "object" && activity.object?.type && activity.object.type !== "Follow") return;
57700
58230
  const named = typeof activity.object === "string" ? activity.object : activity.object?.id;
57701
58231
  if (!named && !trusted) return;
@@ -57791,6 +58321,13 @@ async function onUndoReaction(intake, inner, actor, { trusted = false } = {}) {
57791
58321
  const objectId = typeof target === "string" ? target : target?.id;
57792
58322
  if (!objectId) return;
57793
58323
  if (objectId.startsWith(intake.urls.notes)) {
58324
+ const reaction = reactionOf(inner);
58325
+ if (reaction) {
58326
+ const gone2 = intake.store.removeNotifications((n) => n.type === "reaction" && n.actor === actor && n.noteId === objectId && n.emoji === reaction.emoji);
58327
+ if (gone2) intake.log(`reaction ${reaction.emoji} withdrawn by ${actor} on ${objectId}`);
58328
+ return;
58329
+ }
58330
+ if (inner.type === "EmojiReact") return;
57794
58331
  const type = inner.type === "Like" ? "favourite" : "reblog";
57795
58332
  const gone = intake.store.removeNotifications((n) => n.type === type && n.actor === actor && n.noteId === objectId);
57796
58333
  if (gone) intake.log(`${inner.type} withdrawn by ${actor} on ${objectId}`);
@@ -57851,6 +58388,9 @@ async function onDelete(intake, activity, actor) {
57851
58388
  }
57852
58389
  const s = intake.store.getStatuses().find((x) => x.noteId === objectId);
57853
58390
  if (s) await intake.forget(s);
58391
+ if (s && intake.onCarriedGone) {
58392
+ await intake.onCarriedGone({ noteId: objectId, actor }).catch((e) => intake.log(`carried gone ${objectId}: ${e.message}`));
58393
+ }
57854
58394
  intake.log(`deleted upstream: ${objectId}`);
57855
58395
  }
57856
58396
  async function onUpdate(intake, activity, actor) {
@@ -57875,10 +58415,16 @@ async function onUpdate(intake, activity, actor) {
57875
58415
  const attachments = attachmentsOf3(note);
57876
58416
  const freshPoll = pollOf(note);
57877
58417
  const freshEmojis = emojisOf(note);
58418
+ const quote = quoteOf(note);
58419
+ const quoteState = quote ? await intake.quoteStateOf(note, quote) : null;
58420
+ const quotePolicy2 = quotePolicyOf(note, s.actor);
57878
58421
  intake.store.updateStatus(objectId, {
57879
58422
  content,
57880
58423
  ...attachments.length ? { attachments } : {},
57881
58424
  emojis: freshEmojis.length ? freshEmojis : void 0,
58425
+ quote: quote || void 0,
58426
+ quoteState: quoteState || void 0,
58427
+ quotePolicy: quotePolicy2 || void 0,
57882
58428
  // The edit's own stamp when the note carries one; tallies and the
57883
58429
  // content warning follow the edit too. A poll refresh keeps our vote.
57884
58430
  editedAt: note.updated || (/* @__PURE__ */ new Date()).toISOString(),
@@ -57887,9 +58433,14 @@ async function onUpdate(intake, activity, actor) {
57887
58433
  poll: { ...freshPoll, voted: !!s.poll?.voted, ownVotes: s.poll?.ownVotes || [] }
57888
58434
  } : {}
57889
58435
  });
58436
+ if (intake.onCarriedEdit) {
58437
+ await intake.onCarriedEdit({ noteId: objectId, actor, note }).catch((e) => intake.log(`carried edit ${objectId}: ${e.message}`));
58438
+ }
57890
58439
  intake.log(`edited upstream: ${objectId}`);
57891
58440
  }
57892
58441
  async function onReject(intake, activity, actor, { trusted = false } = {}) {
58442
+ const asked = quoteAsked(intake, activity);
58443
+ if (asked) return onQuoteAnswered(intake, asked, activity, actor, "Reject");
57893
58444
  if (activity.object?.type && activity.object.type !== "Follow") return;
57894
58445
  const contacts = intake.store.getContacts();
57895
58446
  const rec = contacts.following.find((f) => f.actor === actor);
@@ -57927,6 +58478,8 @@ async function onMove(intake, activity, actor) {
57927
58478
  intake.log(`${actor} moved to ${target} \u2014 follow the new account to keep seeing them`);
57928
58479
  }
57929
58480
  async function onAccept(intake, activity, actor, { trusted = false } = {}) {
58481
+ const asked = quoteAsked(intake, activity);
58482
+ if (asked) return onQuoteAnswered(intake, asked, activity, actor, "Accept");
57930
58483
  const contacts = intake.store.getContacts();
57931
58484
  const rec = contacts.following.find((f) => f.actor === actor);
57932
58485
  const named = typeof activity.object === "string" ? activity.object : activity.object?.id;
@@ -57942,6 +58495,86 @@ async function onAccept(intake, activity, actor, { trusted = false } = {}) {
57942
58495
  intake.log(`follow accepted by ${actor}`);
57943
58496
  }
57944
58497
  }
58498
+ function quoteAsked(intake, activity) {
58499
+ const named = idOf(activity.object);
58500
+ if (!named) return null;
58501
+ return intake.store.getStatuses().find((x) => x.kind === "post" && x.quoteRequest?.id === named) || null;
58502
+ }
58503
+ async function onQuoteAnswered(intake, s, activity, actor, type) {
58504
+ if (actor !== s.quoteRequest?.actor) {
58505
+ intake.log(`${type} of our quote request from ${actor}, who is not ${s.quoteRequest?.actor} \u2014 ignored`);
58506
+ return;
58507
+ }
58508
+ if (type === "Reject") {
58509
+ if (s.quoteState === "rejected") return;
58510
+ await intake.publisher.withdrawQuote(s);
58511
+ return;
58512
+ }
58513
+ if (s.quoteState === "accepted") return;
58514
+ const resultId = idOf(activity.result);
58515
+ if (!resultId || !intake.sameIdentity(resultId, actor)) return `Accept of a quote request carries no authorization at ${actor}`;
58516
+ const auth = await intake.fetchAP(resultId);
58517
+ if (!auth) throw new Error(`cannot fetch quote authorization ${resultId} \u2014 will retry`);
58518
+ const ok = auth.id === resultId && auth.type === "QuoteAuthorization" && [].concat(auth.attributedTo || []).map(idOf).includes(actor) && idOf(auth.interactingObject) === s.noteId && idOf(auth.interactionTarget) === s.quote;
58519
+ if (!ok) return `quote authorization ${resultId} does not say ${s.noteId} may quote ${s.quote}`;
58520
+ await intake.publisher.authorizeQuote(s, resultId);
58521
+ }
58522
+ async function onQuoteRequest(intake, activity, actor) {
58523
+ const objectId = idOf(activity.object);
58524
+ const instrumentId = idOf(activity.instrument);
58525
+ if (!objectId || !instrumentId) return "QuoteRequest without object or instrument";
58526
+ const ours = objectId.startsWith(intake.urls.notes) || intake.urls.privateNotes && objectId.startsWith(intake.urls.privateNotes);
58527
+ if (!ours) {
58528
+ intake.log(`QuoteRequest from ${actor} names ${objectId}, not a post of ours \u2014 ignored`);
58529
+ return;
58530
+ }
58531
+ if (!intake.sameIdentity(instrumentId, actor)) return `QuoteRequest instrument/actor identity mismatch (${instrumentId})`;
58532
+ const s = intake.store.getStatuses().find((x) => x.noteId === objectId && x.kind === "post");
58533
+ if (!s) return `QuoteRequest for a post we do not hold (${objectId})`;
58534
+ const note = await intake.fetchAP(instrumentId);
58535
+ if (!note) return `quote request: instrument fetch failed (${instrumentId})`;
58536
+ if (note.id !== instrumentId || !isContentType(note.type)) return `quote request: instrument is not verifiable content (${instrumentId})`;
58537
+ if (authorOf(note, actor) !== actor) return `quote request: ${instrumentId} is not by ${actor}`;
58538
+ if (quoteOf(note) !== objectId) return `quote request: ${instrumentId} does not quote ${objectId}`;
58539
+ const doc = await intake.fetchAP(actor);
58540
+ const inbox = doc?.endpoints?.sharedInbox || doc?.inbox;
58541
+ if (!inbox) return `quote request: no inbox for ${actor}`;
58542
+ const { quoteAnswerActivity: quoteAnswerActivity2 } = await Promise.resolve().then(() => (init_wire_quotes(), wire_quotes_exports));
58543
+ const open2 = !s.visibility || s.visibility === "public" || s.visibility === "unlisted";
58544
+ if (!open2) {
58545
+ await intake.deliverer.deliver(
58546
+ inbox,
58547
+ quoteAnswerActivity2({ urls: intake.urls, type: "Reject", request: activity, to: actor, serial: intake.serial++ })
58548
+ );
58549
+ intake.log(`quote refused: ${instrumentId} asked to quote ${objectId}, which is not public`);
58550
+ return;
58551
+ }
58552
+ const authorization = await intake.publisher.grantQuote(objectId, instrumentId);
58553
+ await intake.deliverer.deliver(
58554
+ inbox,
58555
+ quoteAnswerActivity2({ urls: intake.urls, type: "Accept", request: activity, result: authorization, to: actor, serial: intake.serial++ })
58556
+ );
58557
+ const held = intake.store.getStatuses().find((x) => x.noteId === instrumentId);
58558
+ if (!held) {
58559
+ const rejected = await intake.ingestNote(instrumentId, actor, { inline: note });
58560
+ if (rejected) intake.log(`quote of ${objectId} by ${actor}: ${rejected}`);
58561
+ } else if (held.quoteState !== "accepted") {
58562
+ intake.store.updateStatus(instrumentId, { quote: objectId, quoteState: "accepted" });
58563
+ }
58564
+ intake.store.addNotification({ type: "quote", actor, noteId: instrumentId });
58565
+ intake.log(`quote allowed: ${instrumentId} quotes ${objectId}`);
58566
+ }
58567
+ async function quoteStateOf(intake, note, quote) {
58568
+ if (quote.startsWith(intake.urls.notes)) {
58569
+ const target = intake.store.getStatuses().find((x) => x.noteId === quote);
58570
+ return (target?.quotedBy || []).some((q) => q.note === note.id) ? "accepted" : "pending";
58571
+ }
58572
+ const authId = idOf(note.quoteAuthorization);
58573
+ if (!authId || !intake.sameIdentity(authId, quote)) return "pending";
58574
+ const auth = await intake.fetchAP(authId).catch(() => null);
58575
+ const ok = auth && auth.id === authId && auth.type === "QuoteAuthorization" && idOf(auth.interactingObject) === note.id && idOf(auth.interactionTarget) === quote;
58576
+ return ok ? "accepted" : "pending";
58577
+ }
57945
58578
 
57946
58579
  // lib/core/intake/notes.mjs
57947
58580
  init_wire();
@@ -57951,6 +58584,8 @@ function concernsUs(intake, doc, actor) {
57951
58584
  if (audience.includes(intake.urls.actor) || audience.includes(intake.urls.followers)) return true;
57952
58585
  const tagged = [].concat(doc?.tag || []).some((t) => t?.type === "Mention" && (t.href === intake.urls.actor || t.name?.includes(intake.urls.actor)));
57953
58586
  if (tagged) return true;
58587
+ const quoted = quoteOf(doc);
58588
+ if (quoted && quoted.startsWith(intake.urls.notes)) return true;
57954
58589
  const inReplyTo = typeof doc?.inReplyTo === "string" ? doc.inReplyTo : doc?.inReplyTo?.id;
57955
58590
  if (!inReplyTo) return false;
57956
58591
  if (String(inReplyTo).startsWith(intake.urls.notes)) return true;
@@ -58011,6 +58646,7 @@ async function ingestNote(intake, objectId, actor, { via, inline = null } = {})
58011
58646
  const content = titledContent2(note);
58012
58647
  const author = authorOf(note, actor);
58013
58648
  if (!author) return `object names an author its origin does not vouch for (${objectId})`;
58649
+ intake.recentNotes?.set(note.id, note);
58014
58650
  if (intake.store.isBlocked(author)) return `blocked author (${author})`;
58015
58651
  if (!via && !intake.concernsUs(note, author)) {
58016
58652
  return `the note its own server serves does not address us (${objectId})`;
@@ -58032,6 +58668,10 @@ async function ingestNote(intake, objectId, actor, { via, inline = null } = {})
58032
58668
  const hashtags = [].concat(note.tag || []).filter((t) => t?.type === "Hashtag" && t.name).slice(0, MAX_MENTIONS).map((t) => ({ name: String(t.name).replace(/^#/, "").slice(0, 128), url: httpOnly(String(t.href || "").slice(0, MAX_URL_CHARS)) })).filter((t) => t.name);
58033
58669
  const emojis = emojisOf(note);
58034
58670
  const poll = pollOf(note);
58671
+ const quote = quoteOf(note);
58672
+ const quotePolicy2 = quotePolicyOf(note, author);
58673
+ const quoteState = quote ? await intake.quoteStateOf(note, quote) : null;
58674
+ if (quote) await holdQuoted(intake, quote);
58035
58675
  const audience = [].concat(note.to || [], note.cc || []).map(String);
58036
58676
  const direct = audience.length > 0 && !audience.includes(PUBLIC) && !audience.some((a) => a.endsWith("/followers"));
58037
58677
  const nonPublic = audience.length > 0 && !audience.includes(PUBLIC);
@@ -58052,11 +58692,16 @@ async function ingestNote(intake, objectId, actor, { via, inline = null } = {})
58052
58692
  ...emojis.length ? { emojis } : {},
58053
58693
  ...mentions.length ? { mentions } : {},
58054
58694
  ...attachments.length ? { attachments } : {},
58695
+ ...quote ? { quote, quoteState } : {},
58696
+ ...quotePolicy2 ? { quotePolicy: quotePolicy2 } : {},
58055
58697
  ...via ? { via } : {}
58056
58698
  });
58057
58699
  const namesUs = mentions.some((m) => m.href === intake.urls.actor);
58058
58700
  const replyToOurs = !!note.inReplyTo && String(note.inReplyTo).startsWith(intake.urls.notes);
58059
- if (!followed || replyToOurs || direct || namesUs) {
58701
+ const quotesUs = !!quote && quote.startsWith(intake.urls.notes);
58702
+ if (quotesUs) {
58703
+ intake.store.addNotification({ type: "quote", actor: author, noteId: note.id });
58704
+ } else if (!followed || replyToOurs || direct || namesUs) {
58060
58705
  intake.store.addNotification({ type: "mention", actor: author, noteId: note.id });
58061
58706
  }
58062
58707
  if (note.inReplyTo && String(note.inReplyTo).startsWith(intake.urls.notes)) {
@@ -58064,6 +58709,39 @@ async function ingestNote(intake, objectId, actor, { via, inline = null } = {})
58064
58709
  }
58065
58710
  intake.log(`${kind}: ${note.id}${via ? ` (boosted by ${via})` : ""}`);
58066
58711
  }
58712
+ async function holdQuoted(intake, quoteId) {
58713
+ if (intake.store.getStatuses().some((s) => s.noteId === quoteId)) return;
58714
+ if (intake.store.isBlocked(quoteId)) return;
58715
+ const q = await intake.fetchAP(quoteId).catch(() => null);
58716
+ if (!q || q.id !== quoteId || !isContentType(q.type)) {
58717
+ intake.log(`quoted post ${quoteId} could not be read \u2014 the quote shows without it`);
58718
+ return;
58719
+ }
58720
+ const by = authorOf(q, null);
58721
+ if (!by || intake.store.isBlocked(by)) return;
58722
+ const { attachmentsOf: attachmentsOf3, titledContent: titledContent2 } = await Promise.resolve().then(() => (init_wire(), wire_exports));
58723
+ const attachments = attachmentsOf3(q);
58724
+ const emojis = emojisOf(q);
58725
+ const poll = pollOf(q);
58726
+ const quotePolicy2 = quotePolicyOf(q, by);
58727
+ const mentions = [].concat(q.tag || []).filter((t) => t?.type === "Mention" && t.href && t.name).slice(0, MAX_MENTIONS).map((t) => ({ href: httpOnly(String(t.href).slice(0, MAX_URL_CHARS)), name: String(t.name).slice(0, 256) })).filter((m) => m.href);
58728
+ intake.store.addStatus({
58729
+ noteId: q.id,
58730
+ actor: by,
58731
+ content: titledContent2(q),
58732
+ published: q.published,
58733
+ inReplyTo: q.inReplyTo,
58734
+ kind: "remote",
58735
+ ...q.summary ? { spoiler: String(q.summary).replace(/<[^>]*>/g, "") } : {},
58736
+ ...q.sensitive === true ? { sensitive: true } : {},
58737
+ ...poll ? { poll } : {},
58738
+ ...emojis.length ? { emojis } : {},
58739
+ ...mentions.length ? { mentions } : {},
58740
+ ...attachments.length ? { attachments } : {},
58741
+ ...quotePolicy2 ? { quotePolicy: quotePolicy2 } : {}
58742
+ });
58743
+ intake.log(`quoted post kept: ${q.id}`);
58744
+ }
58067
58745
  async function forget(intake, s, { collect = null } = {}) {
58068
58746
  if (s.announceActivity) {
58069
58747
  await intake.retract(s.noteId, { collect }).catch((e) => intake.log(`retract: ${e.message}`));
@@ -63075,6 +63753,34 @@ var activitystreams_default2 = `# activitystreams.ttl \u2014 shapes for the Acti
63075
63753
  sh:minCount 1 ;
63076
63754
  sh:maxCount 1 ;
63077
63755
  ] .
63756
+
63757
+ <#Update>
63758
+ a sh:NodeShape ;
63759
+ sh:targetClass as:Update ;
63760
+ sh:name "Update" ;
63761
+ sh:description "A change to the object it names, carrying the parts that are now different." ;
63762
+ sh:property [
63763
+ sh:path as:actor ;
63764
+ sh:name "actor" ;
63765
+ sh:description "The one that performed the activity." ;
63766
+ sh:nodeKind sh:BlankNodeOrIRI ;
63767
+ sh:minCount 1 ;
63768
+ sh:maxCount 1 ;
63769
+ ] ;
63770
+ sh:property [
63771
+ sh:path as:object ;
63772
+ sh:name "object" ;
63773
+ sh:description "The thing the activity is about." ;
63774
+ sh:minCount 1 ;
63775
+ sh:maxCount 1 ;
63776
+ ] ;
63777
+ sh:property [
63778
+ sh:path ( as:object as:closed ) ;
63779
+ sh:name "closed" ;
63780
+ sh:description "The time the object stopped taking anything more." ;
63781
+ sh:datatype xsd:dateTime ;
63782
+ sh:maxCount 1 ;
63783
+ ] .
63078
63784
  `;
63079
63785
 
63080
63786
  // web/app/shims/shapes-text.mjs
@@ -63103,6 +63809,18 @@ function asTerm(q) {
63103
63809
  };
63104
63810
  return rdf3.quad(term3(q.subject), term3(q.predicate), term3(q.object));
63105
63811
  }
63812
+ var SH_NAME = "http://www.w3.org/ns/shacl#name";
63813
+ function pathName(r) {
63814
+ const direct = r.path?.value ?? null;
63815
+ if (direct && /[#/]/u.test(direct)) return direct;
63816
+ const shape = r.sourceShape;
63817
+ if (shape) {
63818
+ for (const q of shacl().$shapes?.dataset ?? []) {
63819
+ if (q.subject.equals(shape) && q.predicate.value === SH_NAME) return q.object.value;
63820
+ }
63821
+ }
63822
+ return direct;
63823
+ }
63106
63824
  async function checkShapes(quads) {
63107
63825
  if (!Array.isArray(quads) || quads.length === 0) return null;
63108
63826
  let report;
@@ -63120,7 +63838,12 @@ async function checkShapes(quads) {
63120
63838
  conforms: false,
63121
63839
  results: report.results.slice(0, 10).map((r) => ({
63122
63840
  focus: r.focusNode?.value ?? null,
63123
- path: r.path?.value ?? null,
63841
+ // A SEQUENCE path — `( as:object as:closed )` — is an RDF list, so its
63842
+ // node is blank and `.value` is a generated label like "n3-13". Reported
63843
+ // as that, the record named nothing a reader could act on. The shape's
63844
+ // own `sh:name` is what it is called, so that is used when the path
63845
+ // cannot name itself.
63846
+ path: pathName(r),
63124
63847
  message: r.message?.[0]?.value ?? String(r.sourceConstraintComponent?.value ?? "does not fit the shape"),
63125
63848
  shape: r.sourceShape?.value ?? null
63126
63849
  }))
@@ -63387,6 +64110,7 @@ var Intake = class {
63387
64110
  }
63388
64111
  this.lastDrain = (/* @__PURE__ */ new Date()).toISOString();
63389
64112
  this.lastDrainAtMs = Date.now();
64113
+ if (this.afterDrain) setTimeout(() => this.afterDrain(), 0);
63390
64114
  this._pruneAttempts();
63391
64115
  let all;
63392
64116
  try {
@@ -63538,8 +64262,11 @@ var Intake = class {
63538
64262
  return this.onCreate(activity, actor, { trusted });
63539
64263
  case "Accept":
63540
64264
  return this.onAccept(activity, actor, { trusted });
64265
+ case "QuoteRequest":
64266
+ return this.onQuoteRequest(activity, actor, { trusted });
63541
64267
  case "Like":
63542
- case "Announce": {
64268
+ case "Announce":
64269
+ case "EmojiReact": {
63543
64270
  const wrapped = activity.object;
63544
64271
  if (activity.type === "Announce" && wrapped && typeof wrapped === "object" && wrapped.type === "Delete") {
63545
64272
  return this.onAnnouncedDelete(actor, wrapped);
@@ -63547,6 +64274,27 @@ var Intake = class {
63547
64274
  const inner = wrapped && typeof wrapped === "object" && (wrapped.type === "Create" || wrapped.type === "Update") ? wrapped.object : wrapped;
63548
64275
  const objectId = typeof inner === "string" ? inner : inner?.id;
63549
64276
  this.log(`${activity.type} from ${actor} on ${objectId}`);
64277
+ const reaction = activity.type !== "Announce" ? reactionOf(activity) : null;
64278
+ if (reaction) {
64279
+ if (!objectId || !objectId.startsWith(this.urls.notes)) return;
64280
+ this.store.addNotification({
64281
+ type: "reaction",
64282
+ actor,
64283
+ noteId: objectId,
64284
+ emoji: reaction.emoji,
64285
+ ...reaction.url ? { url: reaction.url } : {},
64286
+ ...this.known(actor) ? {} : { unverified: true }
64287
+ });
64288
+ if (reaction.url) {
64289
+ const s = this.store.getStatuses().find((x) => x.noteId === objectId);
64290
+ const shortcode = reaction.emoji.replace(/^:|:$/g, "");
64291
+ if (s && !(s.emojis || []).some((e) => e.shortcode === shortcode) && (s.emojis || []).length < MAX_EMOJIS) {
64292
+ this.store.updateStatus(objectId, { emojis: [...s.emojis || [], { shortcode, url: reaction.url }] });
64293
+ }
64294
+ }
64295
+ return;
64296
+ }
64297
+ if (activity.type === "EmojiReact") return;
63550
64298
  if (objectId && objectId.startsWith(this.urls.notes)) {
63551
64299
  this.store.addNotification({
63552
64300
  type: activity.type === "Like" ? "favourite" : "reblog",
@@ -63572,6 +64320,9 @@ var Intake = class {
63572
64320
  return this.onAddRemove(activity, actor);
63573
64321
  case "Block":
63574
64322
  return this.onBlock(activity, actor, { trusted });
64323
+ case "Flag":
64324
+ if (this.onReport) return this.onReport(activity, actor, { trusted });
64325
+ return;
63575
64326
  default:
63576
64327
  this.log(`ignored ${activity.type} from ${actor}`);
63577
64328
  }
@@ -63677,6 +64428,12 @@ var Intake = class {
63677
64428
  onAnnounce(...a) {
63678
64429
  return onAnnounce(this, ...a);
63679
64430
  }
64431
+ onQuoteRequest(...a) {
64432
+ return onQuoteRequest(this, ...a);
64433
+ }
64434
+ quoteStateOf(...a) {
64435
+ return quoteStateOf(this, ...a);
64436
+ }
63680
64437
  onDelete(...a) {
63681
64438
  return onDelete(this, ...a);
63682
64439
  }
@@ -64148,6 +64905,9 @@ async function pinStatus(agent2, s, pinned) {
64148
64905
  if (s.actor !== agent2.publisher.urls.actor) throw new Error("not your status");
64149
64906
  const updated = agent2.store.updateStatus(s.noteId, { pinned: !!pinned });
64150
64907
  await agent2.publisher.publishFeatured().catch((e) => agent2.log?.(`featured: ${e.message}`));
64908
+ if (agent2.publisher.publishProfilePage) {
64909
+ await agent2.publisher.publishProfilePage().catch((e) => agent2.log?.(`profile page: ${e.message}`));
64910
+ }
64151
64911
  agent2.publisher.publishProfile?.().catch(() => {
64152
64912
  });
64153
64913
  return updated || s;
@@ -64157,6 +64917,7 @@ async function pinStatus(agent2, s, pinned) {
64157
64917
  init_wire();
64158
64918
  var MAX_BODY = 512 * 1024;
64159
64919
  var MAX_INBOX_PAGE = 500;
64920
+ var MAX_OUTBOX_PAGE = 50;
64160
64921
  var ACTIVITY_TYPES = /* @__PURE__ */ new Set([
64161
64922
  "Create",
64162
64923
  "Update",
@@ -64173,7 +64934,7 @@ var ACTIVITY_TYPES = /* @__PURE__ */ new Set([
64173
64934
  "Move"
64174
64935
  ]);
64175
64936
  var arr = (v) => v === void 0 || v === null ? [] : Array.isArray(v) ? v : [v];
64176
- var idOf = (v) => typeof v === "string" ? v : v?.id || null;
64937
+ var idOf2 = (v) => typeof v === "string" ? v : v?.id || null;
64177
64938
  function readBody(req) {
64178
64939
  return new Promise((resolve2, reject) => {
64179
64940
  let size = 0;
@@ -64192,10 +64953,12 @@ function readBody(req) {
64192
64953
  });
64193
64954
  }
64194
64955
  var C2S = class {
64195
- constructor({ agent: agent2, log: log2 = console.log, auth }) {
64956
+ constructor({ agent: agent2, log: log2 = console.log, auth, scheme = null, mount = "" }) {
64196
64957
  this.agent = agent2;
64197
64958
  this.log = log2;
64198
64959
  this.auth = auth;
64960
+ this.scheme = scheme;
64961
+ this.mount = mount;
64199
64962
  }
64200
64963
  get store() {
64201
64964
  return this.agent.store;
@@ -64282,6 +65045,79 @@ var C2S = class {
64282
65045
  orderedItems: kept.map((k) => k.activity)
64283
65046
  });
64284
65047
  }
65048
+ // The actor a client-to-server client on this machine reads. The same
65049
+ // document the pod holds, but for the fields naming where a write goes —
65050
+ // the outbox and the two OAuth endpoints — and for `id`, which names this
65051
+ // address so the client files its credential here and comes back. The pod's
65052
+ // id stays on as an alias; the two are one identity.
65053
+ // What this agent calls itself, to the client that just asked. The Host
65054
+ // passed the Authorities firewall before any route ran, so whichever alias
65055
+ // the client used is one this agent answers on. The scheme is read off the
65056
+ // connection unless the caller named one: only the Server passes a scheme,
65057
+ // and standalone this listener is its own TLS.
65058
+ localOrigin(req) {
65059
+ const host = req.headers.host;
65060
+ if (!host) return null;
65061
+ const scheme = this.scheme || (req.socket?.encrypted || req.headers["x-forwarded-proto"] === "https" ? "https" : "http");
65062
+ return `${scheme}://${host}${this.mount}/`;
65063
+ }
65064
+ /**
65065
+ * The owner's own outbox, from what this agent recorded. The pod holds the
65066
+ * published copy and it stays the canonical one; this is served only where
65067
+ * that copy cannot be read by the client asking.
65068
+ */
65069
+ sendLocalOutbox(res, url, origin) {
65070
+ const id = `${origin}ap/outbox`;
65071
+ const outbox = this.store.read("outbox.json", []);
65072
+ const page2 = url?.searchParams?.get("page") || null;
65073
+ const ct = { "content-type": "application/activity+json; charset=utf-8" };
65074
+ if (!page2) {
65075
+ return this.send(res, 200, {
65076
+ "@context": AS_CTX,
65077
+ id,
65078
+ type: "OrderedCollection",
65079
+ totalItems: outbox.length,
65080
+ ...outbox.length ? { first: `${id}?page=1` } : { orderedItems: [] }
65081
+ }, ct);
65082
+ }
65083
+ const n = Number(page2);
65084
+ if (!Number.isInteger(n) || n < 1) {
65085
+ return this.send(res, 400, { error: "page is a whole number from 1" });
65086
+ }
65087
+ const start = (n - 1) * MAX_OUTBOX_PAGE;
65088
+ const items = outbox.slice(start, start + MAX_OUTBOX_PAGE);
65089
+ return this.send(res, 200, {
65090
+ "@context": AS_CTX,
65091
+ id: `${id}?page=${n}`,
65092
+ type: "OrderedCollectionPage",
65093
+ partOf: id,
65094
+ ...start + items.length < outbox.length ? { next: `${id}?page=${n + 1}` } : {},
65095
+ // A post is recorded by its object id and published as the Create beside
65096
+ // it — the same mapping the pod's copy uses, from the same helper.
65097
+ orderedItems: items.map(outboxWireItem)
65098
+ }, ct);
65099
+ }
65100
+ sendLocalActor(req, res, origin) {
65101
+ const pub = this.agent.publisher;
65102
+ const cfg = pub.config || {};
65103
+ const gw = cfg.gateway;
65104
+ const gwActive = gw && gw.url && gw.mode && gw.mode !== "off";
65105
+ const doc = pub.actorDocFor({
65106
+ inbox: gwActive ? gw.url : cfg.inboxUrl || null,
65107
+ clientOrigin: origin
65108
+ });
65109
+ const canonical2 = doc.id;
65110
+ doc.id = `${origin}ap/actor`;
65111
+ doc.alsoKnownAs = [.../* @__PURE__ */ new Set([...doc.alsoKnownAs || [], canonical2])];
65112
+ const body = JSON.stringify(doc);
65113
+ res.writeHead(200, {
65114
+ "content-type": "application/activity+json; charset=utf-8",
65115
+ "cache-control": "no-store",
65116
+ "content-length": Buffer.byteLength(body)
65117
+ });
65118
+ res.end(req.method === "HEAD" ? void 0 : body);
65119
+ return true;
65120
+ }
64285
65121
  async handle(req, res, pathname, url) {
64286
65122
  if (pathname !== "/ap/outbox" && pathname !== "/ap/actor" && pathname !== "/ap/inbox") return false;
64287
65123
  if (req.method === "OPTIONS") {
@@ -64301,6 +65137,9 @@ var C2S = class {
64301
65137
  return this.sendInbox(res, url);
64302
65138
  }
64303
65139
  if (req.method === "GET" || req.method === "HEAD") {
65140
+ const local = this.agent.publisher?.clientOrigin ? null : this.localOrigin(req);
65141
+ if (local && pathname === "/ap/actor") return this.sendLocalActor(req, res, local);
65142
+ if (local && pathname === "/ap/outbox") return this.sendLocalOutbox(res, url, local);
64304
65143
  const target = pathname === "/ap/actor" ? this.urls.actor : this.urls.outbox;
64305
65144
  res.writeHead(303, { location: target, "cache-control": "no-store" });
64306
65145
  res.end();
@@ -64341,8 +65180,8 @@ var C2S = class {
64341
65180
  // every client means by a post with no audience chosen, and what a client
64342
65181
  // that never addresses (dokieli's annotations) needs.
64343
65182
  visibilityOf(activity, object) {
64344
- const to = arr(activity.to ?? object?.to).map(idOf);
64345
- const cc = arr(activity.cc ?? object?.cc).map(idOf);
65183
+ const to = arr(activity.to ?? object?.to).map(idOf2);
65184
+ const cc = arr(activity.cc ?? object?.cc).map(idOf2);
64346
65185
  if (!to.length && !cc.length) return "public";
64347
65186
  if (to.includes(PUBLIC)) return "public";
64348
65187
  if (cc.includes(PUBLIC)) return "unlisted";
@@ -64368,13 +65207,13 @@ var C2S = class {
64368
65207
  // in to/cc are listed and delivered to; the ones in bto/bcc are delivered
64369
65208
  // to and never listed (§6).
64370
65209
  addressedActors(activity, object) {
64371
- const pick = (...fields) => [...new Set(fields.flatMap((f) => arr(activity[f] ?? object?.[f]).map(idOf)))].filter((a) => typeof a === "string" && /^https?:\/\//u.test(a) && a !== PUBLIC && a !== this.urls.followers && a !== this.urls.actor);
65210
+ const pick = (...fields) => [...new Set(fields.flatMap((f) => arr(activity[f] ?? object?.[f]).map(idOf2)))].filter((a) => typeof a === "string" && /^https?:\/\//u.test(a) && a !== PUBLIC && a !== this.urls.followers && a !== this.urls.actor);
64372
65211
  return { also: pick("to", "cc"), deliverTo: pick("bto", "bcc") };
64373
65212
  }
64374
65213
  async _dispatch(activity, { slug, raw, reply }) {
64375
65214
  const agent2 = this.agent;
64376
65215
  const object = typeof activity.object === "object" && activity.object !== null ? activity.object : null;
64377
- const objectId = idOf(activity.object);
65216
+ const objectId = idOf2(activity.object);
64378
65217
  switch (activity.type) {
64379
65218
  case "Create": {
64380
65219
  const makes = object?.type || "Note";
@@ -64397,7 +65236,7 @@ var C2S = class {
64397
65236
  options: titles,
64398
65237
  multiple: !one.length && many.length > 0,
64399
65238
  expiresAt: object.endTime || null,
64400
- inReplyTo: idOf(object.inReplyTo) || void 0,
65239
+ inReplyTo: idOf2(object.inReplyTo) || void 0,
64401
65240
  visibility,
64402
65241
  spoilerText: object.summary || null,
64403
65242
  sensitive: object.sensitive === true
@@ -64417,7 +65256,7 @@ var C2S = class {
64417
65256
  ...a?.name ? { description: a.name } : {}
64418
65257
  })).filter((a) => a.url);
64419
65258
  const note = await agent2.publisher.publishNote(text, {
64420
- inReplyTo: idOf(object.inReplyTo) || void 0,
65259
+ inReplyTo: idOf2(object.inReplyTo) || void 0,
64421
65260
  attachments,
64422
65261
  visibility,
64423
65262
  spoilerText: object.summary || null,
@@ -64510,28 +65349,28 @@ var C2S = class {
64510
65349
  }
64511
65350
  case "Undo": {
64512
65351
  const inner = object;
64513
- const innerId = idOf(activity.object);
65352
+ const innerId = idOf2(activity.object);
64514
65353
  if (inner?.type === "Block") {
64515
- const target = idOf(inner.object);
65354
+ const target = idOf2(inner.object);
64516
65355
  if (!target) return reply(400, { error: "unblock whom?" });
64517
65356
  await unblockActor(agent2, target);
64518
65357
  return reply(200, { ok: true, object: target });
64519
65358
  }
64520
65359
  const statuses = this.store.getStatuses();
64521
65360
  let s = innerId ? statuses.find((x) => x.likeActivity?.id === innerId) : null;
64522
- if (!s && inner?.type === "Like") s = this.byIri(idOf(inner.object));
65361
+ if (!s && inner?.type === "Like") s = this.byIri(idOf2(inner.object));
64523
65362
  if (s?.favourited) {
64524
65363
  const updated = await unfavourite(agent2, s);
64525
65364
  return reply(200, { ok: true, object: updated.noteId });
64526
65365
  }
64527
65366
  s = innerId ? statuses.find((x) => x.announceActivity?.id === innerId) : null;
64528
- if (!s && inner?.type === "Announce") s = this.byIri(idOf(inner.object));
65367
+ if (!s && inner?.type === "Announce") s = this.byIri(idOf2(inner.object));
64529
65368
  if (s?.reblogged) {
64530
65369
  const updated = await unreblog(agent2, s);
64531
65370
  return reply(200, { ok: true, object: updated.noteId });
64532
65371
  }
64533
65372
  const following = this.store.getContacts().following;
64534
- const rec = following.find((f) => f.followActivity?.id === innerId) || (inner?.type === "Follow" ? following.find((f) => f.actor === idOf(inner.object)) : null);
65373
+ const rec = following.find((f) => f.followActivity?.id === innerId) || (inner?.type === "Follow" ? following.find((f) => f.actor === idOf2(inner.object)) : null);
64535
65374
  if (rec) {
64536
65375
  await unfollowActor(agent2, rec.actor);
64537
65376
  return reply(200, { ok: true, object: rec.actor });
@@ -64545,7 +65384,7 @@ var C2S = class {
64545
65384
  }
64546
65385
  case "Add":
64547
65386
  case "Remove": {
64548
- if (idOf(activity.target) !== this.urls.featured) {
65387
+ if (idOf2(activity.target) !== this.urls.featured) {
64549
65388
  return reply(422, { error: "the featured collection is the one Add/Remove edits here" });
64550
65389
  }
64551
65390
  const s = this.byIri(objectId);
@@ -64555,7 +65394,7 @@ var C2S = class {
64555
65394
  }
64556
65395
  case "Accept":
64557
65396
  case "Reject": {
64558
- const requester = object?.actor ? idOf(object.actor) : objectId;
65397
+ const requester = object?.actor ? idOf2(object.actor) : objectId;
64559
65398
  if (!requester) return reply(400, { error: "whose request? object must name the Follow or its actor" });
64560
65399
  const r = activity.type === "Accept" ? await admitRequest(agent2, requester).catch((e) => ({ error: e.message })) : await refuseRequest(agent2, requester).catch((e) => ({ error: e.message }));
64561
65400
  if (r.error) return reply(404, { error: r.error });
@@ -64576,11 +65415,21 @@ var RENEW_MS = 9e4;
64576
65415
  var JITTER = () => 0.85 + Math.random() * 0.3;
64577
65416
  var UNREADABLE = /* @__PURE__ */ Symbol("lease-unreadable");
64578
65417
  var Lease = class {
64579
- constructor({ url, fetchImpl, log: log2 = console.log }) {
65418
+ // `id` names the HOLDER, and acquire() lets a holder reclaim its own lease
65419
+ // without waiting for the TTL — so whether it is stable decides whether a
65420
+ // restart is the same agent coming back or a second one arriving. A process
65421
+ // that is gone for good wants a new one each time; a browser does not, since
65422
+ // its agent lives in a service worker the browser is free to kill and restart
65423
+ // whenever it likes. Left to the default, every one of those restarts looked
65424
+ // like another device and asked the owner to take over their own account —
65425
+ // which is what switching between the two clients did, because that is a
65426
+ // navigation and a navigation can take the worker with it. The browser build
65427
+ // passes one it keeps.
65428
+ constructor({ url, fetchImpl, log: log2 = console.log, id = null }) {
64580
65429
  this.url = url;
64581
65430
  this.fetchImpl = fetchImpl;
64582
65431
  this.log = log2;
64583
- this.id = node_crypto_default.randomUUID();
65432
+ this.id = id || node_crypto_default.randomUUID();
64584
65433
  this.stopped = false;
64585
65434
  this.timer = null;
64586
65435
  this.heldUntil = 0;
@@ -64895,6 +65744,7 @@ function readBody2(req) {
64895
65744
  const ct = String(req.headers["content-type"] || "");
64896
65745
  try {
64897
65746
  if (ct.includes("application/json")) return resolve2(data ? JSON.parse(data) : {});
65747
+ if (ct.includes("multipart/form-data")) return resolve2(textFields(data, ct));
64898
65748
  const form = new URLSearchParams(data);
64899
65749
  const out = {};
64900
65750
  for (const key of new Set(form.keys())) {
@@ -64908,6 +65758,76 @@ function readBody2(req) {
64908
65758
  req.on("error", reject);
64909
65759
  });
64910
65760
  }
65761
+ function textFields(data, contentType) {
65762
+ const m = /boundary=(?:"([^"]+)"|([^;]+))/.exec(contentType);
65763
+ if (!m) return {};
65764
+ const out = {};
65765
+ for (const part of data.split("--" + (m[1] || m[2]).trim())) {
65766
+ const sep = part.indexOf("\r\n\r\n");
65767
+ if (sep < 0) continue;
65768
+ const head = part.slice(0, sep);
65769
+ const name = /name="([^"]*)"/.exec(head)?.[1];
65770
+ if (!name || /filename="/.test(head)) continue;
65771
+ const value = part.slice(sep + 4).replace(/\r\n$/, "");
65772
+ if (name.endsWith("[]")) (out[name] ||= []).push(value);
65773
+ else out[name] = value;
65774
+ }
65775
+ return out;
65776
+ }
65777
+ function readMultipart(req, limit = 12e6) {
65778
+ return new Promise((resolve2, reject) => {
65779
+ const chunks = [];
65780
+ let n = 0;
65781
+ req.on("data", (c) => {
65782
+ n += c.length;
65783
+ if (n > limit) {
65784
+ reject(new Error("upload too large"));
65785
+ req.destroy();
65786
+ return;
65787
+ }
65788
+ chunks.push(c);
65789
+ });
65790
+ req.on("error", reject);
65791
+ req.on("end", () => {
65792
+ try {
65793
+ const m = /boundary=(?:"([^"]+)"|([^;]+))/.exec(String(req.headers["content-type"] || ""));
65794
+ if (!m) return resolve2({ fields: {}, file: null });
65795
+ const buf = Buffer.concat(chunks);
65796
+ const boundary = Buffer.from("--" + (m[1] || m[2]).trim());
65797
+ const fields = {};
65798
+ const files = {};
65799
+ let file = null;
65800
+ let i = buf.indexOf(boundary);
65801
+ while (i >= 0) {
65802
+ const start = i + boundary.length;
65803
+ if (buf.slice(start, start + 2).toString() === "--") break;
65804
+ const next = buf.indexOf(boundary, start);
65805
+ if (next < 0) break;
65806
+ const part = buf.slice(start + 2, next - 2);
65807
+ const sep = part.indexOf("\r\n\r\n");
65808
+ if (sep >= 0) {
65809
+ const head = part.slice(0, sep).toString();
65810
+ const body = part.slice(sep + 4);
65811
+ const name = /name="([^"]*)"/.exec(head)?.[1];
65812
+ const filename = /filename="([^"]*)"/.exec(head)?.[1];
65813
+ if (filename !== void 0) {
65814
+ file = {
65815
+ filename,
65816
+ contentType: /content-type:\s*([^\r\n]+)/i.exec(head)?.[1]?.trim() || "application/octet-stream",
65817
+ data: body
65818
+ };
65819
+ if (name) files[name] = file;
65820
+ } else if (name) fields[name] = body.toString();
65821
+ }
65822
+ i = next;
65823
+ }
65824
+ resolve2({ fields, file, files });
65825
+ } catch (e) {
65826
+ reject(e);
65827
+ }
65828
+ });
65829
+ });
65830
+ }
64911
65831
 
64912
65832
  // lib/client/masto/oauth.mjs
64913
65833
  var TOKEN_TTL_MS = 90 * 24 * 60 * 60 * 1e3;
@@ -64935,6 +65855,39 @@ function checkPassword(rec, password) {
64935
65855
  }
64936
65856
  var escapeHtml = (s) => String(s).replace(/[&<>"']/g, (c) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" })[c]);
64937
65857
  var parseRedirects = (v) => (Array.isArray(v) ? v : String(v || "").split(/\s+/)).map((s) => s.trim()).filter(Boolean);
65858
+ function sendPodSigninPage(res, client, webId, mount = "") {
65859
+ let asking = "";
65860
+ if (client && (client.name || client.redirect)) {
65861
+ let where = "";
65862
+ try {
65863
+ where = client.redirect ? new URL(client.redirect).host : "";
65864
+ } catch {
65865
+ }
65866
+ const who = client.name ? escapeHtml(client.name) : where ? escapeHtml(where) : "A client";
65867
+ asking = `<p><strong>${who}</strong> is asking to use your account${where ? `, and will be sent back to <code>${escapeHtml(where)}</code>` : ""}.</p>`;
65868
+ }
65869
+ res.writeHead(200, { "content-type": "text/html; charset=utf-8", "cache-control": "no-cache" });
65870
+ res.end(`<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
65871
+ <title>Sign in with your pod</title>
65872
+ <style>:root{color-scheme:light dark;--heading:#1a4f8a;--btn:#3d6b35;--line:#9a9a9a}
65873
+ body{font:20px Arial,Helvetica,sans-serif;max-width:28rem;margin:12vh auto;padding:0 1rem}
65874
+ h1{color:var(--heading);font-size:1.5rem}
65875
+ code{word-break:break-all;background:rgba(120,120,120,.12);padding:.05em .35em;border-radius:4px}
65876
+ button{font:inherit;padding:.6rem 1.1rem;background:var(--btn);color:#fff;border:none;border-radius:9px;cursor:pointer}
65877
+ button[hidden]{display:none}
65878
+ #signin-status{min-height:1.5em;padding:.6rem .8rem;border:1px solid var(--line);border-radius:8px;margin-top:1rem}
65879
+ @media (prefers-color-scheme:dark){:root{--heading:#7fb3e8;--btn:#5a8a4f}}</style></head><body>
65880
+ <main>
65881
+ <h1>Sign in with your pod</h1>
65882
+ ${asking}
65883
+ <p>This account belongs to <a id="webid" href="${escapeHtml(webId)}">${escapeHtml(webId)}</a>. Sign in at that pod to allow it.</p>
65884
+ <p><button type="button" id="signin" hidden>Sign in with your pod</button></p>
65885
+ <p id="signin-status" role="status" aria-live="polite"></p>
65886
+ </main>
65887
+ <script type="module" src="${escapeHtml(mount)}/oauth/session/signin.mjs"><\/script>
65888
+ </body></html>`);
65889
+ return true;
65890
+ }
64938
65891
  function sendLoginForm(res, params, error2 = "", client = null, status2 = null, headers = {}) {
64939
65892
  const hidden = [...params.entries()].filter(([k]) => k !== "password").map(([k, v]) => `<input type="hidden" name="${escapeHtml(k)}" value="${escapeHtml(v)}">`).join("\n");
64940
65893
  let asking = "<p>Enter the agent password to authorize this client.</p>";
@@ -65203,6 +66156,16 @@ async function handle(api, ctx) {
65203
66156
  params = new URLSearchParams(body);
65204
66157
  }
65205
66158
  const redirect = params.get("redirect_uri") || "";
66159
+ let proved = false;
66160
+ if (req.method === "POST" && req.headers.authorization && req.headers.dpop && api.podAuth) {
66161
+ const proof = await api.podAuth(req, pathname);
66162
+ if (!proof.ok) return send(proof.status || 401, { error: proof.error });
66163
+ proved = true;
66164
+ }
66165
+ const ownerWebId = api.ownerWebId?.() || null;
66166
+ if (req.method === "GET" && !params.get("client_id") && params.get("code") && params.get("state") && ownerWebId) {
66167
+ return sendPodSigninPage(res, null, ownerWebId, api.mount || "");
66168
+ }
65206
66169
  const app = api.findApp(params.get("client_id") || "");
65207
66170
  const doc = app ? null : await api.resolveClientDocument(params.get("client_id") || "");
65208
66171
  const external = !!app || !!doc;
@@ -65210,13 +66173,14 @@ async function handle(api, ctx) {
65210
66173
  api.log(`authorize refused: cross-site navigation to the mint from ${req.headers.referer || "nowhere"}`);
65211
66174
  return send(403, { error: "a cross-site navigation may not authorize a client" });
65212
66175
  }
65213
- if (external && !api.store.getConfig()?.uiPassword && !api.redirectAllowed(redirect)) {
66176
+ const client = { name: app?.name || doc?.name || null, redirect, scope: params.get("scope") || "read" };
66177
+ if (external && !proved && !api.store.getConfig()?.uiPassword && !api.redirectAllowed(redirect)) {
66178
+ if (req.method === "GET" && ownerWebId) return sendPodSigninPage(res, client, ownerWebId, api.mount || "");
65214
66179
  api.log(`authorize refused: no UI password, and "${redirect}" is not an address of this agent`);
65215
66180
  return send(403, {
65216
66181
  error: "this client asks to be sent somewhere other than this agent, and no password is set to approve that with. Run `fedipod passwd` and try again."
65217
66182
  });
65218
66183
  }
65219
- const client = { name: app?.name || doc?.name || null, redirect, scope: params.get("scope") || "read" };
65220
66184
  if (app) {
65221
66185
  if (!app.redirectUris.includes(redirect)) {
65222
66186
  api.log(`authorize refused: redirect_uri "${redirect}" not registered for ${app.clientId}`);
@@ -65235,7 +66199,7 @@ async function handle(api, ctx) {
65235
66199
  api.log(`authorize refused: redirect_uri "${redirect}" is not this agent`);
65236
66200
  return send(400, { error: "redirect_uri must be an address of this agent" });
65237
66201
  }
65238
- if (req.method === "POST") {
66202
+ if (req.method === "POST" && !proved) {
65239
66203
  if (api.rateLimited()) {
65240
66204
  api.log("authorize rate limited");
65241
66205
  return sendLoginForm(
@@ -65250,12 +66214,13 @@ async function handle(api, ctx) {
65250
66214
  if (!pw || !checkPassword(pw, body.password || "")) {
65251
66215
  return sendLoginForm(res, params, "wrong password \u2014 try again", client);
65252
66216
  }
65253
- } else if (pw) {
66217
+ } else if (pw && !proved) {
65254
66218
  return sendLoginForm(res, params, "", client);
65255
- } else if (api.allowed && !api.allowed.isLocalRequest(req)) {
66219
+ } else if (!proved && api.allowed && !api.allowed.isLocalRequest(req) && !api.throughDoor?.(req)) {
66220
+ if (req.method === "GET" && ownerWebId) return sendPodSigninPage(res, client, ownerWebId, api.mount || "");
65256
66221
  api.log(`authorize refused: no UI password, and "${req.headers.host}" is not this machine`);
65257
66222
  return send(403, {
65258
- error: "this agent answers on an address outside this machine and has no password set \u2014 " + (api.embedded ? `POST {"password":"\u2026"} to the owner door's /config with its door secret before logging in` : "run `fedipod passwd` before logging in over that address")
66223
+ error: api.embedded ? "Open your account's management page first, then sign in from there." : "Signing in from another machine needs a password. On the machine that runs your account, run: fedipod passwd"
65259
66224
  });
65260
66225
  }
65261
66226
  const code = external ? api.mintCode({
@@ -65269,6 +66234,7 @@ async function handle(api, ctx) {
65269
66234
  const target = new URL(redirect);
65270
66235
  target.searchParams.set("code", code);
65271
66236
  if (params.get("state")) target.searchParams.set("state", params.get("state"));
66237
+ if (proved) return send(200, { redirect: target.href });
65272
66238
  res.writeHead(302, { location: target.href });
65273
66239
  res.end();
65274
66240
  return true;
@@ -65583,6 +66549,7 @@ var BskyFeed = class {
65583
66549
 
65584
66550
  // lib/client/masto/render.mjs
65585
66551
  var TRANSPARENT_PNG = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==";
66552
+ var DEFAULT_AVATAR = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABd0lEQVR42u3ZoW4CQRDG8Xk6NBLbVCJ5gBpMTQ2iBlFR29RXNsFhz1JHXV9hydfkEkoobW5n2F34i0kIHMfN73ZvdwYbTabpmsMAAAAAAAAAAAAAAAAAAACiY3wzS/ePz+n1bZW6zTZ9fH59h17rPX2mYy4OQEktnl5+JP1b6Bgdey6IcIDb2Ty9r7s/Ez8MfUffbRpACfznrp8aDdEIFjnsh9z5YyMhcjqEAWge5ybfh87VFIDuWM7QPzYVokZBCICWM6/k+9A5mwHQmu4NoHM2A+A5/PenQTMA3sn3AQBTgIcgyyAbIbbCFEOUwzREaInRFKUtDgAAFQLcPSxDCqH9Z4V+o0oAXVhU4ofhiWCtJe+NYKV3e6V3idkAHvv9nDqhKIBnxVeqUrRaav5SvQKrqetTols0GGDdbaoB0LWcFUBP31qS72PoimCtD//caWC1tL1Ltc2ttbXfe08wCKC25HP+OgMAAAAAAAAAAAAAAAAArhNgB1PE/x/JOiuNAAAAAElFTkSuQmCC";
65586
66553
  var selfIcon = (api, self2, cached) => (self2 ? api.store.getConfig()?.icon : null) || cached.icon;
65587
66554
  function selfAccount(api) {
65588
66555
  return api.account(api.urls.actor, { selfAcct: publicHandle(api.store.getConfig()) });
@@ -65616,12 +66583,12 @@ function account(api, actorUrl, { selfAcct } = {}) {
65616
66583
  bot: false,
65617
66584
  discoverable: true,
65618
66585
  group: self2 ? api.store.getConfig()?.kind === "group" : cached.type === "Group",
65619
- created_at: "2026-01-01T00:00:00.000Z",
66586
+ created_at: self2 && api.store.getConfig()?.createdAt || "2026-01-01T00:00:00.000Z",
65620
66587
  note: (self2 ? api.store.getConfig()?.summary : cached.summary) || "",
65621
66588
  url: actorUrl,
65622
66589
  uri: actorUrl,
65623
- avatar: selfIcon(api, self2, cached) || TRANSPARENT_PNG,
65624
- avatar_static: selfIcon(api, self2, cached) || TRANSPARENT_PNG,
66590
+ avatar: selfIcon(api, self2, cached) || DEFAULT_AVATAR,
66591
+ avatar_static: selfIcon(api, self2, cached) || DEFAULT_AVATAR,
65625
66592
  header: (self2 ? api.store.getConfig()?.image : null) || TRANSPARENT_PNG,
65626
66593
  header_static: (self2 ? api.store.getConfig()?.image : null) || TRANSPARENT_PNG,
65627
66594
  // A remote actor's counts are whatever its own collections said when we
@@ -65636,11 +66603,11 @@ function account(api, actorUrl, { selfAcct } = {}) {
65636
66603
  fields: (self2 ? api.store.getConfig()?.fields : cached.fields) || []
65637
66604
  };
65638
66605
  }
65639
- function page(api, items, url, { limit = 20, max = 40, idOf: idOf2 = (s) => api.store.idFor(s.noteId) } = {}) {
66606
+ function page(api, items, url, { limit = 20, max = 40, idOf: idOf3 = (s) => api.store.idFor(s.noteId) } = {}) {
65640
66607
  const n = Math.min(Number(url.searchParams.get("limit")) || limit, max);
65641
66608
  const ids = /* @__PURE__ */ new Map();
65642
66609
  const idAt = (s) => {
65643
- if (!ids.has(s)) ids.set(s, idOf2(s));
66610
+ if (!ids.has(s)) ids.set(s, idOf3(s));
65644
66611
  return ids.get(s);
65645
66612
  };
65646
66613
  const cut = (param) => {
@@ -65664,8 +66631,8 @@ function page(api, items, url, { limit = 20, max = 40, idOf: idOf2 = (s) => api.
65664
66631
  for (const [k, v] of Object.entries(extra)) u.searchParams.set(k, v);
65665
66632
  return u.href;
65666
66633
  };
65667
- const links = [`<${q({ max_id: idOf2(pageItems2[pageItems2.length - 1]) })}>; rel="next"`];
65668
- if (pageItems2.length) links.push(`<${q({ min_id: idOf2(pageItems2[0]) })}>; rel="prev"`);
66634
+ const links = [`<${q({ max_id: idOf3(pageItems2[pageItems2.length - 1]) })}>; rel="next"`];
66635
+ if (pageItems2.length) links.push(`<${q({ min_id: idOf3(pageItems2[0]) })}>; rel="prev"`);
65669
66636
  return { items: pageItems2, headers: { link: links.join(", ") } };
65670
66637
  }
65671
66638
  async function bskyReply(api, send, body, parent, visibility) {
@@ -65776,7 +66743,26 @@ async function acctReply(api, send, body, parent, visibility) {
65776
66743
  return send(422, { error: e.message });
65777
66744
  }
65778
66745
  }
65779
- function status(api, s, { all } = {}) {
66746
+ function quoteJson(api, s, { all, depth = 0 } = {}) {
66747
+ if (!s.quote) return null;
66748
+ const state = s.quoteState || "pending";
66749
+ const quoted = state !== "rejected" && (all || api.store.getStatuses()).find((x) => x.noteId === s.quote);
66750
+ if (depth > 0) return { state, quoted_status_id: quoted ? api.store.idFor(quoted.noteId) : null };
66751
+ return { state, quoted_status: quoted ? api.status(quoted, { all, depth: depth + 1 }) : null };
66752
+ }
66753
+ function quoteApproval(api, s) {
66754
+ if (s.actor === api.urls?.actor) {
66755
+ const open2 = !s.visibility || s.visibility === "public" || s.visibility === "unlisted";
66756
+ return { automatic: open2 ? ["public"] : [], manual: [], current_user: open2 ? "automatic" : "denied" };
66757
+ }
66758
+ const p = s.quotePolicy;
66759
+ if (!p) return { automatic: [], manual: [], current_user: "unknown" };
66760
+ const follows = () => api.store.getContacts().following.some((f) => f.actor === s.actor && f.accepted);
66761
+ const may = (list3) => list3.includes("public") || list3.includes("followers") && follows();
66762
+ const current = may(p.automatic) ? "automatic" : may(p.manual) ? "manual" : "denied";
66763
+ return { automatic: p.automatic, manual: p.manual, current_user: current };
66764
+ }
66765
+ function status(api, s, { all, depth = 0 } = {}) {
65780
66766
  const replies = (all || api.store.getStatuses()).filter((x) => x.inReplyTo === s.noteId).length;
65781
66767
  return {
65782
66768
  id: api.store.idFor(s.noteId),
@@ -65832,6 +66818,8 @@ function status(api, s, { all } = {}) {
65832
66818
  })),
65833
66819
  card: null,
65834
66820
  poll: s.poll ? api.pollJson(s) : null,
66821
+ quote: quoteJson(api, s, { all, depth }),
66822
+ quote_approval: quoteApproval(api, s),
65835
66823
  // What a filter matched, if any. Mastodon's clients read this and do the
65836
66824
  // hiding or warning; they do NOT match keywords themselves — Phanpy does
65837
66825
  // not — so filters that were stored and served but never applied were a
@@ -65918,7 +66906,9 @@ function pushNotify(api, n) {
65918
66906
  reblog: "boosted your post",
65919
66907
  follow: "followed you",
65920
66908
  "follow-request": "asked to follow you",
65921
- move: "moved account"
66909
+ move: "moved account",
66910
+ reaction: `reacted ${n.emoji || ""} to your post`,
66911
+ quote: "quoted your post"
65922
66912
  };
65923
66913
  const s = n.noteId && api.store.getStatuses().find((x) => x.noteId === n.noteId);
65924
66914
  return api.push.notify(n, {
@@ -65999,10 +66989,14 @@ function relationship(api, actorUrl) {
65999
66989
  };
66000
66990
  }
66001
66991
  function notificationType(api, t) {
66002
- return t === "follow-request" ? "follow_request" : t;
66992
+ return t === "follow-request" ? "follow_request" : t === "reaction" ? "emoji_reaction" : t;
66003
66993
  }
66004
66994
  function notification(api, n) {
66005
66995
  const out = { id: n.id, type: api.notificationType(n.type), created_at: n.at, account: api.account(n.actor) };
66996
+ if (n.type === "reaction") {
66997
+ out.emoji = n.emoji;
66998
+ if (n.url) out.emoji_url = n.url;
66999
+ }
66006
67000
  if (n.noteId) {
66007
67001
  const s = api.store.getStatuses().find((x) => x.noteId === n.noteId);
66008
67002
  if (s) out.status = api.status(s);
@@ -66047,7 +67041,6 @@ var STUBS = new Map(Object.entries({
66047
67041
  "/api/v1/custom_emojis": [],
66048
67042
  "/api/v1/announcements": [],
66049
67043
  "/api/v1/instance/peers": [],
66050
- "/api/v1/trends/tags": [],
66051
67044
  "/api/v1/trends/links": [],
66052
67045
  "/api/v2/suggestions": [],
66053
67046
  "/api/v1/preferences": {}
@@ -66084,14 +67077,15 @@ function instanceTitle(api) {
66084
67077
  const cfg = api.store.getConfig();
66085
67078
  return cfg?.handle ? `@${cfg.handle}@${api.host}` : "FediPod";
66086
67079
  }
66087
- function tagObject(api, name, following, req) {
67080
+ function tagObject(api, name, following, req, history = []) {
66088
67081
  const host = req?.headers?.host || api.host;
66089
- return { name, url: `https://${host}/tags/${name}`, history: [], following: !!following };
67082
+ return { name, url: `https://${host}/tags/${name}`, history, following: !!following };
66090
67083
  }
66091
67084
  function instanceBlurb(api) {
66092
67085
  const kind = api.store.getConfig()?.kind === "group" ? "group" : "actor";
66093
67086
  return `Solid pod ActivityPub ${kind}`;
66094
67087
  }
67088
+ var API_VERSIONS = { mastodon: 7 };
66095
67089
  async function handle2(api, ctx) {
66096
67090
  const { req, res, pathname, url, send } = ctx;
66097
67091
  if (pathname === "/api/v1/instance") {
@@ -66103,6 +67097,7 @@ async function handle2(api, ctx) {
66103
67097
  description: api.instanceBlurb(),
66104
67098
  email: "",
66105
67099
  version: "4.2.0 (compatible; fedipod)",
67100
+ api_versions: API_VERSIONS,
66106
67101
  urls: su ? { streaming_api: su } : {},
66107
67102
  stats: { user_count: 1, status_count: api.store.countStatuses(), domain_count: 1 },
66108
67103
  languages: ["en"],
@@ -66120,6 +67115,7 @@ async function handle2(api, ctx) {
66120
67115
  domain: api.host,
66121
67116
  title: api.instanceTitle(),
66122
67117
  version: "4.2.0 (compatible; fedipod)",
67118
+ api_versions: API_VERSIONS,
66123
67119
  source_url: "https://github.com/jeff-zucker/FediPod",
66124
67120
  description: api.instanceBlurb(),
66125
67121
  usage: { users: { active_month: 1 } },
@@ -66147,124 +67143,15 @@ async function handle2(api, ctx) {
66147
67143
  // lib/client/masto/accounts.mjs
66148
67144
  var accounts_exports = {};
66149
67145
  __export(accounts_exports, {
66150
- handle: () => handle4
67146
+ handle: () => handle3
66151
67147
  });
66152
67148
  init_node_crypto();
66153
67149
 
66154
67150
  // lib/pod/media.mjs
66155
67151
  var write6 = (pod, url, bytes, contentType) => pod.put(url, bytes, contentType);
66156
67152
 
66157
- // lib/client/masto/media.mjs
66158
- var media_exports = {};
66159
- __export(media_exports, {
66160
- attachmentType: () => attachmentType,
66161
- extensionFor: () => extensionFor,
66162
- handle: () => handle3,
66163
- readMultipart: () => readMultipart
66164
- });
66165
- init_node_crypto();
66166
- var ATTACHMENT_KINDS = /* @__PURE__ */ new Set(["image", "video", "audio"]);
66167
- var NEVER = /* @__PURE__ */ new Set(["image/svg+xml", "image/svg"]);
66168
- var OPAQUE = "application/octet-stream";
66169
- function attachmentType(claimed) {
66170
- const t = String(claimed || "").split(";")[0].trim().toLowerCase();
66171
- if (!/^[a-z0-9.+-]+\/[a-z0-9.+-]+$/.test(t) || NEVER.has(t)) return OPAQUE;
66172
- return ATTACHMENT_KINDS.has(t.split("/")[0]) ? t : OPAQUE;
66173
- }
66174
- function extensionFor(mediaType, filename = "") {
66175
- if (mediaType === OPAQUE) return "bin";
66176
- const sub = mediaType.split("/")[1].replace(/[^a-z0-9]/g, "");
66177
- const given = String(filename || "").includes(".") ? filename.split(".").pop().toLowerCase().replace(/[^a-z0-9]/g, "") : "";
66178
- return given && (given === sub || sub.startsWith(given) || given.startsWith(sub)) ? given : sub || "bin";
66179
- }
66180
- function readMultipart(req, limit = 12e6) {
66181
- return new Promise((resolve2, reject) => {
66182
- const chunks = [];
66183
- let n = 0;
66184
- req.on("data", (c) => {
66185
- n += c.length;
66186
- if (n > limit) {
66187
- reject(new Error("upload too large"));
66188
- req.destroy();
66189
- return;
66190
- }
66191
- chunks.push(c);
66192
- });
66193
- req.on("error", reject);
66194
- req.on("end", () => {
66195
- try {
66196
- const m = /boundary=(?:"([^"]+)"|([^;]+))/.exec(String(req.headers["content-type"] || ""));
66197
- if (!m) return resolve2({ fields: {}, file: null });
66198
- const buf = Buffer.concat(chunks);
66199
- const boundary = Buffer.from("--" + (m[1] || m[2]).trim());
66200
- const fields = {};
66201
- const files = {};
66202
- let file = null;
66203
- let i = buf.indexOf(boundary);
66204
- while (i >= 0) {
66205
- const start = i + boundary.length;
66206
- if (buf.slice(start, start + 2).toString() === "--") break;
66207
- const next = buf.indexOf(boundary, start);
66208
- if (next < 0) break;
66209
- const part = buf.slice(start + 2, next - 2);
66210
- const sep = part.indexOf("\r\n\r\n");
66211
- if (sep >= 0) {
66212
- const head = part.slice(0, sep).toString();
66213
- const body = part.slice(sep + 4);
66214
- const name = /name="([^"]*)"/.exec(head)?.[1];
66215
- const filename = /filename="([^"]*)"/.exec(head)?.[1];
66216
- if (filename !== void 0) {
66217
- file = {
66218
- filename,
66219
- contentType: /content-type:\s*([^\r\n]+)/i.exec(head)?.[1]?.trim() || "application/octet-stream",
66220
- data: body
66221
- };
66222
- if (name) files[name] = file;
66223
- } else if (name) fields[name] = body.toString();
66224
- }
66225
- i = next;
66226
- }
66227
- resolve2({ fields, file, files });
66228
- } catch (e) {
66229
- reject(e);
66230
- }
66231
- });
66232
- });
66233
- }
66234
- async function handle3(api, ctx) {
66235
- const { req, res, pathname, url, send } = ctx;
66236
- if ((pathname === "/api/v2/media" || pathname === "/api/v1/media") && req.method === "POST") {
66237
- const { fields, file } = await readMultipart(req);
66238
- if (!file?.data?.length) return send(422, { error: "file required" });
66239
- const mediaType = attachmentType(file.contentType);
66240
- const ext = extensionFor(mediaType, file.filename);
66241
- const slug = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10) + "-" + node_crypto_default.randomBytes(4).toString("hex") + "." + ext;
66242
- const mediaUrl = api.urls.media + slug;
66243
- await api.agent.publisher.ensureMediaContainer();
66244
- await write6(api.agent.remote, mediaUrl, file.data, mediaType);
66245
- const entry = { url: mediaUrl, mediaType, description: fields.description || "" };
66246
- const id = api.store.idFor(mediaUrl);
66247
- api.store.setMedia(id, entry);
66248
- return send(200, api.mediaJson({ id, ...entry }));
66249
- }
66250
- const mMedia = /^\/api\/v1\/media\/([a-f0-9]+)$/.exec(pathname);
66251
- if (mMedia) {
66252
- const entry = api.store.getMedia()[mMedia[1]];
66253
- if (!entry) return send(404, { error: "Record not found" });
66254
- if (req.method === "PUT") {
66255
- const body = await readBody2(req);
66256
- if (typeof body.description === "string") {
66257
- entry.description = body.description;
66258
- api.store.setMedia(mMedia[1], entry);
66259
- }
66260
- }
66261
- return send(200, api.mediaJson({ id: mMedia[1], ...entry }));
66262
- }
66263
- return false;
66264
- }
66265
-
66266
67153
  // lib/client/masto/accounts.mjs
66267
- async function handle4(api, ctx) {
67154
+ async function handle3(api, ctx) {
66268
67155
  const { req, res, pathname, url, send } = ctx;
66269
67156
  if (pathname === "/api/v1/accounts/verify_credentials") {
66270
67157
  const cfg0 = api.store.getConfig() || {};
@@ -66443,6 +67330,31 @@ async function handle4(api, ctx) {
66443
67330
  }
66444
67331
  }
66445
67332
  if (/^\/api\/v1\/accounts\/[a-f0-9]+\/featured_tags$/.test(pathname)) return send(200, []);
67333
+ if (pathname === "/api/v1/directory") return send(200, api.urls?.actor ? [api.account(api.urls.actor)] : []);
67334
+ if (pathname === "/api/v1/suggestions") return send(200, []);
67335
+ const mAccLists = /^\/api\/v1\/accounts\/([a-f0-9]+)\/lists$/.exec(pathname);
67336
+ if (mAccLists && req.method === "GET") {
67337
+ const actorUrl = api.store.urlFor(mAccLists[1]);
67338
+ if (!actorUrl) return send(404, { error: "Record not found" });
67339
+ return send(200, api.store.getLists().filter((l) => (l.members || []).includes(actorUrl)).map((l) => ({ id: l.id, title: l.title, replies_policy: l.repliesPolicy || "list", exclusive: false })));
67340
+ }
67341
+ if (pathname === "/api/v1/mutes" && req.method === "GET") {
67342
+ return send(200, (api.store.getMuted().actors || []).map((a) => api.account(a)));
67343
+ }
67344
+ if (pathname === "/api/v1/blocks" && req.method === "GET") {
67345
+ return send(200, (api.store.getBlocklist().actors || []).map((a) => api.account(a)));
67346
+ }
67347
+ if (pathname === "/api/v1/domain_blocks") {
67348
+ const b = api.store.getBlocklist();
67349
+ if (req.method === "GET") return send(200, [...b.domains]);
67350
+ const body = await readBody2(req);
67351
+ const domain = String(body.domain || url.searchParams.get("domain") || "").trim().toLowerCase();
67352
+ if (!/^[a-z0-9.-]+\.[a-z]{2,}$/u.test(domain)) return send(422, { error: "a domain is required" });
67353
+ if (req.method === "POST" && !b.domains.includes(domain)) b.domains.push(domain);
67354
+ if (req.method === "DELETE") b.domains = b.domains.filter((d) => d !== domain);
67355
+ api.store.setBlocklist(b);
67356
+ return send(200, {});
67357
+ }
66446
67358
  const mAccList = /^\/api\/v1\/accounts\/([a-f0-9]+)\/(following|followers)$/.exec(pathname);
66447
67359
  if (mAccList && req.method === "GET") {
66448
67360
  const actorUrl = api.store.urlFor(mAccList[1]);
@@ -66465,9 +67377,13 @@ async function handle4(api, ctx) {
66465
67377
  if (mAccStatuses) {
66466
67378
  const actorUrl = api.store.urlFor(mAccStatuses[1]);
66467
67379
  const all = api.store.getStatuses();
66468
- const pinnedOnly = url.searchParams.get("pinned") === "true";
67380
+ const q = url.searchParams;
67381
+ const is = (name) => q.get(name) === "true" || q.get(name) === "1";
67382
+ const pinnedOnly = is("pinned");
67383
+ const tagged = String(q.get("tagged") || "").replace(/^#/, "").toLowerCase();
67384
+ const isBoost = (s) => !!s.via && s.via !== s.actor;
66469
67385
  const { items, headers } = api.page(
66470
- all.filter((s) => s.actor === actorUrl && (!pinnedOnly || s.pinned)),
67386
+ all.filter((s) => s.actor === actorUrl && (!pinnedOnly || s.pinned)).filter((s) => !is("exclude_replies") || !s.inReplyTo).filter((s) => !is("exclude_reblogs") || !isBoost(s)).filter((s) => !is("only_media") || (s.attachments || []).length > 0).filter((s) => !tagged || (s.tags || []).some((t) => String(t.name).toLowerCase() === tagged)),
66471
67387
  url
66472
67388
  );
66473
67389
  return send(200, items.map((s) => api.statusOrBoost(s, { all })), headers);
@@ -66478,11 +67394,11 @@ async function handle4(api, ctx) {
66478
67394
  // lib/client/masto/timelines.mjs
66479
67395
  var timelines_exports = {};
66480
67396
  __export(timelines_exports, {
66481
- handle: () => handle5
67397
+ handle: () => handle4
66482
67398
  });
66483
67399
  init_node_crypto();
66484
67400
  init_wire();
66485
- async function handle5(api, ctx) {
67401
+ async function handle4(api, ctx) {
66486
67402
  const { req, res, pathname, url, send } = ctx;
66487
67403
  if (pathname === "/api/v1/timelines/home" || pathname === "/api/v1/timelines/public" || pathname === "/api/v1/trends/statuses") {
66488
67404
  const localOnly = pathname === "/api/v1/timelines/public" && url.searchParams.get("local") === "true";
@@ -66513,6 +67429,41 @@ async function handle5(api, ctx) {
66513
67429
  const following = (api.agent.tagfeed?.config().tags || []).includes(name);
66514
67430
  return send(200, api.tagObject(name, following, req));
66515
67431
  }
67432
+ if (pathname === "/api/v1/trends/tags" || pathname === "/api/v1/trends") {
67433
+ const DAY = 864e5;
67434
+ const today = Math.floor(Date.now() / DAY) * DAY;
67435
+ const seen = /* @__PURE__ */ new Map();
67436
+ for (const st2 of api.store.getStatuses()) {
67437
+ if (st2.kind !== "tag" || !st2.tag) continue;
67438
+ const at = Date.parse(st2.published || "");
67439
+ if (!Number.isFinite(at) || at < today - 6 * DAY) continue;
67440
+ const day = Math.floor(at / DAY) * DAY;
67441
+ if (!seen.has(st2.tag)) seen.set(st2.tag, /* @__PURE__ */ new Map());
67442
+ const days = seen.get(st2.tag);
67443
+ if (!days.has(day)) days.set(day, { uses: 0, accounts: /* @__PURE__ */ new Set() });
67444
+ const rec = days.get(day);
67445
+ rec.uses++;
67446
+ if (st2.actor) rec.accounts.add(st2.actor);
67447
+ }
67448
+ const followed = new Set(api.agent.tagfeed?.config().tags || []);
67449
+ const ranked = [...seen.entries()].map(([name, days]) => {
67450
+ const history = [];
67451
+ for (let i = 0; i < 7; i++) {
67452
+ const rec = days.get(today - i * DAY);
67453
+ history.push({
67454
+ day: String(Math.floor((today - i * DAY) / 1e3)),
67455
+ uses: String(rec ? rec.uses : 0),
67456
+ accounts: String(rec ? rec.accounts.size : 0)
67457
+ });
67458
+ }
67459
+ return {
67460
+ total: history.reduce((n, h) => n + Number(h.uses), 0),
67461
+ tag: api.tagObject(name, followed.has(name), req, history)
67462
+ };
67463
+ }).sort((a, b) => b.total - a.total);
67464
+ const limit = Math.min(Math.max(Number(url.searchParams.get("limit")) || 10, 1), 40);
67465
+ return send(200, ranked.slice(0, limit).map((x) => x.tag));
67466
+ }
66516
67467
  const mTagTl = pathname.match(/^\/api\/v1\/timelines\/tag\/([^/]+)$/);
66517
67468
  if (mTagTl && req.method === "GET") {
66518
67469
  const name = decodeURIComponent(mTagTl[1]).replace(/^#/, "").toLowerCase();
@@ -66649,7 +67600,81 @@ async function handle5(api, ctx) {
66649
67600
  last_status: api.status(c.last, { all })
66650
67601
  })));
66651
67602
  }
67603
+ if (pathname === "/api/v1/timelines/direct" && req.method === "GET") {
67604
+ const all = api.store.getStatuses();
67605
+ const items = all.filter((s) => s.direct || s.visibility === "direct");
67606
+ const { items: page2, headers } = api.page(items, url);
67607
+ return send(200, page2.map((s) => api.status(s, { all })), headers);
67608
+ }
67609
+ if (pathname === "/api/v1/notifications/clear" && req.method === "POST") {
67610
+ api.store.removeNotifications(() => true);
67611
+ return send(200, {});
67612
+ }
67613
+ const mNotif = /^\/api\/v1\/notifications\/([A-Za-z0-9_-]+)(\/dismiss)?$/.exec(pathname);
67614
+ if (mNotif) {
67615
+ const n = api.store.getNotifications().find((x) => x.id === mNotif[1]);
67616
+ if (!n) return send(404, { error: "Record not found" });
67617
+ if (mNotif[2] && req.method === "POST") {
67618
+ api.store.removeNotifications((x) => x.id === n.id);
67619
+ return send(200, {});
67620
+ }
67621
+ if (!mNotif[2] && req.method === "GET") return send(200, api.notification(n));
67622
+ }
67623
+ const mGroup = /^\/api\/v2\/notifications\/([A-Za-z0-9_-]+)(\/accounts|\/dismiss)?$/.exec(pathname);
67624
+ if (mGroup) {
67625
+ const n = api.store.getNotifications().find((x) => x.id === mGroup[1]);
67626
+ if (!n) return send(404, { error: "Record not found" });
67627
+ if (mGroup[2] === "/dismiss" && req.method === "POST") {
67628
+ api.store.removeNotifications((x) => x.id === n.id);
67629
+ return send(200, {});
67630
+ }
67631
+ if (mGroup[2] === "/accounts" && req.method === "GET") return send(200, [api.account(n.actor)]);
67632
+ if (!mGroup[2] && req.method === "GET") return send(200, groupedNotifications(api, [n]));
67633
+ }
67634
+ if (pathname === "/api/v2/notifications") {
67635
+ const { page: page2, headers } = notificationPage(api, ctx);
67636
+ return send(200, groupedNotifications(api, page2), headers);
67637
+ }
66652
67638
  if (pathname === "/api/v1/notifications") {
67639
+ const { page: page2, headers } = notificationPage(api, ctx);
67640
+ return send(200, page2.map((n) => api.notification(n)), headers);
67641
+ }
67642
+ if (pathname === "/api/v2/search" || pathname === "/api/v1/search") {
67643
+ return searchHandler(api, ctx);
67644
+ }
67645
+ return false;
67646
+ }
67647
+ function groupedNotifications(api, page2) {
67648
+ const accounts = /* @__PURE__ */ new Map();
67649
+ const statuses = /* @__PURE__ */ new Map();
67650
+ const groups = page2.map((n) => {
67651
+ const acct = api.account(n.actor);
67652
+ accounts.set(acct.id, acct);
67653
+ const s = n.noteId && api.store.getStatuses().find((x) => x.noteId === n.noteId);
67654
+ let statusId = null;
67655
+ if (s) {
67656
+ const j = api.status(s);
67657
+ statuses.set(j.id, j);
67658
+ statusId = j.id;
67659
+ }
67660
+ return {
67661
+ group_key: n.id,
67662
+ notifications_count: 1,
67663
+ type: api.notificationType(n.type),
67664
+ most_recent_notification_id: n.id,
67665
+ page_min_id: n.id,
67666
+ page_max_id: n.id,
67667
+ latest_page_notification_at: n.at,
67668
+ sample_account_ids: [acct.id],
67669
+ ...statusId ? { status_id: statusId } : {},
67670
+ ...n.type === "reaction" ? { emoji: n.emoji, ...n.url ? { emoji_url: n.url } : {} } : {}
67671
+ };
67672
+ });
67673
+ return { accounts: [...accounts.values()], statuses: [...statuses.values()], notification_groups: groups };
67674
+ }
67675
+ function notificationPage(api, ctx) {
67676
+ const { req, pathname, url } = ctx;
67677
+ {
66653
67678
  const limit = Math.min(Number(url.searchParams.get("limit")) || 30, 60);
66654
67679
  const q = url.searchParams;
66655
67680
  let items = api.store.getNotifications();
@@ -66680,13 +67705,16 @@ async function handle5(api, ctx) {
66680
67705
  for (const [k, v] of Object.entries(params)) u.searchParams.set(k, v);
66681
67706
  return u.href;
66682
67707
  };
66683
- return send(200, page2.map((n) => api.notification(n)), {
67708
+ return { page: page2, headers: {
66684
67709
  link: `<${link({ max_id: page2[page2.length - 1].id })}>; rel="next", <${link({ min_id: page2[0].id })}>; rel="prev"`
66685
- });
67710
+ } };
66686
67711
  }
66687
- return send(200, []);
67712
+ return { page: [], headers: void 0 };
66688
67713
  }
66689
- if (pathname === "/api/v2/search" || pathname === "/api/v1/search") {
67714
+ }
67715
+ async function searchHandler(api, ctx) {
67716
+ const { req, res, pathname, url, send } = ctx;
67717
+ {
66690
67718
  const q = String(url.searchParams.get("q") || "").trim();
66691
67719
  const type = url.searchParams.get("type");
66692
67720
  const out = { accounts: [], statuses: [], hashtags: [] };
@@ -66733,10 +67761,10 @@ async function handle5(api, ctx) {
66733
67761
  // lib/client/masto/statuses.mjs
66734
67762
  var statuses_exports = {};
66735
67763
  __export(statuses_exports, {
66736
- handle: () => handle6
67764
+ handle: () => handle5
66737
67765
  });
66738
67766
  init_node_crypto();
66739
- async function handle6(api, ctx) {
67767
+ async function handle5(api, ctx) {
66740
67768
  const { req, res, pathname, url, send } = ctx;
66741
67769
  if (pathname === "/api/v1/statuses" && req.method === "POST") {
66742
67770
  const body = await readBody2(req);
@@ -66759,8 +67787,22 @@ async function handle6(api, ctx) {
66759
67787
  const mediaIds = [].concat(body.media_ids || body["media_ids[]"] || []).filter(Boolean);
66760
67788
  const media = api.store.getMedia();
66761
67789
  const attachments = mediaIds.map((id) => media[id] && { id, ...media[id] }).filter(Boolean);
67790
+ let quote = null;
67791
+ if (body.quoted_status_id) {
67792
+ const quotedUrl = api.store.urlFor(String(body.quoted_status_id));
67793
+ const quoted = quotedUrl && api.store.getStatuses().find((x) => x.noteId === quotedUrl);
67794
+ if (!quoted) return send(404, { error: "Record not found" });
67795
+ if (["bsky", "acct"].includes(quoted.kind)) return send(422, { error: "that post cannot be quoted from this account" });
67796
+ if (visibility === "private" || visibility === "direct") return send(422, { error: "a quote post is public or unlisted" });
67797
+ const may = api.quoteApproval(quoted).current_user;
67798
+ if (may === "denied") return send(422, { error: "the author of that post does not allow quotes" });
67799
+ if (may === "unknown") return send(422, { error: "the author of that post has not said whether it may be quoted" });
67800
+ if (body.scheduled_at) return send(422, { error: "a quote cannot be scheduled" });
67801
+ quote = { id: quoted.noteId, actor: quoted.actor };
67802
+ }
66762
67803
  const asking = pollParams(body);
66763
67804
  if (asking) {
67805
+ if (quote) return send(422, { error: "a poll cannot quote a post" });
66764
67806
  if (attachments.length) return send(422, { error: "a poll cannot carry media" });
66765
67807
  if (body.scheduled_at) return send(422, { error: "a poll cannot be scheduled" });
66766
67808
  if (asking.options.length < 2) return send(422, { error: "a poll needs at least two options" });
@@ -66816,7 +67858,7 @@ async function handle6(api, ctx) {
66816
67858
  try {
66817
67859
  note = await api.agent.publisher.publishNote(
66818
67860
  body.status,
66819
- { inReplyTo, attachments, visibility, spoilerText, sensitive }
67861
+ { inReplyTo, attachments, visibility, spoilerText, sensitive, quote }
66820
67862
  );
66821
67863
  } catch (e) {
66822
67864
  if (e.code === "unaddressed") return send(422, { error: e.message });
@@ -66825,6 +67867,9 @@ async function handle6(api, ctx) {
66825
67867
  const s = api.store.getStatuses().find((x) => x.noteId === note.id);
66826
67868
  return send(200, api.status(s));
66827
67869
  }
67870
+ if (/^\/api\/v1\/statuses\/[a-f0-9]+\/interaction_policy$/.test(pathname) && req.method === "PUT") {
67871
+ return send(422, { error: "the quote policy is the same for every post here: anyone may quote a public or unlisted post, nobody a followers-only or direct one" });
67872
+ }
66828
67873
  const mSource = /^\/api\/v1\/statuses\/([a-f0-9]+)\/source$/.exec(pathname);
66829
67874
  if (mSource && req.method === "GET") {
66830
67875
  const noteUrl = api.store.urlFor(mSource[1]);
@@ -67033,6 +68078,60 @@ async function handle6(api, ctx) {
67033
68078
  return false;
67034
68079
  }
67035
68080
 
68081
+ // lib/client/masto/media.mjs
68082
+ var media_exports2 = {};
68083
+ __export(media_exports2, {
68084
+ attachmentType: () => attachmentType,
68085
+ extensionFor: () => extensionFor,
68086
+ handle: () => handle6
68087
+ });
68088
+ init_node_crypto();
68089
+ var ATTACHMENT_KINDS = /* @__PURE__ */ new Set(["image", "video", "audio"]);
68090
+ var NEVER = /* @__PURE__ */ new Set(["image/svg+xml", "image/svg"]);
68091
+ var OPAQUE = "application/octet-stream";
68092
+ function attachmentType(claimed) {
68093
+ const t = String(claimed || "").split(";")[0].trim().toLowerCase();
68094
+ if (!/^[a-z0-9.+-]+\/[a-z0-9.+-]+$/.test(t) || NEVER.has(t)) return OPAQUE;
68095
+ return ATTACHMENT_KINDS.has(t.split("/")[0]) ? t : OPAQUE;
68096
+ }
68097
+ function extensionFor(mediaType, filename = "") {
68098
+ if (mediaType === OPAQUE) return "bin";
68099
+ const sub = mediaType.split("/")[1].replace(/[^a-z0-9]/g, "");
68100
+ const given = String(filename || "").includes(".") ? filename.split(".").pop().toLowerCase().replace(/[^a-z0-9]/g, "") : "";
68101
+ return given && (given === sub || sub.startsWith(given) || given.startsWith(sub)) ? given : sub || "bin";
68102
+ }
68103
+ async function handle6(api, ctx) {
68104
+ const { req, res, pathname, url, send } = ctx;
68105
+ if ((pathname === "/api/v2/media" || pathname === "/api/v1/media") && req.method === "POST") {
68106
+ const { fields, file } = await readMultipart(req);
68107
+ if (!file?.data?.length) return send(422, { error: "file required" });
68108
+ const mediaType = attachmentType(file.contentType);
68109
+ const ext = extensionFor(mediaType, file.filename);
68110
+ const slug = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10) + "-" + node_crypto_default.randomBytes(4).toString("hex") + "." + ext;
68111
+ const mediaUrl = api.urls.media + slug;
68112
+ await api.agent.publisher.ensureMediaContainer();
68113
+ await write6(api.agent.remote, mediaUrl, file.data, mediaType);
68114
+ const entry = { url: mediaUrl, mediaType, description: fields.description || "" };
68115
+ const id = api.store.idFor(mediaUrl);
68116
+ api.store.setMedia(id, entry);
68117
+ return send(200, api.mediaJson({ id, ...entry }));
68118
+ }
68119
+ const mMedia = /^\/api\/v1\/media\/([a-f0-9]+)$/.exec(pathname);
68120
+ if (mMedia) {
68121
+ const entry = api.store.getMedia()[mMedia[1]];
68122
+ if (!entry) return send(404, { error: "Record not found" });
68123
+ if (req.method === "PUT") {
68124
+ const body = await readBody2(req);
68125
+ if (typeof body.description === "string") {
68126
+ entry.description = body.description;
68127
+ api.store.setMedia(mMedia[1], entry);
68128
+ }
68129
+ }
68130
+ return send(200, api.mediaJson({ id: mMedia[1], ...entry }));
68131
+ }
68132
+ return false;
68133
+ }
68134
+
67036
68135
  // lib/client/masto/index.mjs
67037
68136
  var MastoApi = class _MastoApi {
67038
68137
  constructor({
@@ -67041,6 +68140,7 @@ var MastoApi = class _MastoApi {
67041
68140
  allowed = null,
67042
68141
  scheme = null,
67043
68142
  embedded = false,
68143
+ throughDoor = null,
67044
68144
  mount = "",
67045
68145
  streaming = true,
67046
68146
  webPush = true,
@@ -67051,6 +68151,7 @@ var MastoApi = class _MastoApi {
67051
68151
  this.embedded = embedded;
67052
68152
  this.log = log2;
67053
68153
  this.allowed = allowed;
68154
+ this.throughDoor = throughDoor;
67054
68155
  this.scheme = scheme;
67055
68156
  this.streaming = streaming;
67056
68157
  this.webPush = webPush;
@@ -67129,7 +68230,7 @@ var MastoApi = class _MastoApi {
67129
68230
  const took = await this.agent.requestTakeover?.();
67130
68231
  if (!took) return send(503, { error: "another agent is active for this pod \u2014 takeover failed, try again" });
67131
68232
  }
67132
- for (const area of [accounts_exports, timelines_exports, statuses_exports, media_exports]) {
68233
+ for (const area of [accounts_exports, timelines_exports, statuses_exports, media_exports2]) {
67133
68234
  if (await area.handle(this, ctx)) return true;
67134
68235
  }
67135
68236
  this.log(`mastoapi: unhandled ${req.method} ${pathname} \u2014 punch list`);
@@ -67200,6 +68301,9 @@ var MastoApi = class _MastoApi {
67200
68301
  status(...a) {
67201
68302
  return status(this, ...a);
67202
68303
  }
68304
+ quoteApproval(...a) {
68305
+ return quoteApproval(this, ...a);
68306
+ }
67203
68307
  filtersFor(...a) {
67204
68308
  return filtersFor(this, ...a);
67205
68309
  }
@@ -67249,11 +68353,32 @@ var MastoApi = class _MastoApi {
67249
68353
  var MAX_TIMELINE_BYTES = 2 * 1024 * 1024;
67250
68354
  var DEFAULTS2 = {
67251
68355
  instance: "https://mastodon.social",
67252
- tags: ["solidproject", "linkeddata", "rdf"],
68356
+ tags: [
68357
+ "fediverse",
68358
+ "activitypub",
68359
+ // the network this account is on
68360
+ "opensource",
68361
+ "foss",
68362
+ // how the software gets made
68363
+ "solidproject",
68364
+ "linkeddata",
68365
+ // where the data lives
68366
+ "privacy",
68367
+ "digitalrights",
68368
+ // what is at stake
68369
+ "indieweb",
68370
+ "smallweb",
68371
+ // publishing for yourself
68372
+ "commons",
68373
+ "platformcooperativism"
68374
+ // owning it together
68375
+ ],
67253
68376
  intervalMin: 15
67254
68377
  };
67255
68378
  var PER_TAG = 20;
67256
- var MAX_NEW_PER_SWEEP = 12;
68379
+ var MAX_NEW_PER_SWEEP = 8;
68380
+ var MAX_NEW_PER_TAG = 2;
68381
+ var TAGS_PER_SWEEP = 4;
67257
68382
  var MAX_TAG_ENTRIES = 200;
67258
68383
  var BACKOFF_MIN_MS2 = 15 * 6e4;
67259
68384
  var BACKOFF_MAX_MS2 = 6 * 60 * 6e4;
@@ -67263,6 +68388,7 @@ var TagFeed = class {
67263
68388
  Object.assign(this, { store, intake, log: log2, fetcher: fetcher2 });
67264
68389
  this.lastSweep = null;
67265
68390
  this.lastAdded = 0;
68391
+ this.cursor = 0;
67266
68392
  }
67267
68393
  config() {
67268
68394
  return { ...DEFAULTS2, ...this.store.read("tagfeed.json", {}) };
@@ -67320,9 +68446,13 @@ var TagFeed = class {
67320
68446
  const known2 = new Set(this.store.getStatuses().map((s) => s.noteId));
67321
68447
  let budget = MAX_NEW_PER_SWEEP;
67322
68448
  let added = 0;
68449
+ const start = this.cursor % tags.length;
68450
+ this.cursor = (start + TAGS_PER_SWEEP) % tags.length;
68451
+ const order = [...tags, ...tags].slice(start, start + Math.min(TAGS_PER_SWEEP, tags.length));
67323
68452
  this.store.hold?.();
67324
68453
  try {
67325
- for (const tag of tags) {
68454
+ for (const tag of order) {
68455
+ let perTag = MAX_NEW_PER_TAG;
67326
68456
  let list3;
67327
68457
  try {
67328
68458
  const { safeFetch: safeFetch2, retryAfterMs: retryAfterMs3, readCapped: readCapped3 } = await Promise.resolve().then(() => (init_safefetch(), safefetch_exports));
@@ -67342,7 +68472,9 @@ var TagFeed = class {
67342
68472
  for (const st2 of Array.isArray(list3) ? list3 : []) {
67343
68473
  const noteId = st2?.uri;
67344
68474
  if (!noteId || known2.has(noteId) || this.store.isBlocked(noteId)) continue;
67345
- if (budget-- <= 0) break;
68475
+ if (perTag <= 0 || budget <= 0) break;
68476
+ perTag--;
68477
+ budget--;
67346
68478
  const note = await this.intake.fetchAP(noteId).catch(() => null);
67347
68479
  if (!note || note.id !== noteId || !isContentType(note.type)) continue;
67348
68480
  const author = authorOf(note);
@@ -67366,6 +68498,7 @@ var TagFeed = class {
67366
68498
  known2.add(noteId);
67367
68499
  added++;
67368
68500
  }
68501
+ if (budget <= 0) break;
67369
68502
  }
67370
68503
  const all = this.store.getStatuses();
67371
68504
  const tagged = all.filter((s) => s.kind === "tag");
@@ -67377,7 +68510,7 @@ var TagFeed = class {
67377
68510
  this.store.release?.();
67378
68511
  }
67379
68512
  this.lastAdded = added;
67380
- if (added) this.log(`tagfeed: +${added} from #${tags.join(" #")}`);
68513
+ if (added) this.log(`tagfeed: +${added} from #${order.join(" #")}`);
67381
68514
  }
67382
68515
  };
67383
68516
 
@@ -67670,7 +68803,7 @@ var PodTransport = class {
67670
68803
  // leaves the private trees world-readable. $rdf.sym() also throws on an
67671
68804
  // illegal IRI, so a pod URL with something odd in it fails here rather than
67672
68805
  // silently producing a document that means something else.
67673
- aclDoc(targetUrl, publicModes, { appendAgents = [], aclUrl = null } = {}) {
68806
+ aclDoc(targetUrl, publicModes, { appendAgents = [], readAgents = [], aclUrl = null } = {}) {
67674
68807
  const url = aclUrl || targetUrl + ".acl";
67675
68808
  const doc = namedNode2(url);
67676
68809
  const target = namedNode2(targetUrl);
@@ -67686,6 +68819,7 @@ var PodTransport = class {
67686
68819
  authorize(namedNode2(url + "#public"), ACL("agentClass"), FOAF("Agent"), publicModes);
67687
68820
  }
67688
68821
  appendAgents.forEach((webId, i) => authorize(namedNode2(url + `#gw${i}`), ACL("agent"), namedNode2(webId), ["Append"]));
68822
+ readAgents.forEach((webId, i) => authorize(namedNode2(url + `#r${i}`), ACL("agent"), namedNode2(webId), ["Read"]));
67689
68823
  authorize(
67690
68824
  namedNode2(url + "#owner"),
67691
68825
  ACL("agent"),
@@ -67875,61 +69009,6 @@ var BrowserRemotePod = class extends PodTransport {
67875
69009
  }
67876
69010
  };
67877
69011
 
67878
- // web/app/idb-kv.mjs
67879
- var DB = "fedipod-accounts";
67880
- function open() {
67881
- return new Promise((res, rej) => {
67882
- const r = indexedDB.open(DB, 1);
67883
- r.onupgradeneeded = () => {
67884
- const db = r.result;
67885
- if (!db.objectStoreNames.contains("kv")) db.createObjectStore("kv");
67886
- };
67887
- r.onsuccess = () => res(r.result);
67888
- r.onerror = () => rej(r.error);
67889
- });
67890
- }
67891
- async function kvGet(key) {
67892
- const db = await open();
67893
- return new Promise((res, rej) => {
67894
- const rq = db.transaction("kv", "readonly").objectStore("kv").get(key);
67895
- rq.onsuccess = () => res(rq.result ?? null);
67896
- rq.onerror = () => rej(rq.error);
67897
- });
67898
- }
67899
- async function kvAll() {
67900
- const db = await open();
67901
- return new Promise((res, rej) => {
67902
- const out = {};
67903
- const cur = db.transaction("kv", "readonly").objectStore("kv").openCursor();
67904
- cur.onsuccess = () => {
67905
- const c = cur.result;
67906
- if (c) {
67907
- out[c.key] = c.value;
67908
- c.continue();
67909
- } else res(out);
67910
- };
67911
- cur.onerror = () => rej(cur.error);
67912
- });
67913
- }
67914
- async function kvPut(key, val) {
67915
- const db = await open();
67916
- return new Promise((res, rej) => {
67917
- const tx = db.transaction("kv", "readwrite");
67918
- tx.objectStore("kv").put(val, key);
67919
- tx.oncomplete = () => res();
67920
- tx.onerror = () => rej(tx.error);
67921
- });
67922
- }
67923
- async function kvDel(key) {
67924
- const db = await open();
67925
- return new Promise((res, rej) => {
67926
- const tx = db.transaction("kv", "readwrite");
67927
- tx.objectStore("kv").delete(key);
67928
- tx.oncomplete = () => res();
67929
- tx.onerror = () => rej(tx.error);
67930
- });
67931
- }
67932
-
67933
69012
  // web/app/keystore.mjs
67934
69013
  var PEM = (der, label) => {
67935
69014
  const b642 = btoa(String.fromCharCode(...new Uint8Array(der)));
@@ -68848,6 +69927,7 @@ var ADMIN_PATHS = /* @__PURE__ */ new Set([
68848
69927
  "/log",
68849
69928
  "/fediacct",
68850
69929
  "/describe",
69930
+ "/follow",
68851
69931
  "/atproto",
68852
69932
  "/atproto/connect",
68853
69933
  "/atproto/disconnect",
@@ -68857,6 +69937,7 @@ var ADMIN_PATHS = /* @__PURE__ */ new Set([
68857
69937
  "/inbox/prune",
68858
69938
  "/park",
68859
69939
  "/revive",
69940
+ "/takeover",
68860
69941
  "/fediacct/connect",
68861
69942
  "/fediacct/disconnect",
68862
69943
  "/fediacct/callback"
@@ -69082,6 +70163,29 @@ var AdminFacade = class {
69082
70163
  await a.publisher.publishProfile();
69083
70164
  return json2(200, { ok: true, summary: cfg.summary || null, icon: cfg.icon || null });
69084
70165
  }
70166
+ // Following somebody, the same call the Node agent's admin surface takes
70167
+ // (lib/device/admin/routes/social.mjs): by handle normally, by actor url
70168
+ // when WebFinger cannot answer for them. The remote-follow page
70169
+ // (/authorize_interaction) is what asks for it here — another server
70170
+ // sends its reader to that page when they press Follow and say they are
70171
+ // at this host.
70172
+ case "/follow": {
70173
+ await a.requestTakeover?.();
70174
+ if (body.actor) {
70175
+ await followActor(a, String(body.actor));
70176
+ return json2(200, { ok: true, actor: String(body.actor) });
70177
+ }
70178
+ if (!body.handle) return json2(400, { error: "handle or actor required" });
70179
+ return json2(200, await followHandle(a, String(body.handle)));
70180
+ }
70181
+ // Taking the account back. A viewer publishes nothing and drains
70182
+ // nothing, so an account whose lease is held by something that is not
70183
+ // running any more stays silent with no way to say so. The owner acting
70184
+ // HERE outranks whatever holds it.
70185
+ case "/takeover": {
70186
+ if (!await a.requestTakeover?.()) return json2(503, { error: "the lease could not be taken \u2014 the pod refused the write" });
70187
+ return json2(200, { ok: true, mode: a.status().mode });
70188
+ }
69085
70189
  // Going quiet, and coming back. The record page's active/parked select.
69086
70190
  case "/park": {
69087
70191
  if (!await a.requestTakeover?.()) return json2(503, { error: "another device is active for this pod \u2014 park from there" });
@@ -70509,6 +71613,48 @@ var originAuthorities = (host) => ({
70509
71613
  }
70510
71614
  // fetch-only: this build serves no socket
70511
71615
  });
71616
+ async function accountNotRead({ unread, podBase, state, webId, actorUrl = null, fetchImpl = globalThis.fetch }) {
71617
+ const host = (() => {
71618
+ try {
71619
+ return new URL(podBase).host;
71620
+ } catch {
71621
+ return podBase;
71622
+ }
71623
+ })();
71624
+ const of = (code, message) => {
71625
+ const e = new Error(message);
71626
+ e.code = code;
71627
+ return e;
71628
+ };
71629
+ if (!unread) {
71630
+ const actor = actorUrl ? await fetchImpl(actorUrl, { headers: { accept: "application/activity+json" } }).then((r) => r.ok ? r.json() : null).catch(() => null) : null;
71631
+ if (actor?.preferredUsername) {
71632
+ const at = (() => {
71633
+ try {
71634
+ return `@${actor.preferredUsername}@${new URL(actor.id || actorUrl).host}`;
71635
+ } catch {
71636
+ return actor.preferredUsername;
71637
+ }
71638
+ })();
71639
+ return of("device-account", `${host} holds the account ${at}, but not its record: this account is run by a DeviceAgent, and its record lives on that device. Open it from that device's admin page, not here. The sign-in used here was ${webId}.`);
71640
+ }
71641
+ return of("no-account", `${host} answered, and there is no FediPod account in it. Sign in with the pod that holds your account, or make an account in this one \u2014 both start from the sign-in page. The sign-in used here was ${webId}.`);
71642
+ }
71643
+ const status2 = Number((/HTTP (\d{3})/u.exec(unread.message) || [])[1]) || 0;
71644
+ if (status2 === 401 || status2 === 403) {
71645
+ return of("sign-in-refused", `${host} would not let this sign-in read your account \u2014 it answered "not allowed" (HTTP ${status2}) \u2014 and renewing the sign-in did not change its mind. Your account and everything in it are untouched. Signing in at ${host} again is the one thing that helps.`);
71646
+ }
71647
+ if (status2 === 429) {
71648
+ return of("pod-busy", `${host} is telling this browser it has asked for too much too quickly (HTTP 429), so your account could not be read. Nothing is wrong with your account, and nothing here needs doing: this page is waiting the throttle out and will ask again by itself. While a pod is rate-limiting you, only time helps.`);
71649
+ }
71650
+ if (status2 >= 500) {
71651
+ return of("pod-error", `${host} broke while handing your account over (HTTP ${status2}). That is the pod's own failure, not your account's. This page asks again by itself in a moment; if it keeps saying this, the pod is down and there is nothing to do here.`);
71652
+ }
71653
+ if (status2 === 404) {
71654
+ return of("no-account-here", `${host} says there is nothing at ${state} (HTTP 404). Either no FediPod account has ever been set up in this pod, or you signed in with a different pod than the one holding yours. Sign in with that one, or make an account in this one \u2014 both start from the sign-in page.`);
71655
+ }
71656
+ return of("pod-unreachable", `This browser could not reach ${host} to read your account (${unread.message}). Your account is still there. This page tries again by itself; if it keeps saying this, check that you are online and that the pod is up.`);
71657
+ }
70512
71658
  var BrowserAgent = class _BrowserAgent {
70513
71659
  constructor({ log: log2 = console.log } = {}) {
70514
71660
  this.log = log2;
@@ -70541,6 +71687,7 @@ var BrowserAgent = class _BrowserAgent {
70541
71687
  try {
70542
71688
  await this.store.load({ force: true }).catch((e) => this.log(`re-reading state: ${e.message}`));
70543
71689
  await this.publisher.healStatuses().catch((e) => this.log(`healing the timeline index: ${e.message}`));
71690
+ await this.publisher.publishProfilePage().catch((e) => this.log(`profile page: ${e.message}`));
70544
71691
  this.deliverer?.startQueue?.();
70545
71692
  await this.publisher.publishProfile();
70546
71693
  await this.store.flush?.();
@@ -70611,6 +71758,21 @@ var BrowserAgent = class _BrowserAgent {
70611
71758
  * - { credential, keysRecord, config }: a client-credential session with the
70612
71759
  * material in hand (the offline test path).
70613
71760
  */
71761
+ // This browser's name for itself, minted once and kept. Not an identity and
71762
+ // not a secret — it says only "the same browser as last time" to the lease.
71763
+ // If storage cannot be reached, a fresh one is honest: this browser cannot
71764
+ // prove it is the one that held the lease, so it should not claim to be.
71765
+ async deviceId() {
71766
+ try {
71767
+ const had = await kvGet("device-id");
71768
+ if (had) return had;
71769
+ const made = crypto.randomUUID();
71770
+ await kvPut("device-id", made);
71771
+ return made;
71772
+ } catch {
71773
+ return null;
71774
+ }
71775
+ }
70614
71776
  async boot({ oidc, credential, keysRecord, config, frontOrigin }) {
70615
71777
  let session;
70616
71778
  let webId;
@@ -70631,10 +71793,12 @@ var BrowserAgent = class _BrowserAgent {
70631
71793
  this.urls = apUrls2(remotePod, root);
70632
71794
  const podFetch = (u, i) => this.remote.fetch(u, i);
70633
71795
  this.store = new PodStore({ storage: new HttpStorage(this.urls.state, podFetch), log: this.log });
70634
- await this.store.load().catch(() => {
71796
+ let unread = null;
71797
+ await this.store.load().catch((e) => {
71798
+ unread = e;
70635
71799
  });
70636
71800
  const cfg = config || this.store.getConfig();
70637
- if (!cfg) throw new Error("no account config on this pod \u2014 sign up first");
71801
+ if (!cfg) throw await accountNotRead({ unread, podBase: remotePod, state: this.urls.state, webId, actorUrl: this.urls.actor });
70638
71802
  this.store.setConfig({ ...this.store.getConfig() || {}, ...cfg, root });
70639
71803
  config = this.store.getConfig();
70640
71804
  const publicBase = config.gateway?.frontActor ? config.gateway.frontActor.replace(/ap\/actor\/?$/, "") : null;
@@ -70672,7 +71836,17 @@ var BrowserAgent = class _BrowserAgent {
70672
71836
  this.atproto = new BrowserAtproto({ store: this.store, actorId: this.urls.actor, log: this.log });
70673
71837
  this.publisher.atproto = this.atproto;
70674
71838
  this.fediaccts = new BrowserFediAccounts({ store: this.store, actorId: this.urls.actor, log: this.log });
70675
- this.lease = new Lease({ url: this.urls.state + "lease.json", fetchImpl: podFetch, log: this.log });
71839
+ this.lease = new Lease({
71840
+ url: this.urls.state + "lease.json",
71841
+ fetchImpl: podFetch,
71842
+ log: this.log,
71843
+ // Kept on this origin, so THIS browser is one holder however many times
71844
+ // its worker is killed and restarted. Without it every restart was a new
71845
+ // holder: the old lease still had minutes to run, so the browser found
71846
+ // its own account "active on another device" and asked to take it over.
71847
+ // Switching between the clients did it every time, being a navigation.
71848
+ id: await this.deviceId()
71849
+ });
70676
71850
  this.c2s = new C2S({ agent: this, log: this.log });
70677
71851
  this.intake = new Intake({
70678
71852
  config: this.store.getConfig(),
@@ -70904,43 +72078,14 @@ var BrowserAgent = class _BrowserAgent {
70904
72078
  }
70905
72079
  };
70906
72080
 
70907
- // web/app/oidc-session.mjs
70908
- var DB2 = "fedipod-oidc";
72081
+ // lib/session/oidc-session.mjs
70909
72082
  var STORE = "session";
70910
72083
  var b64u3 = (buf) => btoa(String.fromCharCode(...new Uint8Array(buf))).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
70911
72084
  var enc3 = (o) => b64u3(new TextEncoder().encode(JSON.stringify(o)));
70912
72085
  var sha2564 = (s) => crypto.subtle.digest("SHA-256", new TextEncoder().encode(s));
70913
- function idb() {
70914
- return new Promise((res, rej) => {
70915
- const r = indexedDB.open(DB2, 1);
70916
- r.onupgradeneeded = () => r.result.createObjectStore(STORE);
70917
- r.onsuccess = () => res(r.result);
70918
- r.onerror = () => rej(r.error);
70919
- });
70920
- }
70921
- async function idbGet(key) {
70922
- const db = await idb();
70923
- return new Promise((res, rej) => {
70924
- const t = db.transaction(STORE).objectStore(STORE).get(key);
70925
- t.onsuccess = () => res(t.result);
70926
- t.onerror = () => rej(t.error);
70927
- });
70928
- }
70929
- async function idbPut(key, val) {
70930
- const db = await idb();
70931
- return new Promise((res, rej) => {
70932
- const t = db.transaction(STORE, "readwrite").objectStore(STORE).put(val, key);
70933
- t.onsuccess = () => res();
70934
- t.onerror = () => rej(t.error);
70935
- });
70936
- }
70937
- async function idbDel(key) {
70938
- const db = await idb();
70939
- return new Promise((res, rej) => {
70940
- const t = db.transaction(STORE, "readwrite").objectStore(STORE).delete(key);
70941
- t.onsuccess = () => res();
70942
- t.onerror = () => rej(t.error);
70943
- });
72086
+ var rand = (n = 32) => b64u3(crypto.getRandomValues(new Uint8Array(n)));
72087
+ async function dpopKey() {
72088
+ return crypto.subtle.generateKey({ name: "ECDSA", namedCurve: "P-256" }, false, ["sign"]);
70944
72089
  }
70945
72090
  async function publicJwk(pair) {
70946
72091
  const j = await crypto.subtle.exportKey("jwk", pair.publicKey);
@@ -70953,64 +72098,217 @@ async function dpopProof(pair, jwk, htm, htu, ath) {
70953
72098
  const sig = await crypto.subtle.sign({ name: "ECDSA", hash: "SHA-256" }, pair.privateKey, new TextEncoder().encode(data));
70954
72099
  return `${data}.${b64u3(sig)}`;
70955
72100
  }
70956
- async function getSession() {
70957
- const s = await idbGet("session");
70958
- return s ? sessionHandle(s) : null;
70959
- }
70960
- async function signOut() {
70961
- const s = await idbGet("session").catch(() => null);
70962
- if (s?.revocationEndpoint && s.refreshToken) {
70963
- try {
70964
- await fetch(s.revocationEndpoint, {
70965
- method: "POST",
70966
- headers: { "content-type": "application/x-www-form-urlencoded" },
70967
- body: new URLSearchParams({
70968
- token: s.refreshToken,
70969
- token_type_hint: "refresh_token",
70970
- client_id: s.client_id
70971
- })
70972
- });
70973
- } catch {
70974
- }
72101
+ var jwtPayload = (jwt) => {
72102
+ try {
72103
+ return JSON.parse(new TextDecoder().decode(Uint8Array.from(atob(jwt.split(".")[1].replace(/-/g, "+").replace(/_/g, "/")), (c) => c.charCodeAt(0))));
72104
+ } catch {
72105
+ return {};
70975
72106
  }
70976
- await idbDel("session");
70977
- await idbDel("pending");
72107
+ };
72108
+ async function discover(issuer) {
72109
+ const res = await fetch(`${issuer.replace(/\/+$/, "")}/.well-known/openid-configuration`, { headers: { accept: "application/json" } });
72110
+ if (!res.ok) throw new Error(`OIDC discovery failed at ${issuer} (HTTP ${res.status})`);
72111
+ return res.json();
70978
72112
  }
70979
- function sessionHandle(s) {
70980
- let { accessToken, expiresAt, refreshToken } = s;
70981
- const jwkP = publicJwk(s.pair);
70982
- const refresh = async () => {
70983
- if (!refreshToken) throw new Error("session expired and there is no refresh token \u2014 sign in again");
70984
- const jwk = await jwkP;
70985
- const res = await fetch(s.tokenEndpoint, {
72113
+ async function registerClient(cfg, redirectUri, clientName) {
72114
+ const res = await fetch(cfg.registration_endpoint, {
72115
+ method: "POST",
72116
+ headers: { "content-type": "application/json" },
72117
+ body: JSON.stringify({
72118
+ client_name: clientName,
72119
+ redirect_uris: [redirectUri],
72120
+ token_endpoint_auth_method: "none",
72121
+ grant_types: ["authorization_code", "refresh_token"],
72122
+ response_types: ["code"],
72123
+ application_type: "web",
72124
+ scope: "openid webid offline_access"
72125
+ })
72126
+ });
72127
+ if (!res.ok) throw new Error(`client registration failed (HTTP ${res.status})`);
72128
+ return (await res.json()).client_id;
72129
+ }
72130
+ function solidOidcSession({ dbName = "solid-oidc-session", clientName = "Solid app" } = {}) {
72131
+ function idb() {
72132
+ return new Promise((res, rej) => {
72133
+ const r = indexedDB.open(dbName, 1);
72134
+ r.onupgradeneeded = () => r.result.createObjectStore(STORE);
72135
+ r.onsuccess = () => res(r.result);
72136
+ r.onerror = () => rej(r.error);
72137
+ });
72138
+ }
72139
+ async function idbGet(key) {
72140
+ const db = await idb();
72141
+ return new Promise((res, rej) => {
72142
+ const t = db.transaction(STORE).objectStore(STORE).get(key);
72143
+ t.onsuccess = () => res(t.result);
72144
+ t.onerror = () => rej(t.error);
72145
+ });
72146
+ }
72147
+ async function idbPut(key, val) {
72148
+ const db = await idb();
72149
+ return new Promise((res, rej) => {
72150
+ const t = db.transaction(STORE, "readwrite").objectStore(STORE).put(val, key);
72151
+ t.onsuccess = () => res();
72152
+ t.onerror = () => rej(t.error);
72153
+ });
72154
+ }
72155
+ async function idbDel(key) {
72156
+ const db = await idb();
72157
+ return new Promise((res, rej) => {
72158
+ const t = db.transaction(STORE, "readwrite").objectStore(STORE).delete(key);
72159
+ t.onsuccess = () => res();
72160
+ t.onerror = () => rej(t.error);
72161
+ });
72162
+ }
72163
+ async function beginLogin2({ issuer, redirectUri, clientName: name = clientName, returnTo = null }) {
72164
+ const cfg = await discover(issuer);
72165
+ const client_id = await registerClient(cfg, redirectUri, name);
72166
+ const pair = await dpopKey();
72167
+ const verifier = rand(48);
72168
+ const challenge = b64u3(await sha2564(verifier));
72169
+ const state = rand(16);
72170
+ await idbPut("pending", {
72171
+ issuer,
72172
+ client_id,
72173
+ redirectUri,
72174
+ verifier,
72175
+ state,
72176
+ pair,
72177
+ returnTo,
72178
+ tokenEndpoint: cfg.token_endpoint,
72179
+ authorizationEndpoint: cfg.authorization_endpoint,
72180
+ revocationEndpoint: cfg.revocation_endpoint || null
72181
+ });
72182
+ const url = new URL(cfg.authorization_endpoint);
72183
+ for (const [k, v] of Object.entries({
72184
+ client_id,
72185
+ redirect_uri: redirectUri,
72186
+ response_type: "code",
72187
+ scope: "openid webid offline_access",
72188
+ code_challenge: challenge,
72189
+ code_challenge_method: "S256",
72190
+ state,
72191
+ prompt: "consent"
72192
+ })) url.searchParams.set(k, v);
72193
+ return { authorizationUrl: url.href };
72194
+ }
72195
+ async function completeLogin2({ currentUrl }) {
72196
+ const u = new URL(currentUrl);
72197
+ const code = u.searchParams.get("code");
72198
+ const state = u.searchParams.get("state");
72199
+ if (!code) return null;
72200
+ const p = await idbGet("pending");
72201
+ if (!p || p.state !== state) throw new Error("login state mismatch");
72202
+ const jwk = await publicJwk(p.pair);
72203
+ const res = await fetch(p.tokenEndpoint, {
70986
72204
  method: "POST",
70987
- headers: { "content-type": "application/x-www-form-urlencoded", dpop: await dpopProof(s.pair, jwk, "POST", s.tokenEndpoint) },
70988
- body: new URLSearchParams({ grant_type: "refresh_token", refresh_token: refreshToken, client_id: s.client_id, scope: "openid webid offline_access" })
72205
+ headers: { "content-type": "application/x-www-form-urlencoded", dpop: await dpopProof(p.pair, jwk, "POST", p.tokenEndpoint) },
72206
+ body: new URLSearchParams({ grant_type: "authorization_code", code, redirect_uri: p.redirectUri, client_id: p.client_id, code_verifier: p.verifier })
70989
72207
  });
70990
72208
  const tok = await res.json().catch(() => ({}));
70991
- if (!res.ok || !tok.access_token) {
70992
- await idbDel("session");
70993
- throw new Error("refresh failed \u2014 sign in again");
70994
- }
70995
- accessToken = tok.access_token;
70996
- expiresAt = Date.now() + Math.max(30, tok.expires_in || 300) * 1e3;
70997
- if (tok.refresh_token) refreshToken = tok.refresh_token;
70998
- const now = await idbGet("session");
70999
- if (now && now.webId !== s.webId) {
71000
- throw new Error("signed in as somebody else while this session was refreshing");
71001
- }
71002
- await idbPut("session", { ...s, accessToken, expiresAt, refreshToken });
71003
- };
71004
- const authFetch = async (url, init = {}) => {
71005
- if (Date.now() > expiresAt - 3e4) await refresh();
71006
- const jwk = await jwkP;
71007
- const ath = b64u3(await sha2564(accessToken));
71008
- const headers = { ...init.headers || {}, authorization: `DPoP ${accessToken}`, dpop: await dpopProof(s.pair, jwk, init.method || "GET", url, ath) };
71009
- return fetch(url, { ...init, headers });
71010
- };
71011
- return { webId: s.webId, fetch: authFetch, refresh, signOut };
72209
+ if (!res.ok || !tok.access_token) throw new Error(`token exchange failed (HTTP ${res.status}): ${tok.error || ""}`);
72210
+ const webId = jwtPayload(tok.access_token).webid || jwtPayload(tok.id_token || "").webid || null;
72211
+ const session = {
72212
+ issuer: p.issuer,
72213
+ client_id: p.client_id,
72214
+ tokenEndpoint: p.tokenEndpoint,
72215
+ pair: p.pair,
72216
+ // Where to hand the refresh token back at sign-out. Kept on the session
72217
+ // because discovery is a network round trip and sign-out should not need
72218
+ // one — see signOut().
72219
+ revocationEndpoint: p.revocationEndpoint || null,
72220
+ refreshToken: tok.refresh_token || null,
72221
+ accessToken: tok.access_token,
72222
+ expiresAt: Date.now() + Math.max(30, tok.expires_in || 300) * 1e3,
72223
+ webId
72224
+ };
72225
+ await idbPut("session", session);
72226
+ await idbDel("pending");
72227
+ return Object.assign(sessionHandle(session), p.returnTo ? { returnTo: p.returnTo } : {});
72228
+ }
72229
+ async function getSession2() {
72230
+ const s = await idbGet("session");
72231
+ return s ? sessionHandle(s) : null;
72232
+ }
72233
+ async function signOut2() {
72234
+ const s = await idbGet("session").catch(() => null);
72235
+ if (s?.revocationEndpoint && s.refreshToken) {
72236
+ try {
72237
+ await fetch(s.revocationEndpoint, {
72238
+ method: "POST",
72239
+ headers: { "content-type": "application/x-www-form-urlencoded" },
72240
+ body: new URLSearchParams({
72241
+ token: s.refreshToken,
72242
+ token_type_hint: "refresh_token",
72243
+ client_id: s.client_id
72244
+ })
72245
+ });
72246
+ } catch {
72247
+ }
72248
+ }
72249
+ await idbDel("session");
72250
+ await idbDel("pending");
72251
+ }
72252
+ function sessionHandle(s) {
72253
+ let { accessToken, expiresAt, refreshToken } = s;
72254
+ const jwkP = publicJwk(s.pair);
72255
+ const refresh = async () => {
72256
+ if (!refreshToken) throw new Error("session expired and there is no refresh token \u2014 sign in again");
72257
+ const jwk = await jwkP;
72258
+ let res;
72259
+ try {
72260
+ res = await fetch(s.tokenEndpoint, {
72261
+ method: "POST",
72262
+ headers: { "content-type": "application/x-www-form-urlencoded", dpop: await dpopProof(s.pair, jwk, "POST", s.tokenEndpoint) },
72263
+ body: new URLSearchParams({ grant_type: "refresh_token", refresh_token: refreshToken, client_id: s.client_id, scope: "openid webid offline_access" })
72264
+ });
72265
+ } catch (e) {
72266
+ throw new Error(`${e.message} \u2014 renewing your sign-in at ${new URL(s.tokenEndpoint).host}`);
72267
+ }
72268
+ const tok = await res.json().catch(() => ({}));
72269
+ if (res.status === 429) {
72270
+ throw new Error(`${new URL(s.tokenEndpoint).host} is asking us to slow down \u2014 your sign-in could not be renewed just now`);
72271
+ }
72272
+ if (!res.ok || !tok.access_token) {
72273
+ await idbDel("session");
72274
+ throw new Error("refresh failed \u2014 sign in again");
72275
+ }
72276
+ accessToken = tok.access_token;
72277
+ expiresAt = Date.now() + Math.max(30, tok.expires_in || 300) * 1e3;
72278
+ if (tok.refresh_token) refreshToken = tok.refresh_token;
72279
+ const now = await idbGet("session");
72280
+ if (now && now.webId !== s.webId) {
72281
+ throw new Error("signed in as somebody else while this session was refreshing");
72282
+ }
72283
+ await idbPut("session", { ...s, accessToken, expiresAt, refreshToken });
72284
+ };
72285
+ const send = async (url, init) => {
72286
+ const jwk = await jwkP;
72287
+ const ath = b64u3(await sha2564(accessToken));
72288
+ const headers = { ...init.headers || {}, authorization: `DPoP ${accessToken}`, dpop: await dpopProof(s.pair, jwk, init.method || "GET", url, ath) };
72289
+ return fetch(url, { ...init, headers });
72290
+ };
72291
+ const authFetch = async (url, init = {}) => {
72292
+ if (Date.now() > expiresAt - 3e4) await refresh();
72293
+ const res = await send(url, init);
72294
+ if (res.status === 401 && refreshToken) {
72295
+ try {
72296
+ await refresh();
72297
+ } catch {
72298
+ return res;
72299
+ }
72300
+ return send(url, init);
72301
+ }
72302
+ return res;
72303
+ };
72304
+ return { webId: s.webId, issuer: s.issuer, fetch: authFetch, refresh, signOut: signOut2 };
72305
+ }
72306
+ return { beginLogin: beginLogin2, completeLogin: completeLogin2, getSession: getSession2, signOut: signOut2 };
71012
72307
  }
71013
72308
 
72309
+ // web/app/oidc-session.mjs
72310
+ var { beginLogin, completeLogin, getSession, signOut } = solidOidcSession({ dbName: "fedipod-oidc", clientName: "FediPod" });
72311
+
71014
72312
  // web/app/sw-src.mjs
71015
72313
  var agent = null;
71016
72314
  var booting = null;