package Ġeu . kan ade . t ach iy omi . extension . all . m ang are ader to Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Rect Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . MediaType . Companion . to MediaType OrNull Ċ import Ġokhttp 3 . Response Ċ import Ġokhttp 3 . ResponseBody . Companion . to ResponseBody Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . InputStream Ċ import Ġkotlin . math . ceil Ċ import Ġkotlin . math . floor Ċ Ċ class ĠM anga Reader Image Interceptor Ġ: ĠInter ceptor Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġs Ġ= ĠInt Array ( 2 5 6 ) ĊĠĠĠ Ġprivate Ġvar Ġarc 4 i Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġarc 4 j Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġintercept ( chain : ĠInter ceptor . Chain ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġchain . proceed ( chain . request ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġsh uffled Ġpage Ġrequests Ġshould Ġhave Ġsh uffled = true Ġquery Ġparameter ĊĠĠĠĠĠĠĠ Ġif Ġ( chain . request (). url . query Parameter (" sh uffled ") Ġ!= Ġ" true ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresponse ĊĊĠĠĠĠĠĠĠ Ġval Ġimage Ġ= Ġun scr amble Image ( response . body !!. byte Stream ()) ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġimage . to ResponseBody (" image / png ". to MediaType OrNull ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġresponse . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. body ( body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġun scr amble Image ( image : ĠInputStream ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġob fuscated Ġcode Ġ( img Re verser Ġfunction ): Ġhttps :// m ang are ader . to / js / read . min . js ĊĠĠĠĠĠĠĠ Ġ// Ġessentially , Ġit Ġsh uff les Ġarrays Ġof Ġthe Ġimage Ġslices Ġusing Ġthe Ġkey Ġ' st ay ' ĊĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap Factory . decode Stream ( image ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠBitmap . create Bitmap ( bitmap . width , Ġbitmap . height , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( result ) ĊĊĠĠĠĠĠĠĠ Ġval Ġhorizontal Parts Ġ= Ġceil ( bitmap . width Ġ/ ĠS LIC E _ SIZE . toDouble ()). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġtotal Parts Ġ= Ġhorizontal Parts Ġ* Ġceil ( bitmap . height Ġ/ ĠS LIC E _ SIZE . toDouble ()). toInt () ĊĊĠĠĠĠĠĠĠ Ġ// Ġcalculate Ġslices ĊĠĠĠĠĠĠĠ Ġval Ġslices : ĠHashMap < Int , ĠMutable List < Rect >> Ġ= Ġhash Map Of () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġtotal Parts ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow Ġ= Ġfloor ( i Ġ/ Ġhorizontal Parts . toDouble ()). toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġ( i Ġ- Ġrow Ġ* Ġhorizontal Parts ) Ġ* ĠS LIC E _ SIZE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġrow Ġ* ĠS LIC E _ SIZE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġif Ġ( x Ġ+ ĠS LIC E _ SIZE Ġ<= Ġbitmap . width ) ĠS LIC E _ SIZE Ġelse Ġbitmap . width Ġ- Ġx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġif Ġ( y Ġ+ ĠS LIC E _ SIZE Ġ<= Ġbitmap . height ) ĠS LIC E _ SIZE Ġelse Ġbitmap . height Ġ- Ġy ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsrc Rect Ġ= ĠRect ( x , Ġy , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġwidth Ġ- Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! slices . containsKey ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslices [ key ] Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslices [ key ]?. add ( src Rect ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġhandle Ġgroups Ġof Ġslices ĊĠĠĠĠĠĠĠ Ġfor Ġ( slice Entry Ġin Ġslices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreset Ġrandom Ġnumber Ġgenerator Ġfor Ġevery Ġun - shuffle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreset Rng () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent S lices Ġ= Ġslice Entry . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslice Count Ġ= Ġcurrent S lices . count () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġun - shuffle Ġslice Ġindices ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġordered S lices Ġ= ĠInt Array ( slice Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠMutable List ( slice Count ) Ġ{ Ġit Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġcurrent S lices . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġfloor ( pr ng () Ġ* Ġkeys . count ()). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg Ġ= Ġkeys [ r ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeys . remove At ( r ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġordered S lices [ g ] Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdraw Ġslices ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcols Ġ= Ġget Column Count ( current S lices ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroup X Ġ= Ġcurrent S lices [ 0 ]. left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroup Y Ġ= Ġcurrent S lices [ 0 ]. top ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( i , Ġordered Index ) Ġin Ġordered S lices . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslice Ġ= Ġcurrent S lices [ i ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow Ġ= Ġfloor (( ordered Index Ġ/ Ġcols ). toDouble ()). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcol Ġ= Ġordered Index Ġ- Ġrow Ġ* Ġcols ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġslice . right ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġslice . bottom ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġgroup X Ġ+ Ġcol Ġ* Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġgroup Y Ġ+ Ġrow Ġ* Ġheight ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsrc Rect Ġ= ĠRect ( x , Ġy , Ġx Ġ+ Ġwidth , Ġy Ġ+ Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdst Rect Ġ= ĠRect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslice . left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslice . top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslice . left Ġ+ Ġwidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslice . top Ġ+ Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( bitmap , Ġsrc Rect , Ġdst Rect , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġresult . compress ( Bitmap . Compress Format . PNG , Ġ 1 0 0 , Ġoutput ) ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput . toByteArray () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Column Count ( slices : ĠList < Rect >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( slices . count () Ġ== Ġ 1 ) Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġt : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġslices . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( t Ġ== Ġnull ) Ġt Ġ= Ġslices [ i ]. top ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( t Ġ!= Ġslices [ i ]. top ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġslices . count () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset Rng () Ġ{ ĊĠĠĠĠĠĠĠ Ġarc 4 i Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġarc 4 j Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġinitialize S () ĊĠĠĠĠĠĠĠ Ġarc 4 ( 2 5 6 ) Ġ// ĠRC 4 - drop [ 2 5 6 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize S () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġt Ġ= ĠInt Array ( 2 5 6 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 2 5 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs [ i ] Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt [ i ] Ġ= ĠKEY [ i Ġ% ĠKEY . size ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġj Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġtmp : ĠInt ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 2 5 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj Ġ= Ġ( j Ġ+ Ġs [ i ] Ġ+ Ġt [ i ]) Ġand Ġ 0 xFF ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Ġ= Ġs [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs [ j ] Ġ= Ġs [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs [ i ] Ġ= Ġtmp ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpr ng (): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġn Ġ= Ġarc 4 ( 6 ) ĊĠĠĠĠĠĠĠ Ġvar Ġd Ġ= Ġ 2 8 1 4 7 4 9 7 6 7 1 0 6 5 6 . 0 Ġ// Ġ 2 5 6 ^ 6 Ġ( start Ġwith Ġ 6 Ġchunks Ġin Ġn ) ĊĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġwhile Ġ( n Ġ< Ġ 4 5 0 3 5 9 9 6 2 7 3 7 0 4 9 6 ) Ġ{ Ġ// Ġ 2 ^ 5 2 Ġ( 5 2 Ġsignificant Ġdigits Ġin Ġa Ġdouble ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn Ġ= Ġ( n Ġ+ Ġx ) Ġ* Ġ 2 5 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd Ġ*= Ġ 2 5 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġarc 4 ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n Ġ< Ġ 0 ) Ġbreak Ġ// Ġoverflow ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ( n Ġ+ Ġx ) Ġ/ Ġd ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġarc 4 ( count : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġt : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġtmp : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġr : ĠLong Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġrepeat ( count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarc 4 i Ġ= Ġ( arc 4 i Ġ+ Ġ 1 ) Ġand Ġ 0 xFF ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarc 4 j Ġ= Ġ( arc 4 j Ġ+ Ġs [ arc 4 i ]) Ġand Ġ 0 xFF ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Ġ= Ġs [ arc 4 j ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs [ arc 4 j ] Ġ= Ġs [ arc 4 i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs [ arc 4 i ] Ġ= Ġtmp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt Ġ= Ġ( s [ arc 4 i ] Ġ+ Ġs [ arc 4 j ]) Ġand Ġ 0 xFF ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġr Ġ= Ġr Ġ* Ġ 2 5 6 Ġ+ Ġs [ t ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġr ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠKEY Ġ= Ġ" st ay ". map Ġ{ Ġit . to Byte (). toInt () Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠS LIC E _ SIZE Ġ= Ġ 2 0 0 ĊĠĠĠ Ġ} Ċ } Ċ