package Ġcom . dev _ vl ad . car _ v . views . deal ers . details Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . navigation . fragment . nav Args Ċ import Ġandroidx . navigation . ui . on Nav Destination Selected Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . dev _ vl ad . car _ v . Car V App Ċ import Ġcom . dev _ vl ad . car _ v . R Ċ import Ġcom . dev _ vl ad . car _ v . databinding . Fragment Car Details Binding Ċ import Ġcom . dev _ vl ad . car _ v . models . persistence . cars . Car Entity Ċ import Ġcom . dev _ vl ad . car _ v . util . Vertical Spacing Item Decorator Ċ import Ġcom . dev _ vl ad . car _ v . util . show Sn ackBar To User Ċ import Ġcom . dev _ vl ad . car _ v . view _ models . deal ers . details . Car Details ViewModel Ċ import Ġcom . dev _ vl ad . car _ v . view _ models . deal ers . details . Car Details ViewModel Factory Ċ import Ġcom . dev _ vl ad . car _ v . views . adapters . sell ers . My Car Images Adapter Ċ import Ġcom . dev _ vl ad . car _ v . views . dialogs . Make Initial Offer Ċ import Ġjava . util .* ĊĊ Ċ class ĠCar Details Fragment Ġ: ĠFragment (), ĠMake Initial Offer . Make Initial Offer Listener Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠCar Details Fragment :: class . java . simple Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Car Details Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĠĠĠ Ġprivate Ġval Ġcar Details VM : ĠCar Details ViewModel Ġby Ġview Models Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcar App Ġ= Ġ( activity ?. application Ġas ĠCar V App ) ĊĠĠĠĠĠĠĠ ĠCar Details ViewModel Factory ( car App . user Repo , Ġcar App . car Repo , Ġcar App . offer Repo ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġcar Images Adapter Ġ= ĠMy Car Images Adapter () ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Car Details Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠĠĠĠĠ Ġbinding . images Rv . layout Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayoutManager ( context , ĠLinearLayoutManager . HORIZONTAL , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbinding . images Rv . adapter Ġ= Ġcar Images Adapter ĊĠĠĠĠĠĠĠ Ġbinding . images Rv . addItem Decoration ( Vertical Spacing Item Decorator ( 3 0 )) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġargs : ĠCar Details Fragment Args Ġby Ġnav Args () ĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġcar Details VM . fetch Car And Offer Details ( args . Car Id ) ĊĠĠĠĠĠĠĠ Ġobserve Initial Offer State () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġobserve Initial Offer State () Ġ{ ĊĠĠĠĠĠĠĠ Ġcar Details VM . observe Offer State (). observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCar Details ViewModel . STATE . INITIAL IZED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcar Ġ= Ġcar Details VM . get Car Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitial Offer Ġ= Ġcar Details VM . get Initial Offer If Exist () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay Details ( car Ġ= Ġcar , Ġhas Made Offer Ġ= Ġ( initial Offer Ġ!= Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCar Details ViewModel . STATE . SENT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle . setText ( R . string . initial _ offer _ sent _ success ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Bar . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . show Sn ackBar To User ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Res Id Ġ= ĠR . string . initial _ offer _ sent _ success _ short , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ErrorMsg Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Message Ġ= ĠR . string . ok _ txt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCar Details ViewModel . STATE . ERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerr Res Ġ= Ġcar Details VM . err Msg Ġ?: ĠR . string . unknown _ err _ occ urred ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . show Sn ackBar To User ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Res Id Ġ= Ġerr Res , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ErrorMsg Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle . setText ( err Res ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Bar . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdisplay Details ( car : ĠCar Entity , Ġhas Made Offer : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Made Offer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle . setText ( R . string . you _ have _ made _ offer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// images ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcar Images Adapter . set New Images ( car . image Urls ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Indicator . isVisible Ġ= Ġcar . image Urls . size Ġ> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġthe Ġdetails Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Style Txt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . car _ body _ style _ hint ) Ġ+ Ġ"\ n " Ġ+ Ġcar . body Style . capitalize ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmake Txt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . car _ make _ hint ) Ġ+ Ġ"\ n " Ġ+ Ġcar . make . capitalize ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodel Txt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . car _ model _ hint ) Ġ+ Ġ"\ n " Ġ+ Ġcar . model . capitalize ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyear Txt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . car _ year _ hint ) Ġ+ Ġ"\ n " Ġ+ Ġcar . year . capitalize ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Txt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . car _ color _ hint ) Ġ+ Ġ"\ n " Ġ+ Ġcar . color . capitalize ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcondition Txt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . add _ car _ condition _ hint ) Ġ+ Ġ"\ n " Ġ+ Ġcar . condition . capitalize ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm ile age Txt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . car _ m ile age _ hint ) Ġ+ Ġ"\ n " Ġ+ Ġcar . m ile age . capitalize ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextra Details Txt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . add _ car _ extra _ details ) Ġ+ Ġ"\ n " Ġ+ Ġcar . extra Details . capitalize ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocale . getDefault () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreplace T ires Txt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . car _ ty res _ to _ replace _ num _ hint ) Ġ+ Ġ" Ġ" Ġ+ Ġcar . no Of T ires To Replace . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Style . text Ġ= Ġbody Style Txt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake . text Ġ= Ġmake Txt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . text Ġ= Ġmodel Txt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyear . text Ġ= Ġyear Txt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor . text Ġ= Ġcolor Txt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcondition . text Ġ= Ġcondition Txt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ile age . text Ġ= Ġm ile age Txt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextra Details . text Ġ= Ġextra Details Txt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Been In Acc ident . isChecked Ġ= Ġcar . has Been In Acc ident ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas F lood Damage . isChecked Ġ= Ġcar . has F lood Damage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Fl ame Damage . isChecked Ġ= Ġcar . has Fl ame Damage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Issues On Dashboard . isChecked Ġ= Ġcar . has Issues On Dashboard ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Broken Or Re placed Od ometer . isChecked Ġ= Ġcar . has Broken Or Re placed Od ometer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno Of T ires To Replace . text Ġ= Ġreplace T ires Txt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Custom izations . isChecked Ġ= Ġcar . has Custom izations ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġthe Ġvisibility Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġno Of T ires To Replace . isVisible Ġ= Ġ( car . no Of T ires To Replace Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Been In Acc ident . isVisible Ġ= Ġcar . has Been In Acc ident ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas F lood Damage . isVisible Ġ= Ġcar . has F lood Damage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Fl ame Damage . isVisible Ġ= Ġcar . has Fl ame Damage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Issues On Dashboard . isVisible Ġ= Ġcar . has Issues On Dashboard ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Broken Or Re placed Od ometer . isVisible Ġ= Ġcar . has Broken Or Re placed Od ometer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Custom izations . isVisible Ġ= Ġcar . has Custom izations ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloading Bar . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġvar Ġmake Initial Offer Dialog : ĠMake Initial Offer ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġfun Ġmake Initial Offer () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( make Initial Offer Dialog Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( make Initial Offer Dialog ?. isVisible Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Initial Offer Dialog ?. dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Initial Offer Dialog Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmake Initial Offer Dialog Ġ= ĠMake Initial Offer ( this , Ġcar Details VM . get Initial Offer If Exist () Ġ?: Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġmake Initial Offer Dialog ?. show ( parent FragmentManager , Ġ" com . dev _ vl ad . car _ v . make _ offer _ dialog ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Send Offer Clicked ( initial Offer Price : ĠString ?, Ġmessage : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( car Details VM . is Sending Offer ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( initial Offer Price Ġ== Ġnull Ġ|| Ġinitial Offer Price . toInt () Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . initial _ offer _ zero _ err , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle . setText ( R . string . sending _ initial _ offer _ txt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloading Bar . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġinitial Msg Ġ= Ġif Ġ( message . isNull Or Blank ()) ĠgetString ( R . string . default _ initial _ offer _ msg ) ĊĠĠĠĠĠĠĠ Ġelse Ġmessage ĊĠĠĠĠĠĠĠ Ġcar Details VM . save Offer ( initial Offer Price . toInt (), Ġinitial Msg ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/ **************** **** ĠMENU Ġ********* *******/ ĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . de aler _ car _ details _ menu , Ġmenu ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ msg _ seller Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Initial Offer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġitem . on Nav Destination Selected ( find Nav Controller ()) Ġ|| Ġsuper . on Options ItemSelected ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( make Initial Offer Dialog Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( make Initial Offer Dialog ?. isVisible Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Initial Offer Dialog ?. dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Initial Offer Dialog Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }