package Ġorg . ab imon . et ern al Ju ke box Ċ Ċ import Ġcom . auth 0 . jwt . JWT Ċ import Ġcom . auth 0 . jwt . JWT Verifier Ċ import Ġcom . auth 0 . jwt . algorithms . Algorithm Ċ import Ġcom . fasterxml . jackson . annotation . JsonInclude Ċ import Ġcom . fasterxml . jackson . databind . Deserialization Feature Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . data format . yaml . YAML Factory Ċ import Ġcom . fasterxml . jackson . datatype . jdk 8 . J dk 8 Module Ċ import Ġcom . fasterxml . jackson . datatype . js r 3 1 0 . Java Time Module Ċ import Ġcom . fasterxml . jackson . module . kotlin . Kotlin Module Ċ import Ġcom . fasterxml . jackson . module . param names . Parameter Names Module Ċ import Ġio . vertx . core . Vert x Ċ import Ġio . vertx . core . Vert x Options Ċ import Ġio . vertx . core . http . HttpServer Ċ import Ġio . vertx . ext . web . Router Ċ import Ġorg . ab imon . et ern al Ju ke box . data . analysis . I Analy ser Ċ import Ġorg . ab imon . et ern al Ju ke box . data . analysis . Spot ify Analy ser Ċ import Ġorg . ab imon . et ern al Ju ke box . data . analytics . I Analytics Provider Ċ import Ġorg . ab imon . et ern al Ju ke box . data . analytics . I Analytics Storage Ċ import Ġorg . ab imon . et ern al Ju ke box . data . audio . I Audio Source Ċ import Ġorg . ab imon . et ern al Ju ke box . data . database . ID atabase Ċ import Ġorg . ab imon . et ern al Ju ke box . data . storage . I Storage Ċ import Ġorg . ab imon . et ern al Ju ke box . handlers . Pop ular Handler Ċ import Ġorg . ab imon . et ern al Ju ke box . handlers . Static Resources Ċ import Ġorg . ab imon . et ern al Ju ke box . handlers . api .* Ċ import Ġorg . ab imon . et ern al Ju ke box . objects . Constant Values Ċ import Ġorg . ab imon . et ern al Ju ke box . objects . Empty Data API Ċ import Ġorg . ab imon . et ern al Ju ke box . objects . Ju ke box Config Ċ import Ġorg . ab imon . vis i . lang . Snow storm Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . File Ċ import Ġjava . io . OutputStream Ċ import Ġjava . io . Print Stream Ċ import Ġjava . security . Secure Random Ċ import Ġjava . time . Instant Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Concurrent Skip List Set Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . Scheduled ExecutorService Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlin . collections . ArrayList Ċ Ċ object ĠE ternal Ju ke box Ġ{ ĊĠĠĠ Ġval Ġjson Mapper : ĠObjectMapper Ġ= ĠObjectMapper () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. register Modules ( J dk 8 Module (), ĠKotlin Module (), ĠJava Time Module (), ĠParameter Names Module ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. disable ( Deserialization Feature . FAIL _ ON _ UNKNOWN _ PROPERTIES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable ( Deserialization Feature . ACCEPT _ SINGLE _ VALUE _ AS _ ARRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Serialization In clusion ( JsonInclude . Include . NON _ AB SENT ) ĊĊĠĠĠ Ġval Ġyaml Mapper : ĠObjectMapper Ġ= ĠObjectMapper ( YAML Factory ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. register Modules ( J dk 8 Module (), ĠKotlin Module (), ĠJava Time Module (), ĠParameter Names Module ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. disable ( Deserialization Feature . FAIL _ ON _ UNKNOWN _ PROPERTIES ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable ( Deserialization Feature . ACCEPT _ SINGLE _ VALUE _ AS _ ARRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Serialization In clusion ( JsonInclude . Include . NON _ AB SENT ) ĊĊĠĠĠ Ġval Ġjson Config : ĠFile Ġ= ĠFile (" config . json ") ĊĠĠĠ Ġval Ġyaml Config : ĠFile Ġ= ĠFile (" config . yaml ") ĊĊĠĠĠ Ġval ĠBASE _ 6 4 _ URL Ġ= Ġchar ArrayOf (' A ', Ġ' B ', Ġ' C ', Ġ' D ', Ġ' E ', Ġ' F ', Ġ' G ', Ġ' H ', Ġ' I ', Ġ' J ', Ġ' K ', Ġ' L ', Ġ' M ', Ġ' N ', Ġ' O ', Ġ' P ', Ġ' Q ', Ġ' R ', Ġ' S ', Ġ' T ', Ġ' U ', Ġ' V ', Ġ' W ', Ġ' X ', Ġ' Y ', Ġ' Z ', Ġ' a ', Ġ' b ', Ġ' c ', Ġ' d ', Ġ' e ', Ġ' f ', Ġ' g ', Ġ' h ', Ġ' i ', Ġ' j ', Ġ' k ', Ġ' l ', Ġ' m ', Ġ' n ', Ġ' o ', Ġ' p ', Ġ' q ', Ġ' r ', Ġ' s ', Ġ' t ', Ġ' u ', Ġ' v ', Ġ' w ', Ġ' x ', Ġ' y ', Ġ' z ', Ġ' 0 ', Ġ' 1 ', Ġ' 2 ', Ġ' 3 ', Ġ' 4 ', Ġ' 5 ', Ġ' 6 ', Ġ' 7 ', Ġ' 8 ', Ġ' 9 ', Ġ'-', Ġ'_ ') ĊĊĠĠĠ Ġval Ġsecure Random : ĠSecure Random Ġ= ĠSecure Random () ĊĠĠĠ Ġval Ġsnow storm : ĠSnow storm ĊĊĠĠĠ Ġval Ġconfig : ĠJ uke box Config ĊĠĠĠ Ġval Ġvert x : ĠVert x ĊĠĠĠ Ġval Ġweb server : ĠHttp Server ĊĊĠĠĠ Ġval Ġstorage : ĠI Storage ĊĠĠĠ Ġval Ġaudio : ĠI Audio Source ? ĊĊĠĠĠ Ġval Ġspot ify : ĠI Analy ser ĊĊĠĠĠ Ġval Ġanalytics : ĠI Analytics Storage ĊĠĠĠ Ġval Ġanalytics Providers : ĠList < I Analytics Provider > ĊĊĠĠĠ Ġval Ġdatabase : ĠID atabase ĊĊĠĠĠ Ġval Ġvisitor Algorithm : ĠAlgorithm ĊĠĠĠ Ġval Ġvisitor Verifier : ĠJWT Verifier ĊĊĠĠĠ Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger (" E ternal Box ") ĊĊĠĠĠ Ġval Ġold Visitor Token : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠJWT . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Iss ued At ( Date . from ( Instant . EPOCH )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sign ( visitor Algorithm ) ĊĠĠĠ Ġval Ġnew Visitor Token : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠJWT . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Iss ued At ( Date . from ( Instant . now ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sign ( visitor Algorithm ) ĊĊĠĠĠ Ġval Ġschedule : ĠScheduled ExecutorService Ġ= ĠExec utors . new Single Thread Scheduled Executor () ĊĠĠĠ Ġval Ġap is Ġ= ĠArrayList < I API >() ĊĊĠĠĠ Ġval Ġlog Streams : ĠMap < String , ĠPrint Stream > ĊĠĠĠ Ġval Ġempty Print Stream Ġ= ĠPrint Stream ( object : ĠOutputStream () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwrite ( b : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwrite ( b : ĠByteArray ) Ġ{} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwrite ( b : ĠByteArray ?, Ġoff : ĠInt , Ġlen : ĠInt ) Ġ{} ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġval Ġhourly Visitor s Address : ĠConcurrent Skip List Set < String > Ġ= ĠConcurrent Skip List Set () ĊĠĠĠ Ġval Ġref err ers : ĠConcurrent Skip List Set < String > Ġ= ĠConcurrent Skip List Set () ĊĠĠĠ Ġval Ġref err ers File Ġ= ĠFile (" ref err ers . txt ") ĊĊĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġweb server . listen ( config . port ) ĊĠĠĠĠĠĠĠ Ġlogger . info (" Now Ġlistening Ġon Ġport Ġ{}", Ġconfig . port ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠ ĠE ternal Ju ke box . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( json Config . exists ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġjson Mapper . readValue ( json Config , ĠJ uke box Config :: class . java ) ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( yaml Config . exists ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġyaml Mapper . readValue ( yaml Config , ĠJ uke box Config :: class . java ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= ĠJ uke box Config () ĊĊĠĠĠĠĠĠĠ Ġlog Streams Ġ= Ġconfig . log Files . map Values Ġ{ Ġ(_, Ġfilename ) Ġ-> Ġif ( filename Ġ!= Ġnull ) ĠPrint Stream ( File ( filename )) Ġelse Ġempty Print Stream Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( config . print Config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . trace (" Loaded Ġconfig : Ġ$ config ") ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . trace (" Loaded Ġconfig ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ref err ers File . exists ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġref err ers . addAll ( ref err ers File . read Lines ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠConfig ĠHandling ĊĊĠĠĠĠĠĠĠ Ġvisitor Algorithm Ġ= ĠAlgorithm . HMAC 5 1 2 ( ByteArray ( config . visitor Secret Size ). apply Ġ{ Ġsecure Random . next Bytes ( this ) Ġ}) ĊĠĠĠĠĠĠĠ Ġvisitor Verifier Ġ= ĠJWT . require ( visitor Algorithm ). build () Ċ Ċ // ĠĠĠĠĠĠĠ Ġoauth State Algorithm Ġ= ĠAlgorithm . HMAC 5 1 2 ( ByteArray ( config . oauth State Secret Size ). apply Ġ{ Ġsecure Random . next Bytes ( this ) Ġ}) Ċ // ĠĠĠĠĠĠĠ Ġoauth State Verifier Ġ= ĠJWT . require ( oauth State Algorithm ). build () ĊĊĠĠĠĠĠĠĠ Ġvert x Ġ= ĠVert x . vertx ( Vert x Options (). setMax Worker Execute Time ( config . worker Execute Time )) ĊĠĠĠĠĠĠĠ Ġweb server Ġ= Ġvert x . create HttpServer () ĊĊĠĠĠĠĠĠĠ Ġsnow storm Ġ= ĠSnow storm ( config . epoch ) ĊĊĠĠĠĠĠĠĠ Ġstorage Ġ= Ġconfig . storage Type . storage ĊĊĠĠĠĠĠĠĠ Ġval Ġmain Router Ġ= ĠRouter . router ( vertx ) ĊĊĠĠĠĠĠĠĠ Ġ// Something Ġsomething Ġcheck Ġfor Ġcookies ĊĠĠĠĠĠĠĠ Ġmain Router . route (). handler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġip Ġ= Ġit . request (). remote Address (). host () Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif ( ip Ġ! in Ġunique Visitor s Address ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data ()[ Constant Values . UNIQUE _ VIS ITOR ] Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunique Visitor s Address . add ( ip ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ip Ġ! in Ġhourly Visitor s Address ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data ()[ Constant Values . HO URL Y _ UNIQUE _ VIS ITOR ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhourly Visitor s Address . add ( ip ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . request (). getHeader (" Refer er ") ?. let ( ref err ers :: add ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . data ()[ Constant Values . USER _ UID ] Ġ= ĠUUID . randomUUID (). toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . next () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconfig . redirects . forEach Ġ{ Ġroute , Ġpath Ġ-> Ġmain Router . route ( route ). handler Ġ{ Ġcontext Ġ-> Ġcontext . response (). redirect ( path ) Ġ} Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrun Site API Ġ= Ġis Enabled (" site API ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( run Site API ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Router . route (). handler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequests . increment AndGet () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhourly Requests . increment AndGet () Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it [ Constant Values . HO URL Y _ UNIQUE _ VIS ITOR , Ġfalse ]) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunique Visitor s . increment AndGet () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" Unique Ġvisitor ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it [ Constant Values . HO URL Y _ UNIQUE _ VIS ITOR , Ġfalse ]) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhourly Unique Visitor s . increment AndGet () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" Unique Ġhourly Ġvisitor ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġapi Router Ġ= ĠRouter . router ( vertx ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( isEnabled (" analysis API ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġap is . add ( Analysis API ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( run Site API ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġap is . add ( Site API ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( isEnabled (" analytics ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics Ġ= Ġconfig . analytics Storage Type . analytics ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics Providers Ġ= Ġconfig . analytics Providers . map Ġ{ Ġ( type ) Ġ-> Ġtype . provider Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics Ġ= ĠEmpty Data API ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics Providers Ġ= Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics Ġ= ĠEmpty Data API ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics Providers Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( isEnabled (" database ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase Ġ= Ġconfig . database Type . db . object Instance !! ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase Ġ= ĠEmpty Data API ĊĊĠĠĠĠĠĠĠ Ġif Ġ( isEnabled (" audio API ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġap is . add ( Audio API ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Ġ= Ġconfig . audio Source Type ?. audio ?. object Instance ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Ġ= ĠEmpty Data API ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( isEnabled (" audio API ") Ġ|| Ġis Enabled (" analysis API ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspot ify Ġ= ĠSpotify Analy ser ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspot ify Ġ= ĠEmpty Data API ĊĊĠĠĠĠĠĠĠ Ġif Ġ( isEnabled (" node API ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġap is . add ( Node API ) Ċ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( isEnabled (" profile API ")) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġap is . add ( Profile API ) ĊĊĠĠĠĠĠĠĠ Ġanalytics Providers . forEach Ġ{ Ġprovider Ġ-> Ġprovider . setup Web Analytics ( main Router ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġap is . forEach Ġ{ Ġapi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Ġ= ĠRouter . router ( vertx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . setup ( sub ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Router . mount Sub Router ( api . mount Path , Ġsub ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmain Router . mount Sub Router ("/ api ", Ġapi Router ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( isEnabled (" popular ")) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPop ular Handler . setup ( main Router ) Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( isEnabled (" open Graph ")) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠOpen Graph Handler . setup ( main Router ) ĊĠĠĠĠĠĠĠ Ġif Ġ( isEnabled (" static Resources ")) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStatic Resources . setup ( main Router ) ĊĊĠĠĠĠĠĠĠ Ġweb server . request Handler ( main Router ) ĊĊĠĠĠĠĠĠĠ Ġschedule . schedule At Fixed Rate ( 0 , Ġ 1 , ĠTimeUnit . HOUR S ) Ġ{ Ġref err ers File . write Text ( ref err ers . join ToString ("\ n ")) Ġ} Ċ Ċ // ĠĠĠĠĠĠĠ Ġif ( run Site API ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . schedule At Fixed Rate ( 0 , Ġ 1 0 0 0 Ġ* Ġ 6 0 Ġ* Ġ 6 0 ) Ġ{ Ġhourly Requests . set ( 0 ); Ġhourly Unique Visitor s . set ( 0 ); Ġhourly Visitor s Address . clear () Ġ} Ċ // ĠĠĠĠĠĠĠ Ġelse Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġschedule . schedule At Fixed Rate ( 0 , Ġ 1 0 0 0 Ġ* Ġ 6 0 Ġ* Ġ 6 0 ) Ġ{ Ġhourly Visitor s Address . clear () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Enabled ( function : ĠString ): ĠBoolean Ġ= Ġconfig . disable [ function ] Ġ!= Ġtrue Ċ }