package Ġcom . bit shares . o ases . database . entities Ċ Ċ import Ġandroidx . room . Column Info Ċ import Ġandroidx . room . Entity Ċ import Ġandroidx . room . PrimaryKey Ċ import Ġbit shares kit . extensions . EMPTY _ UID Ċ import Ġbit shares kit . extensions . create Account Object Ċ import Ġbit shares kit . models . PrivateKey Ċ import Ġbit shares kit . objects . Account Object Ċ import Ġcom . bit shares . o ases . provider . chain _ repo . Chain Property Repository Ċ import Ġjava . util .* Ċ Ċ @ Entity ( tableName Ġ= Ġ" users ") Ċ data Ġclass ĠUser ( ĊĠĠĠ Ġ@ Column Info ( name Ġ= Ġ" uid ") Ġval Ġuid : ĠLong , ĊĠĠĠ Ġ@ Column Info ( name Ġ= Ġ" name ") Ġval Ġname : ĠString , ĊĠĠĠ Ġ@ Column Info ( name Ġ= Ġ" chain _ id ") Ġvar Ġchain Id : ĠString , ĊĠĠĠ Ġ@ Column Info ( name Ġ= Ġ" owner _ keys ") Ġvar Ġowner Keys : ĠSet < PrivateKey > Ġ= Ġempty Set (), ĊĠĠĠ Ġ@ Column Info ( name Ġ= Ġ" active _ keys ") Ġvar Ġactive Keys : ĠSet < PrivateKey > Ġ= Ġempty Set (), ĊĠĠĠ Ġ@ Column Info ( name Ġ= Ġ" memo _ keys ") Ġvar Ġmemo Keys : ĠSet < PrivateKey > Ġ= Ġempty Set () Ċ ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġgenerate UUID ( uid : ĠLong , Ġchain Id : ĠString ) Ġ= ĠUUID ( chain Id . to Sig Bits (), Ġuid ). toString () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠString . to Sig Bits () Ġ: ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . length Ġ!= Ġ 6 4 ) Ġreturn Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsubstring ( 0 .. 3 1 ). hashCode (). to Long (). sh l ( 3 2 ) Ġ+ Ġsubstring ( 3 2 .. 6 3 ). hashCode () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ PrimaryKey ( auto Generate Ġ= Ġfalse ) Ġ@ Column Info ( name Ġ= Ġ" uuid ") Ġvar Ġuuid : ĠString Ġ= Ġgenerate UUID ( uid , Ġchain Id ) ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" User ( uid =$ uid , Ġname =$ name , Ġowners =${ owner Keys . map Ġ{ Ġit . w if Ġ}}, Ġactive =${ active Keys . map Ġ{ Ġit . w if Ġ}}, Ġmemo =${ memo Keys . map Ġ{ Ġit . w if Ġ}}" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Keys () Ġ= Ġowner Keys . isNotEmpty () Ġ|| Ġactive Keys . isNotEmpty () Ġ|| Ġmemo Keys . isNotEmpty () Ċ Ċ } Ċ Ċ fun ĠAccount Object . to User ( chain Id : ĠString Ġ= ĠChain Property Repository . chain Id ) Ġ= ĠUser ( uid , Ġname , Ġchain Id ) Ċ Ċ fun ĠUser . to Account () Ġ= Ġcreate Account Object ( uid , Ġname ) Ċ Ċ val Ġuser Instance Comparator Ġ= ĠComparator Ġ{ Ġo 1 : ĠUser , Ġo 2 : ĠUser Ġ-> ĊĠĠĠ Ġo 1 . uuid . compareTo ( o 2 . uuid ) Ċ } Ċ Ċ val ĠUser ?. uid OrEmpty Ġget () Ġ= Ġthis ?. uid Ġ?: ĠEMPTY _ UID Ċ