package Ġcom . kar h oo . uis dk . screen . booking . domain . quotes Ċ Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġcom . kar h oo . sdk . api . Kar h oo Error Ċ import Ġcom . kar h oo . sdk . api . model . Quote Ċ import Ġcom . kar h oo . sdk . api . model . Quote Id Ċ import Ġcom . kar h oo . sdk . api . model . Quote List Ċ import Ġcom . kar h oo . sdk . api . model . Quote Status Ċ import Ġcom . kar h oo . sdk . api . model . Quotes Search Ċ import Ġcom . kar h oo . sdk . api . network . observable . Observable Ċ import Ġcom . kar h oo . sdk . api . network . observable . Observer Ċ import Ġcom . kar h oo . sdk . api . network . response . Resource Ċ import Ġcom . kar h oo . sdk . api . service . quotes . Quotes Service Ċ import Ġcom . kar h oo . uis dk . analytics . Analytics Ċ import Ġcom . kar h oo . uis dk . base . sn ackbar . Snackbar Config Ċ import Ġcom . kar h oo . uis dk . screen . booking . address . address bar . Address Bar View Contract Ċ import Ġcom . kar h oo . uis dk . screen . booking . domain . address . Booking Status Ċ import Ġcom . kar h oo . uis dk . screen . booking . domain . address . Booking Status State ViewModel Ċ import Ġcom . kar h oo . uis dk . screen . booking . quotes . category . Categories ViewModel Ċ import Ġcom . kar h oo . uis dk . screen . booking . quotes . category . Category Ċ import Ġcom . kar h oo . uis dk . util . Views Constants . VALID ITY _ DEFAULT _ INTERVAL Ċ import Ġcom . kar h oo . uis dk . util . Views Constants . VALID ITY _ SECONDS _ TO _ MILLISECONDS _ FACTOR Ċ import Ġcom . kar h oo . uis dk . util . return Error String Or Logout If Required Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . lang . ref . Weak Reference Ċ Ċ private Ġconst Ġval ĠMAX _ ACCEPT ABLE _ Q TA Ġ= Ġ 2 0 Ċ Ċ class ĠKar h oo Availability ( private Ġval Ġquotes Service : ĠQu otes Service , Ġprivate Ġval Ġanalytics : ĠAnalytics ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġcategories ViewModel : ĠCategories ViewModel , Ġprivate Ġval Ġlive F le ets ViewModel : ĠLive F le ets ViewModel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġbooking Status State ViewModel : ĠBook ing Status State ViewModel , Ġlifecycle Owner : ĠLifecycle Owner ) ĊĠĠĠ Ġ: ĠAvailability Provider Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġfilter edList : ĠMutable List < Quote >? Ġ= Ġlive F le ets ViewModel . live F le ets . value ?. to Mutable List () ĊĠĠĠ Ġprivate Ġvar Ġcategory ViewModels : ĠMutable List < Category > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġvar Ġavailable Veh icles : ĠMap < String , ĠList < Quote >> Ġ= Ġmutable Map Of () ĊĠĠĠ Ġprivate Ġvar Ġall Category : ĠCategory ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġvehicles Observer : ĠObserver < Resource < Quote List >> ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġvehicles Observable : ĠObservable < Quote List >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcurrent Filter : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġavailability Handler : ĠWeak Reference < Availability Handler >? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġobserver Ġ= Ġcreate Observable () ĊĠĠĠ Ġprivate Ġvar Ġvehicles Job : ĠJob ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġbooking Status State ViewModel . view States (). observe ( lifecycle Owner , Ġobserver ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġcleanup () Ġ{ ĊĠĠĠĠĠĠĠ Ġcancel Vehicle Callback () ĊĠĠĠĠĠĠĠ Ġbooking Status State ViewModel . view States (). remove Observer ( observer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbooking Status Observer (): Ġandroidx . lifecycle . Observer < Booking Status > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobserver ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Available Categories ( available Categories : ĠMap < String , ĠBoolean >) Ġ{ ĊĠĠĠĠĠĠĠ Ġcategory ViewModels . forEach Ġ{ Ġit . is Available Ġ= Ġavailable Categories . containsKey ( it . category Name ) Ġ} ĊĠĠĠĠĠĠĠ Ġcategories ViewModel . categories . value Ġ= Ġcategory ViewModels ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Nested Block Depth ") ĊĠĠĠ Ġprivate Ġfun Ġrequest Vehicle Availability ( booking Status : ĠBook ing Status ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcancel Vehicle Callback () ĊĠĠĠĠĠĠĠ Ġbooking Status ?. pickup ?. let Ġ{ Ġbooking Status Pickup Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbooking Status . destination ?. let Ġ{ Ġbooking Status Destination Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvehicles Observer Ġ= Ġquotes Callback () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvehicles Observer ?. let Ġ{ Ġobserver Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvehicles Observable Ġ= Ġquotes Service ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. quotes ( Quotes Search ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Ġ= Ġbooking Status Pickup , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestination Ġ= Ġbooking Status Destination , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Scheduled Ġ= Ġbooking Status . date ?. toDate ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observable (). apply Ġ{ Ġsubscribe ( observer ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcancel Vehicle Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġvehicles Observer ?. let Ġ{ Ġvehicles Observable ?. apply Ġ{ Ġunsubscribe ( it ) Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġvehicles Job ?. cancel () ĊĠĠĠĠĠĠĠ Ġavailable Veh icles Ġ= Ġmutable Map Of () ĊĠĠĠĠĠĠĠ Ġcurrent Available Quotes () ĊĠĠĠĠĠĠĠ Ġupdate F le ets ( mutable ListOf ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfilter Vehicle ListBy Category ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . current Filter Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġfilter Veh icles () ĊĠĠĠĠĠĠĠ Ġif Ġ( filter edList ?. isEmpty () Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics ?. vehicle Selected ( current Filter . or Empty (), Ġfilter edList ?. get ( 0 )?. id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfilter Veh icles () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( current Filter ?. isEmpty () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcurrent Filter ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Filtered Veh icles For Category ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Filtered Veh icles For Category ( current Filter : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( current Filter Ġ== Ġall Category ?. category Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter edList Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Veh icles . values . forEach Ġ{ Ġfilter edList ?. addAll ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter edList Ġ= Ġavailable Veh icles [ this . current Filter . or Empty ()] ?. to Mutable List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate F le ets ( filter edList ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate F le ets ( filter edList : ĠMutable List < Quote > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġfilter edList ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlive F le ets ViewModel . live F le ets . value Ġ= Ġfilter edList ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset All Category ( category : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġall Category Ġ= ĠCategory ( category , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Observable () Ġ= Ġandroidx . lifecycle . Observer < Booking Status > Ġ{ Ġbooking Status Ġ-> ĊĠĠĠĠĠĠĠ Ġcancel Vehicle Callback () ĊĠĠĠĠĠĠĠ Ġif Ġ( booking Status Ġ!= Ġnull Ġ&& Ġbooking Status . destination Ġ== Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġcategory ViewModels . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Veh icles ( Quote List ( categories Ġ= Ġempty Map (), Ġid Ġ= ĠQuote Id (), Ġvalidity Ġ= Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Vehicle Availability ( booking Status ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Availability Handler ( availability Handler : ĠAvailability Handler ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . availability Handler Ġ= ĠWeak Reference ( availability Handler ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġquotes Callback () Ġ= Ġobject Ġ: ĠObserver < Resource < Quote List >> Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ValueChanged ( value : ĠResource < Quote List >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Success Ġ-> Ġupdate Veh icles ( value . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Failure Ġ-> Ġhandle Availability Error ( value . error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Availability Error ( error : ĠKar h oo Error ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKar h oo Error . Could Not Get Availability None Found Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Vehicle Callback () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailability Handler ?. get ()?. has Availability Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKar h oo Error . Origin And Destination Ident ical Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Destination () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailability Handler ?. get ()?. handle Availability Error ( Snackbar Config ( text Ġ= Ġnull , Ġmessage Res Id Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Error String Or Logout If Required ( error ), Ġkar h oo Error Ġ= Ġerror )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġavailability Handler ?. get ()?. handle Availability Error ( Snackbar Config ( text Ġ= Ġnull , Ġmessage Res Id Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Error String Or Logout If Required ( error ), Ġkar h oo Error Ġ= Ġerror )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Destination () Ġ{ ĊĠĠĠĠĠĠĠ Ġbooking Status State ViewModel . process ( Address Bar View Contract . Address Bar Event ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. Destination Address Event ( null )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Vehicle Validity ( vehicles : ĠQuote List ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġrefresh Delay Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvehicles . validity Ġ== Ġ- 1 Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvehicles . validity Ġ>= ĠVALID ITY _ DEFAULT _ INTERVAL Ġ-> Ġvehicles . validity . times ( VALID ITY _ SECONDS _ TO _ MILLISECONDS _ FACTOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠVALID ITY _ DEFAULT _ INTERVAL . times ( VALID ITY _ SECONDS _ TO _ MILLISECONDS _ FACTOR ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvehicles Job Ġ= ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( refresh Delay ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvehicles Observer ?. let Ġ{ Ġvehicles Observable ?. subscribe ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Vehicle Polling ( vehicles : ĠQuote List ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( vehicles . status Ġ== ĠQuote Status . COMPLETED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Vehicle Callback () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Vehicle Validity ( vehicles ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Veh icles ( vehicles : ĠQuote List ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Vehicle Polling ( vehicles ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġhas Quotes Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvehicles . categories . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . value . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Quotes Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( vehicles . status Ġ== ĠQuote Status . COMPLETED Ġ&& Ġ! has Quotes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavailability Handler ?. get ()?. has No Results Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavailability Handler ?. get ()?. has No Results Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavailability Handler ?. get ()?. has Availability Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Categories ( current Categories Ġ= Ġvehicles . categories . keys . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Veh icles Ġ= Ġvehicles . categories ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Available Quotes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Veh icles () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcurrent Categories ( current Categories : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( current Categories . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory ViewModels . clear () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory ViewModels Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Categories . forEach Ġ{ Ġcategory ViewModels . add ( Category ( it , Ġfalse )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Category ?. let Ġ{ Ġcategory ViewModels . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcurrent Available Quotes () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( booking Status State ViewModel . currentState . date Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Available Categories ( handle Pre book Categories ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Available Categories ( handle As ap Categories ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle As ap Categories (): ĠMap < String , ĠBoolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactive Categories Ġ= ĠHashMap < String , ĠBoolean >() ĊĠĠĠĠĠĠĠ Ġavailable Veh icles . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . value . filter Ġ{ Ġit . vehicle . vehicle Q ta . high Minutes Ġ<= ĠMAX _ ACCEPT ABLE _ Q TA Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġis Category Available ( active Categories , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġactive Categories ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Pre book Categories (): ĠMutable Map < String , ĠBoolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactive Categories Ġ= ĠHashMap < String , ĠBoolean >() ĊĠĠĠĠĠĠĠ Ġavailable Veh icles . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . value . forEach Ġ{ Ġis Category Available ( active Categories , Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġactive Categories ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Category Available ( active Categories : ĠHashMap < String , ĠBoolean >, Ġvehicle Details : ĊĠĠĠ ĠQuote ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvehicle Details . vehicle . vehicle Class ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! active Categories . containsKey ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Categories [ it ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġall Category ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( available Veh icles . isNotEmpty () Ġ&& Ġ! active Categories . containsKey ( it . category Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Categories [ it . category Name ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ