package Ġcom . orig o . ult imate hot spot . manager Ċ Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util .* Ċ Ċ object ĠRoot Manager Ġ{ ĊĠĠĠ Ġval Ġhas Root Granted Ġ= ĠMutable LiveData < Boolean >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh Root Rights () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh Root Rights () Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Default ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Root Granted . post Value ( test Root Rights ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġtest Root Rights (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrun Root Command (" ls Ġ/ system /") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġsetup Dh cp (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġsuccess Ġ&& Ġrun Root Command (" echo Ġ 1 Ġ> Ġ/ proc / sys / net / ipv 4 / ip _ forward ") ĊĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġsuccess Ġ&& Ġrun Root Command (" ipt ables Ġ- F ") ĊĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġsuccess Ġ&& Ġrun Root Command (" ipt ables Ġ- t Ġnat Ġ- A ĠPOST ROUT ING Ġ Ġ- j ĠM AS QU ER ADE ") ĊĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġsuccess Ġ&& Ġrun Root Command (" ipt ables Ġ- A ĠFOR WARD Ġ- j ĠAC CEPT ") ĊĠĠĠĠĠĠĠ Ġsuccess Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ&& Ġrun Root Command (" ipt ables Ġ- t Ġnat Ġ- A ĠPR ER OUT ING Ġ Ġ- p Ġudp Ġ-- d port Ġ 5 3 Ġ- j ĠD NAT Ġ-- to - destination Ġ 8 . 8 . 8 . 8 : 5 3 ") ĊĠĠĠĠĠĠĠ Ġsuccess Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ&& Ġrun Root Command (" ipt ables Ġ- A ĠFOR WARD Ġ- p Ġudp Ġ- d Ġ 8 . 8 . 8 . 8 Ġ-- d port Ġ 5 3 Ġ- m Ġstate Ġ-- state ĠNEW , EST AB L ISHED , RELATED Ġ- j ĠAC CEPT ") ĊĠĠĠĠĠĠĠ Ġreturn Ġsuccess ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWarning : Ġkeep Ġthe Ġ' suspend ' Ġhere . ĊĠĠĠĠ Ġ* ĠwaitFor Ġdocumentation : ĠCause s Ġthe Ġcurrent Ġthread Ġto Ġwait , Ġif Ġnecessary , Ġuntil Ġthe Ġprocess Ġrepresented Ġby Ġthis ĠProcess Ġobject Ġhas Ġterminated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġrun Root Command ( command : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommands Ġ= ĠarrayOf (" su ", Ġ"- c ", Ġcommand ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart : ĠLong Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprocess : ĠProcess Ġ= ĠRuntime . get Runtime (). exec ( commands ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġprocess . waitFor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend : ĠLong Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Command Ġ${ Arrays . toString ( commands )} Ġexecuted Ġin Ġ${ end Ġ- Ġstart } Ġms Ġwith Ġresult Ġ$ result ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ== Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Error Ġ: Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }