git » swiftpm » commit d31d64e

Merge all call state messages

author Stephen Paul Weber
2026-02-10 18:47:15 UTC
committer Stephen Paul Weber
2026-02-10 18:47:15 UTC
parent 5add9a16b137fc3b45cec1459880f399cc0b9569

Merge all call state messages

Sources/c_borogove/src/borogove/persistence/Sqlite.cpp +768 -760

diff --git a/Sources/c_borogove/src/borogove/persistence/Sqlite.cpp b/Sources/c_borogove/src/borogove/persistence/Sqlite.cpp
index a401c4e..7ee27cf 100644
--- a/Sources/c_borogove/src/borogove/persistence/Sqlite.cpp
+++ b/Sources/c_borogove/src/borogove/persistence/Sqlite.cpp
@@ -199,31 +199,31 @@ HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_432_getMessage,"borogove.persisten
 HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_437_getMessage,"borogove.persistence.Sqlite","getMessage",0x3cf0b337,"borogove.persistence.Sqlite.getMessage","borogove/persistence/Sqlite.hx",437,0x605e3eb4)
 HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_420_getMessage,"borogove.persistence.Sqlite","getMessage",0x3cf0b337,"borogove.persistence.Sqlite.getMessage","borogove/persistence/Sqlite.hx",420,0x605e3eb4)
 HX_LOCAL_STACK_FRAME(_hx_pos_e0e41eef74e41160_337_getMessage__fromC,"borogove.persistence.Sqlite","getMessage__fromC",0x419ea222,"borogove.persistence.Sqlite.getMessage__fromC","HaxeCBridge.hx",337,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_478_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",478,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_491_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",491,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_479_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",479,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_492_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",492,0x605e3eb4)
 HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_442_getMessages,"borogove.persistence.Sqlite","getMessages",0x15ac1d5c,"borogove.persistence.Sqlite.getMessages","borogove/persistence/Sqlite.hx",442,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_496_getMessagesBefore,"borogove.persistence.Sqlite","getMessagesBefore",0x4d9d52fb,"borogove.persistence.Sqlite.getMessagesBefore","borogove/persistence/Sqlite.hx",496,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_501_getMessagesAfter,"borogove.persistence.Sqlite","getMessagesAfter",0xadefcb20,"borogove.persistence.Sqlite.getMessagesAfter","borogove/persistence/Sqlite.hx",501,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_517_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",517,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_521_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",521,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_505_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",505,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_508_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",508,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_511_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",511,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_529_getChatUnreadDetails,"borogove.persistence.Sqlite","getChatUnreadDetails",0x2c7619cb,"borogove.persistence.Sqlite.getChatUnreadDetails","borogove/persistence/Sqlite.hx",529,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_525_getChatUnreadDetails,"borogove.persistence.Sqlite","getChatUnreadDetails",0x2c7619cb,"borogove.persistence.Sqlite.getChatUnreadDetails","borogove/persistence/Sqlite.hx",525,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_537_getChatsUnreadDetails,"borogove.persistence.Sqlite","getChatsUnreadDetails",0x7e07eb48,"borogove.persistence.Sqlite.getChatsUnreadDetails","borogove/persistence/Sqlite.hx",537,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_555_storeReaction,"borogove.persistence.Sqlite","storeReaction",0x6b372d04,"borogove.persistence.Sqlite.storeReaction","borogove/persistence/Sqlite.hx",555,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_546_storeReaction,"borogove.persistence.Sqlite","storeReaction",0x6b372d04,"borogove.persistence.Sqlite.storeReaction","borogove/persistence/Sqlite.hx",546,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_565_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",565,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_570_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",570,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_575_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",575,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_577_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",577,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_560_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",560,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_582_hasMedia,"borogove.persistence.Sqlite","hasMedia",0x65758110,"borogove.persistence.Sqlite.hasMedia","borogove/persistence/Sqlite.hx",582,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_587_removeMedia,"borogove.persistence.Sqlite","removeMedia",0xbeaa63da,"borogove.persistence.Sqlite.removeMedia","borogove/persistence/Sqlite.hx",587,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_592_storeMedia,"borogove.persistence.Sqlite","storeMedia",0x96b8a8a9,"borogove.persistence.Sqlite.storeMedia","borogove/persistence/Sqlite.hx",592,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_597_storeCaps,"borogove.persistence.Sqlite","storeCaps",0xbf81d7fc,"borogove.persistence.Sqlite.storeCaps","borogove/persistence/Sqlite.hx",597,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_600_storeCapsSet,"borogove.persistence.Sqlite","storeCapsSet",0xeacfa106,"borogove.persistence.Sqlite.storeCapsSet","borogove/persistence/Sqlite.hx",600,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_497_getMessagesBefore,"borogove.persistence.Sqlite","getMessagesBefore",0x4d9d52fb,"borogove.persistence.Sqlite.getMessagesBefore","borogove/persistence/Sqlite.hx",497,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_502_getMessagesAfter,"borogove.persistence.Sqlite","getMessagesAfter",0xadefcb20,"borogove.persistence.Sqlite.getMessagesAfter","borogove/persistence/Sqlite.hx",502,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_518_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",518,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_522_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",522,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_506_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",506,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_509_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",509,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_512_getMessagesAround,"borogove.persistence.Sqlite","getMessagesAround",0x696ef6c9,"borogove.persistence.Sqlite.getMessagesAround","borogove/persistence/Sqlite.hx",512,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_530_getChatUnreadDetails,"borogove.persistence.Sqlite","getChatUnreadDetails",0x2c7619cb,"borogove.persistence.Sqlite.getChatUnreadDetails","borogove/persistence/Sqlite.hx",530,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_526_getChatUnreadDetails,"borogove.persistence.Sqlite","getChatUnreadDetails",0x2c7619cb,"borogove.persistence.Sqlite.getChatUnreadDetails","borogove/persistence/Sqlite.hx",526,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_538_getChatsUnreadDetails,"borogove.persistence.Sqlite","getChatsUnreadDetails",0x7e07eb48,"borogove.persistence.Sqlite.getChatsUnreadDetails","borogove/persistence/Sqlite.hx",538,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_556_storeReaction,"borogove.persistence.Sqlite","storeReaction",0x6b372d04,"borogove.persistence.Sqlite.storeReaction","borogove/persistence/Sqlite.hx",556,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_547_storeReaction,"borogove.persistence.Sqlite","storeReaction",0x6b372d04,"borogove.persistence.Sqlite.storeReaction","borogove/persistence/Sqlite.hx",547,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_566_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",566,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_571_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",571,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_576_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",576,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_578_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",578,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_561_updateMessageStatus,"borogove.persistence.Sqlite","updateMessageStatus",0x5be4846a,"borogove.persistence.Sqlite.updateMessageStatus","borogove/persistence/Sqlite.hx",561,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_583_hasMedia,"borogove.persistence.Sqlite","hasMedia",0x65758110,"borogove.persistence.Sqlite.hasMedia","borogove/persistence/Sqlite.hx",583,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_588_removeMedia,"borogove.persistence.Sqlite","removeMedia",0xbeaa63da,"borogove.persistence.Sqlite.removeMedia","borogove/persistence/Sqlite.hx",588,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_593_storeMedia,"borogove.persistence.Sqlite","storeMedia",0x96b8a8a9,"borogove.persistence.Sqlite.storeMedia","borogove/persistence/Sqlite.hx",593,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_598_storeCaps,"borogove.persistence.Sqlite","storeCaps",0xbf81d7fc,"borogove.persistence.Sqlite.storeCaps","borogove/persistence/Sqlite.hx",598,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_601_storeCapsSet,"borogove.persistence.Sqlite","storeCapsSet",0xeacfa106,"borogove.persistence.Sqlite.storeCapsSet","borogove/persistence/Sqlite.hx",601,0x605e3eb4)
 static const ::String _hx_array_data_99390348_108[] = {
 	HX_("INSERT OR IGNORE INTO caps VALUES ",27,4b,68,bf),
 };
@@ -233,9 +233,9 @@ static const ::String _hx_array_data_99390348_109[] = {
 static const ::String _hx_array_data_99390348_110[] = {
 	HX_("(?,jsonb(?))",1c,61,06,9e),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_626_getCaps,"borogove.persistence.Sqlite","getCaps",0x7da6d8b1,"borogove.persistence.Sqlite.getCaps","borogove/persistence/Sqlite.hx",626,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_617_getCaps,"borogove.persistence.Sqlite","getCaps",0x7da6d8b1,"borogove.persistence.Sqlite.getCaps","borogove/persistence/Sqlite.hx",617,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_636_storeLogin,"borogove.persistence.Sqlite","storeLogin",0x09f07d2e,"borogove.persistence.Sqlite.storeLogin","borogove/persistence/Sqlite.hx",636,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_627_getCaps,"borogove.persistence.Sqlite","getCaps",0x7da6d8b1,"borogove.persistence.Sqlite.getCaps","borogove/persistence/Sqlite.hx",627,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_618_getCaps,"borogove.persistence.Sqlite","getCaps",0x7da6d8b1,"borogove.persistence.Sqlite.getCaps","borogove/persistence/Sqlite.hx",618,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_637_storeLogin,"borogove.persistence.Sqlite","storeLogin",0x09f07d2e,"borogove.persistence.Sqlite.storeLogin","borogove/persistence/Sqlite.hx",637,0x605e3eb4)
 static const ::String _hx_array_data_99390348_115[] = {
 	HX_("INSERT INTO accounts (account_id, client_id, display_name",03,b0,6a,0b),
 };
@@ -263,21 +263,21 @@ static const ::String _hx_array_data_99390348_122[] = {
 static const ::String _hx_array_data_99390348_123[] = {
 	HX_(", fast_count=0",73,a8,4f,82),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_666_getLogin,"borogove.persistence.Sqlite","getLogin",0xac2c1ad9,"borogove.persistence.Sqlite.getLogin","borogove/persistence/Sqlite.hx",666,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_662_getLogin,"borogove.persistence.Sqlite","getLogin",0xac2c1ad9,"borogove.persistence.Sqlite.getLogin","borogove/persistence/Sqlite.hx",662,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_685_removeAccount,"borogove.persistence.Sqlite","removeAccount",0x39d68523,"borogove.persistence.Sqlite.removeAccount","borogove/persistence/Sqlite.hx",685,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_667_getLogin,"borogove.persistence.Sqlite","getLogin",0xac2c1ad9,"borogove.persistence.Sqlite.getLogin","borogove/persistence/Sqlite.hx",667,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_663_getLogin,"borogove.persistence.Sqlite","getLogin",0xac2c1ad9,"borogove.persistence.Sqlite.getLogin","borogove/persistence/Sqlite.hx",663,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_686_removeAccount,"borogove.persistence.Sqlite","removeAccount",0x39d68523,"borogove.persistence.Sqlite.removeAccount","borogove/persistence/Sqlite.hx",686,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_704_listAccounts,"borogove.persistence.Sqlite","listAccounts",0x9e5f9e8a,"borogove.persistence.Sqlite.listAccounts","borogove/persistence/Sqlite.hx",704,0x605e3eb4)
 HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_703_listAccounts,"borogove.persistence.Sqlite","listAccounts",0x9e5f9e8a,"borogove.persistence.Sqlite.listAccounts","borogove/persistence/Sqlite.hx",703,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_702_listAccounts,"borogove.persistence.Sqlite","listAccounts",0x9e5f9e8a,"borogove.persistence.Sqlite.listAccounts","borogove/persistence/Sqlite.hx",702,0x605e3eb4)
 HX_LOCAL_STACK_FRAME(_hx_pos_e0e41eef74e41160_337_listAccounts__fromC,"borogove.persistence.Sqlite","listAccounts__fromC",0xe40e172f,"borogove.persistence.Sqlite.listAccounts__fromC","HaxeCBridge.hx",337,0xa18550d8)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_710_storeStreamManagement,"borogove.persistence.Sqlite","storeStreamManagement",0x8665337e,"borogove.persistence.Sqlite.storeStreamManagement","borogove/persistence/Sqlite.hx",710,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_717_storeStreamManagement,"borogove.persistence.Sqlite","storeStreamManagement",0x8665337e,"borogove.persistence.Sqlite.storeStreamManagement","borogove/persistence/Sqlite.hx",717,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_726_getStreamManagement,"borogove.persistence.Sqlite","getStreamManagement",0xb922efb3,"borogove.persistence.Sqlite.getStreamManagement","borogove/persistence/Sqlite.hx",726,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_736_storeService,"borogove.persistence.Sqlite","storeService",0x466dfb3a,"borogove.persistence.Sqlite.storeService","borogove/persistence/Sqlite.hx",736,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_751_findServicesWithFeature,"borogove.persistence.Sqlite","findServicesWithFeature",0x99a02f73,"borogove.persistence.Sqlite.findServicesWithFeature","borogove/persistence/Sqlite.hx",751,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_746_findServicesWithFeature,"borogove.persistence.Sqlite","findServicesWithFeature",0x99a02f73,"borogove.persistence.Sqlite.findServicesWithFeature","borogove/persistence/Sqlite.hx",746,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_770_hydrateReactions,"borogove.persistence.Sqlite","hydrateReactions",0x7d654d7d,"borogove.persistence.Sqlite.hydrateReactions","borogove/persistence/Sqlite.hx",770,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_798_fetchReactions,"borogove.persistence.Sqlite","fetchReactions",0x688fe376,"borogove.persistence.Sqlite.fetchReactions","borogove/persistence/Sqlite.hx",798,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_782_fetchReactions,"borogove.persistence.Sqlite","fetchReactions",0x688fe376,"borogove.persistence.Sqlite.fetchReactions","borogove/persistence/Sqlite.hx",782,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_711_storeStreamManagement,"borogove.persistence.Sqlite","storeStreamManagement",0x8665337e,"borogove.persistence.Sqlite.storeStreamManagement","borogove/persistence/Sqlite.hx",711,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_718_storeStreamManagement,"borogove.persistence.Sqlite","storeStreamManagement",0x8665337e,"borogove.persistence.Sqlite.storeStreamManagement","borogove/persistence/Sqlite.hx",718,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_727_getStreamManagement,"borogove.persistence.Sqlite","getStreamManagement",0xb922efb3,"borogove.persistence.Sqlite.getStreamManagement","borogove/persistence/Sqlite.hx",727,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_737_storeService,"borogove.persistence.Sqlite","storeService",0x466dfb3a,"borogove.persistence.Sqlite.storeService","borogove/persistence/Sqlite.hx",737,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_752_findServicesWithFeature,"borogove.persistence.Sqlite","findServicesWithFeature",0x99a02f73,"borogove.persistence.Sqlite.findServicesWithFeature","borogove/persistence/Sqlite.hx",752,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_747_findServicesWithFeature,"borogove.persistence.Sqlite","findServicesWithFeature",0x99a02f73,"borogove.persistence.Sqlite.findServicesWithFeature","borogove/persistence/Sqlite.hx",747,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_771_hydrateReactions,"borogove.persistence.Sqlite","hydrateReactions",0x7d654d7d,"borogove.persistence.Sqlite.hydrateReactions","borogove/persistence/Sqlite.hx",771,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_799_fetchReactions,"borogove.persistence.Sqlite","fetchReactions",0x688fe376,"borogove.persistence.Sqlite.fetchReactions","borogove/persistence/Sqlite.hx",799,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_783_fetchReactions,"borogove.persistence.Sqlite","fetchReactions",0x688fe376,"borogove.persistence.Sqlite.fetchReactions","borogove/persistence/Sqlite.hx",783,0x605e3eb4)
 static const ::String _hx_array_data_99390348_159[] = {
 	HX_("SELECT kind, chat_id, mam_id, mam_by, stanza_id, sender_id, json(reactions) AS reactions FROM reactions WHERE 1=0",d2,04,de,a3),
 };
@@ -290,14 +290,14 @@ static const ::String _hx_array_data_99390348_161[] = {
 static const ::String _hx_array_data_99390348_162[] = {
 	HX_(" ORDER BY created_at, ROWID",00,65,8d,0e),
 };
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_866_hydrateReplyTo,"borogove.persistence.Sqlite","hydrateReplyTo",0xa56a0758,"borogove.persistence.Sqlite.hydrateReplyTo","borogove/persistence/Sqlite.hx",866,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_868_hydrateReplyTo,"borogove.persistence.Sqlite","hydrateReplyTo",0xa56a0758,"borogove.persistence.Sqlite.hydrateReplyTo","borogove/persistence/Sqlite.hx",868,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_835_hydrateReplyTo,"borogove.persistence.Sqlite","hydrateReplyTo",0xa56a0758,"borogove.persistence.Sqlite.hydrateReplyTo","borogove/persistence/Sqlite.hx",835,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_880_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",880,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_883_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",883,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_914_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",914,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_904_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",904,0x605e3eb4)
-HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_922_hydrateCaps,"borogove.persistence.Sqlite","hydrateCaps",0x4e204c2e,"borogove.persistence.Sqlite.hydrateCaps","borogove/persistence/Sqlite.hx",922,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_867_hydrateReplyTo,"borogove.persistence.Sqlite","hydrateReplyTo",0xa56a0758,"borogove.persistence.Sqlite.hydrateReplyTo","borogove/persistence/Sqlite.hx",867,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_869_hydrateReplyTo,"borogove.persistence.Sqlite","hydrateReplyTo",0xa56a0758,"borogove.persistence.Sqlite.hydrateReplyTo","borogove/persistence/Sqlite.hx",869,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_836_hydrateReplyTo,"borogove.persistence.Sqlite","hydrateReplyTo",0xa56a0758,"borogove.persistence.Sqlite.hydrateReplyTo","borogove/persistence/Sqlite.hx",836,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_881_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",881,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_884_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",884,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_915_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",915,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_905_hydrateMessages,"borogove.persistence.Sqlite","hydrateMessages",0x24719359,"borogove.persistence.Sqlite.hydrateMessages","borogove/persistence/Sqlite.hx",905,0x605e3eb4)
+HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_923_hydrateCaps,"borogove.persistence.Sqlite","hydrateCaps",0x4e204c2e,"borogove.persistence.Sqlite.hydrateCaps","borogove/persistence/Sqlite.hx",923,0x605e3eb4)
 HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_37_prepare,"borogove.persistence.Sqlite","prepare",0xa1479e61,"borogove.persistence.Sqlite.prepare","borogove/persistence/Sqlite.hx",37,0x605e3eb4)
 HX_LOCAL_STACK_FRAME(_hx_pos_4648627e4fbfb4d7_31_boot,"borogove.persistence.Sqlite","boot",0xf1784b18,"borogove.persistence.Sqlite.boot","borogove/persistence/Sqlite.hx",31,0x605e3eb4)
 namespace borogove{
@@ -385,8 +385,8 @@ HXLINE(  81)			return ::thenshim::_Promise::Promise_Impl__obj::then(exec(::Array
             		HX_END_LOCAL_FUNC1(return)
 
             	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_31_new)
-HXLINE( 708)		this->smStoreNext = null();
-HXLINE( 707)		this->smStoreInProgress = false;
+HXLINE( 709)		this->smStoreNext = null();
+HXLINE( 708)		this->smStoreInProgress = false;
 HXLINE( 236)		this->storeChatTimer = null();
 HXLINE( 235)		this->storeChatBuffer =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
 HXLINE(  79)		this->media = media;
@@ -972,9 +972,16 @@ HXLINE( 392)						_hx_tmp3 = tmp2;
 HXLINE( 392)						_hx_tmp3 = HX_("",00,00,00,00);
             					}
 HXDLIN( 392)					::String _hx_tmp4;
-HXDLIN( 392)					::String tmp3 = x->localId;
+HXDLIN( 392)					::String tmp3 = x->callSid();
+HXDLIN( 392)					::String tmp4;
 HXDLIN( 392)					if (::hx::IsNotNull( tmp3 )) {
-HXLINE( 392)						_hx_tmp4 = tmp3;
+HXLINE( 392)						tmp4 = tmp3;
+            					}
+            					else {
+HXLINE( 392)						tmp4 = x->localId;
+            					}
+HXDLIN( 392)					if (::hx::IsNotNull( tmp4 )) {
+HXLINE( 392)						_hx_tmp4 = tmp4;
             					}
             					else {
 HXLINE( 392)						_hx_tmp4 = x->serverId;
@@ -1349,63 +1356,63 @@ HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(this->getMessage(ac
 ::Dynamic Sqlite_obj::getMessages(::String accountId,::String chatId,::String time,::String op){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             		::Array< ::Dynamic> _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_478_getMessages)
-HXLINE( 478)			return _gthis->hydrateMessages(accountId,result);
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_479_getMessages)
+HXLINE( 479)			return _gthis->hydrateMessages(accountId,result);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1, ::borogove::persistence::Sqlite,_gthis,::String,op,::String,accountId) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> iter){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_478_getMessages)
-HXLINE( 479)			::Array< ::Dynamic> arr = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 480)			::Array< ::Dynamic> replyTos = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 481)			{
-HXLINE( 481)				int _g = 0;
-HXDLIN( 481)				while((_g < iter->length)){
-HXLINE( 481)					 ::borogove::ChatMessage message = iter->__get(_g).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 481)					_g = (_g + 1);
-HXLINE( 482)					arr->push(message);
-HXLINE( 483)					bool _hx_tmp;
-HXDLIN( 483)					if (::hx::IsNotNull( message->replyToMessage )) {
-HXLINE( 483)						_hx_tmp = ::hx::IsNull( message->replyToMessage->serverIdBy );
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_479_getMessages)
+HXLINE( 480)			::Array< ::Dynamic> arr = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 481)			::Array< ::Dynamic> replyTos = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 482)			{
+HXLINE( 482)				int _g = 0;
+HXDLIN( 482)				while((_g < iter->length)){
+HXLINE( 482)					 ::borogove::ChatMessage message = iter->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 482)					_g = (_g + 1);
+HXLINE( 483)					arr->push(message);
+HXLINE( 484)					bool _hx_tmp;
+HXDLIN( 484)					if (::hx::IsNotNull( message->replyToMessage )) {
+HXLINE( 484)						_hx_tmp = ::hx::IsNull( message->replyToMessage->serverIdBy );
             					}
             					else {
-HXLINE( 483)						_hx_tmp = false;
+HXLINE( 484)						_hx_tmp = false;
             					}
-HXDLIN( 483)					if (_hx_tmp) {
-HXLINE( 484)						::String _hx_tmp1 = message->chatId();
-HXDLIN( 484)						replyTos->push( ::Dynamic(::hx::Anon_obj::Create(3)
+HXDLIN( 484)					if (_hx_tmp) {
+HXLINE( 485)						::String _hx_tmp1 = message->chatId();
+HXDLIN( 485)						replyTos->push( ::Dynamic(::hx::Anon_obj::Create(3)
             							->setFixed(0,HX_("chatId",d3,04,77,b7),_hx_tmp1)
             							->setFixed(1,HX_("serverId",7e,01,b2,e2),message->replyToMessage->serverId)
             							->setFixed(2,HX_("localId",26,7a,c6,2d),message->replyToMessage->localId)));
             					}
             				}
             			}
-HXLINE( 487)			bool _hx_tmp2;
-HXDLIN( 487)			if ((op != HX_("<",3c,00,00,00))) {
-HXLINE( 487)				_hx_tmp2 = (op == HX_("<=",81,34,00,00));
+HXLINE( 488)			bool _hx_tmp2;
+HXDLIN( 488)			if ((op != HX_("<",3c,00,00,00))) {
+HXLINE( 488)				_hx_tmp2 = (op == HX_("<=",81,34,00,00));
             			}
             			else {
-HXLINE( 487)				_hx_tmp2 = true;
+HXLINE( 488)				_hx_tmp2 = true;
             			}
-HXDLIN( 487)			if (_hx_tmp2) {
-HXLINE( 488)				arr->reverse();
+HXDLIN( 488)			if (_hx_tmp2) {
+HXLINE( 489)				arr->reverse();
             			}
-HXLINE( 490)			return _gthis->hydrateReplyTo(accountId,arr,replyTos);
+HXLINE( 491)			return _gthis->hydrateReplyTo(accountId,arr,replyTos);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> messages){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_491_getMessages)
-HXLINE( 491)			return _gthis->hydrateReactions(accountId,messages);
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_492_getMessages)
+HXLINE( 492)			return _gthis->hydrateReactions(accountId,messages);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_442_getMessages)
 HXDLIN( 442)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
 HXLINE( 443)		::String q = HX_("WITH page AS (SELECT stanza_id, mam_id FROM messages where account_id=? AND chat_id=? AND (stanza_id IS NULL OR stanza_id='' OR stanza_id=correction_id)",a0,7a,6e,a0);
-HXLINE( 444)		::Array< ::String > params = ::Array_obj< ::String >::__new(2)->init(0,accountId)->init(1,chatId);
+HXLINE( 444)		::cpp::VirtualArray params = ::cpp::VirtualArray_obj::__new(2)->init(0,accountId)->init(1,chatId);
 HXLINE( 445)		if (::hx::IsNotNull( time )) {
 HXLINE( 446)			q = (HX_("WITH page AS (SELECT stanza_id, mam_id FROM messages where account_id=? AND chat_id=? AND (stanza_id IS NULL OR stanza_id='' OR stanza_id=correction_id)",a0,7a,6e,a0) + ((HX_(" AND messages.created_at ",3d,a0,ae,bb) + op) + HX_("CAST(unixepoch(?, 'subsec') * 1000 AS INTEGER)",17,de,5d,f8)));
 HXLINE( 447)			params->push(time);
@@ -1433,7 +1440,7 @@ HXDLIN( 452)		if (_hx_tmp1) {
 HXLINE( 452)			q = (q + HX_(" DESC",71,b6,f9,99));
             		}
 HXLINE( 453)		q = (q + HX_(" LIMIT 50) ",37,de,84,8e));
-HXLINE( 454)		q = (q + HX_("SELECT\n\t\t\tcorrection_id AS stanza_id,\n\t\t\tversions.stanza,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, strftime('%FT%H:%M:%fZ', versions.created_at / 1000.0, 'unixepoch')) AS version_times,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, versions.stanza) AS versions,\n\t\t\tmessages.direction,\n\t\t\tmessages.type,\n\t\t\tmessages.status,\n\t\t\tmessages.status_text,\n\t\t\tstrftime('%FT%H:%M:%fZ', messages.created_at / 1000.0, 'unixepoch') AS timestamp,\n\t\t\tmessages.sender_id,\n\t\t\tmessages.mam_id,\n\t\t\tmessages.mam_by,\n\t\t\tmessages.sync_point,\n\t\t\tMAX(versions.created_at)\n\t\t\tFROM messages INNER JOIN messages versions USING (correction_id, sender_id) WHERE (messages.stanza_id, messages.mam_id) IN (SELECT * FROM page) AND messages.account_id=? AND messages.chat_id=? GROUP BY correction_id, messages.sender_id",a3,ed,c1,0b));
+HXLINE( 454)		q = (q + HX_("SELECT\n\t\t\tcorrection_id AS stanza_id,\n\t\t\tversions.stanza,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, strftime('%FT%H:%M:%fZ', versions.created_at / 1000.0, 'unixepoch')) AS version_times,\n\t\t\tjson_group_object(CASE WHEN versions.mam_id IS NULL OR versions.mam_id='' THEN versions.stanza_id ELSE versions.mam_id END, versions.stanza) AS versions,\n\t\t\tmessages.direction,\n\t\t\tmessages.type,\n\t\t\tmessages.status,\n\t\t\tmessages.status_text,\n\t\t\tstrftime('%FT%H:%M:%fZ', messages.created_at / 1000.0, 'unixepoch') AS timestamp,\n\t\t\tmessages.sender_id,\n\t\t\tmessages.mam_id,\n\t\t\tmessages.mam_by,\n\t\t\tmessages.sync_point,\n\t\t\tMAX(versions.created_at)\n\t\t\tFROM messages INNER JOIN messages versions USING (correction_id, sender_id) WHERE (messages.stanza_id, messages.mam_id) IN (SELECT * FROM page) AND messages.account_id=? AND messages.chat_id=? GROUP BY correction_id, CASE WHEN messages.type=? THEN 'call' ELSE messages.sender_id END",f2,98,71,a8));
 HXLINE( 470)		q = (q + HX_(" ORDER BY messages.created_at",55,af,d5,29));
 HXLINE( 471)		bool _hx_tmp2;
 HXDLIN( 471)		if ((op != HX_("<",3c,00,00,00))) {
@@ -1458,23 +1465,24 @@ HXLINE( 473)			q = (q + HX_(" DESC",71,b6,f9,99));
             		}
 HXLINE( 475)		params->push(accountId);
 HXLINE( 476)		params->push(chatId);
-HXLINE( 478)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q,params), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_1(_gthis,op,accountId)),null()), ::Dynamic(new _hx_Closure_2(_gthis,accountId)),null());
+HXLINE( 477)		params->push(1);
+HXLINE( 479)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(q,params), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_1(_gthis,op,accountId)),null()), ::Dynamic(new _hx_Closure_2(_gthis,accountId)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC4(Sqlite_obj,getMessages,return )
 
 ::Dynamic Sqlite_obj::getMessagesBefore(::String accountId,::String chatId,::String beforeId,::String beforeTime){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_496_getMessagesBefore)
-HXDLIN( 496)		return this->getMessages(accountId,chatId,beforeTime,HX_("<",3c,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_497_getMessagesBefore)
+HXDLIN( 497)		return this->getMessages(accountId,chatId,beforeTime,HX_("<",3c,00,00,00));
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC4(Sqlite_obj,getMessagesBefore,return )
 
 ::Dynamic Sqlite_obj::getMessagesAfter(::String accountId,::String chatId,::String afterId,::String afterTime){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_501_getMessagesAfter)
-HXDLIN( 501)		return this->getMessages(accountId,chatId,afterTime,HX_(">",3e,00,00,00));
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_502_getMessagesAfter)
+HXDLIN( 502)		return this->getMessages(accountId,chatId,afterTime,HX_(">",3e,00,00,00));
             	}
 
 
@@ -1483,68 +1491,68 @@ HX_DEFINE_DYNAMIC_FUNC4(Sqlite_obj,getMessagesAfter,return )
 ::Dynamic Sqlite_obj::getMessagesAround(::String accountId,::String chatId,::String aroundId,::String aroundTime){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_2, ::borogove::persistence::Sqlite,_gthis,::String,chatId,::String,accountId) HXARGC(1)
             		::Dynamic _hx_run(::String aroundTime){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_517_getMessagesAround)
-HXLINE( 518)			::Dynamic _hx_tmp = _gthis->getMessages(accountId,chatId,aroundTime,HX_("<",3c,00,00,00));
-HXLINE( 517)			return ::thenshim::PromiseTools_obj::all(::Array_obj< ::Dynamic>::__new(2)->init(0,_hx_tmp)->init(1,_gthis->getMessages(accountId,chatId,aroundTime,HX_(">=",3f,36,00,00))));
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_518_getMessagesAround)
+HXLINE( 519)			::Dynamic _hx_tmp = _gthis->getMessages(accountId,chatId,aroundTime,HX_("<",3c,00,00,00));
+HXLINE( 518)			return ::thenshim::PromiseTools_obj::all(::Array_obj< ::Dynamic>::__new(2)->init(0,_hx_tmp)->init(1,_gthis->getMessages(accountId,chatId,aroundTime,HX_(">=",3f,36,00,00))));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_3) HXARGC(1)
             		::Array< ::Dynamic> _hx_run(::Array< ::Dynamic> results){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_521_getMessagesAround)
-HXLINE( 521)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 521)			{
-HXLINE( 521)				int _g_current = 0;
-HXDLIN( 521)				while((_g_current < results->length)){
-HXLINE( 521)					_g_current = (_g_current + 1);
-HXDLIN( 521)					{
-HXLINE( 521)						 ::Dynamic x = results->__get((_g_current - 1)).StaticCast< ::Array< ::Dynamic> >()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 521)						while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 521)							_g->push(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_522_getMessagesAround)
+HXLINE( 522)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 522)			{
+HXLINE( 522)				int _g_current = 0;
+HXDLIN( 522)				while((_g_current < results->length)){
+HXLINE( 522)					_g_current = (_g_current + 1);
+HXDLIN( 522)					{
+HXLINE( 522)						 ::Dynamic x = results->__get((_g_current - 1)).StaticCast< ::Array< ::Dynamic> >()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 522)						while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 522)							_g->push(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
             						}
             					}
             				}
             			}
-HXDLIN( 521)			return _g;
+HXDLIN( 522)			return _g;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_505_getMessagesAround)
-HXDLIN( 505)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 506)		::Dynamic _hx_tmp;
-HXDLIN( 506)		if (::hx::IsNull( aroundTime )) {
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_506_getMessagesAround)
+HXDLIN( 506)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 507)		::Dynamic _hx_tmp;
+HXDLIN( 507)		if (::hx::IsNull( aroundTime )) {
             			HX_BEGIN_LOCAL_FUNC_S4(::hx::LocalFunc,_hx_Closure_1, ::borogove::persistence::Sqlite,_gthis,::String,chatId,::String,aroundId,::String,accountId) HXARGC(1)
             			::Dynamic _hx_run( ::borogove::ChatMessage m){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_508_getMessagesAround)
-HXLINE( 508)				if (::hx::IsNotNull( m )) {
-HXLINE( 509)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(m->timestamp);
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_509_getMessagesAround)
+HXLINE( 509)				if (::hx::IsNotNull( m )) {
+HXLINE( 510)					return ::thenshim::_Promise::Promise_Impl__obj::resolve(m->timestamp);
             				}
             				else {
             					HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             					::String _hx_run( ::borogove::ChatMessage m){
-            						HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_511_getMessagesAround)
-HXLINE( 511)						if (::hx::IsNotNull( m )) {
-HXLINE( 511)							return m->timestamp;
+            						HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_512_getMessagesAround)
+HXLINE( 512)						if (::hx::IsNotNull( m )) {
+HXLINE( 512)							return m->timestamp;
             						}
             						else {
-HXLINE( 511)							return null();
+HXLINE( 512)							return null();
             						}
-HXDLIN( 511)						return null();
+HXDLIN( 512)						return null();
             					}
             					HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 511)					return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->getMessage(accountId,chatId,null(),aroundId), ::Dynamic(new _hx_Closure_0()),null());
+HXLINE( 512)					return ::thenshim::_Promise::Promise_Impl__obj::then(_gthis->getMessage(accountId,chatId,null(),aroundId), ::Dynamic(new _hx_Closure_0()),null());
             				}
-HXLINE( 508)				return null();
+HXLINE( 509)				return null();
             			}
             			HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 506)			_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::then(this->getMessage(accountId,chatId,aroundId,null()), ::Dynamic(new _hx_Closure_1(_gthis,chatId,aroundId,accountId)),null());
+HXLINE( 507)			_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::then(this->getMessage(accountId,chatId,aroundId,null()), ::Dynamic(new _hx_Closure_1(_gthis,chatId,aroundId,accountId)),null());
             		}
             		else {
-HXLINE( 506)			_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::resolve(aroundTime);
+HXLINE( 507)			_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::resolve(aroundTime);
             		}
-HXDLIN( 506)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp, ::Dynamic(new _hx_Closure_2(_gthis,chatId,accountId)),null()), ::Dynamic(new _hx_Closure_3()),null());
+HXDLIN( 507)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp, ::Dynamic(new _hx_Closure_2(_gthis,chatId,accountId)),null()), ::Dynamic(new _hx_Closure_3()),null());
             	}
 
 
@@ -1553,60 +1561,60 @@ HX_DEFINE_DYNAMIC_FUNC4(Sqlite_obj,getMessagesAround,return )
 ::Dynamic Sqlite_obj::getChatUnreadDetails(::String accountId, ::borogove::Chat chat){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis, ::borogove::Chat,chat,::String,accountId) HXARGC(1)
             		 ::Dynamic _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_529_getChatUnreadDetails)
-HXLINE( 530)			 ::Dynamic row = result->array->__get(result->current++);
-HXLINE( 531)			::Array< ::Dynamic> lastMessage;
-HXDLIN( 531)			if (::hx::IsNull( row->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic) )) {
-HXLINE( 531)				lastMessage = ::Array_obj< ::Dynamic>::__new(0);
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_530_getChatUnreadDetails)
+HXLINE( 531)			 ::Dynamic row = result->array->__get(result->current++);
+HXLINE( 532)			::Array< ::Dynamic> lastMessage;
+HXDLIN( 532)			if (::hx::IsNull( row->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic) )) {
+HXLINE( 532)				lastMessage = ::Array_obj< ::Dynamic>::__new(0);
             			}
             			else {
-HXLINE( 531)				lastMessage = _gthis->hydrateMessages(accountId, ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,::cpp::VirtualArray_obj::__new(1)->init(0,row)));
+HXLINE( 532)				lastMessage = _gthis->hydrateMessages(accountId, ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,::cpp::VirtualArray_obj::__new(1)->init(0,row)));
             			}
-HXLINE( 532)			return  ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 533)			return  ::Dynamic(::hx::Anon_obj::Create(3)
             				->setFixed(0,HX_("message",c7,35,11,9a),lastMessage->__get(0).StaticCast<  ::borogove::ChatMessage >())
             				->setFixed(1,HX_("unreadCount",20,18,f1,a0), ::Dynamic(row->__Field(HX_("unreadCount",20,18,f1,a0),::hx::paccDynamic)))
             				->setFixed(2,HX_("chatId",d3,04,77,b7),chat->chatId));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_525_getChatUnreadDetails)
-HXDLIN( 525)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 526)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
-HXLINE( 528)		::String accountId1 = accountId;
-HXDLIN( 528)		::String chat1 = chat->chatId;
-HXDLIN( 528)		::String _hx_tmp1 = chat->readUpTo();
-HXLINE( 526)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(HX_("WITH subq as (SELECT ROWID as row, COALESCE(MAX(created_at), 0) as created_at FROM messages where account_id=? AND chat_id=? AND (mam_id=? OR direction=?)) SELECT chat_id AS chatId, stanza, direction, type, status, status_text, sender_id, mam_id, mam_by, sync_point, CASE WHEN (SELECT row FROM subq) IS NULL THEN COUNT(*) ELSE COUNT(*) - 1 END AS unreadCount, strftime('%FT%H:%M:%fZ', MAX(messages.created_at) / 1000.0, 'unixepoch') AS timestamp FROM messages WHERE account_id=? AND chat_id=? AND (stanza_id IS NULL OR stanza_id='' OR stanza_id=correction_id) AND (messages.created_at >= (SELECT created_at FROM subq) AND (messages.created_at <> (SELECT created_at FROM subq) OR messages.ROWID = (SELECT row FROM subq)))",69,c0,d3,b0),::cpp::VirtualArray_obj::__new(6)->init(0,accountId1)->init(1,chat1)->init(2,_hx_tmp1)->init(3,1)->init(4,accountId)->init(5,chat->chatId)), ::Dynamic(new _hx_Closure_0(_gthis,chat,accountId)),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_526_getChatUnreadDetails)
+HXDLIN( 526)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 527)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXLINE( 529)		::String accountId1 = accountId;
+HXDLIN( 529)		::String chat1 = chat->chatId;
+HXDLIN( 529)		::String _hx_tmp1 = chat->readUpTo();
+HXLINE( 527)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(HX_("WITH subq as (SELECT ROWID as row, COALESCE(MAX(created_at), 0) as created_at FROM messages where account_id=? AND chat_id=? AND (mam_id=? OR direction=?)) SELECT chat_id AS chatId, stanza, direction, type, status, status_text, sender_id, mam_id, mam_by, sync_point, CASE WHEN (SELECT row FROM subq) IS NULL THEN COUNT(*) ELSE COUNT(*) - 1 END AS unreadCount, strftime('%FT%H:%M:%fZ', MAX(messages.created_at) / 1000.0, 'unixepoch') AS timestamp FROM messages WHERE account_id=? AND chat_id=? AND (stanza_id IS NULL OR stanza_id='' OR stanza_id=correction_id) AND (messages.created_at >= (SELECT created_at FROM subq) AND (messages.created_at <> (SELECT created_at FROM subq) OR messages.ROWID = (SELECT row FROM subq)))",69,c0,d3,b0),::cpp::VirtualArray_obj::__new(6)->init(0,accountId1)->init(1,chat1)->init(2,_hx_tmp1)->init(3,1)->init(4,accountId)->init(5,chat->chatId)), ::Dynamic(new _hx_Closure_0(_gthis,chat,accountId)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,getChatUnreadDetails,return )
 
 ::Dynamic Sqlite_obj::getChatsUnreadDetails(::String accountId,::Array< ::Dynamic> chats){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_537_getChatsUnreadDetails)
-HXLINE( 538)		bool _hx_tmp;
-HXDLIN( 538)		if (::hx::IsNotNull( chats )) {
-HXLINE( 538)			_hx_tmp = (chats->length < 1);
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_538_getChatsUnreadDetails)
+HXLINE( 539)		bool _hx_tmp;
+HXDLIN( 539)		if (::hx::IsNotNull( chats )) {
+HXLINE( 539)			_hx_tmp = (chats->length < 1);
             		}
             		else {
-HXLINE( 538)			_hx_tmp = true;
+HXLINE( 539)			_hx_tmp = true;
             		}
-HXDLIN( 538)		if (_hx_tmp) {
-HXLINE( 539)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
+HXDLIN( 539)		if (_hx_tmp) {
+HXLINE( 540)			return ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(0));
             		}
-HXLINE( 542)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(chats->length);
-HXDLIN( 542)		{
-HXLINE( 542)			int _g = 0;
-HXDLIN( 542)			int _g1 = chats->length;
-HXDLIN( 542)			while((_g < _g1)){
-HXLINE( 542)				_g = (_g + 1);
-HXDLIN( 542)				int i = (_g - 1);
-HXDLIN( 542)				{
-HXLINE( 542)					::Dynamic inValue = this->getChatUnreadDetails(accountId,( ( ::borogove::Chat)(_hx_array_unsafe_get(chats,i)) ));
-HXDLIN( 542)					result->__unsafe_set(i,inValue);
+HXLINE( 543)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(chats->length);
+HXDLIN( 543)		{
+HXLINE( 543)			int _g = 0;
+HXDLIN( 543)			int _g1 = chats->length;
+HXDLIN( 543)			while((_g < _g1)){
+HXLINE( 543)				_g = (_g + 1);
+HXDLIN( 543)				int i = (_g - 1);
+HXDLIN( 543)				{
+HXLINE( 543)					::Dynamic inValue = this->getChatUnreadDetails(accountId,( ( ::borogove::Chat)(_hx_array_unsafe_get(chats,i)) ));
+HXDLIN( 543)					result->__unsafe_set(i,inValue);
             				}
             			}
             		}
-HXDLIN( 542)		return ::thenshim::PromiseTools_obj::all(result);
+HXDLIN( 543)		return ::thenshim::PromiseTools_obj::all(result);
             	}
 
 
@@ -1615,24 +1623,24 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,getChatsUnreadDetails,return )
 ::Dynamic Sqlite_obj::storeReaction(::String accountId, ::borogove::ReactionUpdate update){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,accountId, ::borogove::ReactionUpdate,update) HXARGC(1)
             		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_555_storeReaction)
-HXLINE( 555)			return _gthis->getMessage(accountId,update->chatId,update->serverId,update->localId);
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_556_storeReaction)
+HXLINE( 556)			return _gthis->getMessage(accountId,update->chatId,update->serverId,update->localId);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_546_storeReaction)
-HXDLIN( 546)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 547)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
-HXLINE( 550)		::String accountId1 = accountId;
-HXDLIN( 550)		::String update1 = update->updateId;
-HXDLIN( 550)		::String update2 = update->serverId;
-HXDLIN( 550)		::String update3 = update->serverIdBy;
-HXLINE( 551)		::String update4 = update->localId;
-HXDLIN( 551)		::String update5 = update->chatId;
-HXDLIN( 551)		::String update6 = update->senderId;
-HXDLIN( 551)		::String update7 = update->timestamp;
-HXLINE( 552)		::String _hx_tmp1 = ::borogove::JsonPrinter_obj::print(update->reactions,null(),null());
-HXLINE( 547)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(HX_("INSERT OR REPLACE INTO reactions VALUES (?,?,?,?,?,?,?,CAST(unixepoch(?, 'subsec') * 1000 AS INTEGER),jsonb(?),?)",e2,55,57,48),::cpp::VirtualArray_obj::__new(10)->init(0,accountId1)->init(1,update1)->init(2,update2)->init(3,update3)->init(4,update4)->init(5,update5)->init(6,update6)->init(7,update7)->init(8,_hx_tmp1)->init(9,update->kind)), ::Dynamic(new _hx_Closure_0(_gthis,accountId,update)),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_547_storeReaction)
+HXDLIN( 547)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 548)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXLINE( 551)		::String accountId1 = accountId;
+HXDLIN( 551)		::String update1 = update->updateId;
+HXDLIN( 551)		::String update2 = update->serverId;
+HXDLIN( 551)		::String update3 = update->serverIdBy;
+HXLINE( 552)		::String update4 = update->localId;
+HXDLIN( 552)		::String update5 = update->chatId;
+HXDLIN( 552)		::String update6 = update->senderId;
+HXDLIN( 552)		::String update7 = update->timestamp;
+HXLINE( 553)		::String _hx_tmp1 = ::borogove::JsonPrinter_obj::print(update->reactions,null(),null());
+HXLINE( 548)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(HX_("INSERT OR REPLACE INTO reactions VALUES (?,?,?,?,?,?,?,CAST(unixepoch(?, 'subsec') * 1000 AS INTEGER),jsonb(?),?)",e2,55,57,48),::cpp::VirtualArray_obj::__new(10)->init(0,accountId1)->init(1,update1)->init(2,update2)->init(3,update3)->init(4,update4)->init(5,update5)->init(6,update6)->init(7,update7)->init(8,_hx_tmp1)->init(9,update->kind)), ::Dynamic(new _hx_Closure_0(_gthis,accountId,update)),null());
             	}
 
 
@@ -1641,207 +1649,207 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,storeReaction,return )
 ::Dynamic Sqlite_obj::updateMessageStatus(::String accountId,::String localId,int status,::String statusText){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,localId,::String,accountId) HXARGC(1)
             		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator _){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_565_updateMessageStatus)
-HXLINE( 565)			return _gthis->db->exec(HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, correction_id AS stanza_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND stanza_id=? AND direction=? LIMIT 1",ed,02,c0,1d),::cpp::VirtualArray_obj::__new(3)->init(0,accountId)->init(1,localId)->init(2,1));
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_566_updateMessageStatus)
+HXLINE( 566)			return _gthis->db->exec(HX_("SELECT stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, correction_id AS stanza_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=? AND stanza_id=? AND direction=? LIMIT 1",ed,02,c0,1d),::cpp::VirtualArray_obj::__new(3)->init(0,accountId)->init(1,localId)->init(2,1));
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_2, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_570_updateMessageStatus)
-HXLINE( 570)			::Array< ::Dynamic> _this = _gthis->hydrateMessages(accountId,result);
-HXDLIN( 570)			::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(_this->length);
-HXDLIN( 570)			{
-HXLINE( 570)				int _g = 0;
-HXDLIN( 570)				int _g1 = _this->length;
-HXDLIN( 570)				while((_g < _g1)){
-HXLINE( 570)					_g = (_g + 1);
-HXDLIN( 570)					int i = (_g - 1);
-HXDLIN( 570)					{
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_571_updateMessageStatus)
+HXLINE( 571)			::Array< ::Dynamic> _this = _gthis->hydrateMessages(accountId,result);
+HXDLIN( 571)			::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(_this->length);
+HXDLIN( 571)			{
+HXLINE( 571)				int _g = 0;
+HXDLIN( 571)				int _g1 = _this->length;
+HXDLIN( 571)				while((_g < _g1)){
+HXLINE( 571)					_g = (_g + 1);
+HXDLIN( 571)					int i = (_g - 1);
+HXDLIN( 571)					{
             						HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             						::Dynamic _hx_run(::Array< ::Dynamic> messages){
-            							HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_575_updateMessageStatus)
-HXLINE( 575)							return _gthis->hydrateReactions(accountId,messages);
+            							HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_576_updateMessageStatus)
+HXLINE( 576)							return _gthis->hydrateReactions(accountId,messages);
             						}
             						HX_END_LOCAL_FUNC1(return)
 
-HXLINE( 571)						 ::borogove::ChatMessage message = ( ( ::borogove::ChatMessage)(_hx_array_unsafe_get(_this,i)) );
-HXDLIN( 571)						::Dynamic inValue;
-HXDLIN( 571)						if (::hx::IsNotNull( message->replyToMessage )) {
-HXLINE( 572)							 ::borogove::persistence::Sqlite _gthis1 = _gthis;
-HXDLIN( 572)							::String accountId1 = accountId;
-HXDLIN( 572)							::String inValue1 = message->chatId();
-HXLINE( 571)							inValue = _gthis1->hydrateReplyTo(accountId1,::Array_obj< ::Dynamic>::__new(1)->init(0,message),::Array_obj< ::Dynamic>::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(3)
+HXLINE( 572)						 ::borogove::ChatMessage message = ( ( ::borogove::ChatMessage)(_hx_array_unsafe_get(_this,i)) );
+HXDLIN( 572)						::Dynamic inValue;
+HXDLIN( 572)						if (::hx::IsNotNull( message->replyToMessage )) {
+HXLINE( 573)							 ::borogove::persistence::Sqlite _gthis1 = _gthis;
+HXDLIN( 573)							::String accountId1 = accountId;
+HXDLIN( 573)							::String inValue1 = message->chatId();
+HXLINE( 572)							inValue = _gthis1->hydrateReplyTo(accountId1,::Array_obj< ::Dynamic>::__new(1)->init(0,message),::Array_obj< ::Dynamic>::__new(1)->init(0, ::Dynamic(::hx::Anon_obj::Create(3)
             								->setFixed(0,HX_("chatId",d3,04,77,b7),inValue1)
             								->setFixed(1,HX_("serverId",7e,01,b2,e2),message->replyToMessage->serverId)
             								->setFixed(2,HX_("localId",26,7a,c6,2d),message->replyToMessage->localId))));
             						}
             						else {
-HXLINE( 571)							inValue = ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(1)->init(0,message));
+HXLINE( 572)							inValue = ::thenshim::_Promise::Promise_Impl__obj::resolve(::Array_obj< ::Dynamic>::__new(1)->init(0,message));
             						}
-HXLINE( 570)						::Dynamic inValue2 = ::thenshim::_Promise::Promise_Impl__obj::then(inValue, ::Dynamic(new _hx_Closure_1(_gthis,accountId)),null());
-HXDLIN( 570)						result1->__unsafe_set(i,inValue2);
+HXLINE( 571)						::Dynamic inValue2 = ::thenshim::_Promise::Promise_Impl__obj::then(inValue, ::Dynamic(new _hx_Closure_1(_gthis,accountId)),null());
+HXDLIN( 571)						result1->__unsafe_set(i,inValue2);
             					}
             				}
             			}
-HXDLIN( 570)			return ::thenshim::PromiseTools_obj::all(result1);
+HXDLIN( 571)			return ::thenshim::PromiseTools_obj::all(result1);
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_3) HXARGC(1)
             		::Array< ::Dynamic> _hx_run(::Array< ::Dynamic> hydrated){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_577_updateMessageStatus)
-HXLINE( 577)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 577)			{
-HXLINE( 577)				int _g_current = 0;
-HXDLIN( 577)				while((_g_current < hydrated->length)){
-HXLINE( 577)					_g_current = (_g_current + 1);
-HXDLIN( 577)					{
-HXLINE( 577)						 ::Dynamic x = hydrated->__get((_g_current - 1)).StaticCast< ::Array< ::Dynamic> >()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 577)						while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 577)							_g->push(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_578_updateMessageStatus)
+HXLINE( 578)			::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 578)			{
+HXLINE( 578)				int _g_current = 0;
+HXDLIN( 578)				while((_g_current < hydrated->length)){
+HXLINE( 578)					_g_current = (_g_current + 1);
+HXDLIN( 578)					{
+HXLINE( 578)						 ::Dynamic x = hydrated->__get((_g_current - 1)).StaticCast< ::Array< ::Dynamic> >()->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
+HXDLIN( 578)						while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 578)							_g->push(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)());
             						}
             					}
             				}
             			}
-HXDLIN( 577)			return _g;
+HXDLIN( 578)			return _g;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_4,::String,localId) HXARGC(1)
             		::Dynamic _hx_run(::Array< ::Dynamic> hydrated){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_577_updateMessageStatus)
-HXLINE( 577)			if ((hydrated->length > 0)) {
-HXLINE( 577)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(hydrated->__get(0).StaticCast<  ::borogove::ChatMessage >());
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_578_updateMessageStatus)
+HXLINE( 578)			if ((hydrated->length > 0)) {
+HXLINE( 578)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(hydrated->__get(0).StaticCast<  ::borogove::ChatMessage >());
             			}
             			else {
-HXLINE( 577)				return ::thenshim::_Promise::Promise_Impl__obj::reject((HX_("Message not found: ",62,21,15,ae) + localId));
+HXLINE( 578)				return ::thenshim::_Promise::Promise_Impl__obj::reject((HX_("Message not found: ",62,21,15,ae) + localId));
             			}
-HXDLIN( 577)			return null();
+HXDLIN( 578)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_560_updateMessageStatus)
-HXDLIN( 560)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 561)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("UPDATE messages SET status=?, status_text=? WHERE account_id=? AND stanza_id=? AND direction=? AND status <> ? AND status <> ?",71,68,f3,d1),::cpp::VirtualArray_obj::__new(7)->init(0,status)->init(1,statusText)->init(2,accountId)->init(3,localId)->init(4,1)->init(5,2)->init(6,3)), ::Dynamic(new _hx_Closure_0(_gthis,localId,accountId)),null()), ::Dynamic(new _hx_Closure_2(_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_3()),null()), ::Dynamic(new _hx_Closure_4(localId)),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_561_updateMessageStatus)
+HXDLIN( 561)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 562)		return ::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("UPDATE messages SET status=?, status_text=? WHERE account_id=? AND stanza_id=? AND direction=? AND status <> ? AND status <> ?",71,68,f3,d1),::cpp::VirtualArray_obj::__new(7)->init(0,status)->init(1,statusText)->init(2,accountId)->init(3,localId)->init(4,1)->init(5,2)->init(6,3)), ::Dynamic(new _hx_Closure_0(_gthis,localId,accountId)),null()), ::Dynamic(new _hx_Closure_2(_gthis,accountId)),null()), ::Dynamic(new _hx_Closure_3()),null()), ::Dynamic(new _hx_Closure_4(localId)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC4(Sqlite_obj,updateMessageStatus,return )
 
 ::Dynamic Sqlite_obj::hasMedia(::String hashAlgorithm,::Array< unsigned char > hash){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_582_hasMedia)
-HXDLIN( 582)		return ::borogove::persistence::MediaStore_obj::hasMedia(this->media,hashAlgorithm,hash);
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_583_hasMedia)
+HXDLIN( 583)		return ::borogove::persistence::MediaStore_obj::hasMedia(this->media,hashAlgorithm,hash);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,hasMedia,return )
 
 void Sqlite_obj::removeMedia(::String hashAlgorithm,::Array< unsigned char > hash){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_587_removeMedia)
-HXDLIN( 587)		::borogove::persistence::MediaStore_obj::removeMedia(this->media,hashAlgorithm,hash);
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_588_removeMedia)
+HXDLIN( 588)		::borogove::persistence::MediaStore_obj::removeMedia(this->media,hashAlgorithm,hash);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,removeMedia,(void))
 
 ::Dynamic Sqlite_obj::storeMedia(::String mime,::Array< unsigned char > bd){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_592_storeMedia)
-HXDLIN( 592)		return ::borogove::persistence::MediaStore_obj::storeMedia(this->media,mime,bd);
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_593_storeMedia)
+HXDLIN( 593)		return ::borogove::persistence::MediaStore_obj::storeMedia(this->media,mime,bd);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,storeMedia,return )
 
 void Sqlite_obj::storeCaps( ::borogove::Caps caps){
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_597_storeCaps)
-HXDLIN( 597)		 ::haxe::ds::ObjectMap _g =  ::haxe::ds::ObjectMap_obj::__alloc( HX_CTX );
-HXDLIN( 597)		_g->set(caps->verRaw()->hash,caps);
-HXDLIN( 597)		this->storeCapsSet(_g);
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_598_storeCaps)
+HXDLIN( 598)		 ::haxe::ds::ObjectMap _g =  ::haxe::ds::ObjectMap_obj::__alloc( HX_CTX );
+HXDLIN( 598)		_g->set(caps->verRaw()->hash,caps);
+HXDLIN( 598)		this->storeCapsSet(_g);
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,storeCaps,(void))
 
 void Sqlite_obj::storeCapsSet( ::haxe::ds::ObjectMap capsSet){
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_600_storeCapsSet)
-HXLINE( 601)		::cpp::VirtualArray params = ::cpp::VirtualArray_obj::__new(0);
-HXLINE( 602)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE( 603)		{
-HXLINE( 603)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 603)				q->flush();
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_601_storeCapsSet)
+HXLINE( 602)		::cpp::VirtualArray params = ::cpp::VirtualArray_obj::__new(0);
+HXLINE( 603)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
+HXLINE( 604)		{
+HXLINE( 604)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 604)				q->flush();
             			}
-HXDLIN( 603)			if (::hx::IsNull( q->b )) {
-HXLINE( 603)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_108,1);
+HXDLIN( 604)			if (::hx::IsNull( q->b )) {
+HXLINE( 604)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_108,1);
             			}
             			else {
-HXLINE( 603)				q->b->push(HX_("INSERT OR IGNORE INTO caps VALUES ",27,4b,68,bf));
-            			}
-            		}
-HXLINE( 604)		bool first = true;
-HXLINE( 605)		{
-HXLINE( 605)			::Dynamic map = capsSet;
-HXDLIN( 605)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN( 605)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 605)				::Array< unsigned char > key = ( (::Array< unsigned char >)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 605)				 ::borogove::Caps _g_value = ( ( ::borogove::Caps)(::haxe::IMap_obj::get(map,key)) );
-HXDLIN( 605)				{
-HXLINE( 606)					if (!(first)) {
-HXLINE( 606)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 606)							q->flush();
+HXLINE( 604)				q->b->push(HX_("INSERT OR IGNORE INTO caps VALUES ",27,4b,68,bf));
+            			}
+            		}
+HXLINE( 605)		bool first = true;
+HXLINE( 606)		{
+HXLINE( 606)			::Dynamic map = capsSet;
+HXDLIN( 606)			 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN( 606)			while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 606)				::Array< unsigned char > key = ( (::Array< unsigned char >)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 606)				 ::borogove::Caps _g_value = ( ( ::borogove::Caps)(::haxe::IMap_obj::get(map,key)) );
+HXDLIN( 606)				{
+HXLINE( 607)					if (!(first)) {
+HXLINE( 607)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 607)							q->flush();
             						}
-HXDLIN( 606)						if (::hx::IsNull( q->b )) {
-HXLINE( 606)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_109,1);
+HXDLIN( 607)						if (::hx::IsNull( q->b )) {
+HXLINE( 607)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_109,1);
             						}
             						else {
-HXLINE( 606)							q->b->push(HX_(",",2c,00,00,00));
+HXLINE( 607)							q->b->push(HX_(",",2c,00,00,00));
             						}
             					}
-HXLINE( 607)					{
-HXLINE( 607)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 607)							q->flush();
+HXLINE( 608)					{
+HXLINE( 608)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 608)							q->flush();
             						}
-HXDLIN( 607)						if (::hx::IsNull( q->b )) {
-HXLINE( 607)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_110,1);
+HXDLIN( 608)						if (::hx::IsNull( q->b )) {
+HXLINE( 608)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_110,1);
             						}
             						else {
-HXLINE( 607)							q->b->push(HX_("(?,jsonb(?))",1c,61,06,9e));
+HXLINE( 608)							q->b->push(HX_("(?,jsonb(?))",1c,61,06,9e));
             						}
             					}
-HXLINE( 608)					params->push(key);
-HXLINE( 609)					::String caps = _g_value->node;
-HXDLIN( 609)					::Array< ::Dynamic> caps1 = _g_value->identities;
-HXDLIN( 609)					::Array< ::String > caps2 = _g_value->features;
-HXDLIN( 609)					::Array< ::Dynamic> _this = _g_value->data;
-HXDLIN( 609)					::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
-HXDLIN( 609)					{
-HXLINE( 609)						int _g = 0;
-HXDLIN( 609)						int _g1 = _this->length;
-HXDLIN( 609)						while((_g < _g1)){
-HXLINE( 609)							_g = (_g + 1);
-HXDLIN( 609)							int i = (_g - 1);
-HXDLIN( 609)							{
-HXLINE( 609)								::String inValue = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) )->toString();
-HXDLIN( 609)								result->__unsafe_set(i,inValue);
+HXLINE( 609)					params->push(key);
+HXLINE( 610)					::String caps = _g_value->node;
+HXDLIN( 610)					::Array< ::Dynamic> caps1 = _g_value->identities;
+HXDLIN( 610)					::Array< ::String > caps2 = _g_value->features;
+HXDLIN( 610)					::Array< ::Dynamic> _this = _g_value->data;
+HXDLIN( 610)					::Array< ::String > result = ::Array_obj< ::String >::__new(_this->length);
+HXDLIN( 610)					{
+HXLINE( 610)						int _g = 0;
+HXDLIN( 610)						int _g1 = _this->length;
+HXDLIN( 610)						while((_g < _g1)){
+HXLINE( 610)							_g = (_g + 1);
+HXDLIN( 610)							int i = (_g - 1);
+HXDLIN( 610)							{
+HXLINE( 610)								::String inValue = ( ( ::borogove::Stanza)(_hx_array_unsafe_get(_this,i)) )->toString();
+HXDLIN( 610)								result->__unsafe_set(i,inValue);
             							}
             						}
             					}
-HXDLIN( 609)					 ::Dynamic replacer = null();
-HXDLIN( 609)					::String space = null();
-HXDLIN( 609)					params->push(::haxe::format::JsonPrinter_obj::print( ::Dynamic(::hx::Anon_obj::Create(4)
+HXDLIN( 610)					 ::Dynamic replacer = null();
+HXDLIN( 610)					::String space = null();
+HXDLIN( 610)					params->push(::haxe::format::JsonPrinter_obj::print( ::Dynamic(::hx::Anon_obj::Create(4)
             						->setFixed(0,HX_("identities",1c,c5,6d,d7),caps1)
             						->setFixed(1,HX_("features",fd,6c,d7,12),caps2)
             						->setFixed(2,HX_("data",2a,56,63,42),result)
             						->setFixed(3,HX_("node",02,0a,0a,49),caps)),replacer,space));
-HXLINE( 610)					first = false;
+HXLINE( 611)					first = false;
             				}
             			}
             		}
-HXLINE( 612)		if ((params->get_length() < 1)) {
-HXLINE( 612)			return;
+HXLINE( 613)		if ((params->get_length() < 1)) {
+HXLINE( 613)			return;
             		}
-HXLINE( 613)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
-HXDLIN( 613)		_hx_tmp->exec(q->toString(),params);
+HXLINE( 614)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXDLIN( 614)		_hx_tmp->exec(q->toString(),params);
             	}
 
 
@@ -1850,150 +1858,150 @@ HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,storeCapsSet,(void))
 ::Dynamic Sqlite_obj::getCaps(::String ver){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::Array< unsigned char >,verData) HXARGC(1)
             		 ::borogove::Caps _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_626_getCaps)
-HXLINE( 627)			while((result->current < result->array->get_length())){
-HXLINE( 628)				 ::Dynamic json =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(result->array->__get(result->current++)->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
-HXLINE( 629)				return _gthis->hydrateCaps(json,verData);
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_627_getCaps)
+HXLINE( 628)			while((result->current < result->array->get_length())){
+HXLINE( 629)				 ::Dynamic json =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(result->array->__get(result->current++)->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
+HXLINE( 630)				return _gthis->hydrateCaps(json,verData);
             			}
-HXLINE( 631)			return null();
+HXLINE( 632)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_617_getCaps)
-HXDLIN( 617)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 618)		::Array< unsigned char > verData;
-HXDLIN( 618)		try {
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_618_getCaps)
+HXDLIN( 618)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 619)		::Array< unsigned char > verData;
+HXDLIN( 619)		try {
             			HX_STACK_CATCHABLE( ::Dynamic, 0);
-HXLINE( 618)			verData = ::haxe::crypto::Base64_obj::decode(ver,null())->b;
+HXLINE( 619)			verData = ::haxe::crypto::Base64_obj::decode(ver,null())->b;
             		} catch( ::Dynamic _hx_e) {
             			if (_hx_e.IsClass<  ::Dynamic >() ){
             				HX_STACK_BEGIN_CATCH
             				 ::Dynamic _g = _hx_e;
-HXLINE( 621)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+HXLINE( 622)				return ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             			}
             			else {
             				HX_STACK_DO_THROW(_hx_e);
             			}
             		}
-HXLINE( 623)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT json(caps) AS caps FROM caps WHERE sha1=? LIMIT 1",5a,98,24,09),::cpp::VirtualArray_obj::__new(1)->init(0,verData)), ::Dynamic(new _hx_Closure_0(_gthis,verData)),null());
+HXLINE( 624)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT json(caps) AS caps FROM caps WHERE sha1=? LIMIT 1",5a,98,24,09),::cpp::VirtualArray_obj::__new(1)->init(0,verData)), ::Dynamic(new _hx_Closure_0(_gthis,verData)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,getCaps,return )
 
 void Sqlite_obj::storeLogin(::String accountId,::String clientId,::String displayName,::String token){
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_636_storeLogin)
-HXLINE( 637)		::Array< ::String > params = ::Array_obj< ::String >::__new(3)->init(0,accountId)->init(1,clientId)->init(2,displayName);
-HXLINE( 638)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE( 639)		{
-HXLINE( 639)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 639)				q->flush();
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_637_storeLogin)
+HXLINE( 638)		::Array< ::String > params = ::Array_obj< ::String >::__new(3)->init(0,accountId)->init(1,clientId)->init(2,displayName);
+HXLINE( 639)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
+HXLINE( 640)		{
+HXLINE( 640)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 640)				q->flush();
             			}
-HXDLIN( 639)			if (::hx::IsNull( q->b )) {
-HXLINE( 639)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_115,1);
+HXDLIN( 640)			if (::hx::IsNull( q->b )) {
+HXLINE( 640)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_115,1);
             			}
             			else {
-HXLINE( 639)				q->b->push(HX_("INSERT INTO accounts (account_id, client_id, display_name",03,b0,6a,0b));
+HXLINE( 640)				q->b->push(HX_("INSERT INTO accounts (account_id, client_id, display_name",03,b0,6a,0b));
             			}
             		}
-HXLINE( 640)		if (::hx::IsNotNull( token )) {
-HXLINE( 641)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 641)				q->flush();
+HXLINE( 641)		if (::hx::IsNotNull( token )) {
+HXLINE( 642)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 642)				q->flush();
             			}
-HXDLIN( 641)			if (::hx::IsNull( q->b )) {
-HXLINE( 641)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_116,1);
+HXDLIN( 642)			if (::hx::IsNull( q->b )) {
+HXLINE( 642)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_116,1);
             			}
             			else {
-HXLINE( 641)				q->b->push(HX_(", token, fast_count",a5,56,e4,ae));
+HXLINE( 642)				q->b->push(HX_(", token, fast_count",a5,56,e4,ae));
             			}
             		}
-HXLINE( 643)		{
-HXLINE( 643)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 643)				q->flush();
+HXLINE( 644)		{
+HXLINE( 644)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 644)				q->flush();
             			}
-HXDLIN( 643)			if (::hx::IsNull( q->b )) {
-HXLINE( 643)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_117,1);
+HXDLIN( 644)			if (::hx::IsNull( q->b )) {
+HXLINE( 644)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_117,1);
             			}
             			else {
-HXLINE( 643)				q->b->push(HX_(") VALUES (?,?,?",c4,1c,e3,67));
+HXLINE( 644)				q->b->push(HX_(") VALUES (?,?,?",c4,1c,e3,67));
             			}
             		}
-HXLINE( 644)		if (::hx::IsNotNull( token )) {
-HXLINE( 645)			{
-HXLINE( 645)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 645)					q->flush();
+HXLINE( 645)		if (::hx::IsNotNull( token )) {
+HXLINE( 646)			{
+HXLINE( 646)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 646)					q->flush();
             				}
-HXDLIN( 645)				if (::hx::IsNull( q->b )) {
-HXLINE( 645)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_118,1);
+HXDLIN( 646)				if (::hx::IsNull( q->b )) {
+HXLINE( 646)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_118,1);
             				}
             				else {
-HXLINE( 645)					q->b->push(HX_(",?",93,26,00,00));
+HXLINE( 646)					q->b->push(HX_(",?",93,26,00,00));
             				}
             			}
-HXLINE( 646)			params->push(token);
-HXLINE( 647)			{
-HXLINE( 647)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 647)					q->flush();
+HXLINE( 647)			params->push(token);
+HXLINE( 648)			{
+HXLINE( 648)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 648)					q->flush();
             				}
-HXDLIN( 647)				if (::hx::IsNull( q->b )) {
-HXLINE( 647)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_119,1);
+HXDLIN( 648)				if (::hx::IsNull( q->b )) {
+HXLINE( 648)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_119,1);
             				}
             				else {
-HXLINE( 647)					q->b->push(HX_(",0",84,26,00,00));
+HXLINE( 648)					q->b->push(HX_(",0",84,26,00,00));
             				}
             			}
             		}
-HXLINE( 649)		{
-HXLINE( 649)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 649)				q->flush();
+HXLINE( 650)		{
+HXLINE( 650)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 650)				q->flush();
             			}
-HXDLIN( 649)			if (::hx::IsNull( q->b )) {
-HXLINE( 649)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_120,1);
+HXDLIN( 650)			if (::hx::IsNull( q->b )) {
+HXLINE( 650)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_120,1);
             			}
             			else {
-HXLINE( 649)				q->b->push(HX_(") ON CONFLICT DO UPDATE SET client_id=?",cd,99,0c,96));
+HXLINE( 650)				q->b->push(HX_(") ON CONFLICT DO UPDATE SET client_id=?",cd,99,0c,96));
             			}
             		}
-HXLINE( 650)		params->push(clientId);
-HXLINE( 651)		{
-HXLINE( 651)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 651)				q->flush();
+HXLINE( 651)		params->push(clientId);
+HXLINE( 652)		{
+HXLINE( 652)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 652)				q->flush();
             			}
-HXDLIN( 651)			if (::hx::IsNull( q->b )) {
-HXLINE( 651)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_121,1);
+HXDLIN( 652)			if (::hx::IsNull( q->b )) {
+HXLINE( 652)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_121,1);
             			}
             			else {
-HXLINE( 651)				q->b->push(HX_(", display_name=?",7e,ad,5b,0f));
+HXLINE( 652)				q->b->push(HX_(", display_name=?",7e,ad,5b,0f));
             			}
             		}
-HXLINE( 652)		params->push(displayName);
-HXLINE( 653)		if (::hx::IsNotNull( token )) {
-HXLINE( 654)			{
-HXLINE( 654)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 654)					q->flush();
+HXLINE( 653)		params->push(displayName);
+HXLINE( 654)		if (::hx::IsNotNull( token )) {
+HXLINE( 655)			{
+HXLINE( 655)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 655)					q->flush();
             				}
-HXDLIN( 654)				if (::hx::IsNull( q->b )) {
-HXLINE( 654)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_122,1);
+HXDLIN( 655)				if (::hx::IsNull( q->b )) {
+HXLINE( 655)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_122,1);
             				}
             				else {
-HXLINE( 654)					q->b->push(HX_(", token=?",a7,78,19,80));
+HXLINE( 655)					q->b->push(HX_(", token=?",a7,78,19,80));
             				}
             			}
-HXLINE( 655)			params->push(token);
-HXLINE( 656)			{
-HXLINE( 656)				if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 656)					q->flush();
+HXLINE( 656)			params->push(token);
+HXLINE( 657)			{
+HXLINE( 657)				if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 657)					q->flush();
             				}
-HXDLIN( 656)				if (::hx::IsNull( q->b )) {
-HXLINE( 656)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_123,1);
+HXDLIN( 657)				if (::hx::IsNull( q->b )) {
+HXLINE( 657)					q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_123,1);
             				}
             				else {
-HXLINE( 656)					q->b->push(HX_(", fast_count=0",73,a8,4f,82));
+HXLINE( 657)					q->b->push(HX_(", fast_count=0",73,a8,4f,82));
             				}
             			}
             		}
-HXLINE( 658)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
-HXDLIN( 658)		_hx_tmp->exec(q->toString(),params);
+HXLINE( 659)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXDLIN( 659)		_hx_tmp->exec(q->toString(),params);
             	}
 
 
@@ -2002,15 +2010,15 @@ HX_DEFINE_DYNAMIC_FUNC4(Sqlite_obj,storeLogin,(void))
 ::Dynamic Sqlite_obj::getLogin(::String accountId){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             		 ::Dynamic _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_666_getLogin)
-HXLINE( 667)			while((result->current < result->array->get_length())){
-HXLINE( 667)				 ::Dynamic row = result->array->__get(result->current++);
-HXLINE( 669)				if (::hx::IsNotNull( row->__Field(HX_("token",f9,82,2b,14),::hx::paccDynamic) )) {
-HXLINE( 670)					_gthis->db->exec(HX_("UPDATE accounts SET fast_count=fast_count+1 WHERE account_id=?",a6,3f,55,2d),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_667_getLogin)
+HXLINE( 668)			while((result->current < result->array->get_length())){
+HXLINE( 668)				 ::Dynamic row = result->array->__get(result->current++);
+HXLINE( 670)				if (::hx::IsNotNull( row->__Field(HX_("token",f9,82,2b,14),::hx::paccDynamic) )) {
+HXLINE( 671)					_gthis->db->exec(HX_("UPDATE accounts SET fast_count=fast_count+1 WHERE account_id=?",a6,3f,55,2d),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
             				}
-HXLINE( 672)				return row;
+HXLINE( 673)				return row;
             			}
-HXLINE( 675)			return  ::Dynamic(::hx::Anon_obj::Create(4)
+HXLINE( 676)			return  ::Dynamic(::hx::Anon_obj::Create(4)
             				->setFixed(0,HX_("fastCount",93,fc,67,a5),0)
             				->setFixed(1,HX_("token",f9,82,2b,14),null())
             				->setFixed(2,HX_("clientId",06,73,8f,15),null())
@@ -2018,23 +2026,23 @@ HXLINE( 675)			return  ::Dynamic(::hx::Anon_obj::Create(4)
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_662_getLogin)
-HXDLIN( 662)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 663)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT client_id AS clientId, display_name AS displayName, token, COALESCE(fast_count, 0) AS fastCount FROM accounts WHERE account_id=? LIMIT 1",d8,8f,02,8f),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_663_getLogin)
+HXDLIN( 663)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 664)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT client_id AS clientId, display_name AS displayName, token, COALESCE(fast_count, 0) AS fastCount FROM accounts WHERE account_id=? LIMIT 1",d8,8f,02,8f),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,accountId)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,getLogin,return )
 
 void Sqlite_obj::removeAccount(::String accountId,bool completely){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_685_removeAccount)
-HXLINE( 686)		this->db->exec(HX_("DELETE FROM accounts WHERE account_id=?",a1,e8,94,4e),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
-HXLINE( 688)		if (!(completely)) {
-HXLINE( 688)			return;
-            		}
-HXLINE( 690)		this->db->exec(HX_("DELETE FROM messages WHERE account_id=?",bb,0a,07,c2),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
-HXLINE( 691)		this->db->exec(HX_("DELETE FROM chats WHERE account_id=?",2e,3d,02,57),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
-HXLINE( 692)		this->db->exec(HX_("DELETE FROM services WHERE account_id=?",29,fc,5f,4f),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_686_removeAccount)
+HXLINE( 687)		this->db->exec(HX_("DELETE FROM accounts WHERE account_id=?",a1,e8,94,4e),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
+HXLINE( 689)		if (!(completely)) {
+HXLINE( 689)			return;
+            		}
+HXLINE( 691)		this->db->exec(HX_("DELETE FROM messages WHERE account_id=?",bb,0a,07,c2),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
+HXLINE( 692)		this->db->exec(HX_("DELETE FROM chats WHERE account_id=?",2e,3d,02,57),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
+HXLINE( 693)		this->db->exec(HX_("DELETE FROM services WHERE account_id=?",29,fc,5f,4f),::cpp::VirtualArray_obj::__new(1)->init(0,accountId));
             	}
 
 
@@ -2043,34 +2051,34 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,removeAccount,(void))
 ::Dynamic Sqlite_obj::listAccounts(){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_1) HXARGC(1)
             		::Array< ::String > _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_703_listAccounts)
-HXLINE( 703)			if (::hx::IsNull( result )) {
-HXLINE( 703)				return ::Array_obj< ::String >::__new(0);
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_704_listAccounts)
+HXLINE( 704)			if (::hx::IsNull( result )) {
+HXLINE( 704)				return ::Array_obj< ::String >::__new(0);
             			}
             			else {
-HXLINE( 703)				::Array< ::String > _g = ::Array_obj< ::String >::__new(0);
-HXDLIN( 703)				{
+HXLINE( 704)				::Array< ::String > _g = ::Array_obj< ::String >::__new(0);
+HXDLIN( 704)				{
             					HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::haxe::iterators::ArrayIterator,result) HXARGC(0)
             					 ::haxe::iterators::ArrayIterator _hx_run(){
-            						HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_703_listAccounts)
-HXLINE( 703)						return result;
+            						HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_704_listAccounts)
+HXLINE( 704)						return result;
             					}
             					HX_END_LOCAL_FUNC0(return)
 
-HXLINE( 703)					 ::Dynamic x =  ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 704)					 ::Dynamic x =  ::Dynamic(::hx::Anon_obj::Create(1)
             						->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(result))))->__Field(HX_("iterator",ee,49,9a,93),::hx::paccDynamic)();
-HXDLIN( 703)					while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 703)						_g->push( ::Dynamic(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("account_id",6d,df,ad,00),::hx::paccDynamic)));
+HXDLIN( 704)					while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 704)						_g->push( ::Dynamic(x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()->__Field(HX_("account_id",6d,df,ad,00),::hx::paccDynamic)));
             					}
             				}
-HXDLIN( 703)				return _g;
+HXDLIN( 704)				return _g;
             			}
-HXDLIN( 703)			return null();
+HXDLIN( 704)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_702_listAccounts)
-HXDLIN( 702)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT account_id FROM accounts",4d,82,81,0c),null()), ::Dynamic(new _hx_Closure_1()),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_703_listAccounts)
+HXDLIN( 703)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT account_id FROM accounts",4d,82,81,0c),null()), ::Dynamic(new _hx_Closure_1()),null());
             	}
 
 
@@ -2145,22 +2153,22 @@ HXDLIN( 337)			::thenshim::_Promise::Promise_Impl__obj::then(this->listAccounts(
 
 
 void Sqlite_obj::storeStreamManagement(::String accountId,::Array< unsigned char > sm){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_710_storeStreamManagement)
-HXDLIN( 710)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 711)		this->smStoreNext = sm;
-HXLINE( 712)		if (!(this->smStoreInProgress)) {
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_711_storeStreamManagement)
+HXDLIN( 711)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 712)		this->smStoreNext = sm;
+HXLINE( 713)		if (!(this->smStoreInProgress)) {
             			HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,accountId,::Array< unsigned char >,sm) HXARGC(1)
             			void _hx_run( ::haxe::iterators::ArrayIterator _){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_717_storeStreamManagement)
-HXLINE( 718)				_gthis->smStoreInProgress = false;
-HXLINE( 719)				if (::hx::IsPointerNotEq( _gthis->smStoreNext,sm )) {
-HXLINE( 719)					_gthis->storeStreamManagement(accountId,sm);
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_718_storeStreamManagement)
+HXLINE( 719)				_gthis->smStoreInProgress = false;
+HXLINE( 720)				if (::hx::IsPointerNotEq( _gthis->smStoreNext,sm )) {
+HXLINE( 720)					_gthis->storeStreamManagement(accountId,sm);
             				}
             			}
             			HX_END_LOCAL_FUNC1((void))
 
-HXLINE( 713)			this->smStoreInProgress = true;
-HXLINE( 714)			::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("UPDATE accounts SET sm_state=? WHERE account_id=?",39,71,68,1b),::cpp::VirtualArray_obj::__new(2)->init(0,sm)->init(1,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,accountId,sm)),null());
+HXLINE( 714)			this->smStoreInProgress = true;
+HXLINE( 715)			::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("UPDATE accounts SET sm_state=? WHERE account_id=?",39,71,68,1b),::cpp::VirtualArray_obj::__new(2)->init(0,sm)->init(1,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,accountId,sm)),null());
             		}
             	}
 
@@ -2170,26 +2178,26 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,storeStreamManagement,(void))
 ::Dynamic Sqlite_obj::getStreamManagement(::String accountId){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		::Dynamic _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_726_getStreamManagement)
-HXLINE( 727)			while((result->current < result->array->get_length())){
-HXLINE( 728)				return  ::Dynamic(result->array->__get(result->current++)->__Field(HX_("sm_state",6c,91,3f,e6),::hx::paccDynamic));
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_727_getStreamManagement)
+HXLINE( 728)			while((result->current < result->array->get_length())){
+HXLINE( 729)				return  ::Dynamic(result->array->__get(result->current++)->__Field(HX_("sm_state",6c,91,3f,e6),::hx::paccDynamic));
             			}
-HXLINE( 731)			return null();
+HXLINE( 732)			return null();
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_726_getStreamManagement)
-HXDLIN( 726)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT sm_state FROM accounts  WHERE account_id=?",94,7f,74,ea),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0()),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_727_getStreamManagement)
+HXDLIN( 727)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT sm_state FROM accounts  WHERE account_id=?",94,7f,74,ea),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0()),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC1(Sqlite_obj,getStreamManagement,return )
 
 void Sqlite_obj::storeService(::String accountId,::String serviceId,::String name,::String node, ::borogove::Caps caps){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_736_storeService)
-HXLINE( 737)		this->storeCaps(caps);
-HXLINE( 739)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
-HXDLIN( 739)		_hx_tmp->exec(HX_("INSERT OR REPLACE INTO services VALUES (?,?,?,?,?)",2c,3a,d9,f8),::cpp::VirtualArray_obj::__new(5)->init(0,accountId)->init(1,serviceId)->init(2,name)->init(3,node)->init(4,caps->verRaw()->hash));
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_737_storeService)
+HXLINE( 738)		this->storeCaps(caps);
+HXLINE( 740)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXDLIN( 740)		_hx_tmp->exec(HX_("INSERT OR REPLACE INTO services VALUES (?,?,?,?,?)",2c,3a,d9,f8),::cpp::VirtualArray_obj::__new(5)->init(0,accountId)->init(1,serviceId)->init(2,name)->init(3,node)->init(4,caps->verRaw()->hash));
             	}
 
 
@@ -2198,43 +2206,43 @@ HX_DEFINE_DYNAMIC_FUNC5(Sqlite_obj,storeService,(void))
 ::Dynamic Sqlite_obj::findServicesWithFeature(::String accountId,::String feature){
             		HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_0, ::borogove::persistence::Sqlite,_gthis,::String,feature) HXARGC(1)
             		::Array< ::Dynamic> _hx_run( ::haxe::iterators::ArrayIterator result){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_751_findServicesWithFeature)
-HXLINE( 752)			::Array< ::Dynamic> services = ::Array_obj< ::Dynamic>::__new(0);
-HXLINE( 753)			while((result->current < result->array->get_length())){
-HXLINE( 753)				 ::Dynamic row = result->array->__get(result->current++);
-HXLINE( 754)				 ::Dynamic json =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
-HXLINE( 755)				::Array< ::String > features;
-HXDLIN( 755)				::Array< ::String > tmp;
-HXDLIN( 755)				if (::hx::IsNotNull( json )) {
-HXLINE( 755)					tmp = ( (::Array< ::String >)(json->__Field(HX_("features",fd,6c,d7,12),::hx::paccDynamic)) );
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_752_findServicesWithFeature)
+HXLINE( 753)			::Array< ::Dynamic> services = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 754)			while((result->current < result->array->get_length())){
+HXLINE( 754)				 ::Dynamic row = result->array->__get(result->current++);
+HXLINE( 755)				 ::Dynamic json =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("caps",21,1c,ba,41),::hx::paccDynamic)) ))->doParse();
+HXLINE( 756)				::Array< ::String > features;
+HXDLIN( 756)				::Array< ::String > tmp;
+HXDLIN( 756)				if (::hx::IsNotNull( json )) {
+HXLINE( 756)					tmp = ( (::Array< ::String >)(json->__Field(HX_("features",fd,6c,d7,12),::hx::paccDynamic)) );
             				}
             				else {
-HXLINE( 755)					tmp = null();
+HXLINE( 756)					tmp = null();
             				}
-HXDLIN( 755)				if (::hx::IsNotNull( tmp )) {
-HXLINE( 755)					features = tmp;
+HXDLIN( 756)				if (::hx::IsNotNull( tmp )) {
+HXLINE( 756)					features = tmp;
             				}
             				else {
-HXLINE( 755)					features = ::Array_obj< ::String >::__new(0);
+HXLINE( 756)					features = ::Array_obj< ::String >::__new(0);
             				}
-HXLINE( 756)				if (features->contains(feature)) {
-HXLINE( 758)					::String row1 = ( (::String)(row->__Field(HX_("service_id",e5,24,3d,7d),::hx::paccDynamic)) );
-HXLINE( 759)					::String row2 = ( (::String)(row->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) );
-HXLINE( 760)					::String row3 = ( (::String)(row->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) );
-HXLINE( 757)					services->push( ::Dynamic(::hx::Anon_obj::Create(4)
+HXLINE( 757)				if (features->contains(feature)) {
+HXLINE( 759)					::String row1 = ( (::String)(row->__Field(HX_("service_id",e5,24,3d,7d),::hx::paccDynamic)) );
+HXLINE( 760)					::String row2 = ( (::String)(row->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) );
+HXLINE( 761)					::String row3 = ( (::String)(row->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) );
+HXLINE( 758)					services->push( ::Dynamic(::hx::Anon_obj::Create(4)
             						->setFixed(0,HX_("serviceId",70,93,d4,bc),row1)
             						->setFixed(1,HX_("caps",21,1c,ba,41),_gthis->hydrateCaps(json,null()))
             						->setFixed(2,HX_("name",4b,72,ff,48),row2)
             						->setFixed(3,HX_("node",02,0a,0a,49),row3)));
             				}
             			}
-HXLINE( 765)			return services;
+HXLINE( 766)			return services;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_746_findServicesWithFeature)
-HXDLIN( 746)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 748)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT service_id, name, node, json(caps.caps) AS caps FROM services INNER JOIN caps ON services.caps=caps.sha1 WHERE account_id=?",fc,fb,5f,40),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,feature)),null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_747_findServicesWithFeature)
+HXDLIN( 747)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 749)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->db->exec(HX_("SELECT service_id, name, node, json(caps.caps) AS caps FROM services INNER JOIN caps ON services.caps=caps.sha1 WHERE account_id=?",fc,fb,5f,40),::cpp::VirtualArray_obj::__new(1)->init(0,accountId)), ::Dynamic(new _hx_Closure_0(_gthis,feature)),null());
             	}
 
 
@@ -2243,71 +2251,71 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,findServicesWithFeature,return )
 ::Dynamic Sqlite_obj::hydrateReactions(::String accountId,::Array< ::Dynamic> messages){
             		HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0,::Array< ::Dynamic>,messages) HXARGC(1)
             		::Array< ::Dynamic> _hx_run( ::haxe::ds::StringMap result){
-            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_770_hydrateReactions)
-HXLINE( 771)			{
-HXLINE( 771)				::Dynamic map = result;
-HXDLIN( 771)				 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
-HXDLIN( 771)				while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 771)					::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 771)					 ::haxe::ds::StringMap _g_value = ( ( ::haxe::ds::StringMap)(::haxe::IMap_obj::get(map,key)) );
-HXDLIN( 771)					{
-HXLINE( 772)						 ::borogove::ChatMessage result1 = null();
-HXDLIN( 772)						{
-HXLINE( 772)							int _g = 0;
-HXDLIN( 772)							while((_g < messages->length)){
-HXLINE( 772)								 ::borogove::ChatMessage v = messages->__get(_g).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 772)								_g = (_g + 1);
-HXLINE( 773)								bool m;
-HXDLIN( 773)								::String m1;
-HXDLIN( 773)								if (::hx::IsNull( v->serverId )) {
-HXLINE( 773)									m1 = v->localId;
+            			HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_771_hydrateReactions)
+HXLINE( 772)			{
+HXLINE( 772)				::Dynamic map = result;
+HXDLIN( 772)				 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map);
+HXDLIN( 772)				while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 772)					::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 772)					 ::haxe::ds::StringMap _g_value = ( ( ::haxe::ds::StringMap)(::haxe::IMap_obj::get(map,key)) );
+HXDLIN( 772)					{
+HXLINE( 773)						 ::borogove::ChatMessage result1 = null();
+HXDLIN( 773)						{
+HXLINE( 773)							int _g = 0;
+HXDLIN( 773)							while((_g < messages->length)){
+HXLINE( 773)								 ::borogove::ChatMessage v = messages->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 773)								_g = (_g + 1);
+HXLINE( 774)								bool m;
+HXDLIN( 774)								::String m1;
+HXDLIN( 774)								if (::hx::IsNull( v->serverId )) {
+HXLINE( 774)									m1 = v->localId;
             								}
             								else {
-HXLINE( 773)									m1 = ((v->serverId + HX_("\n",0a,00,00,00)) + v->serverIdBy);
+HXLINE( 774)									m1 = ((v->serverId + HX_("\n",0a,00,00,00)) + v->serverIdBy);
             								}
-HXDLIN( 773)								if ((((m1 + HX_("\n",0a,00,00,00)) + v->chatId()) != key)) {
-HXLINE( 774)									::String m2;
-HXDLIN( 774)									if (::hx::IsNull( v->localId )) {
-HXLINE( 774)										m2 = ((v->serverId + HX_("\n",0a,00,00,00)) + v->serverIdBy);
+HXDLIN( 774)								if ((((m1 + HX_("\n",0a,00,00,00)) + v->chatId()) != key)) {
+HXLINE( 775)									::String m2;
+HXDLIN( 775)									if (::hx::IsNull( v->localId )) {
+HXLINE( 775)										m2 = ((v->serverId + HX_("\n",0a,00,00,00)) + v->serverIdBy);
             									}
             									else {
-HXLINE( 774)										m2 = v->localId;
+HXLINE( 775)										m2 = v->localId;
             									}
-HXLINE( 773)									m = (((m2 + HX_("\n",0a,00,00,00)) + v->chatId()) == key);
+HXLINE( 774)									m = (((m2 + HX_("\n",0a,00,00,00)) + v->chatId()) == key);
             								}
             								else {
-HXLINE( 773)									m = true;
+HXLINE( 774)									m = true;
             								}
-HXLINE( 772)								if (m) {
+HXLINE( 773)								if (m) {
 HXLINE(  71)									result1 = v;
-HXLINE( 772)									goto _hx_goto_147;
+HXLINE( 773)									goto _hx_goto_147;
             								}
             							}
             							_hx_goto_147:;
             						}
-HXDLIN( 772)						 ::borogove::ChatMessage m3 = result1;
-HXLINE( 776)						if (::hx::IsNotNull( m3 )) {
-HXLINE( 776)							m3->set_reactions(_g_value);
+HXDLIN( 773)						 ::borogove::ChatMessage m3 = result1;
+HXLINE( 777)						if (::hx::IsNotNull( m3 )) {
+HXLINE( 777)							m3->set_reactions(_g_value);
             						}
             					}
             				}
             			}
-HXLINE( 778)			return messages;
+HXLINE( 779)			return messages;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_770_hydrateReactions)
-HXDLIN( 770)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(messages->length);
-HXDLIN( 770)		{
-HXDLIN( 770)			int _g = 0;
-HXDLIN( 770)			int _g1 = messages->length;
-HXDLIN( 770)			while((_g < _g1)){
-HXDLIN( 770)				_g = (_g + 1);
-HXDLIN( 770)				int i = (_g - 1);
-HXDLIN( 770)				{
-HXDLIN( 770)					 ::borogove::ChatMessage m = ( ( ::borogove::ChatMessage)(_hx_array_unsafe_get(messages,i)) );
-HXDLIN( 770)					::String inValue = m->chatId();
-HXDLIN( 770)					result->__unsafe_set(i, ::Dynamic(::hx::Anon_obj::Create(4)
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_771_hydrateReactions)
+HXDLIN( 771)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(messages->length);
+HXDLIN( 771)		{
+HXDLIN( 771)			int _g = 0;
+HXDLIN( 771)			int _g1 = messages->length;
+HXDLIN( 771)			while((_g < _g1)){
+HXDLIN( 771)				_g = (_g + 1);
+HXDLIN( 771)				int i = (_g - 1);
+HXDLIN( 771)				{
+HXDLIN( 771)					 ::borogove::ChatMessage m = ( ( ::borogove::ChatMessage)(_hx_array_unsafe_get(messages,i)) );
+HXDLIN( 771)					::String inValue = m->chatId();
+HXDLIN( 771)					result->__unsafe_set(i, ::Dynamic(::hx::Anon_obj::Create(4)
             						->setFixed(0,HX_("chatId",d3,04,77,b7),inValue)
             						->setFixed(1,HX_("serverId",7e,01,b2,e2),m->serverId)
             						->setFixed(2,HX_("localId",26,7a,c6,2d),m->localId)
@@ -2315,7 +2323,7 @@ HXDLIN( 770)					result->__unsafe_set(i, ::Dynamic(::hx::Anon_obj::Create(4)
             				}
             			}
             		}
-HXDLIN( 770)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->fetchReactions(accountId,result), ::Dynamic(new _hx_Closure_0(messages)),null());
+HXDLIN( 771)		return ::thenshim::_Promise::Promise_Impl__obj::then(this->fetchReactions(accountId,result), ::Dynamic(new _hx_Closure_0(messages)),null());
             	}
 
 
@@ -2324,170 +2332,170 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,hydrateReactions,return )
 ::Dynamic Sqlite_obj::fetchReactions(::String accountId,::Array< ::Dynamic> ids){
             		HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_0) HXARGC(1)
             		 ::haxe::ds::StringMap _hx_run( ::haxe::iterators::ArrayIterator rows){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_798_fetchReactions)
-HXLINE( 799)			 ::haxe::ds::StringMap agg =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 800)			while((rows->current < rows->array->get_length())){
-HXLINE( 800)				 ::Dynamic row = rows->array->__get(rows->current++);
-HXLINE( 801)				::cpp::VirtualArray reactions = ( (::cpp::VirtualArray)( ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("reactions",aa,cc,95,e7),::hx::paccDynamic)) ))->doParse()) );
-HXLINE( 802)				::String mapId;
-HXDLIN( 802)				bool mapId1;
-HXDLIN( 802)				if (::hx::IsNotNull( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic) )) {
-HXLINE( 802)					mapId1 = ::hx::IsEq( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) );
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_799_fetchReactions)
+HXLINE( 800)			 ::haxe::ds::StringMap agg =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 801)			while((rows->current < rows->array->get_length())){
+HXLINE( 801)				 ::Dynamic row = rows->array->__get(rows->current++);
+HXLINE( 802)				::cpp::VirtualArray reactions = ( (::cpp::VirtualArray)( ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("reactions",aa,cc,95,e7),::hx::paccDynamic)) ))->doParse()) );
+HXLINE( 803)				::String mapId;
+HXDLIN( 803)				bool mapId1;
+HXDLIN( 803)				if (::hx::IsNotNull( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic) )) {
+HXLINE( 803)					mapId1 = ::hx::IsEq( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) );
             				}
             				else {
-HXLINE( 802)					mapId1 = true;
+HXLINE( 803)					mapId1 = true;
             				}
-HXDLIN( 802)				if (mapId1) {
-HXLINE( 802)					mapId = ( (::String)(row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic)) );
+HXDLIN( 803)				if (mapId1) {
+HXLINE( 803)					mapId = ( (::String)(row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic)) );
             				}
             				else {
-HXLINE( 802)					mapId = ( (::String)(((row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic) + HX_("\n",0a,00,00,00)) + row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic))) );
+HXLINE( 803)					mapId = ( (::String)(((row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic) + HX_("\n",0a,00,00,00)) + row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic))) );
             				}
-HXDLIN( 802)				::String mapId2 = ( (::String)(((mapId + HX_("\n",0a,00,00,00)) + row->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic))) );
-HXLINE( 803)				if (!(agg->exists(mapId2))) {
-HXLINE( 803)					agg->set(mapId2, ::haxe::ds::StringMap_obj::__alloc( HX_CTX ));
+HXDLIN( 803)				::String mapId2 = ( (::String)(((mapId + HX_("\n",0a,00,00,00)) + row->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic))) );
+HXLINE( 804)				if (!(agg->exists(mapId2))) {
+HXLINE( 804)					agg->set(mapId2, ::haxe::ds::StringMap_obj::__alloc( HX_CTX ));
             				}
-HXLINE( 804)				 ::haxe::ds::StringMap map = ( ( ::haxe::ds::StringMap)(agg->get(mapId2)) );
-HXLINE( 805)				if (!(map->exists(( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) )))) {
-HXLINE( 805)					map->set(( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) ),::cpp::VirtualArray_obj::__new(0));
+HXLINE( 805)				 ::haxe::ds::StringMap map = ( ( ::haxe::ds::StringMap)(agg->get(mapId2)) );
+HXLINE( 806)				if (!(map->exists(( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) )))) {
+HXLINE( 806)					map->set(( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) ),::cpp::VirtualArray_obj::__new(0));
             				}
-HXLINE( 806)				if (::hx::IsEq( row->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),1 )) {
-HXLINE( 807)					int _g = 0;
-HXDLIN( 807)					while((_g < reactions->get_length())){
-HXLINE( 807)						 ::Dynamic reaction = reactions->__get(_g);
-HXDLIN( 807)						_g = (_g + 1);
-HXDLIN( 807)						( (::cpp::VirtualArray)(map->get( ::Dynamic(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)))) )->push(reaction);
+HXLINE( 807)				if (::hx::IsEq( row->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),1 )) {
+HXLINE( 808)					int _g = 0;
+HXDLIN( 808)					while((_g < reactions->get_length())){
+HXLINE( 808)						 ::Dynamic reaction = reactions->__get(_g);
+HXDLIN( 808)						_g = (_g + 1);
+HXDLIN( 808)						( (::cpp::VirtualArray)(map->get( ::Dynamic(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)))) )->push(reaction);
             					}
             				}
             				else {
-HXLINE( 808)					if (::hx::IsEq( row->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),0 )) {
-HXLINE( 809)						::String k = ( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) );
-HXDLIN( 809)						::cpp::VirtualArray _this = ( (::cpp::VirtualArray)(map->get( ::Dynamic(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)))) );
-HXDLIN( 809)						::cpp::VirtualArray _g1 = ::cpp::VirtualArray_obj::__new(0);
-HXDLIN( 809)						{
-HXLINE( 809)							int _g2 = 0;
-HXDLIN( 809)							while((_g2 < _this->get_length())){
-HXLINE( 809)								 ::Dynamic v = _this->__get(_g2);
-HXDLIN( 809)								_g2 = (_g2 + 1);
-HXDLIN( 809)								if (::hx::IsNotNull( v->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic) )) {
-HXLINE( 809)									_g1->push(v);
+HXLINE( 809)					if (::hx::IsEq( row->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),0 )) {
+HXLINE( 810)						::String k = ( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) );
+HXDLIN( 810)						::cpp::VirtualArray _this = ( (::cpp::VirtualArray)(map->get( ::Dynamic(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)))) );
+HXDLIN( 810)						::cpp::VirtualArray _g1 = ::cpp::VirtualArray_obj::__new(0);
+HXDLIN( 810)						{
+HXLINE( 810)							int _g2 = 0;
+HXDLIN( 810)							while((_g2 < _this->get_length())){
+HXLINE( 810)								 ::Dynamic v = _this->__get(_g2);
+HXDLIN( 810)								_g2 = (_g2 + 1);
+HXDLIN( 810)								if (::hx::IsNotNull( v->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic) )) {
+HXLINE( 810)									_g1->push(v);
             								}
             							}
             						}
-HXDLIN( 809)						::cpp::VirtualArray v1 = reactions->concat(_g1);
-HXDLIN( 809)						map->set(k,v1);
+HXDLIN( 810)						::cpp::VirtualArray v1 = reactions->concat(_g1);
+HXDLIN( 810)						map->set(k,v1);
             					}
             					else {
-HXLINE( 810)						if (::hx::IsEq( row->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),2 )) {
-HXLINE( 811)							map->set(( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) ),reactions);
+HXLINE( 811)						if (::hx::IsEq( row->__Field(HX_("kind",54,e1,09,47),::hx::paccDynamic),2 )) {
+HXLINE( 812)							map->set(( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) ),reactions);
             						}
             					}
             				}
             			}
-HXLINE( 814)			 ::haxe::ds::StringMap result =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 815)			{
-HXLINE( 815)				::Dynamic map1 = agg;
-HXDLIN( 815)				 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map1);
-HXDLIN( 815)				while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 815)					::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXDLIN( 815)					 ::haxe::ds::StringMap _g_value = ( ( ::haxe::ds::StringMap)(::haxe::IMap_obj::get(map1,key)) );
-HXDLIN( 815)					{
-HXLINE( 816)						 ::haxe::ds::StringMap map2 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
-HXLINE( 817)						{
-HXLINE( 817)							 ::Dynamic reactionsBySender = _g_value->iterator();
-HXDLIN( 817)							while(( (bool)(reactionsBySender->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
-HXLINE( 817)								::cpp::VirtualArray reactionsBySender1 = ( (::cpp::VirtualArray)(reactionsBySender->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
-HXLINE( 818)								{
-HXLINE( 818)									int _g3 = 0;
-HXDLIN( 818)									while((_g3 < reactionsBySender1->get_length())){
-HXLINE( 818)										 ::Dynamic reactionD = reactionsBySender1->__get(_g3);
-HXDLIN( 818)										_g3 = (_g3 + 1);
-HXLINE( 819)										 ::borogove::Reaction reaction1;
-HXDLIN( 819)										if (::hx::IsNull( reactionD->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic) )) {
-HXLINE( 819)											reaction1 =  ::borogove::Reaction_obj::__alloc( HX_CTX ,( (::String)(reactionD->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("envelopeId",0b,03,af,a8),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) ));
+HXLINE( 815)			 ::haxe::ds::StringMap result =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 816)			{
+HXLINE( 816)				::Dynamic map1 = agg;
+HXDLIN( 816)				 ::Dynamic _g_keys = ::haxe::IMap_obj::keys(map1);
+HXDLIN( 816)				while(( (bool)(_g_keys->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 816)					::String key = ( (::String)(_g_keys->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXDLIN( 816)					 ::haxe::ds::StringMap _g_value = ( ( ::haxe::ds::StringMap)(::haxe::IMap_obj::get(map1,key)) );
+HXDLIN( 816)					{
+HXLINE( 817)						 ::haxe::ds::StringMap map2 =  ::haxe::ds::StringMap_obj::__alloc( HX_CTX );
+HXLINE( 818)						{
+HXLINE( 818)							 ::Dynamic reactionsBySender = _g_value->iterator();
+HXDLIN( 818)							while(( (bool)(reactionsBySender->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 818)								::cpp::VirtualArray reactionsBySender1 = ( (::cpp::VirtualArray)(reactionsBySender->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)()) );
+HXLINE( 819)								{
+HXLINE( 819)									int _g3 = 0;
+HXDLIN( 819)									while((_g3 < reactionsBySender1->get_length())){
+HXLINE( 819)										 ::Dynamic reactionD = reactionsBySender1->__get(_g3);
+HXDLIN( 819)										_g3 = (_g3 + 1);
+HXLINE( 820)										 ::borogove::Reaction reaction1;
+HXDLIN( 820)										if (::hx::IsNull( reactionD->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic) )) {
+HXLINE( 820)											reaction1 =  ::borogove::Reaction_obj::__alloc( HX_CTX ,( (::String)(reactionD->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("envelopeId",0b,03,af,a8),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("key",9f,89,51,00),::hx::paccDynamic)) ));
             										}
             										else {
-HXLINE( 819)											reaction1 =  ::borogove::CustomEmojiReaction_obj::__alloc( HX_CTX ,( (::String)(reactionD->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("envelopeId",0b,03,af,a8),::hx::paccDynamic)) ));
+HXLINE( 820)											reaction1 =  ::borogove::CustomEmojiReaction_obj::__alloc( HX_CTX ,( (::String)(reactionD->__Field(HX_("senderId",f0,1e,0e,ec),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("text",ad,cc,f9,4c),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("uri",6c,2b,59,00),::hx::paccDynamic)) ),( (::String)(reactionD->__Field(HX_("envelopeId",0b,03,af,a8),::hx::paccDynamic)) ));
             										}
-HXLINE( 825)										if (!(map2->exists(reaction1->key))) {
-HXLINE( 825)											map2->set(reaction1->key,::Array_obj< ::Dynamic>::__new(0));
+HXLINE( 826)										if (!(map2->exists(reaction1->key))) {
+HXLINE( 826)											map2->set(reaction1->key,::Array_obj< ::Dynamic>::__new(0));
             										}
-HXLINE( 826)										( (::Array< ::Dynamic>)(map2->get(reaction1->key)) )->push(reaction1);
+HXLINE( 827)										( (::Array< ::Dynamic>)(map2->get(reaction1->key)) )->push(reaction1);
             									}
             								}
             							}
             						}
-HXLINE( 829)						result->set(key,map2);
+HXLINE( 830)						result->set(key,map2);
             					}
             				}
             			}
-HXLINE( 831)			return result;
+HXLINE( 832)			return result;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_782_fetchReactions)
-HXLINE( 783)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
-HXLINE( 784)		{
-HXLINE( 784)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 784)				q->flush();
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_783_fetchReactions)
+HXLINE( 784)		 ::StringBuf q =  ::StringBuf_obj::__alloc( HX_CTX );
+HXLINE( 785)		{
+HXLINE( 785)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 785)				q->flush();
             			}
-HXDLIN( 784)			if (::hx::IsNull( q->b )) {
-HXLINE( 784)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_159,1);
+HXDLIN( 785)			if (::hx::IsNull( q->b )) {
+HXLINE( 785)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_159,1);
             			}
             			else {
-HXLINE( 784)				q->b->push(HX_("SELECT kind, chat_id, mam_id, mam_by, stanza_id, sender_id, json(reactions) AS reactions FROM reactions WHERE 1=0",d2,04,de,a3));
-            			}
-            		}
-HXLINE( 785)		::Array< ::String > params = ::Array_obj< ::String >::__new(0);
-HXLINE( 786)		{
-HXLINE( 786)			int _g = 0;
-HXDLIN( 786)			while((_g < ids->length)){
-HXLINE( 786)				 ::Dynamic item = ids->__get(_g);
-HXDLIN( 786)				_g = (_g + 1);
-HXLINE( 787)				if (::hx::IsNotNull( item->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic) )) {
-HXLINE( 788)					{
-HXLINE( 788)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 788)							q->flush();
+HXLINE( 785)				q->b->push(HX_("SELECT kind, chat_id, mam_id, mam_by, stanza_id, sender_id, json(reactions) AS reactions FROM reactions WHERE 1=0",d2,04,de,a3));
+            			}
+            		}
+HXLINE( 786)		::Array< ::String > params = ::Array_obj< ::String >::__new(0);
+HXLINE( 787)		{
+HXLINE( 787)			int _g = 0;
+HXDLIN( 787)			while((_g < ids->length)){
+HXLINE( 787)				 ::Dynamic item = ids->__get(_g);
+HXDLIN( 787)				_g = (_g + 1);
+HXLINE( 788)				if (::hx::IsNotNull( item->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic) )) {
+HXLINE( 789)					{
+HXLINE( 789)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 789)							q->flush();
             						}
-HXDLIN( 788)						if (::hx::IsNull( q->b )) {
-HXLINE( 788)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_160,1);
+HXDLIN( 789)						if (::hx::IsNull( q->b )) {
+HXLINE( 789)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_160,1);
             						}
             						else {
-HXLINE( 788)							q->b->push(HX_(" OR (mam_id=? AND mam_by=?)",0f,bb,c5,e5));
+HXLINE( 789)							q->b->push(HX_(" OR (mam_id=? AND mam_by=?)",0f,bb,c5,e5));
             						}
             					}
-HXLINE( 789)					params->push( ::Dynamic(item->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)));
-HXLINE( 790)					params->push( ::Dynamic(item->__Field(HX_("serverIdBy",f5,16,54,74),::hx::paccDynamic)));
+HXLINE( 790)					params->push( ::Dynamic(item->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)));
+HXLINE( 791)					params->push( ::Dynamic(item->__Field(HX_("serverIdBy",f5,16,54,74),::hx::paccDynamic)));
             				}
-HXLINE( 792)				if (::hx::IsNotNull( item->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic) )) {
-HXLINE( 793)					{
-HXLINE( 793)						if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 793)							q->flush();
+HXLINE( 793)				if (::hx::IsNotNull( item->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic) )) {
+HXLINE( 794)					{
+HXLINE( 794)						if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 794)							q->flush();
             						}
-HXDLIN( 793)						if (::hx::IsNull( q->b )) {
-HXLINE( 793)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_161,1);
+HXDLIN( 794)						if (::hx::IsNull( q->b )) {
+HXLINE( 794)							q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_161,1);
             						}
             						else {
-HXLINE( 793)							q->b->push(HX_(" OR stanza_id=?",6a,1d,f2,5b));
+HXLINE( 794)							q->b->push(HX_(" OR stanza_id=?",6a,1d,f2,5b));
             						}
             					}
-HXLINE( 794)					params->push( ::Dynamic(item->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)));
+HXLINE( 795)					params->push( ::Dynamic(item->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)));
             				}
             			}
             		}
-HXLINE( 797)		{
-HXLINE( 797)			if (::hx::IsNotNull( q->charBuf )) {
-HXLINE( 797)				q->flush();
+HXLINE( 798)		{
+HXLINE( 798)			if (::hx::IsNotNull( q->charBuf )) {
+HXLINE( 798)				q->flush();
             			}
-HXDLIN( 797)			if (::hx::IsNull( q->b )) {
-HXLINE( 797)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_162,1);
+HXDLIN( 798)			if (::hx::IsNull( q->b )) {
+HXLINE( 798)				q->b = ::Array_obj< ::String >::fromData( _hx_array_data_99390348_162,1);
             			}
             			else {
-HXLINE( 797)				q->b->push(HX_(" ORDER BY created_at, ROWID",00,65,8d,0e));
+HXLINE( 798)				q->b->push(HX_(" ORDER BY created_at, ROWID",00,65,8d,0e));
             			}
             		}
-HXLINE( 798)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
-HXDLIN( 798)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(q->toString(),params), ::Dynamic(new _hx_Closure_0()),null());
+HXLINE( 799)		 ::borogove::persistence::SqliteDriver _hx_tmp = this->db;
+HXDLIN( 799)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp->exec(q->toString(),params), ::Dynamic(new _hx_Closure_0()),null());
             	}
 
 
@@ -2496,306 +2504,306 @@ HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,fetchReactions,return )
 ::Dynamic Sqlite_obj::hydrateReplyTo(::String accountId,::Array< ::Dynamic> messages,::Array< ::Dynamic> replyTos){
             		HX_BEGIN_LOCAL_FUNC_S3(::hx::LocalFunc,_hx_Closure_1,::Array< ::Dynamic>,messages, ::borogove::persistence::Sqlite,_gthis,::String,accountId) HXARGC(1)
             		::Array< ::Dynamic> _hx_run( ::haxe::iterators::ArrayIterator iter){
-            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_866_hydrateReplyTo)
-HXLINE( 867)			if (::hx::IsNotNull( iter )) {
+            			HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_867_hydrateReplyTo)
+HXLINE( 868)			if (::hx::IsNotNull( iter )) {
             				HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::haxe::iterators::ArrayIterator,iter) HXARGC(0)
             				 ::haxe::iterators::ArrayIterator _hx_run(){
-            					HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_868_hydrateReplyTo)
-HXLINE( 868)					return iter;
+            					HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_869_hydrateReplyTo)
+HXLINE( 869)					return iter;
             				}
             				HX_END_LOCAL_FUNC0(return)
 
-HXLINE( 868)				::Array< ::Dynamic> parents = ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
+HXLINE( 869)				::Array< ::Dynamic> parents = ::Lambda_obj::array( ::Dynamic(::hx::Anon_obj::Create(1)
             					->setFixed(0,HX_("iterator",ee,49,9a,93), ::Dynamic(new _hx_Closure_0(iter)))));
-HXLINE( 869)				{
-HXLINE( 869)					int _g = 0;
-HXDLIN( 869)					while((_g < messages->length)){
-HXLINE( 869)						 ::borogove::ChatMessage message = messages->__get(_g).StaticCast<  ::borogove::ChatMessage >();
-HXDLIN( 869)						_g = (_g + 1);
-HXLINE( 870)						if (::hx::IsNotNull( message->replyToMessage )) {
-HXLINE( 871)							 ::Dynamic result = null();
-HXDLIN( 871)							{
-HXLINE( 871)								int _g1 = 0;
-HXDLIN( 871)								while((_g1 < parents->length)){
-HXLINE( 871)									 ::Dynamic v = parents->__get(_g1);
-HXDLIN( 871)									_g1 = (_g1 + 1);
-HXDLIN( 871)									bool found;
-HXDLIN( 871)									bool found1;
-HXDLIN( 871)									::String v1 = ( (::String)(v->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)) );
-HXDLIN( 871)									if ((v1 == message->chatId())) {
-HXLINE( 871)										if (::hx::IsNotNull( message->replyToMessage->serverId )) {
-HXLINE( 871)											found1 = ::hx::IsEq( v->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),message->replyToMessage->serverId );
+HXLINE( 870)				{
+HXLINE( 870)					int _g = 0;
+HXDLIN( 870)					while((_g < messages->length)){
+HXLINE( 870)						 ::borogove::ChatMessage message = messages->__get(_g).StaticCast<  ::borogove::ChatMessage >();
+HXDLIN( 870)						_g = (_g + 1);
+HXLINE( 871)						if (::hx::IsNotNull( message->replyToMessage )) {
+HXLINE( 872)							 ::Dynamic result = null();
+HXDLIN( 872)							{
+HXLINE( 872)								int _g1 = 0;
+HXDLIN( 872)								while((_g1 < parents->length)){
+HXLINE( 872)									 ::Dynamic v = parents->__get(_g1);
+HXDLIN( 872)									_g1 = (_g1 + 1);
+HXDLIN( 872)									bool found;
+HXDLIN( 872)									bool found1;
+HXDLIN( 872)									::String v1 = ( (::String)(v->__Field(HX_("chat_id",22,ea,bd,d0),::hx::paccDynamic)) );
+HXDLIN( 872)									if ((v1 == message->chatId())) {
+HXLINE( 872)										if (::hx::IsNotNull( message->replyToMessage->serverId )) {
+HXLINE( 872)											found1 = ::hx::IsEq( v->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),message->replyToMessage->serverId );
             										}
             										else {
-HXLINE( 871)											found1 = true;
+HXLINE( 872)											found1 = true;
             										}
             									}
             									else {
-HXLINE( 871)										found1 = false;
+HXLINE( 872)										found1 = false;
             									}
-HXDLIN( 871)									if (found1) {
-HXLINE( 871)										if (::hx::IsNotNull( message->replyToMessage->localId )) {
-HXLINE( 871)											found = ::hx::IsEq( v->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic),message->replyToMessage->localId );
+HXDLIN( 872)									if (found1) {
+HXLINE( 872)										if (::hx::IsNotNull( message->replyToMessage->localId )) {
+HXLINE( 872)											found = ::hx::IsEq( v->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic),message->replyToMessage->localId );
             										}
             										else {
-HXLINE( 871)											found = true;
+HXLINE( 872)											found = true;
             										}
             									}
             									else {
-HXLINE( 871)										found = false;
+HXLINE( 872)										found = false;
             									}
-HXDLIN( 871)									if (found) {
-HXLINE( 871)										result = v;
-HXDLIN( 871)										goto _hx_goto_165;
+HXDLIN( 872)									if (found) {
+HXLINE( 872)										result = v;
+HXDLIN( 872)										goto _hx_goto_165;
             									}
             								}
             								_hx_goto_165:;
             							}
-HXDLIN( 871)							 ::Dynamic found2 = result;
-HXLINE( 872)							if (::hx::IsNotNull( found2 )) {
-HXLINE( 872)								message->set_replyToMessage(_gthis->hydrateMessages(accountId, ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,::cpp::VirtualArray_obj::__new(1)->init(0,found2)))->__get(0).StaticCast<  ::borogove::ChatMessage >());
+HXDLIN( 872)							 ::Dynamic found2 = result;
+HXLINE( 873)							if (::hx::IsNotNull( found2 )) {
+HXLINE( 873)								message->set_replyToMessage(_gthis->hydrateMessages(accountId, ::haxe::iterators::ArrayIterator_obj::__alloc( HX_CTX ,::cpp::VirtualArray_obj::__new(1)->init(0,found2)))->__get(0).StaticCast<  ::borogove::ChatMessage >());
             							}
             						}
             					}
             				}
             			}
-HXLINE( 876)			return messages;
+HXLINE( 877)			return messages;
             		}
             		HX_END_LOCAL_FUNC1(return)
 
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_835_hydrateReplyTo)
-HXDLIN( 835)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
-HXLINE( 836)		::Dynamic _hx_tmp;
-HXDLIN( 836)		if ((replyTos->length < 1)) {
-HXLINE( 836)			_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_836_hydrateReplyTo)
+HXDLIN( 836)		 ::borogove::persistence::Sqlite _gthis = ::hx::ObjectPtr<OBJ_>(this);
+HXLINE( 837)		::Dynamic _hx_tmp;
+HXDLIN( 837)		if ((replyTos->length < 1)) {
+HXLINE( 837)			_hx_tmp = ::thenshim::_Promise::Promise_Impl__obj::resolve(null());
             		}
             		else {
-HXLINE( 839)			::Array< ::String > mamIds = ::Array_obj< ::String >::__new(0);
-HXLINE( 840)			::Array< ::String > mamIdsS = ::Array_obj< ::String >::__new(0);
-HXLINE( 841)			::Array< ::String > stanzaIds = ::Array_obj< ::String >::__new(0);
-HXLINE( 842)			::Array< ::String > stanzaIdsS = ::Array_obj< ::String >::__new(0);
-HXLINE( 843)			::Array< ::String > params = ::Array_obj< ::String >::__new(1)->init(0,accountId);
-HXLINE( 845)			{
-HXLINE( 845)				int _g = 0;
-HXDLIN( 845)				while((_g < replyTos->length)){
-HXLINE( 845)					 ::Dynamic parent = replyTos->__get(_g);
-HXDLIN( 845)					_g = (_g + 1);
-HXLINE( 846)					if (::hx::IsNotNull( parent->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic) )) {
-HXLINE( 847)						mamIds->push( ::Dynamic(parent->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
-HXLINE( 848)						mamIds->push( ::Dynamic(parent->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)));
-HXLINE( 849)						mamIdsS->push(HX_("(?,?)",7f,3f,cd,31));
+HXLINE( 840)			::Array< ::String > mamIds = ::Array_obj< ::String >::__new(0);
+HXLINE( 841)			::Array< ::String > mamIdsS = ::Array_obj< ::String >::__new(0);
+HXLINE( 842)			::Array< ::String > stanzaIds = ::Array_obj< ::String >::__new(0);
+HXLINE( 843)			::Array< ::String > stanzaIdsS = ::Array_obj< ::String >::__new(0);
+HXLINE( 844)			::Array< ::String > params = ::Array_obj< ::String >::__new(1)->init(0,accountId);
+HXLINE( 846)			{
+HXLINE( 846)				int _g = 0;
+HXDLIN( 846)				while((_g < replyTos->length)){
+HXLINE( 846)					 ::Dynamic parent = replyTos->__get(_g);
+HXDLIN( 846)					_g = (_g + 1);
+HXLINE( 847)					if (::hx::IsNotNull( parent->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic) )) {
+HXLINE( 848)						mamIds->push( ::Dynamic(parent->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
+HXLINE( 849)						mamIds->push( ::Dynamic(parent->__Field(HX_("serverId",7e,01,b2,e2),::hx::paccDynamic)));
+HXLINE( 850)						mamIdsS->push(HX_("(?,?)",7f,3f,cd,31));
             					}
             					else {
-HXLINE( 851)						stanzaIds->push( ::Dynamic(parent->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
-HXLINE( 852)						stanzaIds->push( ::Dynamic(parent->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)));
-HXLINE( 853)						stanzaIdsS->push(HX_("(?,?)",7f,3f,cd,31));
+HXLINE( 852)						stanzaIds->push( ::Dynamic(parent->__Field(HX_("chatId",d3,04,77,b7),::hx::paccDynamic)));
+HXLINE( 853)						stanzaIds->push( ::Dynamic(parent->__Field(HX_("localId",26,7a,c6,2d),::hx::paccDynamic)));
+HXLINE( 854)						stanzaIdsS->push(HX_("(?,?)",7f,3f,cd,31));
             					}
             				}
             			}
-HXLINE( 856)			::Array< ::String > q = ::Array_obj< ::String >::__new(0);
-HXLINE( 857)			if ((mamIds->length > 0)) {
-HXLINE( 858)				q->push((((HX_("SELECT chat_id, stanza_id, stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=?",77,29,5c,6f) + HX_(" AND (chat_id, mam_id) IN (",9c,23,d1,7d)) + mamIdsS->join(HX_(",",2c,00,00,00))) + HX_(")",29,00,00,00)));
-HXLINE( 859)				params = params->concat(mamIds);
+HXLINE( 857)			::Array< ::String > q = ::Array_obj< ::String >::__new(0);
+HXLINE( 858)			if ((mamIds->length > 0)) {
+HXLINE( 859)				q->push((((HX_("SELECT chat_id, stanza_id, stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=?",77,29,5c,6f) + HX_(" AND (chat_id, mam_id) IN (",9c,23,d1,7d)) + mamIdsS->join(HX_(",",2c,00,00,00))) + HX_(")",29,00,00,00)));
+HXLINE( 860)				params = params->concat(mamIds);
             			}
-HXLINE( 861)			if ((stanzaIds->length > 0)) {
-HXLINE( 862)				q->push((((HX_("SELECT chat_id, stanza_id, stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=?",77,29,5c,6f) + HX_(" AND (chat_id, stanza_id) IN (",72,6a,27,14)) + stanzaIdsS->join(HX_(",",2c,00,00,00))) + HX_(")",29,00,00,00)));
-HXLINE( 863)				params = params->concat(stanzaIds);
+HXLINE( 862)			if ((stanzaIds->length > 0)) {
+HXLINE( 863)				q->push((((HX_("SELECT chat_id, stanza_id, stanza, direction, type, status, status_text, strftime('%FT%H:%M:%fZ', created_at / 1000.0, 'unixepoch') AS timestamp, sender_id, mam_id, mam_by, sync_point FROM messages WHERE account_id=?",77,29,5c,6f) + HX_(" AND (chat_id, stanza_id) IN (",72,6a,27,14)) + stanzaIdsS->join(HX_(",",2c,00,00,00))) + HX_(")",29,00,00,00)));
+HXLINE( 864)				params = params->concat(stanzaIds);
             			}
-HXLINE( 865)			 ::borogove::persistence::SqliteDriver _hx_tmp1 = this->db;
-HXLINE( 836)			_hx_tmp = _hx_tmp1->exec(q->join(HX_(" UNION ALL ",f0,e4,70,26)),params);
+HXLINE( 866)			 ::borogove::persistence::SqliteDriver _hx_tmp1 = this->db;
+HXLINE( 837)			_hx_tmp = _hx_tmp1->exec(q->join(HX_(" UNION ALL ",f0,e4,70,26)),params);
             		}
-HXDLIN( 836)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp, ::Dynamic(new _hx_Closure_1(messages,_gthis,accountId)),null());
+HXDLIN( 837)		return ::thenshim::_Promise::Promise_Impl__obj::then(_hx_tmp, ::Dynamic(new _hx_Closure_1(messages,_gthis,accountId)),null());
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC3(Sqlite_obj,hydrateReplyTo,return )
 
 ::Array< ::Dynamic> Sqlite_obj::hydrateMessages(::String accountId, ::Dynamic rows){
-            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_880_hydrateMessages)
-HXLINE( 882)		 ::borogove::JID accountJid = ::borogove::JID_obj::parse(accountId);
-HXLINE( 883)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
-HXDLIN( 883)		{
+            	HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_881_hydrateMessages)
+HXLINE( 883)		 ::borogove::JID accountJid = ::borogove::JID_obj::parse(accountId);
+HXLINE( 884)		::Array< ::Dynamic> _g = ::Array_obj< ::Dynamic>::__new(0);
+HXDLIN( 884)		{
             			HX_BEGIN_LOCAL_FUNC_S1(::hx::LocalFunc,_hx_Closure_0, ::Dynamic,rows) HXARGC(0)
             			 ::Dynamic _hx_run(){
-            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_883_hydrateMessages)
-HXLINE( 883)				return rows;
+            				HX_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_884_hydrateMessages)
+HXLINE( 884)				return rows;
             			}
             			HX_END_LOCAL_FUNC0(return)
 
-HXLINE( 883)			 ::Dynamic x =  ::Dynamic(new _hx_Closure_0(rows))();
-HXDLIN( 883)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
+HXLINE( 884)			 ::Dynamic x =  ::Dynamic(new _hx_Closure_0(rows))();
+HXDLIN( 884)			while(( (bool)(x->__Field(HX_("hasNext",6d,a5,46,18),::hx::paccDynamic)()) )){
             				HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_3, ::borogove::JID,accountJid, ::Dynamic,row) HXARGC(2)
             				 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder builder, ::borogove::Stanza _){
-            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_883_hydrateMessages)
-HXLINE( 884)					builder->syncPoint = ::hx::IsNotEq( row->__Field(HX_("sync_point",2c,6c,7f,80),::hx::paccDynamic),0 );
-HXLINE( 885)					builder->timestamp = ( (::String)(row->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) );
-HXLINE( 886)					builder->type = ( (int)(row->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)) );
-HXLINE( 887)					builder->status = ( (int)(row->__Field(HX_("status",32,e7,fb,05),::hx::paccDynamic)) );
-HXLINE( 888)					builder->statusText = ( (::String)(row->__Field(HX_("status_text",1a,ac,61,da),::hx::paccDynamic)) );
-HXLINE( 889)					builder->senderId = ( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) );
-HXLINE( 890)					::String _hx_tmp;
-HXDLIN( 890)					if (::hx::IsEq( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) )) {
-HXLINE( 890)						_hx_tmp = null();
+            					HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_884_hydrateMessages)
+HXLINE( 885)					builder->syncPoint = ::hx::IsNotEq( row->__Field(HX_("sync_point",2c,6c,7f,80),::hx::paccDynamic),0 );
+HXLINE( 886)					builder->timestamp = ( (::String)(row->__Field(HX_("timestamp",d6,d4,ce,a5),::hx::paccDynamic)) );
+HXLINE( 887)					builder->type = ( (int)(row->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)) );
+HXLINE( 888)					builder->status = ( (int)(row->__Field(HX_("status",32,e7,fb,05),::hx::paccDynamic)) );
+HXLINE( 889)					builder->statusText = ( (::String)(row->__Field(HX_("status_text",1a,ac,61,da),::hx::paccDynamic)) );
+HXLINE( 890)					builder->senderId = ( (::String)(row->__Field(HX_("sender_id",65,a9,5d,a0),::hx::paccDynamic)) );
+HXLINE( 891)					::String _hx_tmp;
+HXDLIN( 891)					if (::hx::IsEq( row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) )) {
+HXLINE( 891)						_hx_tmp = null();
             					}
             					else {
-HXLINE( 890)						_hx_tmp = ( (::String)(row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic)) );
+HXLINE( 891)						_hx_tmp = ( (::String)(row->__Field(HX_("mam_id",01,4d,19,b7),::hx::paccDynamic)) );
             					}
-HXDLIN( 890)					builder->serverId = _hx_tmp;
-HXLINE( 891)					::String _hx_tmp1;
-HXDLIN( 891)					if (::hx::IsEq( row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) )) {
-HXLINE( 891)						_hx_tmp1 = null();
+HXDLIN( 891)					builder->serverId = _hx_tmp;
+HXLINE( 892)					::String _hx_tmp1;
+HXDLIN( 892)					if (::hx::IsEq( row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic),HX_("",00,00,00,00) )) {
+HXLINE( 892)						_hx_tmp1 = null();
             					}
             					else {
-HXLINE( 891)						_hx_tmp1 = ( (::String)(row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic)) );
+HXLINE( 892)						_hx_tmp1 = ( (::String)(row->__Field(HX_("mam_by",fd,46,19,b7),::hx::paccDynamic)) );
             					}
-HXDLIN( 891)					builder->serverIdBy = _hx_tmp1;
-HXLINE( 892)					if (::hx::IsNotEq( builder->direction,row->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic) )) {
-HXLINE( 893)						builder->direction = ( (int)(row->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic)) );
-HXLINE( 894)						::Array< ::Dynamic> replyTo = builder->replyTo;
-HXLINE( 895)						builder->replyTo = builder->recipients;
-HXLINE( 896)						builder->recipients = replyTo;
+HXDLIN( 892)					builder->serverIdBy = _hx_tmp1;
+HXLINE( 893)					if (::hx::IsNotEq( builder->direction,row->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic) )) {
+HXLINE( 894)						builder->direction = ( (int)(row->__Field(HX_("direction",3f,62,40,10),::hx::paccDynamic)) );
+HXLINE( 895)						::Array< ::Dynamic> replyTo = builder->replyTo;
+HXLINE( 896)						builder->replyTo = builder->recipients;
+HXLINE( 897)						builder->recipients = replyTo;
             					}
-HXLINE( 898)					bool _hx_tmp2;
-HXDLIN( 898)					if (::hx::IsNotNull( row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic) )) {
-HXLINE( 898)						_hx_tmp2 = ::hx::IsNotEq( row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic),HX_("",00,00,00,00) );
+HXLINE( 899)					bool _hx_tmp2;
+HXDLIN( 899)					if (::hx::IsNotNull( row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic) )) {
+HXLINE( 899)						_hx_tmp2 = ::hx::IsNotEq( row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic),HX_("",00,00,00,00) );
             					}
             					else {
-HXLINE( 898)						_hx_tmp2 = false;
+HXLINE( 899)						_hx_tmp2 = false;
             					}
-HXDLIN( 898)					if (_hx_tmp2) {
-HXLINE( 898)						builder->localId = ( (::String)(row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic)) );
+HXDLIN( 899)					if (_hx_tmp2) {
+HXLINE( 899)						builder->localId = ( (::String)(row->__Field(HX_("stanza_id",25,7b,7a,e9),::hx::paccDynamic)) );
             					}
-HXLINE( 899)					if (::hx::IsNotNull( row->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic) )) {
-HXLINE( 900)						 ::Dynamic versionTimes =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("version_times",1f,50,f9,17),::hx::paccDynamic)) ))->doParse();
-HXLINE( 901)						 ::Dynamic versions =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic)) ))->doParse();
-HXLINE( 902)						if ((::Reflect_obj::fields(versions)->length > 1)) {
+HXLINE( 900)					if (::hx::IsNotNull( row->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic) )) {
+HXLINE( 901)						 ::Dynamic versionTimes =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("version_times",1f,50,f9,17),::hx::paccDynamic)) ))->doParse();
+HXLINE( 902)						 ::Dynamic versions =  ::haxe::format::JsonParser_obj::__alloc( HX_CTX ,( (::String)(row->__Field(HX_("versions",5b,4e,b8,d6),::hx::paccDynamic)) ))->doParse();
+HXLINE( 903)						if ((::Reflect_obj::fields(versions)->length > 1)) {
             							HX_BEGIN_LOCAL_FUNC_S0(::hx::LocalFunc,_hx_Closure_2) HXARGC(2)
             							int _hx_run( ::borogove::ChatMessage a, ::borogove::ChatMessage b){
-            								HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_914_hydrateMessages)
-HXLINE( 914)								return ::Reflect_obj::compare(b->timestamp,a->timestamp);
+            								HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_915_hydrateMessages)
+HXLINE( 915)								return ::Reflect_obj::compare(b->timestamp,a->timestamp);
             							}
             							HX_END_LOCAL_FUNC2(return)
 
-HXLINE( 903)							{
-HXLINE( 903)								::Array< ::String > _g_keys = ::Reflect_obj::fields(versions);
-HXDLIN( 903)								int _g_index = 0;
-HXDLIN( 903)								while((_g_index < _g_keys->length)){
-HXLINE( 903)									_g_index = (_g_index + 1);
-HXDLIN( 903)									::String key = _g_keys->__get((_g_index - 1));
-HXDLIN( 903)									::String versionId = key;
-HXDLIN( 903)									{
+HXLINE( 904)							{
+HXLINE( 904)								::Array< ::String > _g_keys = ::Reflect_obj::fields(versions);
+HXDLIN( 904)								int _g_index = 0;
+HXDLIN( 904)								while((_g_index < _g_keys->length)){
+HXLINE( 904)									_g_index = (_g_index + 1);
+HXDLIN( 904)									::String key = _g_keys->__get((_g_index - 1));
+HXDLIN( 904)									::String versionId = key;
+HXDLIN( 904)									{
             										HX_BEGIN_LOCAL_FUNC_S2(::hx::LocalFunc,_hx_Closure_1, ::Dynamic,versionTimes,::String,versionId) HXARGC(2)
             										 ::borogove::ChatMessageBuilder _hx_run( ::borogove::ChatMessageBuilder toPushB, ::borogove::Stanza _){
-            											HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_904_hydrateMessages)
-HXLINE( 905)											bool versionM;
-HXDLIN( 905)											if (::hx::IsNull( toPushB->serverId )) {
-HXLINE( 905)												versionM = (versionId != toPushB->localId);
+            											HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_905_hydrateMessages)
+HXLINE( 906)											bool versionM;
+HXDLIN( 906)											if (::hx::IsNull( toPushB->serverId )) {
+HXLINE( 906)												versionM = (versionId != toPushB->localId);
             											}
             											else {
-HXLINE( 905)												versionM = false;
+HXLINE( 906)												versionM = false;
             											}
-HXDLIN( 905)											if (versionM) {
-HXLINE( 905)												toPushB->serverId = versionId;
+HXDLIN( 906)											if (versionM) {
+HXLINE( 906)												toPushB->serverId = versionId;
             											}
-HXLINE( 906)											toPushB->timestamp = ( (::String)(::Reflect_obj::field(versionTimes,versionId)) );
-HXLINE( 907)											return toPushB;
+HXLINE( 907)											toPushB->timestamp = ( (::String)(::Reflect_obj::field(versionTimes,versionId)) );
+HXLINE( 908)											return toPushB;
             										}
             										HX_END_LOCAL_FUNC2(return)
 
-HXLINE( 904)										 ::borogove::Stanza versionM = ::borogove::Stanza_obj::parse(( (::String)(::Reflect_obj::field(versions,key)) ));
-HXDLIN( 904)										 ::borogove::ChatMessage versionM1 = ::borogove::ChatMessage_obj::fromStanza(versionM,accountJid, ::Dynamic(new _hx_Closure_1(versionTimes,versionId)));
-HXLINE( 909)										 ::borogove::ChatMessage toPush;
-HXDLIN( 909)										bool toPush1;
-HXDLIN( 909)										if (::hx::IsNotNull( versionM1 )) {
-HXLINE( 909)											toPush1 = (versionM1->versions->length < 1);
+HXLINE( 905)										 ::borogove::Stanza versionM = ::borogove::Stanza_obj::parse(( (::String)(::Reflect_obj::field(versions,key)) ));
+HXDLIN( 905)										 ::borogove::ChatMessage versionM1 = ::borogove::ChatMessage_obj::fromStanza(versionM,accountJid, ::Dynamic(new _hx_Closure_1(versionTimes,versionId)));
+HXLINE( 910)										 ::borogove::ChatMessage toPush;
+HXDLIN( 910)										bool toPush1;
+HXDLIN( 910)										if (::hx::IsNotNull( versionM1 )) {
+HXLINE( 910)											toPush1 = (versionM1->versions->length < 1);
             										}
             										else {
-HXLINE( 909)											toPush1 = true;
+HXLINE( 910)											toPush1 = true;
             										}
-HXDLIN( 909)										if (toPush1) {
-HXLINE( 909)											toPush = versionM1;
+HXDLIN( 910)										if (toPush1) {
+HXLINE( 910)											toPush = versionM1;
             										}
             										else {
-HXLINE( 909)											toPush = versionM1->versions->__get(0).StaticCast<  ::borogove::ChatMessage >();
+HXLINE( 910)											toPush = versionM1->versions->__get(0).StaticCast<  ::borogove::ChatMessage >();
             										}
-HXLINE( 910)										if (::hx::IsNotNull( toPush )) {
-HXLINE( 911)											builder->versions->push(toPush);
+HXLINE( 911)										if (::hx::IsNotNull( toPush )) {
+HXLINE( 912)											builder->versions->push(toPush);
             										}
             									}
             								}
             							}
-HXLINE( 914)							builder->versions->sort( ::Dynamic(new _hx_Closure_2()));
+HXLINE( 915)							builder->versions->sort( ::Dynamic(new _hx_Closure_2()));
             						}
             					}
-HXLINE( 917)					return builder;
+HXLINE( 918)					return builder;
             				}
             				HX_END_LOCAL_FUNC2(return)
 
-HXLINE( 883)				 ::Dynamic row = x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
-HXDLIN( 883)				 ::borogove::Stanza _hx_tmp = ::borogove::Stanza_obj::parse(( (::String)(row->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) ));
-HXDLIN( 883)				_g->push(::borogove::ChatMessage_obj::fromStanza(_hx_tmp,accountJid, ::Dynamic(new _hx_Closure_3(accountJid,row))));
+HXLINE( 884)				 ::Dynamic row = x->__Field(HX_("next",f3,84,02,49),::hx::paccDynamic)();
+HXDLIN( 884)				 ::borogove::Stanza _hx_tmp = ::borogove::Stanza_obj::parse(( (::String)(row->__Field(HX_("stanza",f5,5d,f7,05),::hx::paccDynamic)) ));
+HXDLIN( 884)				_g->push(::borogove::ChatMessage_obj::fromStanza(_hx_tmp,accountJid, ::Dynamic(new _hx_Closure_3(accountJid,row))));
             			}
             		}
-HXDLIN( 883)		return _g;
+HXDLIN( 884)		return _g;
             	}
 
 
 HX_DEFINE_DYNAMIC_FUNC2(Sqlite_obj,hydrateMessages,return )
 
  ::borogove::Caps Sqlite_obj::hydrateCaps( ::Dynamic o,::Array< unsigned char > ver){
-            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_922_hydrateCaps)
-HXLINE( 923)		::String o1 = ( (::String)(o->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) );
-HXLINE( 924)		::Array< ::Dynamic> _this;
-HXDLIN( 924)		::Array< ::Dynamic> tmp = ( (::Array< ::Dynamic>)(o->__Field(HX_("identities",1c,c5,6d,d7),::hx::paccDynamic)) );
-HXDLIN( 924)		if (::hx::IsNotNull( tmp )) {
-HXLINE( 924)			_this = tmp;
+            	HX_GC_STACKFRAME(&_hx_pos_4648627e4fbfb4d7_923_hydrateCaps)
+HXLINE( 924)		::String o1 = ( (::String)(o->__Field(HX_("node",02,0a,0a,49),::hx::paccDynamic)) );
+HXLINE( 925)		::Array< ::Dynamic> _this;
+HXDLIN( 925)		::Array< ::Dynamic> tmp = ( (::Array< ::Dynamic>)(o->__Field(HX_("identities",1c,c5,6d,d7),::hx::paccDynamic)) );
+HXDLIN( 925)		if (::hx::IsNotNull( tmp )) {
+HXLINE( 925)			_this = tmp;
             		}
             		else {
-HXLINE( 924)			_this = ::Array_obj< ::Dynamic>::__new(0);
+HXLINE( 925)			_this = ::Array_obj< ::Dynamic>::__new(0);
             		}
-HXDLIN( 924)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
-HXDLIN( 924)		{
-HXLINE( 924)			int _g = 0;
-HXDLIN( 924)			int _g1 = _this->length;
-HXDLIN( 924)			while((_g < _g1)){
-HXLINE( 924)				_g = (_g + 1);
-HXDLIN( 924)				int i = (_g - 1);
-HXDLIN( 924)				{
-HXLINE( 924)					 ::Dynamic i1 = _hx_array_unsafe_get(_this,i);
-HXDLIN( 924)					result->__unsafe_set(i, ::borogove::Identity_obj::__alloc( HX_CTX ,( (::String)(i1->__Field(HX_("category",fe,2a,6c,ad),::hx::paccDynamic)) ),( (::String)(i1->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)) ),( (::String)(i1->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) ),null()));
+HXDLIN( 925)		::Array< ::Dynamic> result = ::Array_obj< ::Dynamic>::__new(_this->length);
+HXDLIN( 925)		{
+HXLINE( 925)			int _g = 0;
+HXDLIN( 925)			int _g1 = _this->length;
+HXDLIN( 925)			while((_g < _g1)){
+HXLINE( 925)				_g = (_g + 1);
+HXDLIN( 925)				int i = (_g - 1);
+HXDLIN( 925)				{
+HXLINE( 925)					 ::Dynamic i1 = _hx_array_unsafe_get(_this,i);
+HXDLIN( 925)					result->__unsafe_set(i, ::borogove::Identity_obj::__alloc( HX_CTX ,( (::String)(i1->__Field(HX_("category",fe,2a,6c,ad),::hx::paccDynamic)) ),( (::String)(i1->__Field(HX_("type",ba,f2,08,4d),::hx::paccDynamic)) ),( (::String)(i1->__Field(HX_("name",4b,72,ff,48),::hx::paccDynamic)) ),null()));
             				}
             			}
             		}
-HXLINE( 925)		::Array< ::String > _hx_tmp;
-HXDLIN( 925)		::Array< ::String > tmp1 = ( (::Array< ::String >)(o->__Field(HX_("features",fd,6c,d7,12),::hx::paccDynamic)) );
-HXDLIN( 925)		if (::hx::IsNotNull( tmp1 )) {
-HXLINE( 925)			_hx_tmp = tmp1;
+HXLINE( 926)		::Array< ::String > _hx_tmp;
+HXDLIN( 926)		::Array< ::String > tmp1 = ( (::Array< ::String >)(o->__Field(HX_("features",fd,6c,d7,12),::hx::paccDynamic)) );
+HXDLIN( 926)		if (::hx::IsNotNull( tmp1 )) {
+HXLINE( 926)			_hx_tmp = tmp1;
             		}
             		else {
-HXLINE( 925)			_hx_tmp = ::Array_obj< ::String >::__new(0);
+HXLINE( 926)			_hx_tmp = ::Array_obj< ::String >::__new(0);
             		}
-HXLINE( 926)		::Array< ::String > _this1;
-HXDLIN( 926)		::Array< ::String > tmp2 = ( (::Array< ::String >)(o->__Field(HX_("data",2a,56,63,42),::hx::paccDynamic)) );
-HXDLIN( 926)		if (::hx::IsNotNull( tmp2 )) {
-HXLINE( 926)			_this1 = tmp2;
+HXLINE( 927)		::Array< ::String > _this1;
+HXDLIN( 927)		::Array< ::String > tmp2 = ( (::Array< ::String >)(o->__Field(HX_("data",2a,56,63,42),::hx::paccDynamic)) );
+HXDLIN( 927)		if (::hx::IsNotNull( tmp2 )) {
+HXLINE( 927)			_this1 = tmp2;
             		}
             		else {
-HXLINE( 926)			_this1 = ::Array_obj< ::String >::__new(0);
+HXLINE( 927)			_this1 = ::Array_obj< ::String >::__new(0);
             		}
-HXDLIN( 926)		::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(_this1->length);
-HXDLIN( 926)		{
-HXLINE( 926)			int _g2 = 0;
-HXDLIN( 926)			int _g3 = _this1->length;
-HXDLIN( 926)			while((_g2 < _g3)){
-HXLINE( 926)				_g2 = (_g2 + 1);
-HXDLIN( 926)				int i2 = (_g2 - 1);
-HXDLIN( 926)				{
-HXLINE( 926)					 ::borogove::Stanza inValue = ::borogove::Stanza_obj::parse(( (::String)(_hx_array_unsafe_get(_this1,i2)) ));
-HXDLIN( 926)					result1->__unsafe_set(i2,inValue);
+HXDLIN( 927)		::Array< ::Dynamic> result1 = ::Array_obj< ::Dynamic>::__new(_this1->length);
+HXDLIN( 927)		{
+HXLINE( 927)			int _g2 = 0;
+HXDLIN( 927)			int _g3 = _this1->length;
+HXDLIN( 927)			while((_g2 < _g3)){
+HXLINE( 927)				_g2 = (_g2 + 1);
+HXDLIN( 927)				int i2 = (_g2 - 1);
+HXDLIN( 927)				{
+HXLINE( 927)					 ::borogove::Stanza inValue = ::borogove::Stanza_obj::parse(( (::String)(_hx_array_unsafe_get(_this1,i2)) ));
+HXDLIN( 927)					result1->__unsafe_set(i2,inValue);
             				}
             			}
             		}
-HXLINE( 922)		return  ::borogove::Caps_obj::__alloc( HX_CTX ,o1,result,_hx_tmp,result1,ver);
+HXLINE( 923)		return  ::borogove::Caps_obj::__alloc( HX_CTX ,o1,result,_hx_tmp,result1,ver);
             	}