package Ġcom . lag rad ost . cloud stream 3 . movie providers Ċ Ċ import Ġcom . fasterxml . jackson . annotation . JsonProperty Ċ import Ġcom . lag rad ost . cloud stream 3 .* Ċ import Ġcom . lag rad ost . cloud stream 3 . extract ors . X Stream C dn Ċ import Ġcom . lag rad ost . cloud stream 3 . extract ors . helper . As ian Embed Helper Ċ import Ġcom . lag rad ost . cloud stream 3 . mv vm . log Error Ċ import Ġcom . lag rad ost . cloud stream 3 . utils . App Utils . parse Json Ċ import Ġcom . lag rad ost . cloud stream 3 . utils . App Utils . toJson Ċ import Ġcom . lag rad ost . cloud stream 3 . utils . Extractor Link Ċ import Ġcom . lag rad ost . cloud stream 3 . utils . get Quality FromName Ċ import Ġcom . lag rad ost . cloud stream 3 . utils . load Extractor Ċ import Ġorg . js oup . J soup Ċ Ċ class ĠK dr ama H ood Provider Ġ: ĠMain API () Ġ{ ĊĠĠĠ Ġoverride Ġvar Ġmain Url Ġ= Ġ" https :// k dr am ah ood . com " ĊĠĠĠ Ġoverride Ġvar Ġname Ġ= Ġ" KD ram a H ood " ĊĠĠĠ Ġoverride Ġval Ġhas Quick Search Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġval Ġhas Main Page Ġ= Ġtrue ĊĠĠĠ Ġoverride Ġval Ġhas Chrome cast Support Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġval Ġhas Download Support Ġ= Ġtrue ĊĠĠĠ Ġoverride Ġval Ġsupported Types Ġ= Ġset Of ( Tv Type . As ian D ram a ) ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠResponse Datas ( ĊĠĠĠĠĠĠĠ Ġ@ JsonProperty (" label ") Ġval Ġlabel : ĠString , ĊĠĠĠĠĠĠĠ Ġ@ JsonProperty (" file ") Ġval Ġfile : ĠString ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Main Page (): ĠHome Page Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= Ġapp . get ("$ main Url / home 2 "). document ĊĠĠĠĠĠĠĠ Ġval Ġhome Ġ= ĠArrayList < HomePage List >() ĊĊĠĠĠĠĠĠĠ Ġ// ĠHard coded Ġhomepage Ġcause Ġof Ġsite Ġimplementation ĊĠĠĠĠĠĠĠ Ġ// ĠRecent ly Ġadded ĊĠĠĠĠĠĠĠ Ġval Ġrecently Inner Ġ= Ġdoc . select First (" div . pel ic ulas ") ĊĠĠĠĠĠĠĠ Ġval Ġrecently Added Title Ġ= Ġrecently Inner !!. select First (" h 1 ") ?. text () Ġ?: Ġ" Recent ly ĠAdded " ĊĠĠĠĠĠĠĠ Ġval Ġrecently Added Ġ= Ġrecently Inner . select (" div . item _ 2 . items Ġ> Ġdiv . fit . item "). map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinner A Ġ= Ġit . select (" div . image Ġ> Ġa ") Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Ġ= Ġfix Url Null ( inner A . attr (" href ")) Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Ġ= Ġfix Url Null ( inner A . select (" img "). attr (" src ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinner Data Ġ= Ġit . select First (" div . data ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġinner Data !!. select First (" h 1 ") ?. text () Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyear Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyear Text Ġ= Ġinner Data . select First (" span . titulo _ o ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . text ()?. take Last ( 1 1 )?. trim ()?. take ( 4 ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Log . i ( this . name , Ġ" Result Ġ=> Ġ( year Text ) Ġ$ year Text ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre x Ġ= ĠRegex ("\\ (( \\ d + )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Log . i ( this . name , Ġ" Result Ġ=> Ġ( rex Ġvalue ) Ġ${ rex . find ( year Text )?. value }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre x . find ( year Text )?. value ?. toInt OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ Ġnull Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Search Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġlink , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Name Ġ= Ġthis . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠT v Type . Tv Series , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposter Url Ġ= Ġimage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear Ġ= Ġyear ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. distinct By Ġ{ Ġit . url Ġ} Ġ?: ĠlistOf () ĊĠĠĠĠĠĠĠ Ġhome . add ( HomePage List ( recent ly Added Title , Ġrecently Added )) ĊĠĠĠĠĠĠĠ Ġreturn ĠHome Page Response ( home . filter Ġ{ Ġit . list . isNotEmpty () Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġsearch ( query : ĠString ): ĠList < Search Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ"$ main Url /? s =$ query " ĊĠĠĠĠĠĠĠ Ġval Ġhtml Ġ= Ġapp . get ( url ). document ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġhtml . getElementsBy Tag (" body ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select (" div . item _ 1 . items Ġ> Ġdiv . item ") Ġ?: Ġreturn ĠlistOf () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdocument . map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinner A Ġ= Ġit . select First (" div . box info Ġ> Ġa ") Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Ġ= Ġfix Url Null ( inner A . attr (" href ")) Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġinner A . select (" span . tt ") ?. text () Ġ?: Ġreturn @ map NotNull Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyear Ġ= Ġit . select First (" span . year ") ?. text ()?. toInt OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Ġ= Ġfix Url Null ( it . select First (" div . image Ġ> Ġimg ") ?. attr (" src ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Search Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġlink , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Name Ġ= Ġthis . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠT v Type . Movie , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposter Url Ġ= Ġimage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear Ġ= Ġyear ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload ( url : ĠString ): ĠLoad Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= Ġapp . get ( url ). document ĊĠĠĠĠĠĠĠ Ġval Ġinner Ġ= Ġdoc . select First (" div . central ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠVideo Ġdetails ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġinner ?. select First (" h 1 ") ?. text () Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġposter Ġ= Ġfix Url Null ( doc . select First (" meta [ property = og : image ]") ?. attr (" content ")) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġ// Log . i ( this . name , Ġ" Result Ġ=> Ġ( poster ) Ġ${ poster }") ĊĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġinner !!. select First (" div # info ") ĊĠĠĠĠĠĠĠ Ġval Ġde script Ġ= Ġinner . select First (" div . conten id ot v Ġ> Ġdiv Ġ> Ġp ") ?. text () ĊĠĠĠĠĠĠĠ Ġval Ġyear Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Link Ġ= Ġ" https :// k dr am ah ood . com / dr ama - release - year /" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġres : ĠInt ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo ?. select (" div . met adat ac ") ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( res Ġ!= Ġnull ) Ġ{ Ġreturn @ forEach Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġnull ) Ġ{ Ġreturn @ forEach Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyear Link Ġ= Ġit . select (" a "). attr (" href ") Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( year Link . startsWith ( start Link )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres Ġ= Ġyear Link . substring ( start Link . length ). replace ("/", Ġ""). toInt OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ Ġnull Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġre cs Ġ= Ġdoc . select (" div . side b art v Ġ> Ġdiv . tv item rel "). map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġit ?. select (" a ") Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Url Ġ= Ġfix Url Null ( a . attr (" href ")) Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Img Ġ= Ġa . select (" img ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Cover Ġ= Ġfix Url Null ( a Img . attr (" src ")) Ġ?: Ġfix Url Null ( a Img . attr (" data - src ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Name Year Ġ= Ġa . select (" div . datat v rel ") Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Name Ġ= Ġa Name Year . select (" h 4 "). text () Ġ?: Ġa Img . attr (" alt ") Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Year Ġ= Ġa Name . trim (). take Last ( 5 ). remove Suffix (" ) "). toInt OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Search Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġa Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġa Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠT v Type . Movie , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposter Url Ġ= Ġa Cover , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear Ġ= Ġa Year , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Name Ġ= Ġthis . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠEp isode s ĠLinks ĊĠĠĠĠĠĠĠ Ġval Ġepisode List Ġ= Ġinner . select (" ul . ep is od ios Ġ> Ġli ") ?. map NotNull Ġ{ Ġep Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Log . i ( this . name , Ġ" Result Ġ=> Ġ( ep ) Ġ${ ep }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠlistOf Links Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġep . select (" div . num er ando ") ?. text ()?. toInt OrNull () Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinner A Ġ= Ġep . select (" div . ep is od iot itle Ġ> Ġa ") Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Log . i ( this . name , Ġ" Result Ġ=> Ġ( inner A ) Ġ${ inner A }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġep Link Ġ= Ġfix Url Null ( inner A . attr (" href ")) Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Log . i ( this . name , Ġ" Result Ġ=> Ġ( ep Link ) Ġ${ ep Link }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ep Link . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFetch Ġvideo Ġlinks ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġep V id Link El Ġ= Ġapp . get ( ep Link , Ġrefer er Ġ= Ġmain Url ). document ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġep Links Content Ġ= Ġep V id Link El . select First (" div . player _ nav Ġ> Ġscript ") ?. html () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . replace (" if r _ target . src Ġ= ", Ġ"< div >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . replace (" '; ", Ġ"</ div >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Log . i ( this . name , Ġ" Result Ġ=> Ġ( ep Links Content ) Ġ$ ep Links Content ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! ep Links Content . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Log . i ( this . name , Ġ" Result Ġ=> Ġ( ep Links Content ) Ġ${ J soup . parse ( ep Links Content )?. select (" div ") }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ soup . parse ( ep Links Content )?. select (" div ") ?. forEach Ġ{ Ġem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhref Ġ= Ġem ?. html ()?. trim ()?. remove Prefix ("' ") Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Log . i ( this . name , Ġ" Result Ġ=> Ġ( ep #$ count Ġlink ) Ġ$ href ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( href . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Links . add ( fix Url ( href )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Fetch Ġdefault Ġsource Ġand Ġsub titles ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġep V id Link El . select (" div . embed 2 ") ?. forEach Ġ{ Ġdef src Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( def src Ġ== Ġnull ) Ġ{ Ġreturn @ forEach Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscript string Ġ= Ġdef src . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( script string . contains (" sources : Ġ[{ ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( ? <= player Instance 2 . setup \\ () ([ \\ s \\ S ]* ? )( ?= \\ ); ) ". to Regex (). find ( script string )?. value ?. let Ġ{ Ġitem js Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Links . add ("$ main Url $ item js ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEp isode ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseason Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġepisode Ġ= Ġcount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠlistOf Links . distinct (). toJson (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposter Url Ġ= Ġposter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// If Ġthere 's Ġonly Ġ 1 Ġepisode , Ġconsider Ġit Ġa Ġmovie . ĊĠĠĠĠĠĠĠ Ġif Ġ( episode List ?. size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMovie Load Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġurl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Name Ġ= Ġthis . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠT v Type . Movie , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Url Ġ= Ġepisode List [ 0 ]. data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposter Url Ġ= Ġposter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear Ġ= Ġyear , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplot Ġ= Ġde script , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecommendations Ġ= Ġre cs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠT v Series Load Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġurl , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Name Ġ= Ġthis . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠT v Type . As ian D ram a , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġepisode s Ġ= Ġepisode List ?. reversed () Ġ?: Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposter Url Ġ= Ġposter , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyear Ġ= Ġyear , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplot Ġ= Ġde script , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecommendations Ġ= Ġre cs ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload Links ( ĊĠĠĠĠĠĠĠ Ġdata : ĠString , ĊĠĠĠĠĠĠĠ Ġis Cast ing : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġsubtitle Callback : Ġ( Subtitle File ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġcallback : Ġ( Extractor Link ) Ġ-> ĠUnit ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġparse Json < List < String >>( data ). ap map Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . startsWith ( main Url )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġitem . substring ( main Url . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Log . i ( this . name , Ġ" Result Ġ=> Ġ( text ) Ġ$ text ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Find Ġvideo Ġfiles ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( ? <= sources : Ġ) ([ \\ s \\ S ]* ? )( ? <= ]) ". to Regex (). find ( text )?. value ?. let Ġ{ Ġvid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Json < List < Response Datas >>( vid ). forEach Ġ{ Ġsrc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Log . i ( this . name , Ġ" Result Ġ=> Ġ( src ) Ġ${ src . toJson () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExtract or Link ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġsrc . file , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquality Ġ= Ġget Quality FromName ( src . label ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefer er Ġ= Ġmain Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Error ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Find Ġsub titles ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( ? <= tracks : Ġ) ([ \\ s \\ S ]* ? )( ? <= ]) ". to Regex (). find ( text )?. value ?. let Ġ{ Ġsub Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub text Ġ= Ġsub . replace (" file :", Ġ"\" file \": ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" label :", Ġ"\" label \": ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" kind :", Ġ"\" kind \": ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Json < List < Response Datas >>( sub text ). forEach Ġ{ Ġsrc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Log . i ( this . name , Ġ" Result Ġ=> Ġ( sub ) Ġ${ src . toJson () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubtitle Callback ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSub title File ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlang Ġ= Ġsrc . label , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġsrc . file ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Error ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġfix Url ( item . trim ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Log . i ( this . name , Ġ" Result Ġ=> Ġ( url ) Ġ$ url ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl . startsWith (" https :// as ian embed . io ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAs ian Embed Helper . get Urls ( url , Ġcallback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl . startsWith (" https :// embed s ito . com ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextractor Ġ= ĠX Stream C dn () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextractor . domain Url Ġ= Ġ" embed s ito . com " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextractor . getUrl ( url ). forEach Ġ{ Ġlink Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . invoke ( link ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Extractor ( url , Ġmain Url , Ġcallback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcount Ġ> Ġ 0 ĊĠĠĠ Ġ} Ċ }