From ea4947a95f2478fd2d72c0af43829ebb6c4328a3 Mon Sep 17 00:00:00 2001 From: Adam Boot Date: Mon, 20 Mar 2006 03:06:07 +0000 Subject: [PATCH] New game plugin: bubbles, initial commit git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9126 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/SOURCES | 6 +- apps/plugins/bitmaps/mono/SOURCES | 12 + .../bitmaps/mono/bubbles_bubble.160x128x1.bmp | Bin 0 -> 110 bytes .../bitmaps/mono/bubbles_bubble.220x176x1.bmp | Bin 0 -> 126 bytes .../bitmaps/mono/bubbles_bubble.320x240x1.bmp | Bin 0 -> 150 bytes apps/plugins/bitmaps/native/SOURCES | 53 +- .../native/bubbles_emblem.160x128x16.bmp | Bin 0 -> 1590 bytes .../native/bubbles_emblem.160x128x2.bmp | Bin 0 -> 1590 bytes .../native/bubbles_emblem.220x176x16.bmp | Bin 0 -> 3510 bytes .../native/bubbles_emblem.320x240x16.bmp | Bin 0 -> 6198 bytes .../native/bubbles_left.160x128x16.bmp | Bin 0 -> 12854 bytes .../native/bubbles_left.176x132x16.bmp | Bin 0 -> 15894 bytes .../native/bubbles_left.220x176x16.bmp | Bin 0 -> 24694 bytes .../native/bubbles_left.240x320x16.bmp | Bin 0 -> 53814 bytes .../native/bubbles_left.320x240x16.bmp | Bin 0 -> 51894 bytes .../native/bubbles_right.160x128x16.bmp | Bin 0 -> 12342 bytes .../native/bubbles_right.176x132x16.bmp | Bin 0 -> 16422 bytes .../native/bubbles_right.220x176x16.bmp | Bin 0 -> 25398 bytes .../native/bubbles_right.240x320x16.bmp | Bin 0 -> 55094 bytes .../native/bubbles_right.320x240x16.bmp | Bin 0 -> 52854 bytes apps/plugins/bubbles.c | 2537 +++++++++++++++++ 21 files changed, 2592 insertions(+), 16 deletions(-) create mode 100755 apps/plugins/bitmaps/mono/bubbles_bubble.160x128x1.bmp create mode 100755 apps/plugins/bitmaps/mono/bubbles_bubble.220x176x1.bmp create mode 100755 apps/plugins/bitmaps/mono/bubbles_bubble.320x240x1.bmp create mode 100755 apps/plugins/bitmaps/native/bubbles_emblem.160x128x16.bmp create mode 100755 apps/plugins/bitmaps/native/bubbles_emblem.160x128x2.bmp create mode 100755 apps/plugins/bitmaps/native/bubbles_emblem.220x176x16.bmp create mode 100755 apps/plugins/bitmaps/native/bubbles_emblem.320x240x16.bmp create mode 100755 apps/plugins/bitmaps/native/bubbles_left.160x128x16.bmp create mode 100755 apps/plugins/bitmaps/native/bubbles_left.176x132x16.bmp create mode 100755 apps/plugins/bitmaps/native/bubbles_left.220x176x16.bmp create mode 100755 apps/plugins/bitmaps/native/bubbles_left.240x320x16.bmp create mode 100755 apps/plugins/bitmaps/native/bubbles_left.320x240x16.bmp create mode 100755 apps/plugins/bitmaps/native/bubbles_right.160x128x16.bmp create mode 100755 apps/plugins/bitmaps/native/bubbles_right.176x132x16.bmp create mode 100755 apps/plugins/bitmaps/native/bubbles_right.220x176x16.bmp create mode 100755 apps/plugins/bitmaps/native/bubbles_right.240x320x16.bmp create mode 100755 apps/plugins/bitmaps/native/bubbles_right.320x240x16.bmp create mode 100755 apps/plugins/bubbles.c diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES index b01641aa17..d851d6a78a 100644 --- a/apps/plugins/SOURCES +++ b/apps/plugins/SOURCES @@ -30,9 +30,10 @@ mandelbrot.c plasma.c #endif -jewels.c bounce.c - +#if (LCD_WIDTH >= 160) && (LCD_HEIGHT >= 128) +bubbles.c +#endif #if (LCD_WIDTH != 138) && (LCD_WIDTH != 128) /* These need adjusting for the Mini's and iRiver if'p screen */ brickmania.c @@ -41,6 +42,7 @@ calculator.c chip8.c demystify.c flipit.c +jewels.c minesweeper.c oscilloscope.c pong.c diff --git a/apps/plugins/bitmaps/mono/SOURCES b/apps/plugins/bitmaps/mono/SOURCES index 0ee98f9c0f..34f0f4254b 100644 --- a/apps/plugins/bitmaps/mono/SOURCES +++ b/apps/plugins/bitmaps/mono/SOURCES @@ -1,5 +1,17 @@ #ifdef HAVE_LCD_BITMAP +/* Bubbles */ +#if (LCD_WIDTH == 160) && (LCD_HEIGHT == 128) +bubbles_bubble.160x128x1.bmp +#elif (LCD_WIDTH == 176) && (LCD_HEIGHT == 132) +bubbles_bubble.160x128x1.bmp +#elif ((LCD_WIDTH == 220) && (LCD_HEIGHT == 176)) || \ + ((LCD_WIDTH == 240) && (LCD_HEIGHT == 320)) +bubbles_bubble.220x176x1.bmp +#elif (LCD_WIDTH == 320) && (LCD_HEIGHT == 240) +bubbles_bubble.320x240x1.bmp +#endif + /* BrickMania */ #if (LCD_WIDTH == 112) && (LCD_HEIGHT == 64) diff --git a/apps/plugins/bitmaps/mono/bubbles_bubble.160x128x1.bmp b/apps/plugins/bitmaps/mono/bubbles_bubble.160x128x1.bmp new file mode 100755 index 0000000000000000000000000000000000000000..8a3a5142479ec23d3e903ffb8a1a83b773a0fb89 GIT binary patch literal 110 zcmZ?r&0~N7J0PV2#5_>U$iN7eFaVR7#Q*>Q89sbqU^ov{u>S%C*FRujK*lg}kQ$I$ E000>lApigX literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/mono/bubbles_bubble.220x176x1.bmp b/apps/plugins/bitmaps/mono/bubbles_bubble.220x176x1.bmp new file mode 100755 index 0000000000000000000000000000000000000000..da84ba796c9e9904d4261d270990e3986af11176 GIT binary patch literal 126 zcmZ?rtz&=yJ0PV2!~#&v$iN7eZ~&8-#Q*>Q8Ggt!Fg$= 240) && (LCD_HEIGHT >= 240) & (LCD_DEPTH >= 16) +chessbox_pieces.240x240x16.bmp +#elif (LCD_WIDTH >= 176) && (LCD_HEIGHT >= 176) & (LCD_DEPTH >= 16) +chessbox_pieces.176x176x16.bmp +#elif (LCD_WIDTH >= 128) && (LCD_HEIGHT >= 128) & (LCD_DEPTH > 1) +chessbox_pieces.128x128x2.bmp +#elif (LCD_WIDTH >= 128) && (LCD_HEIGHT >= 128) +chessbox_pieces.128x128x1.bmp +#elif (LCD_WIDTH >= 64) && (LCD_HEIGHT >= 64) +chessbox_pieces.64x64x1.bmp +#endif + +/* Jewels */ #if (LCD_WIDTH == 112) && (LCD_HEIGHT == 64) jewels.112x64x1.bmp #elif (LCD_WIDTH == 128) && (LCD_HEIGHT == 64) @@ -21,19 +59,6 @@ jewels.220x176x16.bmp jewels.320x240x16.bmp #endif -/* ChessBox */ -#if (LCD_WIDTH >= 240) && (LCD_HEIGHT >= 240) & (LCD_DEPTH >= 16) -chessbox_pieces.240x240x16.bmp -#elif (LCD_WIDTH >= 176) && (LCD_HEIGHT >= 176) & (LCD_DEPTH >= 16) -chessbox_pieces.176x176x16.bmp -#elif (LCD_WIDTH >= 128) && (LCD_HEIGHT >= 128) & (LCD_DEPTH > 1) -chessbox_pieces.128x128x2.bmp -#elif (LCD_WIDTH >= 128) && (LCD_HEIGHT >= 128) -chessbox_pieces.128x128x1.bmp -#elif (LCD_WIDTH >= 64) && (LCD_HEIGHT >= 64) -chessbox_pieces.64x64x1.bmp -#endif - /* Solitaire */ #ifdef HAVE_LCD_COLOR solitaire_cardback.220x176x16.bmp diff --git a/apps/plugins/bitmaps/native/bubbles_emblem.160x128x16.bmp b/apps/plugins/bitmaps/native/bubbles_emblem.160x128x16.bmp new file mode 100755 index 0000000000000000000000000000000000000000..cda6ef4f74218a70fce12c00a9c0a1012685cc92 GIT binary patch literal 1590 zcmXYxc~DbF9LMcH9qY6+c3N#`yhd;sL2VU^SJfiORS96YlMn(SB!Q3+xe)~9aKLZ{ z!h0bE0>*N*azlY2M7+QTIg3CWfAr|U$;dR zXh7;5+lpbbZ)U7g1fOhJ8}6Jn8`dU+Dt;y-X@2nC=5M8AAPV-*wz3$$a;DGSVJeochzvm<^HuS| zzk9kCnjNpVxzw8!J;%;iOo&j#&=q9Ah7b~);2}$jo(}Mmhmqs~p3_k@B!*e*j}B4H zZUcY$)Yi2NU6!V8iIH=0RJa|2{c*7?%i5RXb#s#rlOttbPSqlqXYhnzq8o)q$)r;t zAN%+{2zUn!S75VRsTBj+&$|<^BkVQBVB6R z{@$oj@yi<(WkeY`yavlV$YngI%(lba!5{0F!`^>N`&UI9RZ>P;eS{oh27>CHV-C){ zNapeH7F_z2q~Ru-Fb+-GnN{m``W@NE8`Dbh$ubpVv@$5C9fA_Eky_QZ`q|RUW5TL$ zSWWiDop8~vKNN!|Wd)`20&`e4;d>D9PClOu34&Y1+5Kaj?zf#abp}{kdZIvR|6v0q z-()H@JsVoVB+~h`&OeWPY;gYY+i45wn%}G%GqcH7ZryKx=~@2tK+UUDucZ`39lxLn zMAY~hwNLX45~uj4^b>Vz#a6cNHnnOqwT_)phc$G~kbW3-;gfy!T z=L&!fE;d1_)wizgeBCzqMM-XGTDLa#6WgdiEX!T*QUrAZ$`IwOo?R z{WHF)EXx3kU4;U9lJaPY)Ue8ZSQkX( zqHJ2f!}XspP%hXPE137@T+`?L;^tjhOF=0ObaE(qac5Si z*CIPIk5^{ST}EsrBZWt9hoPW2%&Jz^xB2Y$i{sZTza`f?hP8cpcXEu$;d?XU)Q<66O-%XU2f~XkdJ$(5m z$@#M~Cr2clG0O;1l@zyz2197qTB8#^*DfpKV-{JNis%UBE~9~f&nJ^)KAzKY(I0T$ z^57sj)*E5a>cW|^?rz%%qStD-My%Ve^Ni3x>5QBz)?o0B6H3ftP+q*Cd^!h&2b2WfRx z6)Q7SB9V-ZjSUYEkB^U!jEn&OM|CxmNZi=i02dHgxxT)>va%BJClCZAVr`0cokJTnKs)71dE>_$dtU1#^iW{!UI<5|JKG4sFcKH~7Om z)6*8t*dQ!1%+-~UaQ`8b5!IN-A)v9R&tA4h`C#d>j?TVr-sG6%44NP9(nYJUzC3u+ z_#BaO&zC^Av-5Ot#Qf^$iAH0uTiw28>uho1#?M#nEzGU0tz6M}uox72Xn0Jk(~HHu zM#g8)oVn!egbVQvY=>bdN4J?71qTwCU$HeYwY+iF4nTt^1pB(UdwcpjqrBYgTtu+p Gp7{^g1)915 literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/bubbles_emblem.160x128x2.bmp b/apps/plugins/bitmaps/native/bubbles_emblem.160x128x2.bmp new file mode 100755 index 0000000000000000000000000000000000000000..ea803f6da70cd5ce3c74bd666a17357187676ee7 GIT binary patch literal 1590 zcmc(dO$x$L420`OJc38?1YL`J@7RT_UQ&mS3`1UCT6l<|FC<_7M)2{R&(mfz{0;Ad zcgH(TS9sXB&V>HGXT7$T`&zH|I4^srYw2YINNA6KGI$WV-cDLnqkDtW3{fyPOEkfoGsTmi59cqr)*JK;Z>(n=}- literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/bubbles_emblem.220x176x16.bmp b/apps/plugins/bitmaps/native/bubbles_emblem.220x176x16.bmp new file mode 100755 index 0000000000000000000000000000000000000000..92cb7d1be1410245262d6be46db9da056be748cf GIT binary patch literal 3510 zcmZ9OcT|&E8pdb;T4#4>*PU_3)m4wOA{sq(sQ2+4RKS2B0XW9RK|LMnno9QP{z{9R*B*kTTMBMO9WT5i8P}Jv{muYN9 z)81Rq_R;9t76Ar?4``b5T8Fyw)#gXOrgvN!mi>a+*tVyj0Go@~9e>&uvA-eO37{oA+L9q?2nM z{Zd^E<$nnoIEMYz{E8y5OqujR6{T#S8+!xn9;tU(Sp!@_{5o2hQoA>aaEJ4fLKPVR`u!VQ#u0ErCZS@iU10 z0FQiUdr}B=^z_kc{Zmg6eslMV#U=S75Q~UeN>Ak7&KF(uDtENSWRmz0V@`ngsEhe{ z=y`5lwh#;{!hfEC=G9lr;J$ZVtpdBAir+9d#Ga)BaF$&+O3%6-qQ@OPWPBr`}E1D0tj1*8x;o)O0gU{Z9#T_rWu)^VUH0&-}D@*d3&Z= z=+rNX8d}L1myyP#m=S3_M;gcZ0YbiH8#m?N!}uz{`^bHv*PFHc>D8-KE97xWZ_ZO!J?#)M5*^_NuksYY@5 z(0D4dI3^j)-Br)>ZS^bQmqxk0@sKxoy0!h#oz_FQ#$YcByi@nG4g3OF9ky(RBT_sU zO%YlBHZ3;}l2Y^|-_U+rUjQZ}QE)vsgb6IcHX3IZasy4=Q`om-sHKHMp$6P6^{;t= zd)Ax$yf3f*;ZSSqKESMJmSTYy>VSNdgs)r;J!sMlJ0=h?)mh$z;0`{(;K2zy8Q} zn2}ROYO+uTuz-bKEK8_zs%)~xCLk9T$A^}!hWT2fQtN3sk*`AYlo0L)d_j3zqIN51 zxJ95IEw8`Ea3K#G`j zx{Z@-Ol{M!Y`t@B3p=`au4ni_&TVr-Ig8n0QkJ(hf(2Wl$&?Aoy$NmW+!90p(IG={!M*1wy#Fjw;G8c;R!TF0)J+NYmLwkV zQAI93NjAhu51aZ!ZqJWi5_mVR7Syd=t&(NsiKA|cW9wF~MBaDvh_xya&HdHDFO^2o zBX9P9_Z{T%*AA^;r;oys6z{#&(MO{JERBYpTp4+*=qj2dMzd{<3;ymAZ@_B!?dSn& znJA>akG>Pa)H}}37iE!?v>RgI3()z{)L4SW6kmi^2f{l@gqG+C1{&2*tKDZwyGU`ugmY0dq+P~RwPEAg|RHu~9HLZOl~ zBB{7HWMR^N=Jb@e8;^h&=3mS6yO4}PG$xa_*VlJ%8{6CJ+1X(am(t@$dkl0IV`Dg! z%S9M8u){@Pk43B9-47Lt)yI$e&gnOwI^J~h_#h(mI`sUWUtm83SPdR08yj8kdGRqV z^`)Ehm7|AA#zt@Gzw>K%KSaU|4Zk}xATidr$+?9+uPf@T&`FwmP(~6l}aX)J)qOOE6Vm1f-hWXZEbz`?j4)W z{_x?$;^Lw}AOILBbybx>EuTcJslMOU)z$K;yng+9ZfA3uUvOeXW?%a?R z?gpA*{6Gi5#aF1nuk!M8Foj(&G#aH+`RdiH;^N}w=4PM|rdgbJ31rW~+`PB97cf9d zB9XMUwUw5Zf)V!h_1(zL+4l=#ZVoaG0)YgAk#}@-P^r|!n3#UX@6NBL#tbCV%h547 zD2R}l7#$XtM>t`Fdz7jMMc1`!KNlh8+Wa5&z%p)V#w4mB*DWy$jdv7l2dT2!MMOELU;@bgm$rYH8d~-_vb(V>5GGZJLKdYf+dkdLSlV9L#!>`A@HPhBM);g)Jt7Go#9qi@;)77@LvT%=$OSQH3bh31)s%j{&tnYg9s;#XP zg(M#S=EOJOoG>wUa&&-(hGLX}3!(4Czx$}8#v r10(Gq=MNq{Y_4a;q}A^)9{^_{QP$_I&U|NLXkcP}4w8k&@B8&1%KI7X literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/bubbles_emblem.320x240x16.bmp b/apps/plugins/bitmaps/native/bubbles_emblem.320x240x16.bmp new file mode 100755 index 0000000000000000000000000000000000000000..f32aff410b874cb5d02ab503fdf8292c36a53011 GIT binary patch literal 6198 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 literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/bubbles_left.176x132x16.bmp b/apps/plugins/bitmaps/native/bubbles_left.176x132x16.bmp new file mode 100755 index 0000000000000000000000000000000000000000..dbad0543a3405884bd9d5347beff290931885755 GIT binary patch literal 15894 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 Be60Wg literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/bubbles_left.220x176x16.bmp b/apps/plugins/bitmaps/native/bubbles_left.220x176x16.bmp new file mode 100755 index 0000000000000000000000000000000000000000..cbe38ca53cb08d01730816a43ba82bd9a5e70a1d GIT binary patch literal 24694 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 I=;4R|A3Ist;Q#;t literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/bubbles_left.320x240x16.bmp b/apps/plugins/bitmaps/native/bubbles_left.320x240x16.bmp new file mode 100755 index 0000000000000000000000000000000000000000..194bea0ff04ab1aced8fdf793da0590eaa4c258c GIT binary patch literal 51894 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 literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/bubbles_right.220x176x16.bmp b/apps/plugins/bitmaps/native/bubbles_right.220x176x16.bmp new file mode 100755 index 0000000000000000000000000000000000000000..c0d8bef8ab0a551dc4f2719955b8bd32324bf877 GIT binary patch literal 25398 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 MeNF#VJQRQbe?X4g$p8QV literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/bubbles_right.240x320x16.bmp b/apps/plugins/bitmaps/native/bubbles_right.240x320x16.bmp new file mode 100755 index 0000000000000000000000000000000000000000..7f08389cc0c4c85ad6c28e1f0d7ae576e5d9fe03 GIT binary patch literal 55094 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 qAGDRH?Y3qnPy5~nip!TZpjS+#niCQz!NJ#e z;OiH9TS2dRNP-3idCRmElT(F$)LWps35czC!_D8gX5a7QVD;6r13Gq_R) z)16N9WiVt6hL5fX18)Yyjlq!6=~4zmN@qwI+JS_`km70J7lBCdcmWE@hQb*T1PKDg z+gKCK&4{L^cr!DknK|6t7-43FIB5tsG(s2|p^Z)wjm+srwhSW(5HMgGL4e>5t>DK^ z(Zc*Qa0Y z`)sGtmcy1G8{2Sh@&pIU*=e1Qm%KghEF#-;v9-#3GFB%?#}I?sRqE@9q0` zdg|Nd#qV!kpX(p+leiu~a?IGoDl{y1STlY8?2Vc6r7_LKEuC z&CIao%#dbcpnI^lP1D^vq;BYKukNTVX)IEdr6*;E1xC6FJn2NH1H{4b_{pz!?f-ns z_FaG2ap>O;80i_A|H>TxD;Vk5B*t%@c^|q+KIOZ9DiQ(NBIJL}qByxi@5JP>|f*kCVWkQnVrv|^baM4ve1 zY-$#+cSEhd(%LpxTRl-%zSz@#eROQJsX0I_I(}gPsUwB~9)SbxqnGBdE}dOmm|B<} zpPiqWUznVm8()|jT$t3HnHU%w>>AQ^YBcJB?)vW5vbJi4DmOVdJ|Z!|)1S}ep`a*} zlO~6DAKdr*Jx2d_$nIAr_+P_Vzb6PkVoE+@OFrhgelC)17klgwd2Sa1@!2Wy-7O8+ zA%;*Z?A`^zJ#`mfjEL=BLp&Lh&LfnXyeH>6T8}oq%b!LO6G}^$;h6rI1$#I za^e7C-+r;FZ7$ViMDJ!-*JwdueQb1JLDqz-{6a_P&GGRWwK^pvC$~Bd7oUBvj7|q2~bqcNpeRj-)T)^gVdSUJ89LT`Rj8jBPafX9TA$ z6#iDe*LI2jZcjgbU!Q$`zK48#_qdC<@o2m0q*FvbMifMk_Ctq=twpX-u>|cQCCEIf zG6729U_{dYin47_zzIk#+W8Dax~w-`QPC71Un29Vi;ru|&KRsLUFhn(dv<1JcsMg5 z!N%HpkN#d7h1TBE{_yVOXJ3DJefb(dT0FaWapB^HnZ^0>xhc)r;l9!CuI{GVmdXNE zMnXnNKq${e=xBpD@s;7>U+q1nXJGjs7PxIlr&BBe+{26J=f?>O5{3r}!h`scp~9#z zet0k^$crQs!lf?eT&MkH#uhB=cND=#Lf_rKVTS_(_InF<2ynY`Bnzr1GboG`9ZU@L zM0rRs?oxt>2*rgPk-qqp_J=P5cN*846Xpqm+fMEe_1a2Giz6e`TwRNULTl0z+lsO@ zRTWD;y${cwyMO+CZE-OcjoPzs9~^YWo3_KFj^{;W2%SD+b7W zr-*m0Y4`L(q+FS^Qy|+pGtjFfDx@|cp}(kjuCeL5M)P=X?$xbZFYn*KJU^e8m4&po zJD{(RK%$C@3NKx{a^w2_sj0c9=H`OJyo}WJ#PGxr&k!b=dE&&0uRj0s*p6c?2tUd> zCEYbQ%dJo@%~!bPX1ir2OOu0zQ63CmFOp|4Gblxzp6^kf<5rd>&R6gh=`LCEth6|4 zVmu=uhMyASnHK66DZ+C|`i`W3N4kH=^V{jk+r=Xv#PdrQ*`)NA~SKe$;@+4> z)Cr;t9V8d$mwPKKyp&~Lsv@7tT<;>eM>b#!6od*$Vh)1iL-x#Y&!`BmD+{g%g!$s) zY;Hj^Gdr4?6po1w$3=!yW5WfBfo@?^x~r2Bjra#F>$gsB+dTL?*o=cXwj+~_cRFc8 z|7fe{Z$HZaaR121M=yVT=-M{J zg3GF7>MO(RN_?tIJZg(2)p^3QbZ$-@Jvj^&?rr7gX&2~6iwu^=db9mVhGgU)keolU z+`beE^;uYb#IYTgTeqV>*%7)$zxl&`vwzrs>7zrJzA|1mLSC_FJFhupGIOq@;T9j-HT#&XA7Is19{vPgmNYI(1N;KG>xg?8@y^ z=crpVTANavThd#b(>t3})J<{CwGj=fkS3L1Q>9l!u~d~OEXd+yC6LoY;IZDeL9UkG z?r?t@J;cMw+sT}X`-7wNA1H46JjM?4u|HdV_$S2HeQ~=^4u52@{NbUC+fH6MY`r59UUZ}s-x9~*nHu<-TOt6$%`{qV-+d)F?UTbOOA zRz(W?| z&W;q$3>Tao&Yv1B7#}Si8C8xBRE_kOjt&%#^%o5G=J$8V`x;Z#4ThI9vKT_zQ;SPTU`OP13+YC~V z+D+`Ryt>Wu`hMsoWBekFb&)K(uNQv-&?tN*=^JQgMnw#%vG!N(I?k+6M z3=XP_i<6_mBZGVc{QdZBF7o(klRtfA@*f|V{rRKazyHmD=;?j*>pvn6VHNDE(U@~* zQ&%QZ=0;P`oKc*gExa&WvOHI|JX^Ukt6Z9`oI9&LJ5@hBUN<*ZGc&H79;p}~EFIP4 z4|mH4JJS1Gk~$=-~y&ICDWxBmR!rPmOKycaY#Kgp;d(zp%}?dcjbzSfQYYG@ z`|AAKN(D6;^!#XCl0P)u-Q1UFB&8qbI-3b3I4K{_p&!Q5x1cP4Z@&w$S)@@|(_-(t zUSZ#br@t&zzHI9JsZ;Y(FIp-Hq~Lup)+uGKTu_$; zhlY-h3|~CIGC4BY)YM#4QJbEe<;>Pj`y|-;u=awhn*-UPCNu(fEKV#SoF`x zw!e2Y*g-gL8SCUS7$1K-zxa7o^GnU}i z?e_ZTQ{$u6l>x4N910N-6f!Y(=JD+(_paYNKY#B0nT3HaO=_~jmlG*x6wL>&JkQ_w zLACK?{l?4YjkoHJRrT7cdi{0R>dT(hHv{W$2j9LLef@mm&3BV;K>y9~%O^uWJ|6l0 z{?Ipf`=8wDd~~(_>x<3zE>vDWS9EDQ@4`UJna=Q`2JiM_UPUTR5spoe*@X&Ed5{fQ zcq6Klm6H&|6FG31J7|u7f}8Keoig?(bDA?0*IV1a8y@><>B6h)*IwSf{aTL#b0pi_ z2w>K+6l@-wS|xUA4wB85=HBjU8B>)st=JdO7j_jqGn8mH+Un>Gf*c>PFYb#^7IMWNmGH{ngmUi?Ov=6B|H& zm{|R8{MECeSI_!hKJ5DLmipPP&S$sk9$l%tw@`d*EOogr@=S|gZ-uB%PA`l^CHXr< zNX=z*0~g!@D)|JJhv7)DJkEY9Z3_mYPda75v&YI~GnRS=p08YZasU3>lPBxXpKs{7 zu~=kVTeQ(J4>T-^fy-l(%K1EXRK#>y-cWf?vcHUsBJ#Q7%8JS}V`t9{o#|>)_qO-e zRn!N#24YTOkb4l~lcI1~SR6K1PM0eM)qMe@iy2oR)qMZ5Yh!Idi?^m(T^m?iAJ|wM zUSFTwcs05H)9Ct(!HpOF8$W7Rzty~W+VkVLoj-lu^6W;N{r?T4P#?>pc8)baM)<`?&?zr9*?@0|S7MEqQ* z?~uy1wZNq!iIf@Q7$Y&4(GGKPhiL>;76&U9W2D?;9O*%!%-F-}C>>(RAULI!)m(V` zXk&eK?e*)IuV1a|J<@3UO3QpD5+@9jgN6Gs2(ffrI+Ii&5jVz0XZg#B2uCOsCiC$J zA!JBB*k03;pP~?pJdQwde}vF}PxSrRC2G4kcCRq%AUDi_;cbFp+d=SH3k=)JDHs=6 z1$x60CHesy?=GB|LwYF4GdPh*Iu`;zvx*1Nxk-6%d4-ezq?-ia8Z73 zI)0(Ycc|L6E#F0%NS24dqNK)Nl>N?xBMg=;Urcg!MT@vcc^-$|A}#!b%%pT9Cj>+s z5Uv`ZdGzwt#%9yI*3mIjRh1tU$iv|XFo=MF2&Lg-8H8jmtvbRlFG$A3V{L7rE-umn zMQK-kTSaERudA08miY-m@_{hplhC%$;|IP<9oU^UxKBQGRNilz-e4b<2ltG0q=}GF z5(`2JM$0N(Yv$6ff1`T2*14v|)2wf3HrBee=v;r^{OY0V#~Ve@ma=YY z+5CoTB-S9s?r_ zkFOq^y7Baz*WbNa)w|x=IaN|n7VI6$XEIUtBztoK2I@;f0X(I*dx3{17mGDBwZLGg z3DGI#ilV512rP}epCJ59occ*r`{#=J?PWK1DevvCe`MJF*sS$|O~Yl|vN>DDkbP}+dzR4pK_SYwqwhWB)RfMI4sV_l8v(WB?C5MzAHc1T^h)6 zf|*-bnp(Q@q%naJ5?4=iJa-$_@AI&lZ8;S`Mr_481}OJV$mu z#Osb{Tx?z9(DA+A{r3x>uC{NicdWl@dcD@Nw$`}1*0}zv zdi{Cn>j&B2EXH0R37&8F?yun1rW136;86locg8UnXG^{-#odkN!L?;`4?72%2PUB6 z6R|O|=;&z2*l7Ex5KC|AX&&VSn_wem5M+AG?agf|@hLp#7%qp0!D6g!oZ(Oz5fw?r zCOVOFrMx_E4*?o!cJ!Eo6_ibOc6JgOlRQ4-Bz>AV@Kx#6J#~){b-p;!`^I``9WlB_ zm|CTtdCi)7!5jO5r}^5c^(v)ufl<`Y%&H^=#=yxOyfwww!KX&lbS3laH#KV;jT`HY z>#Ox|*BaJeE7zZwytyZTHXC)L-*>iI++FNc8HY@BH}-QrEMT1yxKg~tEKes0n`gxG zH*t@KMkEvBQweeL=-60fd>lG11{E3M5aeg#!9D7XIf&I8P!?50ghn&y{!9`BZU;9t zquV=pU{N6iL=?_3U*y~x7n->(&`-fYepYB_= z9@;=mY%tHPiO#J{m)AWnZul;*`kArh(x}~K~g}= zzZ89AUA4Z^w6R+Ec0;-Gx^&}N-rF0g&!$4Jbh}T~IJM+pioz}9MTfljMy_s1sn}WM zgkjN+&^?a1Ccwhea4{)Fz?PbVPfH~vrxIclFfp<4n0SZq2r1K?6k33TTeBk+4#N0YzbSZqGvoWk$a`bn3vK+~JYrd}X|&WpCN=Z* zp$2;LJ!uFU$%y1`ERJ>vO2x-y(Gs)hX>wY2HZeU5pPY(MN+QIi;9^n{(MhnFXjqJ1 zc|>HINaO>D3n37)sTt1Lm~CehNWrHFxv6fh`F^sFnAn-T+|Gn(R}}2%fjv9SA$wgD z4$3EYEAJj`dS=q~0y6v-duEllxE`>w7JFqa_4<1HwYM49*3vI;q+fcIvGRTL?8Dfh zt067Z!qQ%HW+Ndcj}#ce6uP@2T;&+~oZrf~882UCZ#+uPbj-NTK~EV^Dnhu26m>(Z5tsB7z4TCk1s+w0X2HtO%M zwLIA9e6Z1a?OEOV+a;41(|V_UYkTRLwW#<~LTolKBF>fTCAJhN*{0M}I+f&31+p>~ zu1F@!Q(dzYWC=lT!D6b2VMBB_ru*3X#1O(Wmorg z)&14_`>XBu*Zc3UYp#FSzkIK4_IkU7r3*~jxDhg`q}%%6XWI1sYNbXWt{v9PGJ?VsFGb+#x5x0 z6c#uY0?0yIb`C=h@UrRhY%=h`6utWz&1gkMhM!*mhr_3lISh)J$>1O{6l)tdJSNLa z(v}c)zO-l|KflP^S4bkGSUh-SfnDj$G1Zl$jd#q{j~q1L5~hCQFRuGuT8q@0Zn&oW65L@$u;Qq0M*c4`(oSR)J$gdETD1~K8ewk8GrWBS|3QNj( zMJ3LKrA~##&UyLF>>L`v%a#K}C8uj^uHJ%z)PMkgfq(>eFh081X!mw&0|RFV`)Iav zxlGm_pKzhF>Rd$y2&a4!j>PA&l8acibM`IQP228RsUJXlo?wQ5q|I%J&TaVXEHiQC zWy;yd@qJ6dRekO$m7<^o7k57*M+~Jp8zYGatq=#T@fJ8Xg)4M&X5nC1ls$opc6Nbt zc~CAN%6ElHebGLVl)z-CI5|h2!_O@c=aspYDBY^6r7D%1N-0%VyQ!+B)k<-tidUlI z6)E{8rTpR|c772`d;J6W3s;PL4~Zbg81 zS3>+1Rn2lub%wtu6AyRc@uG7plKRdGx-Vf{uQ)c}f;8TTbvz~vJ!cL5AQ^e?GkjOl zFilP@vljVU(Ok$JR}b%?=%|#$BzbI7s&7~XohP+NlTTS$?=v{Kcjq4C-NqyniU-ys zjOrIn367`4r!Z2pxbl2)Ua5P5(!03Ir?T2x+32He()KDK4L-_7Z&jn4s@7Ghk|?XB zN|kG+k_U8HSmaVz#8ec~1t@YY6l0 zOG&y~-?-e=kQ(Sm#UKREzyiwKrsv~&XUHXE7K(9`;%P|b9J1mZPC1Ln>#^|5K8P0^ zp{Pu;G(IK0O4-=kqd7BmcIo``xy6Oasgc&krUFG?NN5O!Mm9NNa`cO1kX=?H8%`oC zCSRIg=2l+irK~4XCaUtf>pEtM{*O45)ALuWJabYYeDs2&iiWV=rZcM`fLt zQt76ua#aBxR`E;AxkW{sfX^tedDfMN#!DR?%Jd8_g#xp(67ac+nVA6@1rA;b+h_q>*2&7qW`=`WqXQWWGcTGaAg6hjDO++XTRDVsNk=KC>>! zzdt$oY(c^GrpBvkbqfec1j4p0TXyfDzlXUhdb z5yA$JH$ep9Jga;PJEI#qW1H1+ot-gib!;aXcg8fRW1Bi-8av|}yW*PEppR`*hc&f@ zG&hAdHwD%;`Bc}sRaZ&Nm69SAzo>#+T*52X8>p_1b#up@HfBMgQViS&ZXE`*PA4L( zB;59hfRW6Ub7f_>J6mTOluS4J4kX;a#vUP$mnR5Qt2vn-*?bJ@0b6k z_sic{+Ca<7E55#e4*&rwz@%lSw zp@N54jbZiO30>;cu8#N)b&R?*rUM9o>_}`^C%5;fbZ9`I+|iZP-X0Hrr0$CA>H)o9 zOTAQ8;aX84uBZaBlvkwJTUr_=6`@T}aUC3eF{lufU8JLRDiK~T<+g+ePUd7^uB~0H zt0{^JN7z{%I<%iiB6DCX{+yIQLC z^|!05Z{NNJc&oa$IRKd8=*5c{0B>bwWqf?Rvs0~9R>j4~IWbsx2ZATjt4LPTlhWOn z+S!@Z)}GMW9;0rL?&wJ9RHt?IX7&yMN$=^;?Cs9%?MdtIjBY9SF3We#tCkiwdDXW0 zb*TN@8{MnRf!^ARizB_HBs&YSBh&{5@v}7zx3f$lpb91Y`p}@W`S~}SntC$jQVQkN zaRU?b9b#<0J%Rk7ENnx^JtYlG&I;nFoy}LK9Q=QVOj_XjzcXXw9^=9=A zC^Y@Kn*N;r!CVcHVMSk8LQ|F~J%|_-Ne{_zNhueX)JZFq;<7?+kzSWd74ILwfI5ib z5Glmi&HO}|JtUP(EtX0f!vbas*HX&hQz)xPkehuyznAUgSefRR^ zOK_vtuV3%#>gwz30|Nj6fOTf5?Ka0he+Ig5n~95Tn-$vZ!=pjX~EoZCN;)jp8b(=P`Mn&G^G z(Zc@G;(@WE{)ys&@#4PmqJA*$&+Bf^Xf2DX$ns8!;si;tVh)@Oo?YtQ?&>NC4YoUZ z%JG!32aTNSD~)#-hPybYOC-YmxC=t`9Qq@27CmYKl<^s{;Ytd5OwvUdR6tf&ZkS0>(#N|sR> zslX=V;>Pmx2jucNS64QH5a91WIW-0J0PZFWJpM)^_wC!Kudi=pWaQ!D0Rs9DKl}jh z7+kQaE-(Ogd*Q-`L9V|{dBOHU7PT5jvb40|XLNT77pWx|9 z!QlYF=;$c8ArQWS{Wv)}(Wo>w8&DHuGTFeuz@|1f?-=x;flv_{8R_WgXl`z9W@ff+ z+cvN}?svcY9h1ofp9R1J{7;`got>R+X=zd9C?dlnWm1_3%Olx6r8}c%tYEM|yK^AB zuRmJ@Y;q(YxS3Xf(tc(u8rKd0VafP}a$>w%+XDrv73#*6My=j@a&yCkLM8%XZ)Sq9 zG#BF$acpXlgx?q*HeFJ(R9Bbj=ZAH0;IP@?^9FYeT&|}& zNx%l~6|_ygfy?UZ>Yz~QC!c%*Oc#&GlgVTQ1A`Af_~5{S195S2w{G16rVA_?B)aBS zo!-KO+@&5~PVSj*i9H#ugE_rjX&rqaJmzS$5i)yVC>MbBj~5SV)m1b;Rx~zVG(K7~ zI#xA)w(jgq-3;g_>LxT5n!da~y_+2!&8ewkG6`p6gR`~fp%H;(Tq289=*Fv$ia1wO z_w~R)U3@&*!2#yrkdvDWavH$9bNe>feF0pkxVX5ZyJLK6d~tE{>652`YSZ5U;p4}T z3kwUumJFb)-Me>#{fj{Dpb!y@#U>^u0)b#|ZVvpZM~@#(j!ib!HKt{y`G&|Ot|A%7 zL*bL&liATP?`uo$01E8S>eFQO^=I}BD0)Fe87mx|C>|Lv8XGOtvW=IIPS;M%HO|d7 z&Cj;ZPPa{u){hQW4(eU&>8^^6Wx!wrTRRpC>P19G;;^XDs;JiiE%vQBf_&=2B7TU#3( zuHD7?@y8#>#>N5_0Xqb7RU{IHhK7Qm0xrIK?P^bFPjzW^dP;_`%uB*?2@(YqN0#-; z`!w?Y&XmrM)nd~Bg+a=vkPwsn49 zJ-^VsFw;IW)jXv)-rJiI6-k9cozWOq64nj@vw<{Ei)YMdv3<2u*-+w-l96h6k1}^j=u*T-M8o zixbi4@YBWu93g;C2_vBsskl-JcOW@(rnKl{bIZMvkr&slJ-&RYzO0Ol#T_;aT2ic`FucCRaG@L zHTA8ofwHT&w^yZ70pNh3K#mhzL=`B4b9!^SH5na!DIEh@{e6nQ^61hS*T`6xxN@Iz zO?u~$qPtJ79w`962P|`Zyliy3dSbR=X0c`QqWa=W|H_5_3(I}Wdj1#`@yKDz9ot=C z4xvueWELr#ORMr04}gcmRh5@IJMWB+g8cgG>xU1n-%u775Fxe)KKbPE_U&fI#unh| zzKJOgio=^>5Jw<1I9ZXC^Yz280Ul_Zz6W}cGeC9*p1G+vkQD$Ih%{HOT$z}d=kLDji4r>Zl4QKUga=V8M zxFZnm;urh%^nR3+Gg=tiF5yE^s7(2NJgqQ`-Sg1E~zyAy6g&1JxM_k029(=%1dRE*86z zaTJ-rvo^hKAg^aYKB&nV9L(*TDjS-uJ3H4p-(A`r=@#vZ7AMdnl>X)FRFE6gLyBIl z-YUkYswcIvq;+n-YksMJ>9XeX4b2U`Mt4>c+T8i%9%rPDuM;hk&r^AbIs<*iQc{gVowL&9E0dZpZ!d&~@ zoO*6ay|mJ^a#3?pZ@xUgI>gfh?;s%I0-RY2F~8bV)EOe1$V^$TQQhq8yL;yB(@V=Q zpFH^CnLJJB>b(L6EPFfvv%+*{mJ6R(WsgwZU?G)rP2-6zK@t2SEImeSIZ z+}@MXJ6b$CSvNV;GIPH5{9?!A`QCGSw|e_qvNAlJnPM6vjK?l;=ht|NIzoNM6)DSg zI<~WCpRQa4{`S+i-(H@aXb28UJZ0wfg+51rFVFB8|JV`Io?RzC|McL2eIx=S(mN(f z5)F3P608X>Gy{Fd(o)(w z-Ffyx-}%dZ=Pq?Guk>D=@0p)!of@qh?XB!>lsA`!l`Gsb(nJZ-;%Gl%pwLOgKr=j; zUb#U9)zP)hvCX|{z5O6P6c2&Y{TFb3TYD`oIPJ%bXXl2TJrlTwnRqoM=61Kj!UQl8Yy)hjL}t~$4R zqJ8|*^rai~H?N<)a${oU^5Dwiz|vIL)Ii-pM?ptbN>!#`W-Ko@S`eKZkz1{(PL57S zW6)pi*tTcq0S1DXp< z{O;3_Ken;5@pJdjjmymqS448d+)%C@7)M9|)rKrc8U*%_MtelZ`^3v*BB$o+pZ5awHH!FF&@$R!TG9)>e|S31YkZ6!zUqqnD`_P ztxU{s4e%MwN;+R%b*-oO?)3DNg@vDP-1za~!z&ZxO(DTaIyUC^{q+5ZJx`oSwX?~E z+J>Aqgl+rcOAuW?{L`@$$3P985Rz0FU6dD`m+F-oCyq@JCZu?#D8dvK2^Gz`&6--x z8TFa-gNuvf7cPvQUmBi2(|cyPd91IZzbUJ}Jib^FqDb>fN%u_34$3M@EGkSdh>wbA zIkAr&HTwLMPj_wo{N#ZnCI&|hc5UCYOEO_~ouIEX^&XTuD~ET&Yl1r&m|US63%j z1FFvA&Vi}{;7EhY!G2}`KwaNJ^+12+KznIhO-@Z|Y-x@xBUKU~FO5s}PcKO*sgze{ zCFh8xK33L{?c2Wm^M`-j`PrAYM~$5zC>|V7g4kOfH#)pifA5!jjvhDyhd4^;l1On> zqIpjda1o1vsb&0uqjfX0oX@p}r&X46s^$qod>Y@bJT>rKi`gE%s?tvXI16 zmfm0LI{~%>fbC?utxcwtm9LQz_241kd0EG^I$)>cMFhjwq*-?8=Rk$q5@oq#8Z z42mkrF6nFPpXr~T>zNp?>1oQWDUT|yh%4?YYME{uKihMrud%O6q0EkwN6TU)0yhK_ zd1(Lst)G1S<)>Q?@7xJ7I!>{(b3!4R;6)}lMt~x@6P-MWEGdz}Bamngj_}hKCWgn4 z85kTna8NscYf4FRBU9*bgfr4nf`xe?AwCGZNGd+hQ`{UMJ(8DyuDbTdK>y8|nKP}e zDlebJ6PBKz@6*}jVXu=qHalyXxe?{yZpf~kHsB$it&KAd%|;_|Ru*PQ4<6pVZSSsa zhYugHFgBwRsG-5(B?ZMDbxpmE?d?^~jYZ9!%J!+Ak-4$C(SeETs_O8t2o{57XK4$l zwteyG&Mkj7*zuKxp&`=3lH%aNKq7$Bm@p(4i5Fohu6VjDjwT_}-5E|k42~Ct%|;W@ zwh+kaQ+hYm>aO&3e+H9@KsuuwrFggmZRZNL^@by27)}LVUd?f_WBGY2EiG3DH4~~D zrPL?sB*bgmA*byJ7zYk(ZPLaj6JjkhGol>Tw?DYs_UKWVg((qf%O*Gq2pBdRL$tQB z1#1a=_klIc13R`G9X)DiXUAkYdHeb##3vMF7gUug%d0BVGtzu~d`KkHsne(T?B2EW z^R0WgeRlHTPPmyN$t3p56-5vWT_(24}7C3GjTWDK4^Q|LwK zh$&RCzeL@hk?zG{P@yoil^M?F6y4sG>tN#sM}$!6$*#iUAn&I5=&|DB^DV8zr6na& zw>UE!?_GzTb{t^r|4(cOv}|xIGZNB{jsiD<B}uB6iT&hyMJc$I(ah9#wG(|?em`Av}_1F zDgsW20Uw4tqY*ARv;c$UVc;wjgak2%o1Cybdic2h9>ZO`j_=uVboY*Z+qNJ0;wwY_ zUDig2QD&#fHkLFPgpP2aIYNm*W7akl8yhOjfr$X`-rz+jiWZE(&{`wtH`%}dPXlLM zaa1wjBs=SM)m0}32H-6%9Znv%IdaHq?;fk&d+d)IknF8oDa0TbZi2gKad2pNR_27N zq9;4Mm@AGqw(Ar8$)!f0nyBi1Bd%i zDT!iXQBZKZJafFdv`>*%%;UwISiRGm*59mcGC?c>dfTsWzjL?kk)v=MolPR)47k?s z>EKDaPQXA*3r9FPBDe?y4~yWDkbEMFM?~>SC;U_#z?RIcaaC1cwxXEp8gF9bt^c0Cy<-FRyyKs;0WhFLzy<^`gJm@k%2{Y2 zC>93gj6s1h6N%Jb2KF8ypbUf^8EQ+gg;1?+>GoPS_P@%ODDwrctzayTooq}67AHi; z$3zy#C3faA3_O&{NE8YRd_1ZnL%Q;^$7*Z4@(Kz?(zw$$USAz%Za)BOF0H@mY*OoQ zhxP6E=-8~adZX!VaueyD-rfxW0L}4d0Y*#JiH-_bGLnISGZA(q2Q3@T-iG05M+bfj z$AY-e#Sw&fk`&k^i2elNZ=l!Nr*@z{{L2}-o+38Jn+Gnke-aWej-t=H#=|3MBo_Hz#SIZpl~o7`mkyB_er ze@4gV2>gu<*uZlLID~<802i>~*iD-h5XhVHW7ENaOw&>N3GUW4qkZksBCNyCi3t^A(0>@lB5LiQaKZdHf-XVKqR_eTbI>xK3q$4W*`63XP>?%OSG%NE-=CiTdSzv|6M%^He+jRuJ`lX-?C{Vhb~V3 zYdzeN4tJo!AOwikCaEB7B4OZ9u@NXfz=IQbj(9Kwa6uDzSiA^>6QM~$EJZ}1fcOb| z-9X!GYh|#`b0~|6sN6 zd-DLD-u|ZM`dhaDoCDtXt9Rpf{`T_##34sujS#F2C`TYPm<8wK<36qCQ1zx^+;+0z_t0Tm9ES|FC#+A?(c?fs7cq!1SboR2{9 z5Ckp)uxaJpVDnI`w~p*=fAEqep1{Xr{3wKY8b!`#mikCqQWD3iYL_F*rEcSj)CK@BZIlqa*F9I=yL&5(oqbyw28+Y73*BMQ0}jLym?(gxA>cp& z=jPz=daX@%q@{v64i|?PlJI_XLIfS3!lo3>js6vWBi_G{B)UthWU zH3RIARGH93G3uBM4g2vS}N@BjO1}oOVnm5SUsvu+Ej52zJdl zqp<=EGJu4Lr($xrjOqZ-_T8 zq;IePkLNgm3W#?8_P%Hx3`R$Qs>+6BuM78pN*fIAv|w6A0VDu}A|NmX3=k9njUk`` zjaFR*3=p6*9US=nm!XypPaxxUY<)S3D4|$LB=a!{KZ2G`!J$@pyLQAyj};a!Hn)I6 z`Rn=l$Codk>+S-zSmH@@ulH)@zt$!H;v8plE(7ME6bG$?;Q`eqn4_cCyMV5MH6j5R zo`5D2h(I>AqviU!X&L_l_qPK;s`aHRR53-oCJ!a>4f@T zuRVh&(6np=xp_$vR}UHy%yc|3xF8H73Iq0H!!w=f1@2O1Xh>H|%4A9LluFf+o|VTI z$C_As?K#BMtxx{_8s7hf?dQNqLx6A(Wx${`2M3V5uwVt!0fL7+;!y|!8u%ENfFS9d zYSWGW4h$S_3Lpn;AR+>xZ}xaym;_@ofuXfYO@4l|o0|uT1YYfsz+oOR8*c}TK)7uz z9g{9%=X-f7LqgkAQaTm#+US^UIw$s&m3A!%JlFfL*Ixg@ynB;P8$v)}q&wJvbsi!x zMW`(iX-|YZ643|(5lKK}2}s@jgTVI>+WT$?BI4h$Z5{$J<|f-{NpYsH%+rbDf`#!N zZA7*v9uTu23^d+_mL}zAxJfhJy$S;ZlyMPdf!=9EV)RKfpFKyMb{?efKlBgR%>Q}r z*0O;TM4PF>65VD9v9SeZ11K^;1x!V0nY2Lv5bEc%z~q3IHf0m+=N_+1ax?;ivB?H( zaun?T^!4?kQ(RCmF$NJxBF1r92_AwZnR~cc>_Mk{Gbjmeg8U%g95=Uk6fW|(sm~q* zz((7D=x^4!Kz`f(*Bn6q&wA6=fk41&v7IjH+v4o(@K7kI55dz2rX!k)#DV+Q1#_Lg z{z?c&Ku9{L`U?-9L3mH_cm^Iv2WLoR28qfbQW;u*8!IWv^!ApL$S!EKzcV}C$1ly_ zS0>=F@K}ru1a4-|gxd#josvA=llYQoI3e;l(3_SG==98dQj~XiF7=fL8LQC zOa_su^S80m(hMITF`3Llqrt!I^Aie$RI0UO(9uKM{>fig?rusm9 z*M&i#D-byV5}i(+jYSz>@$FOSF1} z>Xv$-_9Si11!tnsKq(Xu(ZT!kIyLD!00z{k1JhFJERed1MBfAhgcLeJ0$AFfP6J=M zv9{B(b!BD-vYf#hAllNBW@+XPgT|0>Y0i`!o=cHXRN>*#5*jv~nK@FB*AgF-!*Yr> zu>frEa=?EhcW;J%@FW1ttiWoV9r({1pv=cXVI+ih{ezB1QFY-F_kXJU?)NCpJWu|O z^FF)x?Cjl+XLe>hvjmf+ZnZkcs!mm%gVa*DVoO32LJ~oNqzD3KKnVc?1VRFdoD3$| z1Si0|HW+*I-E6q~`99ybx?6!@@b2vH>8YnE6|(7%zB#_L{)Z%Ez{^btZ7rwW#%Xtp++a@jsrBoxZr}cKXV>S4 z4}CH*cD}QX)p6Dkw(qSi&g#hoHsk^Xjf{s|%shRI3fPE}c7s8JBI$o7Yzwe4ZcJeV zPcm)&|sSF-NdOZN_!Hw$7~Xup37szB3z2ukUPpuy@ZFL&N_# zHTBg+w1n*+%*}0FnpX6eKYK|%05##4%Ucqg4%pH;BI_I4ln3sT@^}fhQ@h*NXZg|e8Zm3)oTkpI>vZ!+^0Urw z-f#rd|tQ3VcF%e4&(-=s@LCaZ~tUy;LGF3e{=QfA3piy z-kH-wC1vPUD}IOdm%M3Sc`n^#=q|NnAf=PRYgJgZWYOs?IwPlNbdsDba*?4$7_B6E zvn3@>Al=9_xKwPrb7e)a>szOJK2B_2M718U!QBYJJqU)PPf5iZnAT|A#uDa zeyyYF;o$@SFg5WTbmKjFjGXzr-kBeS&6<&JR%9ZUA?>fz@notOe1UFBY;)`w^oOMM z9gO(^443rvN_qQmV4%0QHXaO$Mx#%oEj5_7+PFOd=fR5n)2)p+hW0-^g>9R+e#fv4 z#j6@qeL)P{8|z6>4{1}GRh@29XCkYE+9G^QU;{HIza(z7aZrrlL%1E1fo9eWHX7I< zU6NdZMvPoQ=Mlt!DEbA#hkNQG`v!lqr@DG`US5{nj_!>-gK@Ld)*5#86h{x$Z93P} zcl-E>FF*L;yU#!S_{>>gYgmfh>yM-w)tlv&6FlkEDs4I$r$d@C6S*our*;~(yv0oN zC4nOSfiDMVhHnMsA^E+cg&`!h!3YFw5}}wA0&IX37R8Vt1la?g=^~!I(B0ixS=o@6 zpX+eI1mzlx)lTb^;Uhm*K?p0*{-cuhW9@>d-n0I+c(CK50{i| zL)`t&Psj%Rq52$HG_1U1kiCS-nC&By1;-icN;nw=Q&1h$0Im&gZTEJA}da|(b2 zeF!a*(tse-3v>fHak&J+D~e#t#Kq*Tr?;uFAlquRYvewyBBo9+$yimcN~?F8J7U>G z8`e)W?YMSu=nm$z2Zs+ti?%M675yc{CiN-2!oJPMZ;WnmBhkHt8ZY{2TnK9P8qsWY zkUmV>Gh#^CG#3YoAqzs9gXjh^gPRYcN$?mpJf^-tI;K_#GXzhf8{mal9MHM9Ar`}~ z1h3AJt<~fz*5;)xE0M3v7={tdN8Zmuqu6C@66m@wU_!O zNo+QT&8bqmj9QV?iJZwvskx*cNnm3UCt@@57%67KX9qBVe3k#fPRFRf1UtX?UyT!`w2!-2=3kPa8Oz&#{;NZw~$KIZBw0?!`2Virf zr-EE$)aF$#BRT%ex2HQiD<)?MNr9C4R*YistpG`)QGzrKM^a1T9as_CU%DhcnSdvN zZjiSNJzYCW3ktl>Y|fIa))V{N7DT1(3ME7qTGZoaaA-(+ihPcYW7 zTvqfW%5x=pXI{;diCR7?ELxQvnSE6{r$jAVC8GRkF*q&6d=$2E6x*1=kY?s&IRuLf zk|yv@@~X&@5(Een`;uHL>77Rq0-#m$3bJo;54wb)R|pce>-!GuE-x<>t!}-_qmYM| zFRnE!d)DRet*xpnjc+c>@2;u@-7fa^p4i#k6N)tw-F`YZ4oLK>y}|}S-8+yW)@GP= z={)N6sM_d>Ck4)g!~paLFd>tVj3U`Iie*TJkeQxCAW0!I4ke7R*Gy-?j!Bw>k&EnG z2o&>(p|B)xcSlDLY~E7h6nNQcTgGav?QJd0@2#t#$g>*|`yNm75 zjg57Ac@dipr##fdj%R0S)~?d6Sz7Gmx=YHCO_*$Nx;A=ny0g1GJBr@WqQCjO@0B+e z<4{;Ff)7>cJOXV+0vjf(S=>T~EJ-(DL@pVDw!nB&pdiiZB)53p7s*@lHRR0)8VUkD zNv24g5I^j<4!VV45b_4U~=QBkqS?b7Q_Ytz#fzqfYrPXqdlt&!0Fit@4g zjnmz`J~%dpjfd2$_J%#ZTOxUj{Lmt zisG?`O*ao5xCifSUA5OW|{|9z*6&N-<8NUwNS}Vc1B2P(7Ykr#n#wP%8ypLYF}0<0~m|v)GV1 z#TV!UtDRCLvk!?U*f;zff|`V?bS%Jz`2g$-s>_MwxEx4dThh{U45})-woWiK2Za8T zg2|?>AMEePhV!Sl@7$g^NwW{j(hA@CF^dCUms3djTrREBsm(z9giR}VY0==XavJqy zyGiSl;U;gHYydn-%K4a?i%cdvX#-NI7?n~y31E_wC1E2;15Upf42cLvgVcw2YG-qi z-D**%8&w%do0pr>hLKq(YCCg-M{73CbajJh&#qm2{_x@Lsp*k8deso)B;q&B<9u(7 zgXVCA*pM`vCKLH%(X0{p1UAVM*b~?ibh9v?Bs@uM5~S3fDS})wKm2LzRWoZ98us9Ql0a?62?NL)`sf`rKH&Y6oJ| zznGmh`uD;Hc|*Mdbh9J5ljO-1p1BWiitYNbV~r)Hs%1-g*{X<6UT#oqF)CXfmchK- ziN=lB`u2Q!?C8@=m;d<17k_&8^z#cBkCrF;x!$~2jd)UxvZ&mqWZk)DmB1zFCb^Un z-GI$(p#};EFL>;TSW>(<7Z*JG*G0eZs?=SgYU4rNa_6><-TShvX zNJQ+N;|xHBx~;^MNROB)eFy2IdZ*niIB*x>{wD}>}kD!Wbn(G>2Gh`l(0R<;W<@R+vj6@El-l3bg}*{ z6gSX8f&!Ij0o_;}ki;g@4cGt-!Hmr!n0d-0*k6ZjE-?X;0s`j(Y|teGwHrNZRnVd- zvLRuvX|fsjh1`=H%06gozBfGdWP1AfjhlaZ^ypu{dH(3%f{oEl)X4;k%FP)99Op)z z6O>}U76LiswCt>-$BbkvIFsrY3ka6LleFE^w<+r3b;8f|lBx``8L_4vF<48zI&9EZ zSxrqYQ(v}Yyu9G*wypQ~?fde~spmJZ|L;eS{u$V=Q2!)&QtAzTeZTUo&qekv4MlCV z9tk?7)2#Avx)8^Cmo9 zJDy}kDXq$h-awtqhTa5BZkTl*-VkKiB)TEeW>rup9AwnsT}eHOC~Yq1rJj?o@wZSU zl&)hoAiOXRfY0@C?BM8*x{`n&bJxG^OA^~+8s}p`?Qn+6F zr<7BWeg@CPypTF4lRc5$@l0{RSEo*WcH+dD-rj9RML9-eP^T+%IohIu(cV|AORxpZ8VtNi*kB15wiIWgor0xG&`9yt*ocgC#gcdu zCAiOzA3xXCwR>H8vFP%djZwR~J}B&q1}7>CueELcbae2y*RTHJ5!I+hs2(uuPkvvm zgRlu&%<82fx^WQQFeIj5ySZiOHUnNp>Q4_m*^f88*1fUw|jO zyZ2UARfWP?ye;Oi)rDQXd7<(0qDwm(?howy_R6K-KmPRo*|P`ZZ-tHYq|^WkY^Zgh z|0iI=prSEo||%>o|>8sSy>Q+2yfmJ6gu-mW9y19H#FWq(Es(dncqJC_|utb#*=H`G7f+Z z&>()ZYBEsW_M0pK781FjXbHJETwXh{kuD)%$R*&Te@`4RkN1*TUWV*zH^frdAbIE`D!baIC!eN<-s4V7of=+fT5KXL_UrwZ*k>RTBoSSp1e@)4*3& zh-S5iH-=#190ZJELkK{ZXpi5&IBkVp_s>^T5Edrsn>-y2|Vh`MbK z!RZj;Q?fhR1~bh1>?M#`I$80G)j^O{VHb5QNY9jzV7+R02L~sbntEz$i~W8SB7!Pa zsoqe>ah*N^bi3TreE;CkQ^IzSu)Q5m61Kz)3d`Xk&xQQChhamRHtKTWD2;&4hV9Nl zi-imW{7i}rB&+c9JIm3|FY>eCh-yEQ31Lk&)Pr&N;K0fD9bL6GrNNNbhyi*{saaje z={mjkvC_QDEnDvo?f>fR%s01h-#sxtTvECfbHZ<0HzwDxVRtqEskTg*YDHczkGXhhqSW3)K`+>XY3`}@D1oO*Wk+O5NfhYI42tZqs( z(9}CKf9JrQ9A2t-2Fsga;_RrKlDx?=8w<`4a+Vy2Ju09dNel{(06M{4T+m4>G|X`U zi&Wns0K-31y2O8yngvaS^sV2M?ZV-?hKCwk8w|8w`Gp zHdm#tP^-7|+`inL(_8B9bawsY@ng>}UbsDca5!4L6*JJU+Ji9%TPlagy2@!@+pa}B zP=-UJ_At6(Nf8cQ#uY*71qhvd!YWwFrqA(L7IG%wF)P3D&geNyWU_B5d5in~4(u#Y zsdKgJ60LlrMcv^S$II7U*|y{Uz=21nPv00gFdU0*TbVX@pTcW%3X<){9kVGJq85{* zm_kqRB(Tvj(#eyg!vYVr3A-1zCg_%o5?;ix@Qnm@0cN7x_5OW_8n<@U)~*W%ZAz6X zP3BW)uH&>@9elgTvp*Icud2Gz(Q*68;j>-c{n@dG74vsRd|!;i=%yC5Fx;?jG+~cz z16ZSw>%@jDJ47z#1V}#YviQN1yd@0tU_ltpqYaj(hIoU>>qMk94RpDXBja^0-r(Xb zE}mx>Cp`#>Z>5(!VLRKsx4U-3uJx5=LBC$MdfAVEta$HdA$58gXQ+1Ao5EQmW$P|9 z?Y!F8GqIz&+Z(~o0o178Vm^S?yFoFBD&3YT$9%I(r}7##VcwYQ6ir3}sQ|jPf>A9RY19pkq;{jmift%HJQ(aolig@!54bP9h$p9ecDGa( zZOV;=Y!>;7zhC@Uf4Szb|GQ=Rd#;S-L7k$)E$%HUI@Q>4e$VccTN-+WAadq!Hyo3A~zQ1!@Ni>Syqcv+aE0*J^75Do~u@ED$c8OoHI$~CB2nTvLZJOxl7_Z;j zD~5m#^|w^t>)XhijEamIax6+9!PBZ-Waunmgy8_j>-{Eb%4R&w1eNe4d-z}{rAEc% zoqG7@4aLnJkfUef$*DaZ)!E@J^nA!N+zMqtkseyREVSa6dFiW4)yfT=aa%aFZ)5Gr zj+U|dEgfR0ZVtBB*nl~D5}yz31SAU9KZ&U+nNok_E6*fcQ2e1mlU-s%qAzG}f5~fO97)V1 zo&-XLolUEl6>=+rRD;Tcl%5VNkVvi=``IM=NbDCCoJ2PlLlqXIA-ZB=u`nc*hUqHu z3wdraN|%srvjt3MI*4+XPPtAa-zb-DS7hw6XgXck*O+^x zqH?@`)9KFE3kQcz?Z#nAvBtOPFOjg}PCl1in!S`koltM69|sUOW5r}5o3qEj z3fXSjNoEZ5=3J*GDnL~biI{*Tv4J5SkTfwjAm)X|;*eMzq&uNXVk4X(0pEg>(V&p) z5u#2fq9?=|4vmU<^8B8TE#WM`PUluDa<#G|+50s{MO(zXw>a9KA8n20^{=Zq)zUh1 zVE=gQuAX2NbbEQP+Ru}-535#M(UV5&W0)bQ9SQ2#N0*rXjSscIveG9blpf?`y;$9H)#=I{4w{XF+ z(*wqkV$)kVBdnsb#OV}O89_~Y1#f7J$GW!GY^^M+%JMbjMtUkMv7hTyZ|_mo&$V?0 zVVm2lmgwh_u)X&S&B~Ql1yP2AZW=A6p)eYGP(sW=PZjq0!xsU?@?4}3bDaW85fbT$ z8=*WPLLspLLWQH#K^fveS8>Qy!mfBQ`4IA!gu=zaFz&bty;y?>3*iF1EGtLymgrSO zpK034phdl>X2XG<+sX>EOqeNAtG48Y2R2t9Z)u(C>pRxm3VC}awt0PcD79f8g=Q~d ztkI@y(a3CCDQ6Bbqr7s&&gHr2!snncoS>2&12*UeNLK;lK;pWPrz8}Lhe9QxAUy=> zo_r&{r*Ead%5%FJFRVmw%UAvk$RO8dEU9toV7`Efh#;Rj2 z+hzv$pJ?kquUg}ReRwaAaU^UBgJ#AI4kiPry<8VGBY|h8-9DV;a~N0(9gc`L%W8zW zi#o0OZd=SFM*TuQ#4H4sV~|2Y2JhwA@K^C5fiDiY3cLuK93*eI4-OC4)ou>^;x4f? zE4ws1+h;OrSG+GOm6cu}`V9|MS4`|`x-@!l5_{FCR}J><6?+V4<8Fm>mTu{0td3M? z3i?bqjR7nzqMVNr770@4Gpc+hh2N<38X<&w?5hk|3|YJ>$8OIN9Wg&xF<27J!sjjy z2I7Dh#HSD7P7ibL>^;3K3HyrtARWtd-5lIEvbA;3NS zk#Kua&cLRs>E6B@Ha3wgx*IK{v=7=mwrl=QGf*rok#d+U&=fLl#ref_-@K zA>m=7dkx!U5Z6)jIjWG<7^_9uz?6;MTY^~R_s4?)5QIK=lJOD`b2w9CNO~U*7x{hQ zZIZW(-Cg~)HSHDUd4f~1bm{VUe`;F2vRJfi3<-_do;~aG4(({Xc<9jG3#YFf9H70S zi!)xCFTws2=#mwypi8jeLQ)|xYe}VV3iHTA>H|g^4YO%8EwrsfZpp-aH-aegIz^@3Sm(00W`#y-H=OP2yf=C3@dsCL9z8T%h+Pr0y=oK(r1oG)Gtk%@3Tzn} z7znVd(&6%>z1*#rBQ^<`kxn*X)h1M>Rhwy6$~grJ{OMM;0@l{6$@FM4(H8}85Ob(x z0QI1=0ZK35?J5Zao=^;R4~YURGSyN%=Z-hUkT;^RtH?)g0JCpa=Fl%$6 zT0G!Pu{Z$Z=6MaacmS9KMPYY=9~Q+yJb3~00nuod)#@>8BfPFiud7h2>UmvPUhsIs z#w%T&4~~pIy?W($4<9_3dTm}gW#3j2HbI^NM+Y_l;TfDp2w0fc1W3$ub}auvnmHYE zNM;amCv+xNKUj_5r#Hc?pjA3*1^&Z`!z{%(g+6~tIHBlCt{Bl$cX|_qJqYH7+)*D~ zZD!w2(8IIc@XX4^?7)^sf6O2Om$L`tIJ%KRkJKfBO6o<;;`2 zqZiD-C9!E&uHqFLyb6UIN+hFU62UdR5I@p8S`EBp+HJ)4%ShOm^955*7i>CQ3d~1f zbQ7CivHT}!F=yN0zKDf>e*#iUsmwu`{Hsu&#~pFlQC%ROJl3)k!s;>7M&vwBQ^~2f z+D&~q;fYNfZ+3NmaqQT$3uk}-@T1>7eSH7?`9tyb+t^N>m(=o8*jB9K6bLjhnF!ZW z=G0}n%+v^k2+fYYE18%##qbJE)B+oe++f@wSNbg8;4v5-dNr@kpvj#K3S0dqXcRP3 z!|R7GAtUxG8xRlqivyl~mzZsZ)68u5v7JpN*s;%BvpHj-MUCNrb_X|_pLedl;cj2= zlanWYeep7mTKU7XFCSbyccf(f_9V82I~uV!6uWHS`vuXB_Tpq%RS+kIXi|E4J@$~mGPMf{yKJ!w=@-Ayu3pW{iR)n2D3&oH6{$y-9|0(&3$ST@4t@Z; zW)P%mWOg*eVmSsiZZjVZqhv@rATVdP!Dm)RtY(G{UOy}W3>^s@F6c&fPho=xBhF$2 zPhxJdskktkHw28Cr8Wch1?}B}HJSfDN&Xg<+$}KZVUABhExQ4iN+B=~QE>n3C7ZEVPD(u$j=8u9N%B znGq{8(4ZTIZLh`_EDU+`fTmhaaOxRZ!lzIK7DNGiP<2#6ENC#ZJ;qvx?|u&!i>7P#z!` z;zRsn*hxp&{q0>mZJ4W=3Y9*?c&KBHRDs~}fU z8$P2h%Zh}8qtGM714w&_5jW{KERn|Qa$;IocAeU1G9Zp7r`ZRG3np%k(@f-&+)F(8 z3Vm)w?)bL?W=6LJwo|77@5#xN*!Qt66voOFcSd@#He-W9S#45nbC~uOW*=?bIJBXr z#p>I<1iK=r9x%H*I)m+MPs*E`@ua9m`IoSHiEdn$%>v#-O4x%|JQXd7hPeYDk}K>J zi?W1RP|Ow`uuCxX4wVWOA6q7}5BiYB9C2Es9Q|Z-4}N zI1L)Wesk^|XxLp>7jjtnj8$&MsywZ{SSznKDO>%{f%5$Rc;ODtxp~RzcoG}sm0#e= z1@h)K!m;3DE`_W2{rTSQzOqdN}D|``W)Jr+6m|H~5hO`%|;jnV#&}it0hlt&r z@3SHuR0yIm?GOC{axv}C?ul=Mg+A{*o}9%tG4U8@CGC&z7Bwz7!!mn8Q*y?{-UH$EwEa2K;|WPIV#6E^HDp?s@WG-=$l zsGZBPJ7aEFzT1v!BeHtHL&;{1++&dATdX86@FJ~%%lATzGgsc+FPAr{lV{V@4-Owb z+u1p?Z95KFL-) zWC>_N0uQ%6$}c0JhWXulhQ}(OgCDnc~h>#S>SS) z1bxtilJ=kDb5Q_Z90>HFMrgAyj>+Yu^%n32hK&*i2?*dvcv-q4q^_>BqGCgCt_R0JEMJbxp-^NSu}IEXX0vU~$=RNh zvy-#bEnCHQ>b#mKXML_&Y*E1ybJ?NpV!S=a0#8MYu#F0$tY|3R5sc#jm_bYwhjHcx zgfJRFM#xP9Mi^3xan{>Fce7$2W#YwN12+7gYSPfoSs{q$eHt6cJT{HkT% zwDdxavd(2|Da7%Wc{?nYEjUBwrSgXJ18_D%(&qwO^5jn<-49(4J7!_EB@wj?wCuyI zA=?Fa46UL8vl@;v?g6t7r)$9Rhqi>RqdajCDgty&$n+6jvTqz z-#@x@=Z<*1$mw({GmNX3Tb3^oRxS>tEsJK#)?2jAS)Q(nvd(yMi_Kbx-7JJHx#uYr zcVo9E&JO^#RjWwe$g83=H@sLy$0K}(DYH?+m@@uUe*syL!OyYt5t}8)PU*^s-3k{z z8!sI;%w!h?T?`mG$0S$GOJ)K_Vnz?rJ>i1+3cPM;-FfnMW#2v=x7EL8OKo-}pvMYe zdC;JYsg(KhwOIOBW7F*n34P^-hqrGV*|=$s+uN|5?LvC#u0NIwl42Y_1B>C{f5?0$ z$^T$uYW$>BpX0~OL=9V zZyw#ilfZ^G#9ig(r7ky`c3ehPflXh;ajD!iOBU+T?Pdwm^CWU2q@67ItF=+(Df__PPAelI)O@x zXkLab@nZ|I!Ej&h>FKVj+7!!!@j*lw(&^XRxkjhC$<6J__K#MUpKICv07FOT&fFXr z8O(_{V&3#GU*;>P@?0!m0;dFhyjC3=?{L5<(vp@4n$tixmJ&zVDK{+UvC>R&PyjGy z!JsoJ!CJy}23YRxuz7tbYt8ey&UbZhj~An2A|UKlD~c?}dMCHbYulF_I$BYFVaLvo z_VqoRnflF#H$Oghe5eq;YHP9Q33;yB7)LrE=O=8JEpm7)&jmehSEo~bL#d)RWf(Ds zL^{TkUI8g_P^c^31-0C(rEJ zTb+$IWv$zo8MPZ~1+LZ2_k~?YOA607G~Dg!d2;mV@2*|{{U@Jdm+c683}3V7Ny@!0 zmvXOcH=GQWH>FDtWvI!v>X3dSb;7*<7~rvLDB!W66QpyNgq%`k<0ZVu{H&L~Pms4D z15Vw}mAmNHRrX*FK6w%lcH5``|eFcb}*sat=ud-uabqt9l}{?mi|fBfiM;6f5J@W z(`TPwymYhzXA-_*$G(IOJh^(66{o(Cvx|e4XdyZLFE|_?J(`@XIdF~{wj7@`RpVt9 zHb@=RqaWwKkn8xm{Bg=JAvHs`LDHgBXB6^Xj%>S)VpCu{+SF9w_MkJR#Ae-rh}-8F ziTbBDlwNCTx<5Gd<@C(+n>R84_OIVOe|!})Vu|@TX`lIPda)^Whb~tg5_RcZI?n%6 zx=mWY)tn>PP`#D7Lv=13uw!u5Yrce7tY$o$ap(&yABs*O>L^c zKD_%QLyxAWo_}=rw~roud}d}aUeUO8)!aSw-`6{X4m?`SYeQxZ`+`*HQvmfSv4`Vq zAazl2X3$f_h{nn^&?t^q-VK=Nlm>hK}L>ovYK_}z?Px;B`XQuBA54V<= z<6rXV)OjXNoy~w1l!MXm(T(NjJ9gY2=zDT%@|$bd?j9Z+$}6GV>tC?FYA>F*I9uSpffgv=WhlGY&pC!tk=0UXnR6io`QJt^AqE6mwPvE%oE*6^o9(|^}KdFuWv<5 zS2Qrbsru6HUH3*uznGf3v48(?v|!s}8FqZU`FsGZHV)#z0&@qBbi;^%l3FOyJn29p zOsk|>0W+dC2lZX}sqcb0&1j8r!~>{Z5C%!hQ+y3PFz6JdhTw%z5QOeE2Mn4u;xGh} zfKjPM)X-_?Mmk};+}Af)U*ASwex^T3t|(=~vL?j=Kl;3Kz0`Mu%qMcHsHnIN>|8ud?9wt3g;dAc)m~cKN_%H~ zcI=l`s z*p7tEIr3T90*>$;$}`clCeWPDi@h^26~%BDLx4ms8?GEDWw&FU>1g=30y!{r>GZCo>-F*-&w^rS-zTeWzMldV*OED`xvkC>Qkd z-kAmRCV`|+z*rPusN)sI5Wqtt1GEd;1N}yQ1P3p27AWng+nVQb&}AU#b7@C*Cw! zF=wszc^dMv_f}P)=jm*3@5IjSJ)uCuiZwVJ;ca?D37CY6OgZwC^iklE5j-qyXX1w{ zDUNE&6pfi46Ea*z9FB$ZO%7!l(4!3Zm&=y251cVbhci-zRiapmXw-qqes}C&VK$&| z(+0C*jb`;q!{R08zx#>tr$4g4_ipy86$NTdx!t}!JJP$p>O^bnxqbZ;P0hWb@Z0zF zrm!U*7*rqx_2k%$;gHV5WJM{nnpP7~ZVxK~^(wzb6~JZ2UG2B118C$x-wEaU=#qYA z$zL1+oBM|3t)sL|wQLEG_Hs>nbnW{&D}I^3W^tujR>PSaJl;L|1qU~wH?;Ho!I6pf zjvvw+n*1jh{M#TPE0m(-Eki*IT{Ex{2>hwAD9@m~3VnNWl!ZZI{0h*O!u}KD>bV$R zi48p2T2iE3_V*rjW|3JNSFb5ZTZ$(02CKfsHJz~D{H5+nN%iPkSo zE0%H!Z@7Q*b=dGhF+qmSn@R@^AYvjkSgK$lP<%``$?1-y6 z{pgNi4;s;Br>0@BRXV8#fJxpuH&htYRyh@!QLVOAqo`1)Z#1df{LcPZ?r3G@MDw-_ zeO(_NAOGU~MQqsYFUW6Lg5H_8*&F&wY>8jLlOzyRDPU1FT_{|7)aQ5egk8Y?uyJP3Io*oRyJwAK(>4&%Oo}hiNTWQ}b!}f;zUSEmrrE-Xu zNtR=M>9F#w7KaWhnV^IHz(J?luudD&=|Wn%01x>XI;Bv{hqV?Q=I19$>ImCpQ**J+ z&QZUztkSA)@;iDXo+I(-*@n97U7dFh4Llr2C~*1NJ@}Io!zI`~hMCOS-D7Vyk3%qC zkhfQ1oBLjke3@N?b_VJ$wNj}-gFcurhY<;kSaLXWF{oiD_|hSaJUfjLAn8Cx;>oG@ zwla?geMl}9u<4pyj=qo&Js6i7>+be+-#;?)`Q*vx*RTKj!GpV#lSA=x%y$>PGv{n_ zX5XmRF|Y6SrS>iHp%-X^Bxaa(P>hI%2VlT?1MCg7NV*-Gh9(*ya@2P3HE9CqS>a3! zo++fp@t~FfJ905~>LOt~wVTdc^qI^7oFm2?x7)1UKKB^)m(<iP80;m4=XU=PM0 zA3nH$>da7l1M9)~>(qYbx3S%?$F}fqC8$n#EgHECeV90?P=ygQl~Y9{V*!IYY|&u= zD_~@&NNTtsjt9j>%*p5mp2Rts6`>F^P?#Mk;5qDS?+iFVw`*JL?{)Wldid~@)2D&$ z51%}|KY51snJ;_0x%?zqegIEOG)(l=kl?Xnt8mOYlt%zF_Im1j4x+;inGXRB&DIR!gn9RlaG3LbKD5H#sK%34tWxF*<kkI$cSJXR__n=stl9>QJNq3v@G}*pHcMAPjJnP7azloXZRTTr@R0 z+E`qyU9wpA{!-6mX1Vs47ENv1e5bALv;O|CPoDVZ@})cM9O(aeY!ceUnQA&ZFAlC5 zdYz@c=zbH*l+?f_wagGab}g!iM67Gm6hC>lfYVmH?J>35x@xIn>3in%G#n`3TUvUq zrS1Oy-mk|GJ)fDrJuo;F%WqsVFE;&i>dASUGZDh*kn_YmRyxNVF_Cshsoj`>p~>k4 zssuI!3;Gqyb-(&qt}3luqb!!mql(pD*>bl$Eze}!5sMz*x$RDW=a*xnUt@NC|GuGU z?$#x13zKp8o6TgVbi=&Q`XcY8-XsXMPzf>d!+G>*bI>aI%nVMM?!XC@NPEIBv7q}1 z#bgpW)Wd*t5h6mne6_IZmk}JgzH)ils+C&|s#ejw$LnbGd-vu=$Lni9*wgme=%Ghv zrau_iPjmV3CzIIb)fWG)wtFG+l)Np#jBjE3Y&r!NHp5@BsbLZzc<@wc1qHiU&r^=m z99FFjEcA5RH*LDwzVrU!17Dn;x;ZfLUjZ9q zPV_QBosi(+EM6-*n^QgANx@sRF6@fw<)OcSH*eX`E7ITJqLFPi=~^B3eWCCXU@I@5 zsc*dA-uB7p;1_2nuMh7Zibl6C{*UI#1$1LkDNG+Kp_zzl%`yZ;2;tF`j;R+TNgYpm zWl@fs4`}3}W$%@)SyGd^s!p4+-DqsHIeLSE;r#sLm6d0=ZM(H+?-yf7zr1wz#wh8M zt&7tO|Ki^z#`(c=NbO)wt)9({Bd(*w1T3Cijry|+xdusLE)pzSn>@|Caz%wEW3yh- zpjEV*4LwfBNGNnX9-pqMxw>uJ?XIpzCr>`TeEIHwstrg{kNKJSyBNEnu+eq)SSDUNIv>_p4t;wd&0lOS8q?>9Xz*y2o;Ir{X2&YiqBzwA||J`{Km- z(@PicjvV?=vE3%}~GK`U+vuM$!?(U8Lz?vWb*tm3A z6eox|xQ>YTKw;!qY0>Eo<>wnWf6%e}|QX5vt`ch0pcV@69V?jtWAb zbejGg50bY@gX=5>h^^Gvvw;{7#W0j?6^kBEO|_JitbX@h#m|2srmv23x_ZCRk)JhM z6`$H#dj%V@dwV|{KKRx2%+p&pZ=XDdIrar{_kWn}PEl_T-N2bZNL4ki-vaX!n{QKd+%A-u8pcSWjbxG)!3Bf8m=mt*}3gjXV<5LgI|mu`g&&i*}a>0 zPP3c>&La8q<`jOgjv=TB5ggK7J{)DYR=ehBKldw?wY;UxY3UCLV@1&mn>XIr*?f2J zo`<6c9#0(k?)t^wKK$roI{T-R_9?vd?4P$hPxuvdNC3m%&Zp0tzK0!0w~iU}-8khF znQGn2rCDl4jY+@DW*N!$PL>s4+fsk4sr93tuFu9szdSSX>kqH}{?kwIO`aPpX0t|Y z_t?Mn9Oz`E^XeGqbkYKYv)B8oG**?*r(JosSTq}z! z(rfkdb|e&vW2Y&B*L@GzW=?;59lbN3|I;_mKEHbDXw`b`#g_KHE}Wx+uZ*52^v?0{OQr- zfBoiL>>y6nK}Cu{=D=_alw50YZg79p6RKn)TJ%6D${b!nrf`&vKc$F++&+7 zFL!kS+m|yl-`=3!8SIXJ`+eqwD)mpM9#Wr1diXQFUxbMBbX)5>w+mS@3<(zFoJ@zQ z!|xa=%b#xEetUQXbo=h+58l=OpNb6)^w$pbwXH8h?=#la74YVb4s)}|ih96g!{*!l z`<_gk`u5uO#IE+sv-`~d%kw0wTTRu77SqZSBy8UcbK<&tle1ByQ%g=%$trM z{pQ*g^gR8`^XHHL|H6j6^8K+fEV$SbjiLq{;oXK)-g|m&s9P{>~}%6j%R1E&;0mUTT^u`3+pMe48{#kdsoCe zRu-MXKJ&q@r!$lP^2sOv_xbb3*VrC~YGEBGwOcdgBBdTc zz`56-={;fl$H}SB#*a<+bZlQ&kn7~aW@DM%+Ts_6^RlLDDsFV|dVK1{AMf4!)7M{r zcJacIO8CmF3*PyW>#zQ&h@PjVi<_0{t;)2L<-f9H2KvYUm25Y75<^sv#>cVGytT5j zz~_r_T%70YM6oj%9E-;vU4Ql8UGM&w ) \___| < | \_\ ( <_> > < < +* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ +* \/ \/ \/ \/ \/ +* $Id$ +* +* Copyright (C) 2005 Adam Boot +* +* Color graphics from Frozen Bubble (http://www.frozen-bubble.org/) +* +* All files in this archive are subject to the GNU General Public License. +* See the file COPYING in the source tree root for full license agreement. +* +* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +* KIND, either express or implied. +* +****************************************************************************/ + +#include "plugin.h" +#include "xlcd.h" + +#ifdef HAVE_LCD_BITMAP + +PLUGIN_HEADER + +/* files */ +#define SCORE_FILE PLUGIN_DIR "/bubbles.score" +#define SAVE_FILE PLUGIN_DIR "/bubbles.save" + +/* final game return status */ +#define BB_NONE 5 +#define BB_WIN 4 +#define BB_END 3 +#define BB_USB 2 +#define BB_QUIT 1 +#define BB_LOSE 0 + +/* play board dimension */ +#define BB_HEIGHT 12 +#define BB_WIDTH 8 +#define BB_LEVEL_HEIGHT BB_HEIGHT-2 + +/* animation fps */ +#define MAX_FPS 20 + +/* various amount */ +#define NUM_SCORES 10 +#define NUM_LEVELS 100 +#define NUM_QUEUE 2 +#define NUM_BUBBLES 8 +#define MIN_ANGLE -76 +#define MAX_ANGLE 76 +#define NUM_COMPRESS 9 +#define MAX_SHOTTIME 1000 + +/* button definitions */ +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) +#define BUBBLES_LEFT BUTTON_LEFT +#define BUBBLES_RIGHT BUTTON_RIGHT +#define BUBBLES_UP BUTTON_UP +#define BUBBLES_DOWN BUTTON_DOWN +#define BUBBLES_QUIT BUTTON_OFF +#define BUBBLES_START BUTTON_ON +#define BUBBLES_SELECT BUTTON_SELECT +#define BUBBLES_RESUME BUTTON_MODE + +#elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD) +#define BUBBLES_LEFT BUTTON_SCROLL_BACK +#define BUBBLES_RIGHT BUTTON_SCROLL_FWD +#define BUBBLES_UP BUTTON_SCROLL_FWD +#define BUBBLES_DOWN BUTTON_SCROLL_BACK +#define BUBBLES_QUIT BUTTON_MENU|BUTTON_REL +#define BUBBLES_START BUTTON_PLAY|BUTTON_REL +#define BUBBLES_SELECT BUTTON_SELECT +#define BUBBLES_RESUME BUTTON_RIGHT|BUTTON_LEFT + +#elif CONFIG_KEYPAD == IAUDIO_X5_PAD +#define BUBBLES_LEFT BUTTON_LEFT +#define BUBBLES_RIGHT BUTTON_RIGHT +#define BUBBLES_UP BUTTON_UP +#define BUBBLES_DOWN BUTTON_DOWN +#define BUBBLES_QUIT BUTTON_POWER +#define BUBBLES_START BUTTON_PLAY +#define BUBBLES_SELECT BUTTON_SELECT +#define BUBBLES_RESUME BUTTON_REC + +#elif CONFIG_KEYPAD == GIGABEAT_PAD +#define BUBBLES_LEFT BUTTON_LEFT +#define BUBBLES_RIGHT BUTTON_RIGHT +#define BUBBLES_UP BUTTON_UP +#define BUBBLES_DOWN BUTTON_DOWN +#define BUBBLES_QUIT BUTTON_A +#define BUBBLES_START BUTTON_POWER +#define BUBBLES_SELECT BUTTON_SELECT +#define BUBBLES_RESUME BUTTON_MENU + +#else + #error BUBBLES: Unsupported keypad +#endif + +/* bubbles will consume height of 10*ROW_HEIGHT+2*(BUBBLE_SZ-1)+BUBBLE_SZ/2 */ +/* 24x24 bubbles (iPod Video) */ +#if (LCD_HEIGHT == 240) && (LCD_WIDTH == 320) +#define BUBBLE_SZ 22 +#define EMBLEM_SZ 16 +#define XOFS 72 +#define ROW_HEIGHT 18 +#define ROW_INDENT 13 + +/* 16x16 bubbles (H300, iPod Color) */ +#elif (LCD_HEIGHT == 176) && (LCD_WIDTH == 220) +#define BUBBLE_SZ 16 +#define EMBLEM_SZ 12 +#define XOFS 46 +#define ROW_HEIGHT 14 +#define ROW_INDENT 8 + +/* 16x16 bubbles (Gigabeat) */ +#elif (LCD_HEIGHT == 320) && (LCD_WIDTH == 240) +#define BUBBLE_SZ 16 +#define EMBLEM_SZ 12 +#define XOFS 56 +#define ROW_HEIGHT 14 +#define ROW_INDENT 8 + +/* 12x12 bubbles (iPod Nano) */ +#elif (LCD_HEIGHT == 132) && (LCD_WIDTH == 176) +#define BUBBLE_SZ 12 +#define EMBLEM_SZ 8 +#define XOFS 40 +#define ROW_HEIGHT 10 +#define ROW_INDENT 6 + +/* 12x12 bubbles (H100, iAudio X5, iPod 3G, iPod 4G grayscale) */ +#elif (LCD_HEIGHT == 128) && (LCD_WIDTH == 160) +#define BUBBLE_SZ 12 +#define EMBLEM_SZ 8 +#define XOFS 33 +#define ROW_HEIGHT 10 +#define ROW_INDENT 6 + +#else + #error BUBBLES: Unsupported LCD type +#endif + +/* shot position */ +#define SHOTX XOFS+ROW_INDENT+BUBBLE_SZ*3 +#define SHOTY ROW_HEIGHT*(BB_HEIGHT-1)+BUBBLE_SZ/2 + +/* collision distance squared */ +#define MIN_DISTANCE ((BUBBLE_SZ*8)/10)*((BUBBLE_SZ*8)/10) + +/* external bitmaps */ +extern const fb_data bubbles_bubble[]; +extern const fb_data bubbles_emblem[]; +#ifdef HAVE_LCD_COLOR +extern const fb_data bubbles_left[]; +extern const fb_data bubbles_right[]; +#endif + +/* global rockbox api */ +static struct plugin_api* rb; + +/* levels */ +char level[NUM_LEVELS][BB_LEVEL_HEIGHT][BB_WIDTH] = { + {{ 6, 6, 4, 4, 2, 2, 3, 3}, + { 6, 6, 4, 4, 2, 2, 3, -1}, + { 2, 2, 3, 3, 6, 6, 4, 4}, + { 2, 3, 3, 6, 6, 4, 4, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 7, 7, 7, 7, 7, 7, -1}, + {-1, 1, 1, 1, 1, 1, -1, -1}, + {-1, -1, 2, 2, 2, 2, -1, -1}, + {-1, -1, -1, 2, -1, -1, -1, -1}, + {-1, -1, -1, 2, 2, -1, -1, -1}, + {-1, -1, -1, 5, -1, -1, -1, -1}, + {-1, -1, -1, 5, 5, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, 7, -1, -1, 7, -1, -1}, + {-1, -1, 7, 1, 7, -1, -1, -1}, + {-1, -1, -1, 1, 2, -1, -1, -1}, + {-1, -1, 1, 2, 1, -1, -1, -1}, + {-1, -1, -1, 2, 5, -1, -1, -1}, + {-1, -1, 3, 5, 3, -1, -1, -1}, + {-1, -1, -1, 5, 3, -1, -1, -1}, + {-1, -1, -1, 3, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, 0, 0, -1, -1, -1}, + {-1, -1, 5, 0, 1, -1, -1, -1}, + {-1, -1, 3, 5, 1, 6, -1, -1}, + {-1, 4, 3, -1, 6, 7, -1, -1}, + {-1, 7, 4, -1, -1, 7, 4, -1}, + { 6, 7, -1, -1, -1, 4, 3, -1}, + { 1, 6, -1, -1, -1, -1, 3, 5}, + { 1, -1, -1, -1, -1, -1, 5, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, 0, 0, 0, 0, -1, -1}, + {-1, 0, 1, 1, 1, 0, -1, -1}, + {-1, 0, 1, 0, 0, 1, 0, -1}, + {-1, 0, 1, 1, 1, 0, -1, -1}, + {-1, -1, 0, 0, 0, 0, -1, -1}, + {-1, -1, 7, -1, 7, -1, -1, -1}, + {-1, -1, 7, 7, 7, 7, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 4, 4, 4, 6, 6, 6, -1}, + { 4, -1, -1, -1, -1, -1, 6, -1}, + {-1, 4, -1, -1, -1, -1, 6, -1}, + { 4, 2, 3, 1, 2, 3, 6, -1}, + {-1, 3, 1, 2, 3, 1, 2, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 4, 4, 4, 6, 6, 6, -1}, + { 4, -1, -1, -1, -1, -1, 6, -1}, + {-1, 4, -1, -1, -1, -1, 6, -1}, + { 4, 2, 3, 1, 2, 3, 6, -1}, + {-1, 3, 1, 2, 3, 1, 2, -1}, + {-1, 2, 3, 1, 2, 3, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 0, 0, -1, -1, 2, 2, -1}, + {-1, 5, -1, -1, -1, 3, -1, -1}, + {-1, 0, -1, -1, -1, 6, -1, -1}, + {-1, 3, -1, -1, -1, 0, -1, -1}, + {-1, 4, -1, -1, -1, 5, -1, -1}, + {-1, 2, -1, -1, -1, 3, -1, -1}, + {-1, 2, -1, -1, -1, 1, -1, -1}, + {-1, 3, -1, -1, -1, 4, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 3, -1, -1, -1, -1, -1, -1, 3}, + { 6, 3, 2, 4, 6, 3, 2, -1}, + { 4, -1, -1, -1, -1, -1, -1, 4}, + { 2, 4, 6, 3, 2, 4, 6, -1}, + {-1, -1, -1, 6, -1, -1, -1, -1}, + {-1, -1, -1, 3, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 2, -1, 1, -1, 1, -1, 2}, + { 1, 2, -1, 2, 1, -1, 1, -1}, + { 1, -1, 1, -1, 2, -1, 2, -1}, + { 2, 1, -1, 1, 2, -1, 2, -1}, + {-1, 2, -1, 2, -1, 2, -1, 2}, + { 1, 2, -1, 2, 1, -1, 1, -1}, + { 1, -1, 1, -1, 2, -1, 1, -1}, + { 2, 2, -1, 1, 1, -1, 2, -1}, + {-1, 2, -1, 1, -1, 1, -1, 1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 7, 7, -1, -1, 5, 5, -1}, + { 1, -1, -1, -1, -1, -1, 4, -1}, + { 2, 1, -1, -1, -1, -1, 4, 3}, + { 2, -1, -1, -1, -1, -1, 3, -1}, + { 1, 2, -1, -1, -1, -1, 3, 4}, + { 1, -1, -1, -1, -1, -1, 4, -1}, + { 7, 1, -1, -1, -1, -1, 4, 5}, + { 7, 7, -1, -1, -1, 5, 5, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 7, 7, -1, -1, -1, -1, 5, 5}, + { 1, 5, -1, -1, -1, 7, 4, -1}, + { 2, 1, -1, -1, -1, -1, 4, 3}, + { 2, -1, -1, -1, -1, -1, 3, -1}, + { 1, 5, -1, -1, -1, -1, 7, 4}, + { 1, -1, -1, -1, -1, -1, 4, -1}, + { 7, 1, -1, -1, -1, -1, 4, 5}, + { 7, 5, -1, -1, -1, 7, 5, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, 0, 0, -1, -1, -1}, + {-1, -1, 5, 0, 1, -1, -1, -1}, + {-1, -1, 3, 5, 1, 6, -1, -1}, + {-1, 4, 3, 2, 6, 2, -1, -1}, + {-1, 7, 4, 7, 2, 2, 4, -1}, + { 6, 7, 7, 3, 3, 4, 3, -1}, + { 1, 6, 1, 1, 1, 3, 3, 5}, + { 1, 1, -1, -1, -1, -1, 5, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, 0, -1, -1, 0, -1, -1}, + {-1, 3, 3, -1, 3, 3, -1, -1}, + {-1, 0, 2, 0, 0, 2, 0, -1}, + {-1, 3, 3, -1, 3, 3, -1, -1}, + {-1, -1, 0, -1, -1, 0, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, 1, 1, -1, -1, -1}, + {-1, -1, 2, 2, 2, -1, -1, -1}, + {-1, -1, 3, 3, 3, 3, -1, -1}, + {-1, 4, 4, 4, 4, 4, -1, -1}, + {-1, 5, 5, 5, 5, 5, 5, -1}, + {-1, -1, -1, 6, -1, -1, -1, -1}, + {-1, -1, -1, 7, 7, -1, -1, -1}, + {-1, -1, -1, 0, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, 2, 5, -1, -1, -1}, + {-1, 4, 3, -1, -1, -1, -1, -1}, + { 6, 7, -1, 5, 2, -1, -1, -1}, + {-1, -1, -1, -1, 3, 4, -1, -1}, + {-1, -1, -1, 2, 5, -1, 7, 6}, + {-1, 4, 3, -1, -1, -1, -1, -1}, + { 6, 7, -1, 5, 2, -1, -1, -1}, + {-1, -1, -1, -1, 3, 4, -1, -1}, + {-1, -1, -1, -1, -1, -1, 7, 6}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, 5, 5, -1, -1, -1}, + {-1, -1, -1, 3, -1, -1, -1, -1}, + {-1, -1, -1, 1, -1, -1, -1, -1}, + {-1, -1, -1, 7, -1, -1, -1, -1}, + {-1, -1, -1, 2, -1, -1, -1, -1}, + {-1, -1, -1, 4, -1, -1, -1, -1}, + {-1, -1, -1, 5, -1, -1, -1, -1}, + {-1, -1, -1, 3, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, 0, 1, -1, -1, -1}, + {-1, -1, 0, 2, 7, 7, -1, -1}, + {-1, -1, -1, 0, 1, 7, -1, -1}, + {-1, 0, 0, 0, 0, -1, -1, -1}, + {-1, 0, 0, 0, 1, 1, -1, -1}, + { 0, 0, 0, 1, 1, 1, -1, -1}, + {-1, 0, 0, 1, 1, 1, -1, -1}, + {-1, 0, 0, 0, 7, 7, -1, -1}, + {-1, -1, 7, 7, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 1, -1, -1, -1, -1, -1, -1}, + { 1, -1, -1, -1, -1, -1, -1, -1}, + {-1, 2, 3, 4, 7, 6, 5, -1}, + {-1, -1, -1, -1, -1, -1, 1, -1}, + {-1, -1, -1, -1, -1, -1, 1, -1}, + {-1, 2, 3, 4, 7, 6, -1, -1}, + {-1, 1, -1, -1, -1, -1, -1, -1}, + { 1, -1, -1, -1, -1, -1, -1, -1}, + {-1, 2, 3, 4, 7, 6, 5, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 6, -1, -1, -1, -1, -1, -1}, + { 5, -1, -1, -1, -1, -1, -1, -1}, + { 2, 3, 4, 7, 6, 5, 2, 3}, + {-1, -1, -1, -1, -1, -1, 4, -1}, + {-1, -1, -1, -1, -1, -1, 7, -1}, + {-1, 4, 3, 2, 5, 6, -1, -1}, + {-1, 7, -1, -1, -1, -1, -1, -1}, + { 6, -1, -1, -1, -1, -1, -1, -1}, + { 5, 2, 3, 4, 7, 6, 5, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 3, 2, 1, 0, 0, 1, 2, 3}, + { 3, 2, 1, 0, 1, 2, 3, -1}, + { 4, 3, 2, 1, 1, 2, 3, 4}, + { 4, 3, 2, 1, 2, 3, 4, -1}, + { 5, 4, 3, 2, 2, 3, 4, 5}, + { 5, 4, 3, 2, 3, 4, 5, -1}, + { 6, 5, 4, 3, 3, 4, 5, 6}, + { 6, 5, 4, 3, 4, 5, 6, -1}, + { 7, 6, 5, 4, 4, 5, 6, 7}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, 5, 5, -1, -1, -1}, + {-1, -1, -1, 3, -1, -1, -1, -1}, + {-1, -1, -1, 2, 4, -1, -1, -1}, + {-1, -1, -1, 6, -1, -1, -1, -1}, + {-1, -1, -1, 2, 4, -1, -1, -1}, + {-1, 2, -1, 5, -1, 4, -1, -1}, + { 1, 0, 1, 0, 1, 0, 1, 0}, + { 3, -1, 3, -1, 2, -1, 6, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, -1, 1, -1, -1, -1}, + { 7, 4, 3, 5, -1, -1, -1, -1}, + { 6, -1, -1, 1, -1, -1, -1, -1}, + {-1, -1, -1, 5, 3, 4, 7, -1}, + { 6, -1, -1, -1, 1, -1, -1, 6}, + { 7, 4, 3, 5, -1, -1, -1, -1}, + {-1, -1, -1, 1, -1, -1, -1, 6}, + {-1, -1, -1, 5, 3, 4, 7, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, -1, 7, 3, 6, -1}, + {-1, -1, 3, 7, 3, 6, 3, -1}, + {-1, -1, 5, 7, 3, 6, 3, -1}, + {-1, 6, 7, 3, 6, 7, -1, -1}, + {-1, 7, 7, 3, 6, 1, -1, -1}, + { 3, 7, 3, 6, 3, -1, -1, -1}, + { 5, 6, 2, 7, 1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 5, -1, -1, -1, -1, -1, -1, 5}, + { 5, -1, 6, 6, 6, -1, 5, -1}, + {-1, 5, 4, -1, -1, 4, 5, -1}, + {-1, 3, -1, -1, -1, 3, -1, -1}, + {-1, 6, 0, -1, -1, 0, 6, -1}, + {-1, 3, -1, -1, -1, 3, -1, -1}, + {-1, -1, 4, -1, -1, 4, -1, -1}, + {-1, -1, 6, 6, 6, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 7, 0, -1, -1, 0, 7, -1}, + { 7, -1, 0, -1, 0, -1, 7, -1}, + { 7, 1, -1, 0, 0, -1, 1, 7}, + { 7, 1, 2, 0, 2, 1, 7, -1}, + { 7, 6, 3, 2, 2, 3, 6, 7}, + { 7, -1, 3, 2, 3, -1, 7, -1}, + {-1, 7, 7, 3, 3, 7, 7, -1}, + {-1, -1, -1, 3, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 3, -1, 1, -1, 7, -1, 6}, + { 5, -1, 7, -1, 7, -1, 6, -1}, + { 6, -1, 0, -1, 5, -1, 3, -1}, + {-1, 2, -1, 1, -1, 5, -1, -1}, + {-1, 4, -1, 3, -1, 4, -1, -1}, + { 2, -1, 3, -1, 2, -1, -1, -1}, + {-1, -1, 4, -1, 6, -1, -1, -1}, + {-1, -1, -1, 5, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, -1, 1, -1, -1, -1}, + {-1, -1, -1, -1, 3, -1, -1, -1}, + { 6, 1, 3, 1, 2, 1, 4, 1}, + {-1, -1, -1, -1, 6, -1, -1, -1}, + {-1, -1, -1, 4, 1, -1, -1, -1}, + {-1, -1, 1, -1, 3, -1, -1, -1}, + {-1, -1, -1, 2, 1, -1, -1, -1}, + {-1, -1, -1, -1, 4, -1, -1, -1}, + {-1, -1, -1, 6, 1, -1, -1, -1}, + {-1, -1, -1, 6, -1, -1, -1, -1}}, + {{-1, -1, -1, 5, 4, -1, -1, -1}, + {-1, -1, 4, 1, 0, -1, -1, -1}, + {-1, -1, -1, 2, 3, -1, -1, -1}, + {-1, 1, 4, -1, 2, 2, -1, -1}, + {-1, 3, 1, 2, 5, 1, 4, -1}, + {-1, 4, 2, -1, 0, 4, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, -1, 1, -1, -1, -1}, + {-1, -1, -1, 1, -1, -1, -1, -1}, + {-1, 2, -1, -1, 1, -1, 5, -1}, + { 5, -1, -1, 1, -1, -1, 0, -1}, + {-1, 6, -1, -1, 1, -1, 4, -1}, + {-1, 0, -1, 1, -1, 5, -1, -1}, + {-1, -1, 5, 5, 0, 1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, 6, 3, -1, -1, -1}, + {-1, -1, 3, 2, 6, -1, -1, -1}, + {-1, -1, 2, 6, 3, 2, -1, -1}, + {-1, 6, 3, 2, 6, 3, -1, -1}, + {-1, 3, 2, 6, 3, 2, 6, -1}, + { 2, 6, 3, 2, 6, 3, 2, -1}, + { 6, 3, 2, 6, 3, 2, 6, 3}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 6, 6, 6, 6, 6, 6, 6, 6}, + { 4, -1, -1, -1, -1, -1, -1, -1}, + {-1, 3, 2, 5, 7, 6, 4, 3}, + {-1, 5, -1, -1, -1, -1, -1, -1}, + {-1, -1, 7, 6, 4, 3, 2, 5}, + {-1, -1, 4, -1, -1, -1, -1, -1}, + {-1, -1, -1, 3, 2, 5, 7, 6}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 1, -1, 7, -1, -1, 6, -1, 2}, + { 6, -1, 1, -1, 6, 1, 3, -1}, + {-1, 4, -1, 7, 2, -1, 7, -1}, + { 2, 7, -1, -1, -1, 4, -1, -1}, + { 6, -1, 3, 5, 0, 2, -1, 7}, + { 1, -1, -1, -1, -1, -1, 1, -1}, + {-1, 1, 4, 5, 7, 5, 1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 6, 6, 6, -1, -1, 6, 6, 6}, + {-1, -1, 6, -1, 6, -1, -1, -1}, + {-1, -1, 2, 3, 3, 2, -1, -1}, + {-1, 3, -1, 5, -1, 3, -1, -1}, + {-1, -1, 5, 3, 3, 5, -1, -1}, + {-1, -1, 6, 1, 6, -1, -1, -1}, + {-1, 4, 2, -1, -1, 2, 4, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, 5, 5, -1, -1, -1}, + {-1, -1, 5, -1, -1, -1, -1, -1}, + {-1, 3, 4, 6, 6, -1, -1, 5}, + { 3, 3, 4, 6, 5, -1, 5, -1}, + { 3, 2, 3, 6, 6, 5, 5, -1}, + { 3, 3, 4, 6, 5, -1, 5, -1}, + {-1, 3, 4, 6, 6, -1, -1, 5}, + {-1, -1, 5, -1, -1, -1, -1, -1}, + {-1, -1, -1, 5, 5, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 1, -1, -1, -1, -1, -1, -1, 1}, + { 1, -1, 2, 2, 2, -1, 1, -1}, + {-1, 1, 2, 3, 3, 2, 1, -1}, + { 6, 2, 3, -1, 3, 2, 6, -1}, + { 6, 2, 3, -1, -1, 3, 2, 6}, + { 6, 2, 3, -1, 3, 2, 6, -1}, + { 3, 3, 3, 7, 7, 3, 3, 3}, + { 0, 5, 0, 2, 0, 5, 0, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, 7, 7, 7, -1, -1, -1}, + {-1, 7, 2, 2, 7, -1, -1, -1}, + {-1, 7, 5, 5, 5, 7, -1, -1}, + { 7, 7, 7, 7, 7, 7, -1, -1}, + {-1, -1, 6, -1, 6, -1, -1, -1}, + {-1, 6, -1, -1, 6, -1, -1, -1}, + {-1, 6, 4, 4, -1, 6, 4, 4}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 3, 3, -1, 3, 3, 3, -1}, + { 3, 7, 5, 4, 6, 5, 3, -1}, + { 1, 3, 3, 3, -1, 3, 3, 1}, + { 2, 1, 2, 1, 2, 1, 2, -1}, + { 1, 3, 3, -1, 3, 3, 3, 1}, + { 3, 5, 6, 4, 5, 7, 3, -1}, + { 2, 3, 3, 3, -1, 3, 3, 2}, + { 1, 1, 2, 2, 2, 1, 1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 6, 5, -1, -1, -1, -1, -1}, + { 3, 1, 3, -1, -1, -1, -1, -1}, + {-1, 5, 6, -1, -1, -1, -1, -1}, + {-1, -1, 5, 3, -1, -1, -1, -1}, + {-1, -1, 6, 1, 6, -1, -1, -1}, + {-1, -1, 3, 5, -1, -1, -1, -1}, + {-1, -1, -1, -1, 3, 6, -1, -1}, + {-1, -1, -1, 5, 6, 5, -1, -1}, + {-1, -1, -1, -1, 6, 3, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 6, 3, 7, 4, 5, 1, 6, 3}, + { 5, 1, 6, 3, 7, 4, 5, -1}, + { 6, 3, 7, 4, 5, 1, 6, 3}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, -1, -1, -1, 4, 4}, + {-1, -1, 7, 7, 7, 4, 4, -1}, + {-1, -1, -1, -1, -1, -1, 4, 4}, + {-1, 1, -1, -1, -1, 7, -1, -1}, + {-1, 1, 1, -1, -1, 7, -1, -1}, + { 3, 3, 3, -1, 7, -1, -1, -1}, + { 3, -1, 2, 3, 3, 3, -1, 3}, + {-1, 2, -1, 3, -1, 3, 3, -1}, + {-1, 2, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, 4, -1, -1, -1, -1, -1}, + {-1, 7, 4, -1, -1, -1, -1, -1}, + {-1, -1, 7, 4, -1, -1, -1, -1}, + {-1, 4, 7, 4, -1, -1, -1, -1}, + { 1, 1, 1, 1, 1, 1, 1, -1}, + { 1, 2, 1, 2, 1, 1, -1, -1}, + { 2, 2, 2, 2, 2, 2, 2, 2}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 0, -1, -1, -1, -1, -1, -1, 6}, + { 6, 1, 4, 3, 7, 5, 0, -1}, + { 0, -1, -1, -1, -1, -1, -1, 6}, + { 6, 1, 4, 3, 7, 5, 0, -1}, + { 0, -1, -1, -1, -1, -1, -1, 6}, + { 6, 1, 4, 3, 7, 5, 0, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 3, 3, 4, 6, 6, 4, 3, 3}, + { 0, 3, 4, 6, 4, 3, 1, -1}, + { 5, 1, 3, 4, 4, 3, 0, 1}, + { 0, 1, 3, 4, 3, 1, 0, -1}, + { 2, 1, 6, 3, 3, 0, 0, 1}, + { 0, 3, 4, 3, 6, 1, 5, -1}, + { 6, 1, 2, 6, 4, 0, 0, 2}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 6, 6, -1, -1, -1, -1, 4, 4}, + { 4, 0, -1, -1, -1, 3, 6, -1}, + { 0, 6, -1, -1, -1, -1, 4, 2}, + { 7, -1, -1, -1, -1, -1, 7, -1}, + { 4, 4, -1, -1, -1, -1, 5, 6}, + { 6, 4, 7, 7, 5, 6, 4, -1}, + {-1, 7, 6, 4, 6, 4, 7, -1}, + {-1, 0, -1, 7, -1, 7, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 5, -1, -1, -1, -1, 4, -1}, + {-1, 5, -1, -1, -1, 4, -1, -1}, + {-1, -1, 5, 6, 6, 4, -1, -1}, + {-1, -1, 2, -1, 2, -1, -1, -1}, + { 0, 0, 6, -1, -1, 6, 1, 1}, + {-1, -1, 2, -1, 2, -1, -1, -1}, + {-1, -1, 7, 6, 6, 3, -1, -1}, + {-1, 7, -1, -1, -1, 3, -1, -1}, + {-1, 7, -1, -1, -1, -1, 3, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 6, -1, -1, -1, -1, 2, -1}, + { 1, 7, 1, 1, 1, 3, 1, -1}, + {-1, -1, 4, 1, 1, 4, -1, -1}, + {-1, 1, 3, 1, 7, 1, -1, -1}, + {-1, -1, -1, 2, 6, -1, -1, -1}, + {-1, -1, 1, 5, 1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 7, 7, 7, 7, 7, 7, 7, 7}, + { 7, -1, -1, -1, -1, -1, 7, -1}, + { 7, -1, -1, 2, 0, 5, 2, 2}, + { 7, -1, -1, -1, 0, 3, 6, -1}, + { 7, -1, -1, -1, -1, -1, 4, 0}, + { 5, 5, -1, -1, -1, -1, -1, -1}, + { 4, 3, 6, 2, -1, -1, -1, -1}, + { 0, 2, 0, 4, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, 1, -1, -1, 1, -1, -1}, + {-1, 4, -1, -1, 5, -1, -1, -1}, + {-1, 7, -1, -1, 1, 1, 1, -1}, + { 6, -1, -1, -1, -1, 7, -1, -1}, + { 1, 1, 1, 1, -1, 4, -1, -1}, + {-1, -1, 5, -1, -1, -1, -1, -1}, + {-1, -1, 0, -1, -1, -1, -1, -1}, + {-1, 3, -1, -1, -1, -1, -1, -1}, + {-1, 1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 7, 7, -1, -1, 7, 7, -1}, + { 6, -1, 4, -1, 4, -1, 6, -1}, + { 5, -1, -1, 3, 3, -1, -1, 5}, + { 6, -1, -1, -1, -1, -1, 6, -1}, + {-1, 7, -1, -1, -1, -1, 7, -1}, + {-1, 4, -1, -1, -1, 4, -1, -1}, + {-1, -1, 3, -1, -1, 3, -1, -1}, + {-1, -1, 2, -1, 2, -1, -1, -1}, + {-1, -1, -1, 5, 5, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 0, 0, -1, -1, 0, 0, -1}, + { 7, 4, 6, 6, 6, 4, 3, -1}, + { 5, 6, 6, 6, 2, 6, 6, 3}, + { 7, 4, 6, 6, 6, 4, 3, -1}, + {-1, 0, 0, -1, -1, 0, 0, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, -1, -1, 7, 7, 7}, + {-1, -1, -1, -1, 2, 7, 7, -1}, + {-1, 0, 7, 7, 7, -1, 7, 7}, + { 6, 7, 7, 7, -1, -1, -1, -1}, + { 6, -1, -1, -1, 7, 7, 7, 7}, + { 6, -1, -1, -1, -1, -1, -1, -1}, + { 4, 2, 2, 2, 4, -1, 3, -1}, + { 4, 4, 4, 4, 3, 3, 3, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 4, -1, -1, 7, -1, 6, -1, 7}, + { 7, 6, 7, -1, -1, 7, 4, -1}, + {-1, -1, 7, -1, -1, 7, -1, -1}, + {-1, 0, 0, 0, 0, 0, 3, -1}, + {-1, -1, 0, 2, 2, 0, 6, 4}, + {-1, -1, 0, 0, 0, 1, 3, -1}, + {-1, -1, -1, 0, 0, -1, 3, 4}, + {-1, -1, -1, 6, -1, 5, 6, -1}, + {-1, -1, -1, -1, -1, -1, 1, 0}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 5, -1, -1, -1, -1, 5, -1}, + { 0, -1, -1, 0, -1, -1, 0, -1}, + { 0, 0, 0, 2, 2, 0, 0, 0}, + { 0, -1, -1, 0, -1, -1, 0, -1}, + {-1, 7, -1, 3, -1, -1, 7, -1}, + {-1, -1, 3, 6, -1, -1, -1, -1}, + {-1, -1, -1, 6, -1, -1, -1, -1}, + {-1, 3, 6, -1, -1, -1, -1, -1}, + {-1, 3, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, 6, 5, -1, -1, -1}, + {-1, -1, 2, 6, 3, -1, -1, -1}, + {-1, -1, 5, 4, 7, 1, -1, -1}, + {-1, 6, 2, 2, 3, 4, -1, -1}, + {-1, -1, 3, 7, 3, 6, -1, -1}, + {-1, -1, 1, 3, 2, -1, -1, -1}, + {-1, -1, -1, 4, 5, -1, -1, -1}, + {-1, -1, -1, 4, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 7, 7, -1, 2, 2, -1, 6, 6}, + { 6, -1, -1, 6, -1, -1, 3, -1}, + { 2, -1, -1, 1, -1, -1, 2, -1}, + { 5, -1, -1, 3, -1, -1, 2, -1}, + { 1, -1, -1, 2, -1, -1, 1, -1}, + { 5, -1, -1, 2, -1, -1, 2, -1}, + { 6, -1, -1, 1, -1, -1, 7, -1}, + { 5, -1, -1, 5, -1, -1, 4, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, 6, 6, -1, -1, -1}, + {-1, 0, 4, 4, 4, 0, -1, -1}, + {-1, -1, -1, 6, 6, -1, -1, -1}, + {-1, -1, 2, 7, 2, -1, -1, -1}, + {-1, -1, -1, 6, 6, -1, -1, -1}, + {-1, 0, 5, 5, 5, 0, -1, -1}, + {-1, -1, -1, 3, 3, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, 4, 1, 3, -1, -1, -1}, + {-1, 1, -1, -1, 1, -1, -1, -1}, + {-1, -1, 4, 1, 3, 4, 1, -1}, + {-1, 1, 3, 4, -1, -1, 4, -1}, + {-1, 3, -1, -1, 3, 4, 1, -1}, + {-1, 1, 3, 4, 1, 3, -1, -1}, + {-1, -1, 4, 1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 6, 4, -1, 3, 2, 5, -1}, + { 0, -1, -1, -1, -1, -1, 1, -1}, + {-1, 2, 3, 5, -1, 4, 6, -1}, + { 0, -1, -1, -1, -1, -1, 1, -1}, + {-1, 4, 6, -1, 2, 5, 3, -1}, + { 0, -1, -1, -1, -1, -1, 1, -1}, + {-1, 5, 2, 3, -1, 4, 6, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, 6, 6, -1, -1, -1}, + {-1, -1, 7, 6, 4, -1, -1, -1}, + {-1, 2, 1, 7, 4, 1, 3, -1}, + { 2, 1, 1, 1, 1, 1, 3, -1}, + {-1, 2, 2, 2, 3, 3, 3, -1}, + {-1, -1, -1, 5, -1, -1, -1, -1}, + {-1, -1, -1, 2, 3, -1, -1, -1}, + {-1, -1, -1, 5, -1, -1, -1, -1}, + {-1, -1, 2, 2, 3, 3, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 4, -1, 5, -1, -1, 3, -1, 6}, + { 2, -1, 3, -1, 2, -1, 4, -1}, + { 4, -1, -1, 1, 0, -1, -1, 6}, + { 6, -1, 2, 3, 5, -1, 4, -1}, + { 4, -1, -1, 0, 1, -1, -1, 6}, + { 2, -1, 5, -1, 3, -1, 4, -1}, + { 4, -1, 3, -1, -1, 2, -1, 6}, + { 6, -1, -1, -1, -1, -1, 4, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 2, 6, 0, 5, 5, 1, 3, 4}, + { 1, -1, -1, 2, -1, -1, 0, -1}, + { 4, -1, -1, 3, 6, -1, -1, 2}, + {-1, -1, -1, 0, -1, -1, -1, -1}, + {-1, -1, -1, 1, 4, -1, -1, -1}, + {-1, -1, -1, 2, -1, -1, -1, -1}, + {-1, -1, -1, 6, 3, -1, -1, -1}, + {-1, -1, -1, 5, -1, -1, -1, -1}, + {-1, -1, -1, 4, 1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, -1, 5, 1, 1, 3}, + { 0, 5, 1, 0, 5, 3, 3, -1}, + { 5, 1, 0, 5, 1, 0, 5, 1}, + { 0, 5, 1, 0, 5, 1, 6, -1}, + {-1, -1, -1, -1, 1, 6, 5, 1}, + {-1, -1, -1, -1, 5, 1, 6, -1}, + {-1, -1, -1, -1, 1, 0, 5, 1}, + {-1, -1, -1, -1, 5, 1, 0, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 0, 7, 3, -1, -1, 2, 2}, + {-1, 0, 7, 3, -1, -1, 2, -1}, + {-1, 0, 7, 3, -1, -1, 2, 2}, + {-1, 0, 7, 3, -1, 3, 1, -1}, + {-1, 0, 7, 3, -1, 6, 4, 5}, + {-1, 0, 7, 3, -1, 7, 0, -1}, + {-1, 0, 7, 3, -1, 2, 3, 4}, + {-1, 0, 7, 3, -1, 5, 6, -1}, + {-1, -1, -1, -1, -1, 7, 0, 1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, 7, 7, 7, 7, -1}, + { 3, 4, 5, -1, -1, -1, 7, -1}, + { 2, -1, -1, -1, -1, -1, -1, 3}, + { 7, -1, -1, -1, -1, -1, 4, -1}, + { 7, -1, -1, -1, 3, 4, 5, 6}, + { 7, -1, -1, 2, 0, 1, 2, -1}, + { 6, -1, -1, -1, 3, 4, 5, 6}, + { 0, 1, -1, -1, -1, -1, -1, -1}, + { 2, 3, 4, -1, -1, -1, -1, -1}, + { 5, 6, 0, -1, -1, -1, -1, -1}}, + {{-1, 7, -1, -1, -1, -1, 2, -1}, + { 1, 1, -1, -1, -1, 3, 3, -1}, + {-1, 2, -1, -1, -1, -1, 4, -1}, + { 3, 3, -1, -1, -1, 5, 5, -1}, + {-1, 4, -1, -1, -1, -1, 6, -1}, + { 5, 5, -1, -1, -1, 1, 1, -1}, + {-1, 6, -1, -1, -1, -1, 7, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 4, -1, -1, -1, -1, 4, -1}, + { 2, -1, -1, 1, -1, -1, 2, -1}, + { 5, -1, -1, 0, 0, -1, -1, 5}, + { 5, -1, -1, 1, -1, -1, 6, -1}, + {-1, 4, 2, 7, 7, 5, 4, -1}, + {-1, -1, -1, 6, -1, -1, -1, -1}, + {-1, -1, -1, 3, 3, -1, -1, -1}, + {-1, -1, -1, 7, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 1, -1, -1, 2, 3, 4, -1}, + { 2, -1, -1, 3, 0, 4, -1, -1}, + { 4, -1, -1, 2, 3, 1, -1, -1}, + { 3, -1, 4, 3, 0, -1, -1, -1}, + { 4, -1, -1, 2, 5, 1, -1, -1}, + { 3, -1, 4, 5, 0, 4, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 2, -1, -1, 1, 1, -1, -1, 2}, + { 2, -1, 3, 3, 3, -1, 2, -1}, + {-1, 2, -1, 4, 4, -1, 2, -1}, + {-1, 7, 7, 0, 7, 7, -1, -1}, + {-1, -1, -1, 4, 4, -1, -1, -1}, + {-1, -1, 5, 7, 5, -1, -1, -1}, + { 6, 3, 2, 6, 4, 2, 3, 6}, + { 5, -1, -1, -1, -1, -1, 1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 4, 2, 3, 5, 7, 1, 3, 6}, + { 1, -1, -1, 1, -1, -1, 1, -1}, + { 3, 0, 1, 3, 2, 4, 3, 5}, + { 4, -1, -1, 4, -1, -1, 4, -1}, + {-1, 5, -1, -1, 5, -1, -1, 5}, + { 0, 3, 2, 0, 4, 5, 0, -1}, + {-1, 6, -1, -1, 6, -1, -1, 6}, + { 7, -1, -1, 7, -1, -1, 7, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 5, 4, -1, 1, 1, -1, -1}, + { 5, -1, 4, 1, -1, 1, -1, -1}, + { 0, -1, -1, -1, -1, -1, 0, -1}, + { 0, 6, 4, -1, -1, 4, 2, -1}, + {-1, 4, 3, 5, 2, 6, 3, 6}, + {-1, 2, 6, -1, -1, 5, 4, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, 6, 6, -1, -1, -1}, + {-1, -1, 5, 5, 4, -1, -1, -1}, + {-1, -1, 1, 6, 6, 4, -1, -1}, + {-1, 1, 7, 2, 5, 3, -1, -1}, + {-1, 2, 7, 2, 1, 5, 3, -1}, + { 2, 1, 3, 1, 4, 2, 7, -1}, + {-1, 3, 1, 3, 4, 2, 7, -1}, + {-1, 3, 5, 5, 6, 6, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, 7, 3, -1, -1, -1, -1}, + {-1, 1, 7, 6, -1, -1, -1, -1}, + {-1, 3, 7, 5, 1, 5, -1, -1}, + { 7, 7, 0, 2, 4, 0, 4, -1}, + { 7, 1, 4, 6, 5, 6, 5, 7}, + { 1, 7, 7, 1, 7, 7, 1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, 1, -1, -1, 1, -1, -1}, + {-1, 5, 6, 1, 5, 6, -1, -1}, + {-1, 1, 1, 2, 2, 1, 1, -1}, + { 4, 7, 1, 0, 1, 7, 4, -1}, + {-1, 3, 7, 5, 7, 5, 3, -1}, + {-1, 1, 1, 1, 1, 1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 4, -1, -1, -1, 5, -1, -1, 4}, + { 6, 6, 7, 6, -1, 4, 5, -1}, + { 4, 2, 7, 5, 2, 2, 6, 4}, + {-1, -1, 4, 1, -1, 5, 2, -1}, + {-1, 5, 2, 7, 7, -1, 7, 4}, + { 4, 6, 5, 4, -1, 4, 2, -1}, + {-1, -1, -1, 4, -1, 4, 1, -1}, + { 0, 0, 0, 5, -1, -1, -1, -1}, + {-1, -1, -1, -1, 0, 0, 0, 0}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 1, -1, -1, -1, 0, 0, -1, -1}, + { 2, -1, -1, 0, 1, 0, -1, -1}, + { 3, -1, -1, 0, 2, 2, 0, -1}, + { 4, -1, 0, 1, 1, 1, 0, -1}, + { 5, -1, -1, 0, 4, 4, 0, -1}, + { 6, -1, -1, 4, 4, 4, -1, -1}, + { 7, -1, -1, -1, 4, 4, -1, -1}, + {-1, -1, -1, 0, 1, 0, -1, -1}, + {-1, -1, -1, 0, 1, 1, 0, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, 3, -1, -1, 1, 7, -1}, + {-1, 7, 4, -1, -1, 4, 3, -1}, + { 1, -1, -1, 0, 2, 0, -1, -1}, + { 5, 4, -1, 3, -1, -1, -1, -1}, + { 4, -1, 3, 6, 1, 1, 6, -1}, + {-1, 1, -1, -1, 4, -1, 1, -1}, + {-1, 7, 5, -1, -1, -1, 3, -1}, + {-1, -1, 3, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 1, -1, -1, -1, 1, -1, -1, -1}, + { 2, -1, -1, -1, 2, -1, -1, -1}, + {-1, 3, -1, -1, 3, 3, -1, -1}, + {-1, 4, -1, 4, -1, 4, -1, -1}, + {-1, 5, -1, -1, 5, 5, -1, -1}, + { 6, -1, -1, 7, 1, 7, -1, -1}, + { 7, -1, -1, -1, 6, 6, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 2, -1, -1, 6, -1, 2, 5, 1}, + { 5, -1, 4, -1, 4, -1, 4, -1}, + { 6, -1, -1, 3, -1, -1, -1, 3}, + { 4, 2, 0, -1, -1, -1, 5, -1}, + {-1, -1, -1, 6, -1, 3, 6, -1}, + {-1, -1, 5, -1, 5, -1, -1, -1}, + {-1, -1, -1, 3, -1, 4, 2, 5}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 6, -1, -1, -1, 4, -1, -1, 3}, + { 0, 3, -1, -1, 6, -1, 0, -1}, + {-1, -1, 7, -1, 1, -1, 3, -1}, + { 7, -1, 4, 7, -1, 2, -1, -1}, + { 5, 2, 3, 2, 1, 6, -1, 3}, + {-1, -1, 0, 4, 3, 5, 4, -1}, + {-1, 7, 6, -1, -1, 0, -1, -1}, + { 4, 3, -1, -1, -1, 4, 2, -1}, + { 0, -1, -1, -1, -1, -1, 6, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 6, 1, 2, 5, 1, 6, 3, 0}, + {-1, -1, -1, -1, -1, -1, 4, -1}, + { 0, 5, 2, 7, 1, 6, 2, -1}, + { 3, -1, -1, -1, -1, -1, -1, -1}, + { 6, 7, 6, 4, 0, 5, 2, 6}, + {-1, -1, -1, -1, -1, -1, 1, -1}, + { 6, 1, 4, 0, 6, 2, 3, -1}, + { 0, -1, -1, -1, -1, -1, -1, -1}, + {-1, 0, 4, 5, 3, 7, 6, 0}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, 0, 1, -1, -1, -1}, + {-1, -1, 0, 7, 0, -1, -1, -1}, + {-1, -1, 1, 2, 2, 0, -1, -1}, + {-1, 0, 7, 0, 7, 0, -1, -1}, + {-1, 6, -1, 7, 7, -1, 6, -1}, + { 4, 1, 6, 6, 6, 4, 1, -1}, + {-1, 5, -1, 7, 7, -1, 5, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, 5, 6, -1, -1, -1}, + {-1, -1, 3, 3, 3, -1, -1, -1}, + {-1, -1, 7, 5, 3, 7, -1, -1}, + {-1, 3, -1, 6, -1, 3, -1, -1}, + { 2, -1, -1, 3, 7, -1, -1, 1}, + { 2, 2, -1, 3, -1, 1, 1, -1}, + {-1, 0, 2, 5, 6, 1, 0, -1}, + {-1, -1, -1, 3, -1, -1, -1, -1}, + {-1, -1, -1, 3, 7, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 6, -1, -1, -1, -1, 2, -1}, + {-1, 2, 6, 0, 6, 0, -1, -1}, + {-1, 0, -1, -1, -1, -1, -1, -1}, + { 6, -1, -1, -1, -1, -1, -1, -1}, + {-1, 3, 3, 2, 0, 6, 0, 0}, + {-1, 6, -1, -1, -1, -1, 0, -1}, + {-1, -1, -1, 6, 0, 2, 6, -1}, + {-1, 2, 0, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 0, 7, -1, -1, -1, -1, -1, -1}, + { 1, 5, -1, -1, -1, -1, -1, -1}, + { 7, 2, 5, -1, -1, -1, -1, -1}, + { 6, 3, 4, -1, -1, -1, -1, -1}, + { 5, 5, 4, 4, -1, -1, -1, -1}, + { 3, 3, 5, 3, -1, -1, -1, -1}, + { 1, 2, 2, 5, 3, -1, -1, -1}, + { 1, 0, 0, 7, 6, -1, -1, -1}, + { 3, 3, 5, 5, 7, 6, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, 2, 6, 6, 2, -1, -1}, + {-1, 2, 1, 1, 0, 2, -1, -1}, + {-1, 2, 3, 2, 2, 0, 2, -1}, + { 2, 3, 2, 5, 2, 7, 2, -1}, + { 2, 4, 2, 5, 2, 7, 2, 0}, + { 2, 4, 2, 6, 6, 2, 0, -1}, + {-1, 2, 5, 2, 2, 2, 7, 2}, + {-1, 2, 5, 6, 6, 7, 2, -1}, + {-1, -1, 2, 2, 2, 2, 2, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, 0, -1, -1, 0, -1, -1}, + { 1, 0, 0, 1, 0, 0, 1, -1}, + { 1, 7, 7, 5, 5, 7, 7, 1}, + { 3, 2, -1, 2, -1, 2, 3, -1}, + { 3, 7, -1, 6, 6, -1, 7, 3}, + { 7, -1, -1, 6, -1, -1, 7, -1}, + { 4, 4, 5, -1, -1, 5, 4, 4}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 6, 3, -1, -1, 3, 6, -1}, + { 6, -1, 2, -1, 2, -1, 6, -1}, + { 2, -1, 0, 1, 1, 0, -1, 2}, + { 5, 0, -1, 7, -1, 0, 5, -1}, + {-1, 5, -1, 6, 6, -1, 5, -1}, + { 7, 1, 4, -1, 4, 1, 7, -1}, + { 7, -1, 4, -1, -1, 4, -1, 7}, + { 2, 0, -1, -1, -1, 0, 2, -1}, + {-1, 2, -1, -1, -1, -1, 2, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 6, 1, -1, -1, -1, -1, 4, 0}, + { 2, 7, 5, 5, 5, 7, 3, -1}, + { 6, 1, -1, -1, -1, -1, 4, 0}, + { 2, 5, 7, 7, 7, 5, 3, -1}, + { 6, 1, -1, -1, -1, -1, 4, 0}, + { 2, 0, 6, 6, 6, 0, 3, -1}, + { 6, 1, -1, -1, -1, -1, 4, 0}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 5, -1, -1, 1, 1, -1, -1, 5}, + { 5, -1, 4, -1, 4, -1, 5, -1}, + {-1, 2, 4, -1, -1, 4, 2, -1}, + { 7, 2, -1, -1, -1, 2, 7, -1}, + { 0, -1, 0, 4, 4, 0, -1, 0}, + { 7, 2, -1, -1, -1, 2, 7, -1}, + {-1, 2, 3, -1, -1, 3, 2, -1}, + { 5, -1, 3, -1, 3, -1, 5, -1}, + { 5, -1, -1, 6, 6, -1, -1, 5}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 2, 2, -1, -1, -1, -1, 5, 5}, + { 5, -1, -1, -1, -1, -1, 2, -1}, + { 5, -1, -1, -1, -1, -1, -1, 2}, + { 1, -1, 1, 5, 1, -1, 3, -1}, + { 5, 2, 5, 3, 1, 2, 5, 2}, + { 2, 0, 5, -1, 2, 0, 5, -1}, + {-1, 3, 7, -1, -1, 3, 7, -1}, + {-1, -1, 2, 0, 5, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 0, 6, 5, 2, 3, 4, 1, 7}, + {-1, -1, -1, -1, 1, -1, -1, -1}, + {-1, -1, -1, 1, 1, -1, -1, -1}, + {-1, -1, 1, -1, -1, -1, -1, -1}, + { 7, 1, 4, 3, 2, 5, 6, 0}, + {-1, -1, -1, -1, 1, -1, -1, -1}, + {-1, -1, -1, 1, 1, -1, -1, -1}, + {-1, -1, 1, -1, -1, -1, -1, -1}, + { 0, 6, 5, 2, 3, 4, 1, 7}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, 1, -1, -1, 1, -1, -1}, + {-1, 2, 4, -1, 2, 4, -1, -1}, + {-1, 2, 3, 6, 5, 3, 2, -1}, + {-1, 6, 5, -1, 6, 5, -1, -1}, + {-1, -1, -1, 7, 7, -1, -1, -1}, + {-1, -1, -1, 7, -1, -1, -1, -1}, + { 1, -1, -1, 7, 7, -1, -1, 3}, + { 2, -1, -1, 7, -1, -1, 2, -1}, + {-1, 3, 4, 5, 6, 4, 1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 1, -1, -1, 2, 2, -1, -1, 2}, + { 1, 3, 7, 3, 7, 4, 2, -1}, + {-1, 1, 6, -1, -1, 6, 2, -1}, + { 6, -1, 7, 3, 7, -1, 6, -1}, + {-1, 4, 2, -1, -1, 1, 3, -1}, + {-1, -1, 2, 6, 1, -1, -1, -1}, + {-1, 4, 3, 3, 4, 4, 3, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, -1, -1, 5, 6, -1, -1, -1}, + {-1, -1, -1, 3, -1, -1, -1, -1}, + {-1, -1, -1, 1, 2, -1, -1, -1}, + {-1, -1, -1, 4, -1, -1, -1, -1}, + {-1, -1, -1, 5, 7, -1, -1, -1}, + {-1, -1, -1, 2, -1, -1, -1, -1}, + { 6, 5, 4, 3, 2, 1, 7, 5}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{-1, 0, -1, 1, -1, 2, -1, -1}, + {-1, 4, -1, 5, -1, 6, -1, -1}, + {-1, 7, -1, 0, -1, 2, -1, -1}, + {-1, 6, -1, 3, -1, 6, -1, -1}, + {-1, 1, -1, 1, -1, 2, -1, -1}, + {-1, 3, -1, 5, -1, 0, -1, -1}, + {-1, 2, -1, 4, -1, 6, -1, -1}, + {-1, 3, -1, 6, -1, 7, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 1, 1, 2, 2, 3, 3, 4, 4}, + { 5, 5, 6, 7, 6, 5, 5, -1}, + { 6, 4, 3, 3, 2, 2, 1, 6}, + { 4, 6, 5, 7, 6, 3, 1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 7, 4, -1, 1, 2, -1, 4, 7}, + { 5, 5, -1, 2, -1, 4, 4, -1}, + {-1, 5, -1, 7, 7, -1, 4, -1}, + { 1, 0, 6, 7, 6, 0, 2, -1}, + {-1, 2, -1, 5, 3, -1, 1, -1}, + { 1, 1, -1, -1, -1, 2, 2, -1}, + { 6, 1, 4, -1, -1, 4, 2, 6}, + { 5, 3, -1, -1, -1, 3, 5, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 1, 5, 1, 0, 0, 1, 5, 1}, + { 1, 2, 5, -1, 5, 2, 1, -1}, + { 3, 6, 1, 2, 2, 1, 6, 3}, + { 4, 3, 4, -1, 4, 3, 4, -1}, + { 3, 4, 6, 5, 5, 6, 4, 3}, + { 0, 2, 3, -1, 3, 2, 0, -1}, + { 2, 3, 1, 5, 5, 1, 3, 2}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}}, + {{ 3, 0, 2, 7, 5, 7, 6, 5}, + { 6, -1, 1, -1, 2, -1, 1, -1}, + {-1, 6, 4, 0, 3, 4, 5, -1}, + {-1, 5, -1, 1, -1, 4, -1, -1}, + {-1, 7, 3, 5, 6, 5, 3, -1}, + { 1, -1, 2, -1, 4, -1, 2, -1}, + { 6, 4, 4, 6, 6, 5, 5, 1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}, + {-1, -1, -1, -1, -1, -1, -1, -1}} +}; + +/* the tile struct + * type is the bubble number 0-7 + * fallx is the x axis movement for the falling bubble + * ingroup denotes a bubble that is part of a group to be removed + * anchored denotes a bubble that is anchored to the ceiling + */ +struct tile { + int type; + int fallx; + bool ingroup; + bool anchored; + bool delete; +}; + +/* the highscore struct + * level is the highscore level + * score is the highscore score + */ +struct highscore { + unsigned int level; + unsigned int score; +}; + +/* the game context struct + * score is the current score + * level is the current level + * highlevel is the highest level beaten + * highscores is the list of high scores + * angle is the current cannon direction + * shots is the number of shots fired since last compression + * compress is the height of the compressor + * onboardcnt is the number of unique bubbles on the playing board + * onboard is the unique bubbles on the playing board + * nextinq is the pointer to the next bubble in the firing queue + * queue is the circular buffer of bubbles to be fired + * elapsedlvl is level elapsed time in 1/100s of seconds + * elapsedshot is the shot elapsed time in 1/100s of seconds + * resume denotes whether to resume the currently loaded game + * dirty denotes whether the high scores are out of sync with the saved file + * playboard is the game playing board + */ +struct game_context { + unsigned int score; + unsigned int level; + unsigned int highlevel; + struct highscore highscores[NUM_SCORES]; + int angle; + int shots; + int compress; + int onboardcnt; + int onboard[NUM_BUBBLES]; + int nextinq; + int queue[NUM_QUEUE]; + long elapsedlvl; + long elapsedshot; + bool resume; + bool dirty; + struct tile playboard[BB_HEIGHT][BB_WIDTH]; +}; + +/* + * Precalculated sine and cosine * 16384 (fixed point 18.14) + * Borrowed from cube.c plugin + */ +static const short sin_table[91] = { + 0, 285, 571, 857, 1142, 1427, 1712, 1996, 2280, 2563, + 2845, 3126, 3406, 3685, 3963, 4240, 4516, 4790, 5062, 5334, + 5603, 5871, 6137, 6401, 6663, 6924, 7182, 7438, 7691, 7943, + 8191, 8438, 8682, 8923, 9161, 9397, 9630, 9860, 10086, 10310, + 10531, 10748, 10963, 11173, 11381, 11585, 11785, 11982, 12175, 12365, + 12550, 12732, 12910, 13084, 13254, 13420, 13582, 13740, 13894, 14043, + 14188, 14329, 14466, 14598, 14725, 14848, 14967, 15081, 15190, 15295, + 15395, 15491, 15582, 15668, 15749, 15825, 15897, 15964, 16025, 16082, + 16135, 16182, 16224, 16261, 16294, 16321, 16344, 16361, 16374, 16381, + 16384 +}; + +static long sin(int val) { + val = (val+360)%360; + + if(val < 181) { + if(val < 91) { + /* phase 0-90 degree */ + return (long)sin_table[val]; + } else { + /* phase 91-180 degree */ + return (long)sin_table[180-val]; + } + } else { + if(val < 271) { + /* phase 181-270 degree */ + return -(long)sin_table[val-180]; + } else { + /* phase 270-359 degree */ + return -(long)sin_table[360-val]; + } + } + return 0; +} + +static long cos(int val) { + val = (val+360)%360; + + if(val < 181) { + if(val < 91) { + /* phase 0-90 degree */ + return (long)sin_table[90-val]; + } else { + /* phase 91-180 degree */ + return -(long)sin_table[val-90]; + } + } else { + if(val < 271) { + /* phase 181-270 degree */ + return -(long)sin_table[270-val]; + } else { + /* phase 270-359 degree */ + return (long)sin_table[val-270]; + } + } + return 0; +} + + + +static void bubbles_init(struct game_context* bb); +static bool bubbles_nextlevel(struct game_context* bb); +static void bubbles_getonboard(struct game_context* bb); +static void bubbles_drawboard(struct game_context* bb); +static int bubbles_fire(struct game_context* bb); +static bool bubbles_collision(struct game_context* bb, int y, int x, + int nearrow, int nearcol); +static bool bubbles_ingroup(struct game_context* bb, int row, int col); +static int bubbles_searchgroup(struct game_context* bb, int row, int col); +static int bubbles_remove(struct game_context* bb); +static void bubbles_anchored(struct game_context* bb, int row, int col); +static int bubbles_fall(struct game_context* bb); +static int bubbles_checklevel(struct game_context* bb); +static int bubbles_recordscore(struct game_context* bb); +static void bubbles_savescores(struct game_context* bb); +static bool bubbles_loadgame(struct game_context* bb); +static void bubbles_savegame(struct game_context* bb); +static void bubbles_setcolors(void); +static void bubbles_callback(void* param); +static int bubbles_handlebuttons(struct game_context* bb, bool animblock); +static int bubbles(struct game_context* bb); + +/***************************************************************************** +* bubbles_init() initializes bubbles data structures. +******************************************************************************/ +static void bubbles_init(struct game_context* bb) { + /* seed the rand generator */ + rb->srand(*rb->current_tick); + + /* check for resumed game */ + if(bb->resume) { + bb->resume = false; + return; + } + + bb->score = 0; + bubbles_nextlevel(bb); +} + +/***************************************************************************** +* bubbles_nextlevel() sets up the game for the next level, returns false if +* there are no more levels. +******************************************************************************/ +static bool bubbles_nextlevel(struct game_context* bb) { + int i, j, pos; + + bb->level++; + + /* check if there are no more levels */ + if(bb->level > NUM_LEVELS) return false; + + /* set up the play board */ + rb->memset(bb->playboard, 0, sizeof(bb->playboard)); + for(i=0; ilevel-1][i][j]; + if(pos >=0 && pos < NUM_BUBBLES) { + bb->playboard[i][j].type = pos; + } else { + bb->playboard[i][j].type = -1; + } + } + } + for(i=BB_LEVEL_HEIGHT; iplayboard[i][j].type = -1; + } + } + + /* fill first bubbles in shot queue */ + bubbles_getonboard(bb); + for(i=0; iqueue[i] = bb->onboard[rb->rand()%bb->onboardcnt]; + } + + bb->angle = 0; + bb->shots = 0; + bb->compress = 0; + bb->nextinq = 0; + bb->elapsedlvl = 0; + bb->elapsedshot = 0; + + return true; +} + +/***************************************************************************** +* bubbles_getonboard() determines which bubble types are on the play board. +******************************************************************************/ +static void bubbles_getonboard(struct game_context* bb) { + int i, j, k; + bool found; + + bb->onboardcnt = 0; + rb->memset(bb->onboard, -1, sizeof(bb->onboard)); + + for(i=0; iplayboard[i][j].type >= 0) { + found = false; + + for(k=0; konboardcnt; k++) { + if(bb->playboard[i][j].type == bb->onboard[k]) { + found = true; + break; + } + } + + if(!found) { + bb->onboard[bb->onboardcnt] = bb->playboard[i][j].type; + bb->onboardcnt++; + } + + if(bb->onboardcnt == NUM_BUBBLES) return; + } + } + } +} + +/***************************************************************************** +* bubbles_drawboard() draws the game board to the buffer but does not update +* the lcd. +******************************************************************************/ +static void bubbles_drawboard(struct game_context* bb) { + int i, j; + int w, h; + int colmax, indent; + int tipx, tipy; + bool evenline = false; + char *level = "Level"; + char *score = "Score"; + char *next = "Next"; + char *hurry = "HURRY!"; + char str[11]; + + /* clear screen */ + rb->lcd_clear_display(); + + /* draw sidebars */ +#ifdef HAVE_LCD_COLOR + rb->lcd_bitmap(bubbles_left, 0, 0, XOFS, LCD_HEIGHT); + rb->lcd_bitmap(bubbles_right, XOFS-1+BB_WIDTH*BUBBLE_SZ, 0, + LCD_WIDTH-(XOFS-1+BB_WIDTH*BUBBLE_SZ), LCD_HEIGHT); +#endif + + /* display play board */ + for(i=0; iplayboard[i][j].type >= 0 && !bb->playboard[i][j].delete) { + rb->lcd_bitmap_part(bubbles_emblem, + 0, EMBLEM_SZ*bb->playboard[i][j].type, EMBLEM_SZ, + XOFS+indent+BUBBLE_SZ*j+(BUBBLE_SZ-EMBLEM_SZ)/2, + ROW_HEIGHT*i+(BUBBLE_SZ-EMBLEM_SZ)/2+bb->compress*ROW_HEIGHT, + EMBLEM_SZ, EMBLEM_SZ); + rb->lcd_set_drawmode(DRMODE_FG); + rb->lcd_mono_bitmap((const unsigned char *)bubbles_bubble, + XOFS+indent+BUBBLE_SZ*j, + ROW_HEIGHT*i+bb->compress*ROW_HEIGHT, + BUBBLE_SZ, BUBBLE_SZ); + rb->lcd_set_drawmode(DRMODE_SOLID); + } + } + } + + /* display bubble to be shot */ + rb->lcd_bitmap_part(bubbles_emblem, + 0, EMBLEM_SZ*bb->queue[bb->nextinq], EMBLEM_SZ, + SHOTX+(BUBBLE_SZ-EMBLEM_SZ)/2, + SHOTY+(BUBBLE_SZ-EMBLEM_SZ)/2, + EMBLEM_SZ, EMBLEM_SZ); + rb->lcd_set_drawmode(DRMODE_FG); + rb->lcd_mono_bitmap((const unsigned char *)bubbles_bubble, + SHOTX, SHOTY, + BUBBLE_SZ, BUBBLE_SZ); + rb->lcd_set_drawmode(DRMODE_SOLID); + + /* display next bubble to be shot */ + rb->lcd_bitmap_part(bubbles_emblem, + 0, EMBLEM_SZ*bb->queue[(bb->nextinq+1)%NUM_QUEUE], EMBLEM_SZ, + XOFS/2-BUBBLE_SZ/2+(BUBBLE_SZ-EMBLEM_SZ)/2, + SHOTY+(BUBBLE_SZ-EMBLEM_SZ)/2, + EMBLEM_SZ, EMBLEM_SZ); + rb->lcd_set_drawmode(DRMODE_FG); + rb->lcd_mono_bitmap((const unsigned char *)bubbles_bubble, + XOFS/2-BUBBLE_SZ/2, SHOTY, + BUBBLE_SZ, BUBBLE_SZ); + rb->lcd_set_drawmode(DRMODE_SOLID); + + /* draw bounding lines */ +#ifndef HAVE_LCD_COLOR + rb->lcd_vline(XOFS-1, 0, LCD_HEIGHT); + rb->lcd_vline(XOFS+BUBBLE_SZ*BB_WIDTH, 0, LCD_HEIGHT); +#endif + rb->lcd_hline(XOFS, XOFS+BUBBLE_SZ*BB_WIDTH-1, bb->compress*ROW_HEIGHT-1); + rb->lcd_hline(XOFS, XOFS+BUBBLE_SZ*BB_WIDTH-1, + ROW_HEIGHT*(BB_HEIGHT-2)+BUBBLE_SZ); + + /* draw arrow */ + tipx = SHOTX+BUBBLE_SZ/2+(((sin(bb->angle)>>4)*BUBBLE_SZ*3/2)>>10); + tipy = SHOTY+BUBBLE_SZ/2-(((cos(bb->angle)>>4)*BUBBLE_SZ*3/2)>>10); + + rb->lcd_drawline(SHOTX+BUBBLE_SZ/2+(((sin(bb->angle)>>4)*BUBBLE_SZ/2)>>10), + SHOTY+BUBBLE_SZ/2-(((cos(bb->angle)>>4)*BUBBLE_SZ/2)>>10), + tipx, tipy); + xlcd_filltriangle(tipx, tipy, + tipx+(((sin(bb->angle-135)>>4)*BUBBLE_SZ/3)>>10), + tipy-(((cos(bb->angle-135)>>4)*BUBBLE_SZ/3)>>10), + tipx+(((sin(bb->angle+135)>>4)*BUBBLE_SZ/3)>>10), + tipy-(((cos(bb->angle+135)>>4)*BUBBLE_SZ/3)>>10)); + + /* draw text */ + rb->lcd_getstringsize(level, &w, &h); + rb->lcd_putsxy(XOFS/2-w/2, 2, level); + + rb->snprintf(str, 4, "%d", bb->level); + rb->lcd_getstringsize(str, &w, &h); + rb->lcd_putsxy(XOFS/2-w/2, 11, str); + + rb->lcd_getstringsize(score, &w, &h); + rb->lcd_putsxy(XOFS/2-w/2, 29, score); + + rb->snprintf(str, 10, "%d", bb->score); + rb->lcd_getstringsize(str, &w, &h); + rb->lcd_putsxy(XOFS/2-w/2, 38, str); + + rb->lcd_getstringsize(next, &w, &h); + rb->lcd_putsxy(XOFS/2-w/2, SHOTY-9, next); + + if(bb->elapsedshot >= (MAX_SHOTTIME*7)/10) { + rb->lcd_getstringsize(hurry, &w, &h); + rb->lcd_putsxy(LCD_WIDTH/2-w/2, LCD_HEIGHT/2-h/2, hurry); + } +} + +/***************************************************************************** +* bubbles_fire() fires the current bubble, reloads the cannon, attaches +* bubble to playboard, removes appropriate bubbles, and advances the +* the compressor. +******************************************************************************/ +static int bubbles_fire(struct game_context* bb) { + int bubblecur; + long shotxinc, shotyinc; + long shotxofs, shotyofs; + int shotxdirec = 1; + long tempxofs, tempyofs; + int nearrow, nearcol; + int lastrow = BB_HEIGHT-1; + int lastcol = (BB_WIDTH-1)/2; + int buttonres; + long lasttick, currenttick; + + /* get current bubble */ + bubblecur = bb->queue[bb->nextinq]; + shotxinc = ((sin(bb->angle)>>4)*BUBBLE_SZ)/3; + shotyinc = ((-1*(cos(bb->angle)>>4))*BUBBLE_SZ)/3; + shotxofs = shotyofs = 0; + + /* advance the queue */ + bb->queue[bb->nextinq] = bb->onboard[rb->rand()%bb->onboardcnt]; + bb->nextinq = (bb->nextinq+1)%NUM_QUEUE; + bubbles_drawboard(bb); + rb->lcd_update_rect(0, 0, XOFS, LCD_HEIGHT); + + /* move the bubble across the play board */ + lasttick = *rb->current_tick; + + while(true) { + /* move the bubble one step */ + shotyofs += shotyinc; + shotxofs += shotxinc*shotxdirec; + + /* check for bounce off sides */ + if(SHOTX+(shotxofs>>10) < XOFS) { + shotxofs += 2*((XOFS<<10)-(((SHOTX)<<10)+shotxofs)); + shotxdirec *= -1; + } else if(SHOTX+(shotxofs>>10) > XOFS+(BB_WIDTH-1)*BUBBLE_SZ) { + shotxofs -= 2*((((SHOTX)<<10)+shotxofs)-((XOFS<<10)+(((BB_WIDTH-1)*BUBBLE_SZ)<<10))); + shotxdirec *= -1; + } + + tempxofs = shotxofs>>10; + tempyofs = shotyofs>>10; + + /* display shot */ + bubbles_drawboard(bb); + rb->lcd_bitmap_part(bubbles_emblem, 0, EMBLEM_SZ*bubblecur, EMBLEM_SZ, + SHOTX+tempxofs+(BUBBLE_SZ-EMBLEM_SZ)/2, + SHOTY+tempyofs+(BUBBLE_SZ-EMBLEM_SZ)/2, + EMBLEM_SZ, EMBLEM_SZ); + rb->lcd_set_drawmode(DRMODE_FG); + rb->lcd_mono_bitmap((const unsigned char *)bubbles_bubble, + SHOTX+tempxofs, SHOTY+tempyofs, + BUBBLE_SZ, BUBBLE_SZ); + rb->lcd_set_drawmode(DRMODE_SOLID); + rb->lcd_update_rect(XOFS, 0, BB_WIDTH*BUBBLE_SZ, LCD_HEIGHT); + + /* find nearest position */ + nearrow = ((SHOTY+tempyofs)- + (bb->compress*ROW_HEIGHT)+ + (ROW_HEIGHT/2))/ROW_HEIGHT; + if(nearrow >= BB_HEIGHT) nearrow = BB_HEIGHT-1; + + if(nearrow%2) { /* odd row */ + nearcol = ((SHOTX+tempxofs)- + (XOFS+ROW_INDENT)+ + (BUBBLE_SZ/2))/BUBBLE_SZ; + if(nearcol >= BB_WIDTH-1) nearcol = BB_WIDTH-2; + } else { /* even row */ + nearcol = ((SHOTX+tempxofs)-XOFS+(BUBBLE_SZ/2))/BUBBLE_SZ; + if(nearcol >= BB_WIDTH) nearcol = BB_WIDTH-1; + } + if(nearcol < 0) nearcol = 0; + + /* if nearest position is occupied attach to last position */ + if(bb->playboard[nearrow][nearcol].type >= 0) { + bb->playboard[lastrow][lastcol].type = bubblecur; + break; + } + + /* save last position */ + lastrow = nearrow; + lastcol = nearcol; + + /* if collision with neighbor then attach shot */ + if(bubbles_collision(bb, SHOTY+tempyofs, SHOTX+tempxofs, + nearrow, nearcol)) { + bb->playboard[nearrow][nearcol].type = bubblecur; + break; + } + + /* if at top then attach shot to the ceiling */ + if(nearrow == 0 && SHOTY+tempyofs <= bb->compress*ROW_HEIGHT) { + bb->playboard[nearrow][nearcol].type = bubblecur; + break; + } + + /* handle button events */ + buttonres = bubbles_handlebuttons(bb, true); + if(buttonres != BB_NONE) return buttonres; + + /* framerate limiting */ + currenttick = *rb->current_tick; + if(currenttick-lasttick < HZ/MAX_FPS) { + rb->sleep((HZ/MAX_FPS)-(currenttick-lasttick)); + } else { + rb->yield(); + } + lasttick = currenttick; + } + + bubbles_drawboard(bb); + rb->lcd_update(); + + /* clear appropriate bubbles from playing board */ + if(bubbles_ingroup(bb, lastrow, lastcol)) { + buttonres = bubbles_remove(bb); + if(buttonres != BB_NONE) return buttonres; + } + + /* update shots and compress amount */ + bb->shots++; + if(bb->shots >= NUM_COMPRESS) { + bb->shots = 0; + bb->compress++; + } + + return BB_NONE; +} + +/***************************************************************************** +* bubbles_collision() determines if a fired bubble has collided with another +* bubble. +******************************************************************************/ +static bool bubbles_collision(struct game_context* bb, int y, int x, + int nearrow, int nearcol) { + int nx, ny; + int adj = nearrow%2; + + /* check neighbors */ + if(nearcol-1 >= 0) { + if(bb->playboard[nearrow][nearcol-1].type >= 0) { + nx = XOFS+(nearrow%2 ? ROW_INDENT : 0)+BUBBLE_SZ*(nearcol-1); + ny = ROW_HEIGHT*nearrow+bb->compress*ROW_HEIGHT; + if((x-nx)*(x-nx)+(y-ny)*(y-ny) < MIN_DISTANCE) return true; + } + } + + if(nearcol-1+adj >= 0) { + if(nearrow-1 >= 0) { + if(bb->playboard[nearrow-1][nearcol-1+adj].type >= 0) { + nx = XOFS+((nearrow-1)%2 ? ROW_INDENT : 0)+BUBBLE_SZ*(nearcol-1+adj); + ny = ROW_HEIGHT*(nearrow-1)+bb->compress*ROW_HEIGHT; + if((x-nx)*(x-nx)+(y-ny)*(y-ny) < MIN_DISTANCE) return true; + } + } + + if(nearrow+1 < BB_HEIGHT) { + if(bb->playboard[nearrow+1][nearcol-1+adj].type >= 0) { + nx = XOFS+((nearrow+1)%2 ? ROW_INDENT : 0)+BUBBLE_SZ*(nearcol-1+adj); + ny = ROW_HEIGHT*(nearrow+1)+bb->compress*ROW_HEIGHT; + if((x-nx)*(x-nx)+(y-ny)*(y-ny) < MIN_DISTANCE) return true; + } + } + } + + if(nearcol+adj >= 0) { + if(nearrow-1 >= 0) { + if(bb->playboard[nearrow-1][nearcol+adj].type >= 0) { + nx = XOFS+((nearrow-1)%2 ? ROW_INDENT : 0)+BUBBLE_SZ*(nearcol+adj); + ny = ROW_HEIGHT*(nearrow-1)+bb->compress*ROW_HEIGHT; + if((x-nx)*(x-nx)+(y-ny)*(y-ny) < MIN_DISTANCE) return true; + } + } + + if(nearrow+1 < BB_HEIGHT) { + if(bb->playboard[nearrow+1][nearcol+adj].type >= 0) { + nx = XOFS+((nearrow+1)%2 ? ROW_INDENT : 0)+BUBBLE_SZ*(nearcol+adj); + ny = ROW_HEIGHT*(nearrow+1)+bb->compress*ROW_HEIGHT; + if((x-nx)*(x-nx)+(y-ny)*(y-ny) < MIN_DISTANCE) return true; + } + } + } + + if(nearcol+1 < BB_WIDTH-adj) { + if(bb->playboard[nearrow][nearcol+1].type >= 0) { + nx = XOFS+(nearrow%2 ? ROW_INDENT : 0)+BUBBLE_SZ*(nearcol+1); + ny = ROW_HEIGHT*nearrow+bb->compress*ROW_HEIGHT; + if((x-nx)*(x-nx)+(y-ny)*(y-ny) < MIN_DISTANCE) return true; + } + } + + return false; +} + +/***************************************************************************** +* bubbles_ingroup() marks all bubbles that form the current group. +******************************************************************************/ +static bool bubbles_ingroup(struct game_context* bb, int row, int col) { + int i, j; + int count; + + count = bubbles_searchgroup(bb, row, col); + + /* unmark group if too small */ + if(count < 3) { + for(i=0; iplayboard[i][j].ingroup = false; + } + } + + return false; + } + + return true; +} + +/***************************************************************************** +* bubbles_searchgroup() return the size of the group of bubbles of the same +* type that the current bubble belongs to. +******************************************************************************/ +static int bubbles_searchgroup(struct game_context* bb, int row, int col) { + int count = 1; + int adj = row%2; + int mytype = bb->playboard[row][col].type; + + bb->playboard[row][col].ingroup = true; + + /* recursively call neighbors */ + if(col-1 >= 0) { + if(bb->playboard[row][col-1].type == mytype && + !bb->playboard[row][col-1].ingroup) { + count += bubbles_searchgroup(bb, row, col-1); + } + } + + if(col-1+adj >= 0) { + if(row-1 >= 0) { + if(bb->playboard[row-1][col-1+adj].type == mytype && + !bb->playboard[row-1][col-1+adj].ingroup) { + count += bubbles_searchgroup(bb, row-1, col-1+adj); + } + } + + if(row+1 < BB_HEIGHT) { + if(bb->playboard[row+1][col-1+adj].type == mytype && + !bb->playboard[row+1][col-1+adj].ingroup) { + count += bubbles_searchgroup(bb, row+1, col-1+adj); + } + } + } + + if(col+adj >= 0) { + if(row-1 >= 0) { + if(bb->playboard[row-1][col+adj].type == mytype && + !bb->playboard[row-1][col+adj].ingroup) { + count += bubbles_searchgroup(bb, row-1, col+adj); + } + } + + if(row+1 < BB_HEIGHT) { + if(bb->playboard[row+1][col+adj].type == mytype && + !bb->playboard[row+1][col+adj].ingroup) { + count += bubbles_searchgroup(bb, row+1, col+adj); + } + } + } + + if(col+1 < BB_WIDTH-adj) { + if(bb->playboard[row][col+1].type == mytype && + !bb->playboard[row][col+1].ingroup) { + count += bubbles_searchgroup(bb, row, col+1); + } + } + + return count; +} + +/***************************************************************************** +* bubbles_remove() removes all bubbles in the current group and all +* unanchored bubbles from the play board. +******************************************************************************/ +static int bubbles_remove(struct game_context* bb) { + int i, j; + int buttonres; + + /* determine all anchored bubbles */ + for(j=0; jplayboard[0][j].type >= 0 && !bb->playboard[0][j].ingroup) { + bubbles_anchored(bb, 0, j); + } + } + + /* mark bubbles to be deleted */ + for(i=0; iplayboard[i][j].type >= 0 && + (!bb->playboard[i][j].anchored || bb->playboard[i][j].ingroup)) { + bb->playboard[i][j].delete = true; + } + } + } + + /* animate falling bubbles */ + buttonres = bubbles_fall(bb); + if(buttonres != BB_NONE) return buttonres; + + /* remove bubbles */ + for(i=0; iplayboard[i][j].delete) { + bb->playboard[i][j].ingroup = false; + bb->playboard[i][j].type = -1; + bb->playboard[i][j].delete = false; + } else { + bb->playboard[i][j].anchored = false; + } + } + } + + bubbles_getonboard(bb); + + return BB_NONE; +} + +/***************************************************************************** +* bubbles_anchored() marks all bubbles that are anchored in some way to the +* current bubble. +******************************************************************************/ +static void bubbles_anchored(struct game_context* bb, int row, int col) { + int adj = row%2; + + /* mark bubble */ + bb->playboard[row][col].anchored = true; + + /* recursively call neighbors */ + if(col-1 >= 0) { + if(bb->playboard[row][col-1].type >= 0 && + !bb->playboard[row][col-1].ingroup && + !bb->playboard[row][col-1].anchored) { + bubbles_anchored(bb, row, col-1); + } + } + + if(col-1+adj >= 0) { + if(row-1 >= 0) { + if(bb->playboard[row-1][col-1+adj].type >= 0 && + !bb->playboard[row-1][col-1+adj].ingroup && + !bb->playboard[row-1][col-1+adj].anchored) { + bubbles_anchored(bb, row-1, col-1+adj); + } + } + + if(row+1 < BB_HEIGHT) { + if(bb->playboard[row+1][col-1+adj].type >= 0 && + !bb->playboard[row+1][col-1+adj].ingroup && + !bb->playboard[row+1][col-1+adj].anchored) { + bubbles_anchored(bb, row+1, col-1+adj); + } + } + } + + if(col+adj >= 0) { + if(row-1 >= 0) { + if(bb->playboard[row-1][col+adj].type >= 0 && + !bb->playboard[row-1][col+adj].ingroup && + !bb->playboard[row-1][col+adj].anchored) { + bubbles_anchored(bb, row-1, col+adj); + } + } + + if(row+1 < BB_HEIGHT) { + if(bb->playboard[row+1][col+adj].type >= 0 && + !bb->playboard[row+1][col+adj].ingroup && + !bb->playboard[row+1][col+adj].anchored) { + bubbles_anchored(bb, row+1, col+adj); + } + } + } + + if(col+1 < BB_WIDTH-adj) { + if(bb->playboard[row][col+1].type >= 0 && + !bb->playboard[row][col+1].ingroup && + !bb->playboard[row][col+1].anchored) { + bubbles_anchored(bb, row, col+1); + } + } +} + +/***************************************************************************** +* bubbles_fall() makes removed bubbles fall from the screen. +******************************************************************************/ +static int bubbles_fall(struct game_context* bb) { + int i, j; + int count; + int indent; + int xofs, yofs; + int buttonres; + bool onscreen; + long lasttick, currenttick; + + /* give all falling bubbles an x axis movement */ + for(i=0; iplayboard[i][j].delete) { + bb->playboard[i][j].fallx = rb->rand()%25 - 12; + } + } + } + + /* draw bubbles falling off the screen + * follows y=x^2-8x scaled to bubble size + */ + lasttick = *rb->current_tick; + + for(count=1; ;count++) { + onscreen = false; + bubbles_drawboard(bb); + + for(i=0; iplayboard[i][j].delete) { + indent = (i%2 ? ROW_INDENT : 0); + xofs = ((bb->playboard[i][j].fallx*count)*BUBBLE_SZ)/48; + yofs = ((count*count - 8*count)*BUBBLE_SZ)/20; + + /* draw bubble if it is still on the screen */ + if(ROW_HEIGHT*i+bb->compress*ROW_HEIGHT+yofs <= LCD_HEIGHT) { + onscreen = true; + + rb->lcd_bitmap_part(bubbles_emblem, + 0, EMBLEM_SZ*bb->playboard[i][j].type, EMBLEM_SZ, + XOFS+indent+BUBBLE_SZ*j+(BUBBLE_SZ-EMBLEM_SZ)/2+xofs, + ROW_HEIGHT*i+(BUBBLE_SZ-EMBLEM_SZ)/2+bb->compress*ROW_HEIGHT+yofs, + EMBLEM_SZ, EMBLEM_SZ); + rb->lcd_set_drawmode(DRMODE_FG); + rb->lcd_mono_bitmap( + (const unsigned char *)bubbles_bubble, + XOFS+indent+BUBBLE_SZ*j+xofs, + ROW_HEIGHT*i+bb->compress*ROW_HEIGHT+yofs, + BUBBLE_SZ, BUBBLE_SZ); + rb->lcd_set_drawmode(DRMODE_SOLID); + } + } + } + } + + rb->lcd_update(); + + /* break out if all bubbles are off the screen */ + if(!onscreen) break; + + /* handle button events */ + buttonres = bubbles_handlebuttons(bb, true); + if(buttonres != BB_NONE) return buttonres; + + /* framerate limiting */ + currenttick = *rb->current_tick; + if(currenttick-lasttick < HZ/MAX_FPS) { + rb->sleep((HZ/MAX_FPS)-(currenttick-lasttick)); + } else { + rb->yield(); + } + lasttick = currenttick; + } + + return BB_NONE; +} + +/***************************************************************************** +* bubbles_checklevel() checks the state of the playboard for a win or loss. +******************************************************************************/ +static int bubbles_checklevel(struct game_context* bb) { + int i, j; + int points; + char str[13]; + + bubbles_drawboard(bb); + rb->lcd_update(); + + /* check for bubbles below cut off point */ + for(i=0; i<=bb->compress; i++) { + for(j=0; jplayboard[BB_HEIGHT-1-i][j].type >= 0) return BB_LOSE; + } + } + + /* check for bubbles above cut off point */ + for(i=0; icompress; i++) { + for(j=0; jplayboard[i][j].type >= 0) return BB_NONE; + } + } + + /* level complete, record score */ + points = 100 - bb->elapsedlvl/100; + if(points > 0) { + bb->score += points; + } else { + points = 0; + } + + rb->snprintf(str, 12, "%d points", points); + rb->splash(HZ, true, str); + + /* advance to the next level */ + if(!bubbles_nextlevel(bb)) { + return BB_WIN; + } + + bubbles_drawboard(bb); + rb->lcd_update(); + rb->snprintf(str, 12, "Level %d", bb->level); + rb->splash(HZ, true, str); + bubbles_drawboard(bb); + rb->lcd_update(); + + return BB_NONE; +} + +/***************************************************************************** +* bubbles_recordscore() inserts a high score into the high scores list and +* returns the high score position. +******************************************************************************/ +static int bubbles_recordscore(struct game_context* bb) { + int i; + int position = 0; + unsigned int currentscore, currentlevel; + unsigned int tempscore, templevel; + + if(bb->score > 0) { + currentlevel = bb->level-1; + currentscore = bb->score; + + for(i=0; i= bb->highscores[i].score) { + if(!position) { + position = i+1; + bb->dirty = true; + } + templevel = bb->highscores[i].level; + tempscore = bb->highscores[i].score; + bb->highscores[i].level = currentlevel; + bb->highscores[i].score = currentscore; + currentlevel = templevel; + currentscore = tempscore; + } + } + } + + return position; + } + +/***************************************************************************** +* bubbles_loadscores() loads the high scores saved file. +******************************************************************************/ +static void bubbles_loadscores(struct game_context* bb) { + int fd; + + bb->dirty = false; + + /* clear high scores */ + bb->highlevel = 0; + rb->memset(bb->highscores, 0, sizeof(bb->highscores)); + + /* open scores file */ + fd = rb->open(SCORE_FILE, O_RDONLY); + if(fd < 0) return; + + /* read in high scores */ + rb->read(fd, &bb->highlevel, sizeof(bb->highlevel)); + if(rb->read(fd, bb->highscores, sizeof(bb->highscores)) <= 0) { + /* scores are bad, reset */ + rb->memset(bb->highscores, 0, sizeof(bb->highscores)); + } + + rb->close(fd); +} + +/***************************************************************************** +* bubbles_savescores() saves the high scores saved file. +******************************************************************************/ +static void bubbles_savescores(struct game_context* bb) { + int fd; + + /* write out the high scores to the save file */ + fd = rb->open(SCORE_FILE, O_WRONLY|O_CREAT); + rb->write(fd, &bb->highlevel, sizeof(bb->highlevel)); + rb->write(fd, bb->highscores, sizeof(bb->highscores)); + rb->close(fd); + bb->dirty = false; +} + +/***************************************************************************** +* bubbles_loadgame() loads the saved game and returns load success. +******************************************************************************/ +static bool bubbles_loadgame(struct game_context* bb) { + int fd; + bool loaded = false; + + /* open game file */ + fd = rb->open(SAVE_FILE, O_RDONLY); + if(fd < 0) return loaded; + + /* read in saved game */ + while(true) { + if(rb->read(fd, &bb->score, sizeof(bb->score)) <= 0) break; + if(rb->read(fd, &bb->level, sizeof(bb->level)) <= 0) break; + if(rb->read(fd, &bb->angle, sizeof(bb->angle)) <= 0) break; + if(rb->read(fd, &bb->shots, sizeof(bb->shots)) <= 0) break; + if(rb->read(fd, &bb->compress, sizeof(bb->compress)) <= 0) break; + if(rb->read(fd, &bb->onboardcnt, sizeof(bb->onboardcnt)) <= 0) break; + if(rb->read(fd, bb->onboard, sizeof(bb->onboard)) <= 0) break; + if(rb->read(fd, &bb->nextinq, sizeof(bb->nextinq)) <= 0) break; + if(rb->read(fd, bb->queue, sizeof(bb->queue)) <= 0) break; + if(rb->read(fd, &bb->elapsedlvl, sizeof(bb->elapsedlvl)) <= 0) break; + if(rb->read(fd, bb->playboard, sizeof(bb->playboard)) <= 0) break; + bb->resume = true; + loaded = true; + break; + } + + rb->close(fd); + + /* delete saved file */ + rb->remove(SAVE_FILE); + return loaded; +} + +/***************************************************************************** +* bubbles_savegame() saves the current game state. +******************************************************************************/ +static void bubbles_savegame(struct game_context* bb) { + int fd; + + /* write out the game state to the save file */ + fd = rb->open(SAVE_FILE, O_WRONLY|O_CREAT); + rb->write(fd, &bb->score, sizeof(bb->score)); + rb->write(fd, &bb->level, sizeof(bb->level)); + rb->write(fd, &bb->angle, sizeof(bb->angle)); + rb->write(fd, &bb->shots, sizeof(bb->shots)); + rb->write(fd, &bb->compress, sizeof(bb->compress)); + rb->write(fd, &bb->onboardcnt, sizeof(bb->onboardcnt)); + rb->write(fd, bb->onboard, sizeof(bb->onboard)); + rb->write(fd, &bb->nextinq, sizeof(bb->nextinq)); + rb->write(fd, bb->queue, sizeof(bb->queue)); + rb->write(fd, &bb->elapsedlvl, sizeof(bb->elapsedlvl)); + rb->write(fd, bb->playboard, sizeof(bb->playboard)); + rb->close(fd); + + bb->resume = true; +} + +/***************************************************************************** +* bubbles_setcolors() set the foreground and background colors. +******************************************************************************/ +static inline void bubbles_setcolors(void) { +#ifdef HAVE_LCD_COLOR + rb->lcd_set_background(LCD_RGBPACK(181,181,222)); + rb->lcd_set_foreground(LCD_BLACK); +#endif +} + +/***************************************************************************** +* bubbles_callback() is the default event handler callback which is called +* on usb connect and shutdown. +******************************************************************************/ +static void bubbles_callback(void* param) { + struct game_context* bb = (struct game_context*) param; + if(bb->dirty) { + rb->splash(HZ/2, true, "Saving high scores..."); + bubbles_savescores(bb); + } +} + +/***************************************************************************** +* bubbles_handlebuttons() handles button events during a game. +******************************************************************************/ +static int bubbles_handlebuttons(struct game_context* bb, bool animblock) { + int button; + int buttonres; + + button = rb->button_get(false); + switch(button){ + case (BUBBLES_LEFT|BUTTON_REPEAT): + if(bb->angle > MIN_ANGLE) bb->angle -= 4; + case BUBBLES_LEFT: /* change angle to the left */ + if(bb->angle > MIN_ANGLE) bb->angle -= 2; + break; + + case (BUBBLES_RIGHT|BUTTON_REPEAT): + if(bb->angle < MAX_ANGLE) bb->angle += 4; + case BUBBLES_RIGHT: /* change angle to the right */ + if(bb->angle < MAX_ANGLE) bb->angle += 2; + break; + + case BUBBLES_SELECT: /* fire the shot */ + if(!animblock) { + bb->elapsedshot = 0; + buttonres = bubbles_fire(bb); + if(buttonres != BB_NONE) return buttonres; + buttonres = bubbles_checklevel(bb); + if(buttonres != BB_NONE) return buttonres; + } + break; + + case BUBBLES_START: /* pause the game */ + rb->splash(1, true, "Paused"); + while(rb->button_get(true) != (BUBBLES_START)); + bubbles_drawboard(bb); + rb->lcd_update(); + break; + + case BUBBLES_RESUME: /* save and end the game */ + if(!animblock) { + rb->splash(HZ/2, true, "Saving game..."); + bubbles_savegame(bb); + return BB_END; + } + break; + + case BUBBLES_QUIT: /* end the game */ + return BB_END; + + case BUTTON_NONE: /* no button pressed */ + break; + + default: + if(rb->default_event_handler_ex(button, bubbles_callback, + (void*) bb) == SYS_USB_CONNECTED) + return BB_USB; + break; + } + + return BB_NONE; +} + +/***************************************************************************** +* bubbles() is the main game subroutine, it returns the final game status. +******************************************************************************/ +static int bubbles(struct game_context* bb) { + int i; + int w, h; + int button; + int buttonres; + unsigned int startlevel = 0; + char str[30]; + char *title = "Bubbles"; + bool startgame = false; + bool showscores = false; + long lasttick, currenttick; + + bubbles_setcolors(); + + /* don't resume by default */ + bb->resume = false; + + /******************** + * menu * + ********************/ + while(!startgame){ + rb->lcd_clear_display(); + + if(!showscores) { + /* welcome screen to display key bindings */ + rb->lcd_getstringsize(title, &w, &h); + rb->lcd_putsxy((LCD_WIDTH-w)/2, 0, title); +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) + rb->lcd_puts(0, 2, "ON to start/pause"); + rb->lcd_puts(0, 3, "MODE to save/resume"); + rb->lcd_puts(0, 4, "OFF to exit"); + rb->lcd_puts(0, 5, "SELECT to fire"); + rb->lcd_puts(0, 6, " and show high scores"); + rb->lcd_puts(0, 7, "LEFT/RIGHT to aim"); + rb->lcd_puts(0, 8, "UP/DOWN to change level"); +#elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD) + rb->lcd_puts(0, 2, "PLAY to start/pause"); + rb->lcd_puts(0, 3, "LEFT+RIGHT to save/resume"); + rb->lcd_puts(0, 4, "MENU to exit"); + rb->lcd_puts(0, 5, "SELECT to fire"); + rb->lcd_puts(0, 6, " and show high scores"); + rb->lcd_puts(0, 7, "SCROLL to aim"); + rb->lcd_puts(0, 8, " and to change level"); +#elif CONFIG_KEYPAD == IAUDIO_X5_PAD + rb->lcd_puts(0, 2, "PLAY to start/pause"); + rb->lcd_puts(0, 3, "REC to save/resume"); + rb->lcd_puts(0, 4, "POWER to exit"); + rb->lcd_puts(0, 5, "SELECT to fire"); + rb->lcd_puts(0, 6, " and show high scores"); + rb->lcd_puts(0, 7, "LEFT/RIGHT to aim"); + rb->lcd_puts(0, 8, "UP/DOWN to change level"); +#elif CONFIG_KEYPAD == GIGABEAT_PAD + rb->lcd_puts(0, 2, "POWER to start/pause"); + rb->lcd_puts(0, 3, "MENU to save/resume"); + rb->lcd_puts(0, 4, "A to exit"); + rb->lcd_puts(0, 5, "SELECT to fire"); + rb->lcd_puts(0, 6, " and show high scores"); + rb->lcd_puts(0, 7, "LEFT/RIGHT to aim"); + rb->lcd_puts(0, 8, "UP/DOWN to change level"); +#endif + rb->snprintf(str, 28, "Start on level %d of %d", startlevel+1, bb->highlevel+1); + rb->lcd_puts(0, 10, str); + rb->lcd_puts(0, 12, "High Score:"); + rb->snprintf(str, 30, "%d, Lvl %d", + bb->highscores[0].score, bb->highscores[0].level); + rb->lcd_puts(2, 13, str); + } else { + /* show high scores */ + rb->snprintf(str, 12, "%s", "High Scores"); + rb->lcd_getstringsize(str, &w, &h); + rb->lcd_putsxy((LCD_WIDTH-w)/2, 0, str); + + for(i=0; isnprintf(str, 30, "#%02d: %d, Lvl %d", i+1, + bb->highscores[i].score, bb->highscores[i].level); + rb->lcd_puts(0, i+2, str); + } + } + + rb->lcd_update(); + + /* handle menu button presses */ + button = rb->button_get(true); + switch(button){ + case BUBBLES_START: /* start playing */ + bb->level = startlevel; + startgame = true; + break; + + case BUBBLES_QUIT: /* quit program */ + if(showscores) { + showscores = false; + break; + } + return BB_QUIT; + + case BUBBLES_RESUME: /* resume game */ + if(!bubbles_loadgame(bb)) { + rb->splash(HZ*2, true, "Nothing to resume"); + } else { + startgame = true; + } + break; + + case BUBBLES_SELECT: /* toggle high scores */ + showscores = !showscores; + break; + + case (BUBBLES_UP|BUTTON_REPEAT): + case BUBBLES_UP: /* increase starting level */ + if(startlevel >= bb->highlevel) { + startlevel = 0; + } else { + startlevel++; + } + break; + + case (BUBBLES_DOWN|BUTTON_REPEAT): + case BUBBLES_DOWN: /* decrease starting level */ + if(startlevel <= 0) { + startlevel = bb->highlevel; + } else { + startlevel--; + } + break; + + default: + if(rb->default_event_handler_ex(button, bubbles_callback, + (void*) bb) == SYS_USB_CONNECTED) + return BB_USB; + break; + } + } + + /******************** + * init * + ********************/ + bubbles_init(bb); + bubbles_drawboard(bb); + rb->lcd_update(); + + /********************** + * play * + **********************/ + lasttick = *rb->current_tick; + + while(true) { + /* refresh the board */ + bubbles_drawboard(bb); + rb->lcd_update(); + + /* handle button events */ + buttonres = bubbles_handlebuttons(bb, false); + if(buttonres != BB_NONE) return buttonres; + + /* handle timing */ + bb->elapsedlvl += (HZ*3)/(MAX_FPS*4); + bb->elapsedshot += (HZ*3)/(MAX_FPS*4); + + if(bb->elapsedshot > MAX_SHOTTIME) { + bb->elapsedshot = 0; + buttonres = bubbles_fire(bb); + if(buttonres != BB_NONE) return buttonres; + buttonres = bubbles_checklevel(bb); + if(buttonres != BB_NONE) return buttonres; + } + + /* framerate limiting */ + currenttick = *rb->current_tick; + if(currenttick-lasttick < HZ/MAX_FPS) { + rb->sleep((HZ/MAX_FPS)-(currenttick-lasttick)); + } + lasttick = currenttick; + } +} + +/***************************************************************************** +* plugin entry point. +******************************************************************************/ +enum plugin_status plugin_start(struct plugin_api* api, void* parameter) { + struct game_context bb; + bool exit = false; + int position; + char str[19]; + + /* plugin init */ + (void)parameter; + rb = api; + /* end of plugin init */ + + /* more init */ + xlcd_init(rb); + + /* load files */ + rb->splash(0, true, "Loading..."); + bubbles_loadscores(&bb); + rb->lcd_clear_display(); + + /* start app */ + rb->lcd_setfont(FONT_SYSFIXED); + + while(!exit) { + switch(bubbles(&bb)){ + case BB_WIN: + rb->splash(HZ*2, true, "You Win!"); + + if((position = bubbles_recordscore(&bb))) { + rb->snprintf(str, 19, "New high score #%d!", position); + rb->splash(HZ*2, true, str); + } + break; + + case BB_LOSE: + rb->splash(HZ*2, true, "Game Over"); + /* fall through to BB_END */ + + case BB_END: + if(!bb.resume) { + /* record high level */ + if(bb.level-1 > bb.highlevel) { + bb.highlevel = bb.level-1; + bb.dirty = true; + } + + /* record high score */ + if((position = bubbles_recordscore(&bb))) { + rb->snprintf(str, 19, "New high score #%d!", position); + rb->splash(HZ*2, true, str); + } + } + break; + + case BB_USB: + rb->lcd_setfont(FONT_UI); + return PLUGIN_USB_CONNECTED; + + case BB_QUIT: + if(bb.dirty) { + rb->splash(HZ/2, true, "Saving high scores..."); + bubbles_savescores(&bb); + } + exit = true; + break; + + default: + break; + } + } + + rb->lcd_setfont(FONT_UI); + return PLUGIN_OK; +} + +#endif