package Ġcc . crypt op unk s . crypt on . context Ċ Ċ import Ġcc . crypt op unk s . crypt on . Connect able Ċ import Ġcc . crypt op unk s . crypt on . Context Ċ import Ġcc . crypt op unk s . crypt on . Handler Registry Ċ import Ġcc . crypt op unk s . crypt on . Scope Ċ import Ġcc . crypt op unk s . crypt on . util . Executors Ċ import Ġcc . crypt op unk s . crypt on . util . IO Executor Ċ import Ġcc . crypt op unk s . crypt on . util . Main Executor Ċ import Ġcc . crypt op unk s . crypt on . util . Store Ċ import Ġcc . crypt op unk s . crypt on . util . logger . Coroutine Log Ċ import Ġcc . crypt op unk s . crypt on . util . logger . log Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . Supervisor Job Ċ import Ġkotlinx . coroutines . new Single Thread Context Ċ import Ġkotlin . coroutines . Coroutine Context Ċ import Ġkotlin . reflect . K Class Ċ Ċ class ĠRoot Module ( ĊĠĠĠ Ġval Ġsys : ĠSys , ĊĠĠĠ Ġval Ġrepo : ĠRepo , ĊĠĠĠ Ġoverride Ġval Ġmain Class : ĠK Class <* >, ĊĠĠĠ Ġoverride Ġval Ġhandlers : ĠHandler Registry , ĊĠĠĠ Ġoverride Ġval Ġcreate Connection : ĠConnection . Factory , ĊĠĠĠ Ġoverride Ġval Ġmain Executor : ĠMain Executor , ĊĠĠĠ Ġoverride Ġval Ġio Executor : ĠIO Executor , ĊĠĠĠ Ġoverride Ġval Ġnavigate Chat Id : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĊĠĠĠ ĠRoot Scope , ĊĠĠĠ ĠExec utors , ĊĠĠĠ ĠSys Ġby Ġsys , ĊĠĠĠ ĠRepo Ġby Ġrepo Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcoroutine Context : ĠCor outine Context Ġ= ĠSuper visor Job () Ġ+ ĊĠĠĠĠĠĠĠ ĠDispatch ers . IO Ġ+ ĊĠĠĠĠĠĠĠ ĠCor outine Log . Label ( java Class . simple Name ) ĊĊĠĠĠ Ġoverride Ġval Ġsessions Ġ= ĠSession Scope . Store () ĊĠĠĠ Ġoverride Ġval Ġclipboard Store Ġ= ĠClip . Board . Store () ĊĠĠĠ Ġoverride Ġval Ġconnect able Bindings Store Ġ= ĠConnect able . Binding . Store () ĊĠĠĠ Ġoverride Ġval Ġaccounts Ġ= ĠStore ( Account . Many ( empty Set ())) ĊĠĠĠ Ġoverride Ġval Ġro ster Items Ġ= ĠStore ( R oster . Items ( emptyList ())) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Context [ Job ] !!. invoke On Completion Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoroutine Context . log . d Ġ{ Ġ" Finish ĠApp Module Ġ$ this " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsession Scope (): ĠSession Scope Ġ= Ġsessions . get (). values . first () ĊĠĠĠ Ġoverride Ġfun Ġsession Scope ( address : ĠAddress ): ĠSession Scope Ġ= ĊĠĠĠĠĠĠĠ Ġsessions [ address ] Ġ?: Ġthrow ĠException ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Cannot Ġresolve ĠSession Scope Ġfor Ġ$ address \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" available Ġsessions : Ġ${ sessions . get (). keys . join ToString ("\ n ") }" ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġresolve ( context : ĠContext ): ĠPair < Scope , ĠAny > Ġ= ĊĠĠĠĠĠĠĠ Ġsession Scope ( address ( context . id )). let Ġ{ Ġscope Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġany Ġ= Ġcontext . next ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠContext Ġ-> Ġscope . resolve ( any ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġscope Ġto Ġany ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ class ĠSession Module ( ĊĠĠĠ Ġoverride Ġval Ġroot Scope : ĠRoot Scope , ĊĠĠĠ Ġval Ġconnection : ĠConnection , ĊĠĠĠ Ġval Ġsession Repo : ĠSession Repo , ĊĠĠĠ Ġoverride Ġval Ġaddress : ĠAddress , ĊĠĠĠ Ġval ĠonClose : Ġ( Throwable ?) Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ: ĊĠĠĠ ĠSession Scope , ĊĠĠĠ ĠRoot Scope Ġby Ġroot Scope , ĊĠĠĠ ĠNet Ġby Ġconnection , ĊĠĠĠ ĠSession Repo Ġby Ġsession Repo Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcoroutine Context : ĠCor outine Context Ġ= ĠSuper visor Job ( rootScope . coroutine Context [ Job ]) Ġ+ ĊĠĠĠĠĠĠĠ Ġnew Single Thread Context ( address . id ) Ġ+ ĊĠĠĠĠĠĠĠ ĠCor outine Log . Label ( java Class . simple Name ) Ġ+ ĊĠĠĠĠĠĠĠ ĠCor outine Log . Scope ( address . id ) ĊĊĠĠĠ Ġoverride Ġval Ġpresence Store Ġ= ĠPres ence . Store () ĊĠĠĠ Ġoverride Ġval Ġsubscriptions Ġ= ĠStore ( empty Set < Address >()) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Device Fingerprint Repo ( device Repo ) ĊĠĠĠĠĠĠĠ Ġcoroutine Context [ Job ] !!. invoke On Completion Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClose ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoroutine Context . log . d Ġ{ Ġ" Finish ĠSession Module Ġ$ address Ġ${ it . hashCode ()} Ġ$ it " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġchat Scope ( chat : ĠChat ): ĠChat Scope Ġ= ĠChat Module ( this , Ġchat ) ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġchat Scope ( chat : ĠAddress ): ĠChat Scope Ġ= Ġchat Scope ( chat Repo . get ( chat )) ĊĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġresolve ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext ĊĠĠĠ Ġ): ĠPair < Scope , ĠAny > Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . id Ġ== Ġaddress . id Ġ-> Ġwhen Ġ( val Ġany Ġ= Ġcontext . next ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠContext Ġ-> Ġresolve ( any ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthis Ġto Ġcontext . next ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġchat Repo . contains ( address ( context . id )) Ġ-> Ġchat Scope ( address ( context . id )). resolve ( context ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġroot Scope . resolve ( context ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠChat Module ( ĊĠĠĠ Ġprivate Ġval Ġsession Scope : ĠSession Scope , ĊĠĠĠ Ġoverride Ġval Ġchat : ĠChat Ċ ) Ġ: ĊĠĠĠ ĠSession Scope Ġby Ġsession Scope , ĊĠĠĠ ĠChat Scope Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġpage d Message : ĠStore < Chat . Paged Messages ?> Ġ= ĠStore ( null ) ĊĊĠĠĠ Ġoverride Ġval Ġcoroutine Context Ġ= Ġsession Scope . coroutine Context Ġ+ ĊĠĠĠĠĠĠĠ ĠCor outine Log . Label ( java Class . simple Name ) Ġ+ ĊĠĠĠĠĠĠĠ ĠCor outine Log . Scope ( chat . address . id ) ĊĊĠĠĠ Ġ@ Suppress (" Intro duce When Subject ") ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġresolve ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext ĊĠĠĠ Ġ): ĠPair < Scope , ĠAny > Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . id Ġ== Ġchat . address . id Ġ-> Ġthis Ġto Ġcontext . next ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsession Scope . resolve ( context ) ĊĠĠĠ Ġ} Ċ } Ċ