package Ġsp b . net . proxy Ċ Ċ import Ġkotlinx . serialization . Experimental Serialization Api Ċ import Ġkotlinx . serialization . decode FromString Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġsp b . Constants Ċ import Ġsp b . Main Ċ import Ġsp b . util . Config Ċ import Ġsp b . util . Prox ies Text ToJson Ċ import Ġjava . net . URL Ċ import Ġkotlin . system . exit Process Ċ Ċ /** Ċ Ġ* Ġ@ author ĠK ai Ċ Ġ*/ Ċ @ Experimental Serialization Api Ċ class ĠProxy Grab ber Ġ{ ĊĊĠĠĠ Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠ Ġ// ĠFile Builder . delete Old Proxy Files () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . request () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e Ġ: ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( e . stack Trace ToString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapi Prox ies Json Ġ= Ġtry Ġ{ ĠURL ( Config . values ?. proxy Endpoint Url ). read Text () Ġ} Ġcatch Ġ( e Ġ: ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Issue Ġwith Ġconnecting Ġto Ġproxy Endpoint Url Ġfrom Ġconfig . json :\ n ${ e . stack Trace ToString ()} "); Ġexit Process ( 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġgit Hub Prox ies Json Ġ= Ġtry Ġ{ ĠURL ( Config . values ?. proxy Endpoint Github Url ). read Text () Ġ} Ġcatch Ġ( e Ġ: ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Issue Ġwith Ġconnecting Ġto Ġproxy Endpoint Github Url Ġfrom Ġconfig . json :\ n ${ e . stack Trace ToString () }") Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlocal Prox ies Json Ġ= Ġtry Ġ{ ĠPro x ies Text ToJson (). read Text Ġ} Ġcatch Ġ( e Ġ: ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Issue Ġwith Ġconverting Ġtext Ġfiles Ġto ĠJson :\ n ${ e . stack Trace ToString () }") Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġapi Prox ies Ġ= ĠProxy Data ( array Of (), ĠarrayOf (), ĠarrayOf (), ĠarrayOf ()) ĊĠĠĠĠĠĠĠ Ġvar Ġgit Hub Prox ies Ġ= ĠProxy Data ( array Of (), ĠarrayOf (), ĠarrayOf (), ĠarrayOf ()) ĊĠĠĠĠĠĠĠ Ġvar Ġlocal Prox ies Ġ= ĠProxy Data ( array Of (), ĠarrayOf (), ĠarrayOf (), ĠarrayOf ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠJson Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . pretty Print Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . encode Defaults Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ignore Unknown Keys Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠConstants . STAGE Ġ= Ġ" GR ABB ING _ PRO X IES " ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ Ġapi Prox ies Ġ= Ġdata . decode FromString < Array < Proxy Data >> (" [$ api Prox ies Json ]"). associate By { Ġit Ġ}. keys . to Mutable List ()[ 0 ] Ġ} Ġcatch Ġ( i Ġ: ĠException ) Ġ{ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ Ġgit Hub Prox ies Ġ= Ġdata . decode FromString < Array < Proxy Data >> (" [$ git Hub Prox ies Json ]"). associate By Ġ{ Ġit Ġ}. keys . to Mutable List ()[ 0 ] Ġ} Ġcatch Ġ( i Ġ: ĠException ) Ġ{ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ Ġlocal Prox ies Ġ= Ġdata . decode FromString < Array < Proxy Data >> (" [$ local Prox ies Json ]"). associate By Ġ{ Ġit Ġ}. keys . to Mutable List ()[ 0 ] Ġ} Ġcatch Ġ( i Ġ: ĠException ) Ġ{ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfinal S ocks 4 Ġ= Ġapi Prox ies . socks 4 . plus ( git Hub Prox ies . socks 4 ). plus ( local Prox ies . socks 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġfinal S ocks 5 Ġ= Ġapi Prox ies . socks 5 . plus ( git Hub Prox ies . socks 5 ). plus ( local Prox ies . socks 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġfinal Http Ġ= Ġapi Prox ies . http . plus ( git Hub Prox ies . http ). plus ( local Prox ies . http ) ĊĠĠĠĠĠĠĠ Ġval Ġfinal Https Ġ= Ġapi Prox ies . https . plus ( git Hub Prox ies . https ). plus ( local Prox ies . https ) ĊĊĠĠĠĠĠĠĠ Ġfilter Prox ies ( final S ocks 4 ). forEach Ġ{ Ġproxy Ġ-> Ġvalidate Proxy ( proxy , Ġ" socks 4 ") Ġ} ĊĠĠĠĠĠĠĠ Ġfilter Prox ies ( final S ocks 5 ). forEach Ġ{ Ġproxy Ġ-> Ġvalidate Proxy ( proxy , Ġ" socks 5 ") Ġ} ĊĠĠĠĠĠĠĠ Ġfilter Prox ies ( final Http ). forEach Ġ{ Ġproxy Ġ-> Ġvalidate Proxy ( proxy , Ġ" http ") Ġ} ĊĠĠĠĠĠĠĠ Ġfilter Prox ies ( final Https ). forEach Ġ{ Ġproxy Ġ-> Ġvalidate Proxy ( proxy , Ġ" https ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfilter Prox ies ( proxy Array Ġ: ĠArray < String >): ĠArray < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproxies Ġ= Ġarray ListOf < String >() ĊĠĠĠĠĠĠĠ Ġproxy Array . filter Ġ{ Ġit . contains (": ") Ġ}. forEach Ġ{ Ġproxies Ġ+= Ġformat Ip ( it . replace ("\ n ", Ġ""). replace ("\ r ", Ġ"")) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġproxies . distinct (). to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġformat Ip ( ip Ġ: ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġfinal Ip Ġ= Ġip ĊĠĠĠĠĠĠĠ Ġval Ġport Ġ= Ġfinal Ip . split (": ")[ 1 ] ĊĠĠĠĠĠĠĠ Ġif Ġ( final Ip . contains (" :" )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Ip Ġ= Ġfinal Ip . split (": "). to Typed Array ()[ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġip Array Ġ= Ġfinal Ip . split (". "). to Typed Array () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ip Array [ i ]. startsWith (" 0 ") Ġ&& Ġip Array [ i ] Ġ!= Ġ" 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġip Array [ i ] Ġ= Ġip Array [ i ]. substring ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġip Array . join ToString ( separator Ġ= Ġ". "). plus (" :$ port ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalidate Proxy ( proxy : ĠString , Ġtype Ġ: ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif (! proxy . contains (" :" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Failed Ġto Ġsplit Ġ: Ġfrom Ġproxy Ġ- Ġ$ proxy , Ġ$ type ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsplit Proxy Ġ= Ġproxy . split (": ") ĊĠĠĠĠĠĠĠ Ġval Ġproxy Tester Ġ= ĠProxy Tester () ĊĠĠĠĠĠĠĠ Ġproxy Tester . proxy Address Ġ= Ġsplit Proxy [ 0 ] ĊĠĠĠĠĠĠĠ Ġproxy Tester . proxy Port Ġ= Ġsplit Proxy [ 1 ]. toInt () ĊĠĠĠĠĠĠĠ Ġproxy Tester . type Ġ= Ġtype ĊĠĠĠĠĠĠĠ Ġif ( type Ġ== Ġ" socks 4 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproxy Tester . socks 4 Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ ĠMain . SP B ExecutorService . schedule ( proxy Tester ) Ġ// TODO ĠCHANGE ĠTHIS ĠL ATER ĊĠĠĠ Ġ} Ċ } Ċ