package Ġcom . letter . ink launcher . service Ċ Ċ import Ġandroid . accessibility service . Accessibility Service Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . content .* Ċ import Ġandroid . graphics . PixelFormat Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . view . accessibility . Accessibility Event Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġcom . blank j . util code . util . Shell Utils Ċ import Ġcom . letter . ink launcher . R Ċ import Ġcom . letter . ink launcher . ui . activity . Always On Display Activity Ċ import Ġcom . letter . ink launcher . utils . Channel Utils Ċ import Ġcom . letter . ink launcher . utils . Notification Utils Ċ import Ġcom . letter . ink launcher . widget . Floating Ball View Ċ import Ġcom . letter . utils . Accessibility Utils Ċ import Ġkotlinx . coroutines . Main Scope Ċ import Ġkotlinx . coroutines . launch Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Core Service " Ċ Ċ /** Ċ Ġ* Ġcore Ġservice Ċ Ġ* Ċ Ġ* Ġ@ author ĠLetter ( never mind zz t @ gmail . com ) Ċ Ġ* Ġ@ since Ġ 1 . 0 . 0 Ċ Ġ*/ Ċ class ĠCore Service Ġ: ĠAccessibility Service (), ĠView . OnClickListener Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġfloating Ball View Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠFloating Ball View ( this ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlayout Params : ĠWindow Manager . LayoutParams ĊĠĠĠ Ġprivate Ġvar Ġis Floating Ball Added Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġfilter Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠIntent Filter (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Action ( Intent . ACTION _ SCREEN _ OFF ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġreceiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext ?, Ġintent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Preference Manager . getDefault SharedPreferences ( this @ Core Service ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getBoolean (" enable _ a od ", Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain Scope (). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Always On Display Activity :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart Command ( intent : ĠIntent ?, Ġflags : ĠInt , Ġstart Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( intent ?. getString Extra ( INT ENT _ EXTRA )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINTENT _ NOTIFICATION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Home Notification () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINTENT _ FLOAT ING _ B ALL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Preference Manager . getDefault SharedPreferences ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getBoolean (" enable _ floating _ ball ", Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Floating Ball () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Floating Ball () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINTENT _ FLOAT ING _ B ALL _ HIDE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Floating Ball () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Home Notification () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Preference Manager . getDefault SharedPreferences ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getBoolean (" enable _ floating _ ball ", Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Floating Ball () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Floating Ball () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠSTART _ STICK Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Accessibility Event ( event : ĠAccessibility Event ?) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Interrupt () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Notification Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . notification _ channel _ intent _ id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . notification _ channel _ intent _ name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Manager . IMPORT ANCE _ MAX ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġregister Receiver ( receiver , Ġfilter ) ĊĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġhide Floating Ball () ĊĊĠĠĠĠĠĠĠ Ġunregister Receiver ( receiver ) ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĽå»º è¿ĶåĽŀ æ¡ Į éĿ¢ éĢļçŁ¥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate Home Notification () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Preference Manager . getDefault SharedPreferences ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getBoolean (" enable _ back _ to _ home _ notification ", Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Foreground (- 1 , ĠNotification Utils . get Home Notification ( this )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Foreground (- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Foreground ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĺ¾ç¤º æ Ĥ¬ æµ ® çĲĥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshow Floating Ball () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Floating Ball Added ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlayout Params Ġ= ĠWindow Manager . LayoutParams () ĊĠĠĠĠĠĠĠ Ġval Ġwindow Manager Ġ= Ġget System Service ( Context . WINDOW _ SERVICE ) Ġas ĠWindow Manager ĊĠĠĠĠĠĠĠ Ġlayout Params . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . TYPE _ APPLICATION _ OVER LAY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . TYPE _ SYSTEM _ OVER LAY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat Ġ= ĠPixel Format . RGBA _ 8 8 8 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĠWindow Manager . LayoutParams . FLAG _ NOT _ TO UCH _ MOD AL Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . FLAG _ NOT _ FOCUS ABLE Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . FLAG _ LAYOUT _ IN _ SCREEN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgravity Ġ= ĠGr avity . START Ġor ĠGr avity . TOP ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= ĠWindow Manager . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= ĠWindow Manager . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis Floating Ball Added Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġwindow Manager . addView ( floating Ball View , Ġlayout Params ) ĊĠĠĠĠĠĠĠ Ġfloating Ball View . measure ( View . Measure Spec . UNSPECIFIED , ĠView . Measure Spec . UNSPECIFIED ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éļĲèĹı æ Ĥ¬ æµ ® çĲĥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġhide Floating Ball () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Floating Ball Added ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ( getSystem Service ( Context . WINDOW _ SERVICE ) Ġas ĠWindow Manager ?) ?. remove View ( floating Ball View ) ĊĠĠĠĠĠĠĠ Ġis Floating Ball Added Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( v ?. id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . floating _ button Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Channel Utils . is Mi Reader ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Broadcast (" com . mo gu . back _ key ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform Global Action ( Accessibility Service . GLOBAL _ ACTION _ BACK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINTENT _ EXTRA Ġ= Ġ" extra " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINTENT _ NOTIFICATION Ġ= Ġ" notification " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINTENT _ FLOAT ING _ B ALL Ġ= Ġ" floating _ ball " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINTENT _ FLOAT ING _ B ALL _ HIDE Ġ= Ġ" floating _ ball _ hide " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcheck Accessibility ( context : ĠContext , Ġfunc : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Accessibility Utils . is Service Enabled ( context , ĠCore Service :: class . java )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( Settings . ACTION _ ACC ES SI B ILITY _ SETTINGS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShell Utils . exec Cmd ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" pm Ġgrant Ġ${ context . packageName } Ġandroid . permission . BIND _ ACC ES SI B ILITY _ SERVICE ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunc ?. invoke () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcheck Overlay s Permission ( context : ĠContext , Ġfunc : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Settings . can Draw Overlay s ( context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunc ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( Settings . ACTION _ MANAGE _ OVER LAY _ PERMISSION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠUri . from Parts (" package ", Ġcontext . packageName , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShell Utils . exec Cmd ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" pm Ġgrant Ġ${ context . packageName } Ġandroid . permission . SYSTEM _ ALERT _ WINDOW ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunc ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunc ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġstart Service ( context : ĠContext , Ġextra : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( extra ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINTENT _ FLOAT ING _ B ALL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Overlay s Permission ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . start Service ( Core Service :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( INT ENT _ EXTRA , Ġextra ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Channel Utils . is Mi Reader ( context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Accessibility ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . start Service ( Core Service :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( INT ENT _ EXTRA , Ġextra ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ