package Ġstarter Ċ Ċ import Ġscre eps . api .* Ċ Ċ object ĠCon struction Utils Ġ{ ĊĊĠĠĠ Ġval Ġcontainer List Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠ Ġfun Ġconstruct Road Ar round Container ( room : ĠRoom ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġconstruct Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( room . is My Room () Ġ== Ġtrue Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom . can Construct Site ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġroom . find ( FIND _ STRUCTURE S ). filter Ġ{ Ġit . structure Type Ġ== ĠSTR UCT URE _ CONTAINER Ġ}. forEach Ġ{ Ġcontainer _ start Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! container List . contains ( container _ start . id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer List . add ( container _ start . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom . find ( FIND _ STRUCTURE S ). filter Ġ{ Ġit . structure Type Ġ== ĠSTR UCT URE _ CONTAINER Ġ}. forEach Ġ{ Ġcontainer _ finish Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! container List . contains ( container _ finish . id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġroom . find Path ( container _ start . pos , Ġcontainer _ finish . pos ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . forEach Ġ{ Ġstep Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Case Road ( room , Ġstep . x , Ġstep . y )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom . create Construction Site ( Room Position ( step . x , Ġstep . y , Ġroom . name ), ĠSTR UCT URE _ RO AD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstruct Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġconstruct ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconstruct Road Ar round Struct ( room : ĠRoom ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( room . is My Room () Ġ== Ġtrue Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom . can Construct Site ()) Ġ{ ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġroom . find ( FIND _ STRUCTURE S ). filter Ġ{ Ġit . structure Type Ġ!= ĠSTR UCT URE _ WALL Ġ&& Ġit . structure Type Ġ!= ĠSTR UCT URE _ RO AD Ġ}. forEach Ġ{ Ġstructure Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtx Ġ= Ġstructure . pos . x Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tx Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtx Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( tx Ġ<= Ġstructure . pos . x Ġ+ Ġ 1 Ġ&& Ġtx Ġ< Ġ 5 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġty Ġ= Ġstructure . pos . y Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ty Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( ty Ġ<= Ġstructure . pos . y Ġ+ Ġ 1 Ġ&& Ġty Ġ< Ġ 5 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Case Road ( room , Ġtx , Ġty )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom . create Construction Site ( Room Position ( tx , Ġty , Ġroom . name ), ĠSTR UCT URE _ RO AD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtx ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconstruct Extension ( room : ĠRoom ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( room . is My Room () Ġ== Ġtrue Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom . get Room Extension (). size Ġ< Ġextension Controller Structure [ room . controller ?. level ] Ġ?: Ġ 0 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom . can Construct Site ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsite Pos Ġ= Ġfind Construction Place ( room , Ġroom . get Spawn ()?. pos ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( site Pos Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom . create Construction Site ( site Pos , ĠSTR UCT URE _ EXTENSION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconstruct Source Container ( room : ĠRoom ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( room . is My Room () Ġ== Ġtrue Ġ&& Ġroom . can Construct Site ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . log (" Can Ġconstruct ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroom . find ( FIND _ SOURCES ). forEach Ġ{ Ġsource Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhas Container Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom . find ( FIND _ STRUCTURE S ). filter Ġ{ Ġit . structure Type Ġ== ĠSTR UCT URE _ CONTAINER Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . log (" find Ġstruct Ġto Ġconstruct ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( room . memory . getContainer Target ( it . id ) Ġ== Ġsource . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Container Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Container ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . log (" no Ġcontainer Ġbuild Ġit ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsite Pos Ġ= Ġfind Construction Place ( room , Ġsource . pos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( site Pos Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom . create Construction Site ( site Pos , ĠSTR UCT URE _ CONTAINER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflags Ġ= Ġroom . create Flag ( site Pos ) Ġas ? ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( flags Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGame . flags [ flags ]?. memory ?. container Priority Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGame . flags [ flags ]?. memory ?. container Target Ġ= Ġsource . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconstruct Spawn Container ( room : ĠRoom ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( room . is My Room () Ġ== Ġtrue Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom . can Construct Site ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . log (" Can Ġconstruct ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhas Container Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġroom . find ( FIND _ STRUCTURE S ). filter Ġ{ Ġit . structure Type Ġ== ĠSTR UCT URE _ CONTAINER Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . log (" find Ġstruct Ġto Ġconstruct ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( room . memory . getContainer Target ( it . id ) Ġ== Ġroom . get Spawn ()?. id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Container Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! has Container ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsite Pos Ġ= Ġfind Construction Place ( room , Ġroom . get Spawn ()?. pos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( site Pos Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom . create Construction Site ( site Pos , ĠSTR UCT URE _ CONTAINER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflags Ġ= Ġroom . create Flag ( site Pos ) Ġas ? ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( flags Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGame . flags [ flags ]?. memory ?. container Priority Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGame . flags [ flags ]?. memory ?. container Target Ġ= Ġroom . get Spawn ()?. id Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconstruct Tower ( room : ĠRoom ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( room . is My Room () Ġ== Ġtrue Ġ&& Ġroom . can Construct Site ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . log (" Can Ġconstruct ĠT ower ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsite Pos Ġ= Ġfind Construction Place ( room , Ġroom . get Spawn ()?. pos Ġ?: Ġreturn Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( room . create Construction Site ( site Pos Ġ?: Ġreturn Ġfalse , ĠSTR UCT URE _ TO WER ) Ġ== ĠOK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Construction Place ( room : ĠRoom , Ġpos : ĠRoom Position ?): ĠRoom Position ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( pos Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġx : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġy : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġ 5 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġpos . x Ġ- Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( x Ġ<= Ġpos . x Ġ+ Ġi Ġ&& Ġx Ġ< Ġ 5 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġpos . y Ġ- Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( y Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( y Ġ<= Ġpos . y Ġ+ Ġi Ġ&& Ġy Ġ< Ġ 5 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( can Spawn Struct At ( room , Ġx , Ġy )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRoom Position ( x , Ġy , Ġroom . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcan Spawn Struct At ( room : ĠRoom , Ġx : ĠInt , Ġy : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtx Ġ= Ġx Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( tx Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtx Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( tx Ġ<= Ġx Ġ+ Ġ 1 Ġ&& Ġtx Ġ< Ġ 5 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġty Ġ= Ġy Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ty Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( ty Ġ<= Ġy Ġ+ Ġ 1 Ġ&& Ġty Ġ< Ġ 5 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! isEmpty Case ( room , Ġtx , Ġty )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtx ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠisEmpty Case ( room : ĠRoom , Ġx : ĠInt , Ġy : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġroom . look At ( x , Ġy ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . terrain Ġ== ĠT ERR AIN _ WALL Ġ|| Ġit . construction Site Ġ!= Ġnull Ġ|| Ġ( it . structure Ġ!= Ġnull Ġ&& Ġit . structure ?. structure Type Ġ!= ĠSTR UCT URE _ RO AD )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠisEmpty Case Road ( room : ĠRoom , Ġx : ĠInt , Ġy : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġroom . look At ( x , Ġy ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . terrain Ġ== ĠT ERR AIN _ WALL Ġ|| Ġit . construction Site Ġ!= Ġnull Ġ|| Ġit . structure Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġextension Controller Structure Ġ= Ġmap Of ( 0 Ġto Ġ 0 , Ġ 1 Ġto Ġ 0 , Ġ 2 Ġto Ġ 5 , Ġ 3 Ġto Ġ 1 0 , Ġ 4 Ġto Ġ 2 0 , Ġ 5 Ġto Ġ 3 0 , Ġ 6 Ġto Ġ 4 0 , Ġ 7 Ġto Ġ 5 0 , Ġ 8 Ġto Ġ 6 0 ) Ċ }