package Ġcom . kir kb ush man . ar aw . clients Ċ Ċ import Ġandroidx . annotation . Int Range Ċ import Ġandroidx . annotation . Worker Thread Ċ import Ġcom . kir kb ush man . ar aw . Red dit Api Ċ import Ġcom . kir kb ush man . ar aw . fetcher . Comments Fetcher Ċ import Ġcom . kir kb ush man . ar aw . fetcher . Fetcher Ċ import Ġcom . kir kb ush man . ar aw . fetcher . Sub missions Fetcher Ċ import Ġcom . kir kb ush man . ar aw . models . Comment Ċ import Ġcom . kir kb ush man . ar aw . models . More Comments Ċ import Ġcom . kir kb ush man . ar aw . models . Submission Ċ import Ġcom . kir kb ush man . ar aw . models . Trend ing Sub redd its Ċ import Ġcom . kir kb ush man . ar aw . models . enums . Comments Sorting Ċ import Ġcom . kir kb ush man . ar aw . models . enums . Sub missions Sorting Ċ import Ġcom . kir kb ush man . ar aw . models . enums . Time Period Ċ import Ġcom . kir kb ush man . ar aw . models . enums . Vote Ċ import Ġcom . kir kb ush man . ar aw . models . base . Comment Data Ċ import Ġcom . kir kb ush man . ar aw . models . base . Reply able Ċ import Ġcom . kir kb ush man . ar aw . models . base . Save able Ċ import Ġcom . kir kb ush man . ar aw . models . base . Sub reddit Data Ċ import Ġcom . kir kb ush man . ar aw . models . base . V ot able Ċ import Ġokhttp 3 . MediaType . Companion . to MediaType Ċ import Ġokhttp 3 . Multipart Body Ċ import Ġokhttp 3 . RequestBody . Companion . to RequestBody Ċ Ċ class ĠCont ributions Client ( ĊĊĠĠĠ Ġprivate Ġval Ġapi : ĠRed dit Api , ĊĠĠĠ Ġprivate Ġval Ġdisable Legacy Encoding : ĠBoolean , ĊĠĠĠ Ġprivate Ġinline Ġval Ġget Header Map : Ġ() Ġ-> ĠMap < String , ĠString > Ċ Ċ ) Ġ{ ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġsubmission ( submission Id : ĠString ): ĠSubmission ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Map Ġ= Ġget Header Map () ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġapi . submission ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubmission Id Ġ= Ġ" t 3 _$ submission Id ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Json Ġ= Ġ( if Ġ( disable Legacy Encoding ) Ġ 1 Ġelse Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġauth Map ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġreq . execute () ĊĠĠĠĠĠĠĠ Ġif Ġ(! res . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġtake Ġthe Ġfirst Ġin Ġthe Ġlisting ĊĠĠĠĠĠĠĠ Ġreturn Ġres . body ()?. data ?. children ?. first OrNull ()?. data ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsubmissions ( ĊĊĠĠĠĠĠĠĠ Ġsub reddit : ĠSub reddit Data , ĊĊĠĠĠĠĠĠĠ Ġ@ Int Range ( from Ġ= ĠFetch er . MIN _ LIMIT , Ġto Ġ= ĠFetch er . MAX _ LIMIT ) ĊĠĠĠĠĠĠĠ Ġlimit : ĠLong Ġ= ĠFetch er . DEFAULT _ LIMIT , ĊĊĠĠĠĠĠĠĠ Ġsorting : ĠSub missions Sorting Ġ= ĠSub missions Fetcher . DEFAULT _ SORT ING , ĊĠĠĠĠĠĠĠ Ġtime Period : ĠTime Period Ġ= ĠSub missions Fetcher . DEFAULT _ TIME PERIOD ĊĊĠĠĠ Ġ): ĠSub missions Fetcher Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsubmissions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub reddit Ġ= Ġsub reddit . displayName , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Ġ= Ġlimit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsorting Ġ= Ġsorting , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Period Ġ= Ġtime Period ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsubmissions ( ĊĊĠĠĠĠĠĠĠ Ġsub reddit : ĠString , ĊĊĠĠĠĠĠĠĠ Ġ@ Int Range ( from Ġ= ĠFetch er . MIN _ LIMIT , Ġto Ġ= ĠFetch er . MAX _ LIMIT ) ĊĠĠĠĠĠĠĠ Ġlimit : ĠLong Ġ= ĠFetch er . DEFAULT _ LIMIT , ĊĊĠĠĠĠĠĠĠ Ġsorting : ĠSub missions Sorting Ġ= ĠSub missions Fetcher . DEFAULT _ SORT ING , ĊĠĠĠĠĠĠĠ Ġtime Period : ĠTime Period Ġ= ĠSub missions Fetcher . DEFAULT _ TIME PERIOD ĊĊĠĠĠ Ġ): ĠSub missions Fetcher Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSub missions Fetcher ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Ġ= Ġapi , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub reddit Ġ= Ġsub reddit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Ġ= Ġlimit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsorting Ġ= Ġsorting , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Period Ġ= Ġtime Period , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Legacy Encoding Ġ= Ġdisable Legacy Encoding , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Header Ġ= Ġget Header Map ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmult ire dd it Sub missions ( ĊĊĠĠĠĠĠĠĠ Ġvar arg Ġsub redd its : ĠString , ĊĊĠĠĠĠĠĠĠ Ġ@ Int Range ( from Ġ= ĠFetch er . MIN _ LIMIT , Ġto Ġ= ĠFetch er . MAX _ LIMIT ) ĊĠĠĠĠĠĠĠ Ġlimit : ĠLong Ġ= ĠFetch er . DEFAULT _ LIMIT , ĊĊĠĠĠĠĠĠĠ Ġsorting : ĠSub missions Sorting Ġ= ĠSub missions Fetcher . DEFAULT _ SORT ING , ĊĠĠĠĠĠĠĠ Ġtime Period : ĠTime Period Ġ= ĠSub missions Fetcher . DEFAULT _ TIME PERIOD ĊĊĠĠĠ Ġ): ĠSub missions Fetcher Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSub missions Fetcher ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Ġ= Ġapi , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub reddit Ġ= Ġsub redd its . join ToString ( separator Ġ= Ġ"+ "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Ġ= Ġlimit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsorting Ġ= Ġsorting , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Period Ġ= Ġtime Period , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Legacy Encoding Ġ= Ġdisable Legacy Encoding , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Header Ġ= Ġget Header Map ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġcomment ( comment Id : ĠString ): ĠComment ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Map Ġ= Ġget Header Map () ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġapi . comment ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Id Ġ= Ġ" t 1 _$ comment Id ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Json Ġ= Ġ( if Ġ( disable Legacy Encoding ) Ġ 1 Ġelse Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġauth Map ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġreq . execute () ĊĠĠĠĠĠĠĠ Ġif Ġ(! res . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġres . body ()?. data ?. children ?. first OrNull ()?. data ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcomments ( ĊĊĠĠĠĠĠĠĠ Ġsubmission Id : ĠString , ĊĠĠĠĠĠĠĠ Ġfocused Comment Id : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġfocused Comment Parents Num : ĠInt ? Ġ= Ġnull , ĊĊĠĠĠĠĠĠĠ Ġsorting : ĠComments Sorting Ġ= ĠComments Fetcher . DEFAULT _ SORT ING , ĊĊĠĠĠĠĠĠĠ Ġ@ Int Range ( from Ġ= ĠFetch er . MIN _ LIMIT , Ġto Ġ= ĠFetch er . MAX _ LIMIT ) ĊĠĠĠĠĠĠĠ Ġlimit : ĠLong Ġ= ĠFetch er . DEFAULT _ LIMIT , ĊĊĠĠĠĠĠĠĠ Ġdepth : ĠInt ? Ġ= Ġnull ĊĊĠĠĠ Ġ): ĠComments Fetcher Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn ĠComments Fetcher ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Ġ= Ġapi , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubmission Id Ġ= Ġsubmission Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfocused Comment Id Ġ= Ġfocused Comment Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfocused Comment Parents Num Ġ= Ġfocused Comment Parents Num , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsorting Ġ= Ġsorting , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Ġ= Ġlimit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdepth Ġ= Ġdepth , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisable Legacy Encoding Ġ= Ġdisable Legacy Encoding , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Header Ġ= Ġget Header Map ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġmore Children ( ĊĊĠĠĠĠĠĠĠ Ġmore Comments : ĠMore Comments , ĊĠĠĠĠĠĠĠ Ġsubmission : ĠSubmission , ĊĊĠĠĠĠĠĠĠ Ġsorting : ĠComments Sorting ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġlimit Children : ĠBoolean ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġdepth : ĠInt ? Ġ= Ġnull ĊĊĠĠĠ Ġ): ĠList < Comment Data >? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmore Children ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmore Comment Id Ġ= Ġmore Comments . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomments Ids Ġ= Ġmore Comments . children , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubmission Full name Ġ= Ġsubmission . fullname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsorting Ġ= Ġsorting , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Children Ġ= Ġlimit Children , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdepth Ġ= Ġdepth ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġmore Children ( ĊĊĠĠĠĠĠĠĠ Ġmore Comment Id : ĠString , ĊĠĠĠĠĠĠĠ Ġcomments Ids : ĠList < String >, ĊĠĠĠĠĠĠĠ Ġsubmission Full name : ĠString , ĊĊĠĠĠĠĠĠĠ Ġsorting : ĠComments Sorting ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġlimit Children : ĠBoolean ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġdepth : ĠInt ? Ġ= Ġnull ĊĊĠĠĠ Ġ): ĠList < Comment Data >? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Map Ġ= Ġget Header Map () ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġapi . more Children ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren Ġ= Ġcomments Ids . join ToString ( separator Ġ= Ġ", "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsorting Ġ= Ġsorting ?. sorting Str , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Children Ġ= Ġlimit Children , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdepth Ġ= Ġdepth , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġmore Comment Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlink Id Ġ= Ġsubmission Full name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Json Ġ= Ġ( if Ġ( disable Legacy Encoding ) Ġ 1 Ġelse Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġauth Map ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġreq . execute () ĊĠĠĠĠĠĠĠ Ġif Ġ(! res . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġres . body ()?. json ?. data ?. things ?. map Ġ{ Ġit . data Ġ} ?. toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġtrend ing Sub redd its (): ĠT rend ing Sub redd its ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġapi . trend ing Sub redd its () ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġreq . execute () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! res . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġres . body () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġdelete ( comment : ĠComment ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdelete ( comment . fullname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġdelete ( submission : ĠSubmission ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdelete ( submission . fullname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġdelete ( fullname : ĠString ): ĠAny ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Map Ġ= Ġget Header Map () ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġapi . delete ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġfullname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Json Ġ= Ġ( if Ġ( disable Legacy Encoding ) Ġ 1 Ġelse Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġauth Map ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġreq . execute () ĊĠĠĠĠĠĠĠ Ġif Ġ(! res . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġres . body () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġhide ( submission : ĠSubmission ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġhide (! submission . is Hidden , Ġsubmission . fullname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġhide ( hide : ĠBoolean , Ġsubmission : ĠSubmission ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġhide ( hide , Ġsubmission ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġhide ( hide : ĠBoolean , Ġfullname : ĠString ): ĠAny ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Map Ġ= Ġget Header Map () ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġif Ġ( hide ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . hide ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġfullname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw Json Ġ= Ġ( if Ġ( disable Legacy Encoding ) Ġ 1 Ġelse Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġauth Map ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . un hide ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġfullname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw Json Ġ= Ġ( if Ġ( disable Legacy Encoding ) Ġ 1 Ġelse Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġauth Map ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġreq . execute () ĊĠĠĠĠĠĠĠ Ġif Ġ(! res . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġres . body () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġlock ( comment : ĠComment ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlock (! comment . is Locked , Ġcomment . fullname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġlock ( lock : ĠBoolean , Ġcomment : ĠComment ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlock ( lock , Ġcomment . fullname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġlock ( submission : ĠSubmission ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlock (! submission . is Locked , Ġsubmission . fullname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġlock ( lock : ĠBoolean , Ġsubmission : ĠSubmission ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlock ( lock , Ġsubmission . fullname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġlock ( lock : ĠBoolean , Ġfullname : ĠString ): ĠAny ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Map Ġ= Ġget Header Map () ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġif Ġ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . lock ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġfullname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw Json Ġ= Ġ( if Ġ( disable Legacy Encoding ) Ġ 1 Ġelse Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġauth Map ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . unlock ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġfullname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw Json Ġ= Ġ( if Ġ( disable Legacy Encoding ) Ġ 1 Ġelse Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġauth Map ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġreq . execute () ĊĠĠĠĠĠĠĠ Ġif Ġ(! res . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġres . body () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġreply ( reply able : ĠReply able , Ġtext : ĠString ): ĠComment ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġreply ( reply able . fullname , Ġtext ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġreply ( fullname : ĠString , Ġtext : ĠString ): ĠComment ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Map Ġ= Ġget Header Map () ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġapi . reply ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfullname Ġ= Ġfullname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Json Ġ= Ġ( if Ġ( disable Legacy Encoding ) Ġ 1 Ġelse Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġauth Map ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġreq . execute () ĊĠĠĠĠĠĠĠ Ġif Ġ(! res . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġres . body ()?. json ?. data ?. things ?. first OrNull ()?. data ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġsave ( save : ĠBoolean , Ġsave able : ĠSave able ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsave ( save , Ġsave able . fullname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġsave ( save : ĠBoolean , Ġfullname : ĠString ): ĠAny ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Map Ġ= Ġget Header Map () ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġif Ġ( save ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . save ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġfullname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw Json Ġ= Ġ( if Ġ( disable Legacy Encoding ) Ġ 1 Ġelse Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġauth Map ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . un save ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġfullname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw Json Ġ= Ġ( if Ġ( disable Legacy Encoding ) Ġ 1 Ġelse Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġauth Map ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġreq . execute () ĊĠĠĠĠĠĠĠ Ġif Ġ(! res . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġres . body () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġvote ( vote : ĠV ote , Ġvot able : ĠV ot able ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvote ( vote , Ġvot able . fullname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġvote ( vote : ĠV ote , Ġfullname : ĠString ): ĠAny ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Map Ġ= Ġget Header Map () ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġapi . vote ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġfullname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdir Ġ= Ġvote . dir , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Json Ġ= Ġ( if Ġ( disable Legacy Encoding ) Ġ 1 Ġelse Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġauth Map ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġreq . execute () ĊĠĠĠĠĠĠĠ Ġif Ġ(! res . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġres . body () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġmark As N sf w ( comment : ĠComment ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmark As N sf w ( comment . fullname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġmark As N sf w ( submission : ĠSubmission ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmark As N sf w ( submission . fullname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġmark As N sf w ( fullname : ĠString ): ĠAny ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Map Ġ= Ġget Header Map () ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġapi . mark As N sf w ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġfullname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Json Ġ= Ġ( if Ġ( disable Legacy Encoding ) Ġ 1 Ġelse Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġauth Map ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġreq . execute () ĊĠĠĠĠĠĠĠ Ġif Ġ(! res . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġres . body () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġun mark As N sf w ( submission : ĠSubmission ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġun mark As N sf w ( submission . fullname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġun mark As N sf w ( fullname : ĠString ): ĠAny ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Map Ġ= Ġget Header Map () ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġapi . un mark ns fw ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġfullname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Json Ġ= Ġ( if Ġ( disable Legacy Encoding ) Ġ 1 Ġelse Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġauth Map ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġreq . execute () ĊĠĠĠĠĠĠĠ Ġif Ġ(! res . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġres . body () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġmark As Spo iler ( comment : ĠComment ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmark As Spo iler ( comment . fullname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġmark As Spo iler ( submission : ĠSubmission ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmark As Spo iler ( submission . fullname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġmark As Spo iler ( fullname : ĠString ): ĠAny ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Map Ġ= Ġget Header Map () ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġapi . mark As Spo iler ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġfullname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Json Ġ= Ġ( if Ġ( disable Legacy Encoding ) Ġ 1 Ġelse Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġauth Map ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġreq . execute () ĊĠĠĠĠĠĠĠ Ġif Ġ(! res . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġres . body () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġun spo iler ( submission : ĠSubmission ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġun spo iler ( submission . fullname ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġun spo iler ( fullname : ĠString ): ĠAny ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Map Ġ= Ġget Header Map () ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġapi . un spo iler ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġfullname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġraw Json Ġ= Ġ( if Ġ( disable Legacy Encoding ) Ġ 1 Ġelse Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġauth Map ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġreq . execute () ĊĠĠĠĠĠĠĠ Ġif Ġ(! res . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġres . body () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġupload Media ( filename : ĠString , ĠmimeType : ĠString ? Ġ= Ġnull , Ġfile Content : ĠByteArray ): ĠString ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġcurrent MimeType Ġ= ĠmimeType ĊĠĠĠĠĠĠĠ Ġif Ġ( current MimeType Ġ== Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġfilename . substring ( filename . lastIndexOf ('. ')) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent MimeType Ġ= Ġwhen Ġ( extension ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" png " Ġ-> Ġ" image / png " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" jpg " Ġ-> Ġ" image / jpeg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" jpeg " Ġ-> Ġ" image / jpeg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" gif " Ġ-> Ġ" image / gif " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" webp " Ġ-> Ġ" image / webp " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mp 4 " Ġ-> Ġ" video / mp 4 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mpeg " Ġ-> Ġ" video / mpeg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" web m " Ġ-> Ġ" video / web m " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Media 's Ġmime type Ġnot Ġsupported ! Ġcheck Ġthe Ġfile Ġextension .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Map Ġ= Ġget Header Map () ĊĠĠĠĠĠĠĠ Ġval Ġreq Ġ= Ġapi . obtain Upload Contract ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilepath Ġ= Ġfilename , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmime type Ġ= Ġcurrent MimeType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġauth Map ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġupload Contract Res Ġ= Ġreq . execute () ĊĠĠĠĠĠĠĠ Ġif Ġ(! upload Contract Res . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġupload Contract Ġ= Ġupload Contract Res . body () Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġupload Data Ġ= Ġupload Contract . to Upload Data () ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= Ġfile Content . to RequestBody ( current MimeType . to MediaType ()) ĊĠĠĠĠĠĠĠ Ġval Ġmultipart Body Ġ= ĠMultip art Body . Part . create FormData (" file ", Ġfilename , Ġrequest Body ) ĊĊĠĠĠĠĠĠĠ Ġval Ġupload Url Ġ= Ġ" https :" . plus ( upload Contract . args . action ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmultipart MediaType Ġ= Ġ" multipart / form - data ". to MediaType () ĊĠĠĠĠĠĠĠ Ġval Ġreq 2 Ġ= Ġapi . upload Media ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupload Url Ġ= Ġupload Url , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġacl Ġ= Ġupload Data . acl . to RequestBody ( multipart MediaType ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġupload Data . key . to RequestBody ( multipart MediaType ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Amz Credential Ġ= Ġupload Data . xA mz Credential . to RequestBody ( multipart MediaType ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Amz Algorithm Ġ= Ġupload Data . xA mz Algorithm . to RequestBody ( multipart MediaType ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Amz Date Ġ= Ġupload Data . xA mz Date . to RequestBody ( multipart MediaType ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Action Status Ġ= Ġupload Data . success Action Status . to RequestBody ( multipart MediaType ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType Ġ= Ġupload Data . contentType . to RequestBody ( multipart MediaType ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Amz Storage Class Ġ= Ġupload Data . xA mz Storage Class . to RequestBody ( multipart MediaType ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Amz Meta Ext Ġ= Ġupload Data . xA mz Meta Ext . to RequestBody ( multipart MediaType ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpolicy Ġ= Ġupload Data . policy . to RequestBody ( multipart MediaType ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Amz Signature Ġ= Ġupload Data . xA mz Signature . to RequestBody ( multipart MediaType ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Amz Security Token Ġ= Ġupload Data . xA mz Security Token . to RequestBody ( multipart MediaType ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Ġ= Ġmultipart Body ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġres 2 Ġ= Ġreq 2 . execute () ĊĠĠĠĠĠĠĠ Ġif Ġ(! res 2 . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġupload Url . plus ('/ '). plus ( upload Data . key ) ĊĠĠĠ Ġ} Ċ } Ċ