From d214847ac2b95eb4b7912bd10c1a18a9af66de1e Mon Sep 17 00:00:00 2001 From: "louann.sabatini" Date: Sun, 2 Jun 2024 15:51:39 +0200 Subject: [PATCH] Finished Project --- .classpath | 2 +- .gitignore | 1 - .project | 2 +- .settings/org.eclipse.core.resources.prefs | 2 + .settings/org.eclipse.jdt.core.prefs | 6 +- Agents/flock.csv | 2 +- Agents/sheeps&wolf.xlsx | Bin 0 -> 9334 bytes Agents/sheeps^0wolf.csv | 2 + README.txt | 41 ++ Rule/High Life.csv | 2 + WandS | 2 + bin/Main.class | Bin 0 -> 492 bytes bin/backend/Agent.class | Bin 0 -> 1143 bytes bin/backend/Sheep.class | Bin 0 -> 2984 bytes bin/backend/Simulator.class | Bin 0 -> 12817 bytes bin/backend/Wolf.class | Bin 0 -> 3074 bytes bin/windowInterface/JPanelDraw$1.class | Bin 0 -> 1226 bytes bin/windowInterface/JPanelDraw.class | Bin 0 -> 2665 bytes bin/windowInterface/MyInterface$1.class | Bin 0 -> 734 bytes bin/windowInterface/MyInterface$10.class | Bin 0 -> 745 bytes bin/windowInterface/MyInterface$11.class | Bin 0 -> 743 bytes bin/windowInterface/MyInterface$12.class | Bin 0 -> 740 bytes bin/windowInterface/MyInterface$2.class | Bin 0 -> 749 bytes bin/windowInterface/MyInterface$3.class | Bin 0 -> 739 bytes bin/windowInterface/MyInterface$4.class | Bin 0 -> 740 bytes bin/windowInterface/MyInterface$5.class | Bin 0 -> 742 bytes bin/windowInterface/MyInterface$6.class | Bin 0 -> 744 bytes bin/windowInterface/MyInterface$7.class | Bin 0 -> 746 bytes bin/windowInterface/MyInterface$8.class | Bin 0 -> 746 bytes bin/windowInterface/MyInterface$9.class | Bin 0 -> 748 bytes bin/windowInterface/MyInterface.class | Bin 0 -> 11845 bytes bite | 100 +++++ ruleCon | 2 + src/backend/Sheep.java | 95 +++- src/backend/Simulator.java | 479 +++++++++++++++------ src/backend/Wolf.java | 127 ++++++ src/windowInterface/JPanelDraw.java | 16 +- src/windowInterface/MyInterface.java | 47 +- 38 files changed, 750 insertions(+), 178 deletions(-) delete mode 100644 .gitignore create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 Agents/sheeps&wolf.xlsx create mode 100644 Agents/sheeps^0wolf.csv create mode 100644 README.txt create mode 100644 Rule/High Life.csv create mode 100644 WandS create mode 100644 bin/Main.class create mode 100644 bin/backend/Agent.class create mode 100644 bin/backend/Sheep.class create mode 100644 bin/backend/Simulator.class create mode 100644 bin/backend/Wolf.class create mode 100644 bin/windowInterface/JPanelDraw$1.class create mode 100644 bin/windowInterface/JPanelDraw.class create mode 100644 bin/windowInterface/MyInterface$1.class create mode 100644 bin/windowInterface/MyInterface$10.class create mode 100644 bin/windowInterface/MyInterface$11.class create mode 100644 bin/windowInterface/MyInterface$12.class create mode 100644 bin/windowInterface/MyInterface$2.class create mode 100644 bin/windowInterface/MyInterface$3.class create mode 100644 bin/windowInterface/MyInterface$4.class create mode 100644 bin/windowInterface/MyInterface$5.class create mode 100644 bin/windowInterface/MyInterface$6.class create mode 100644 bin/windowInterface/MyInterface$7.class create mode 100644 bin/windowInterface/MyInterface$8.class create mode 100644 bin/windowInterface/MyInterface$9.class create mode 100644 bin/windowInterface/MyInterface.class create mode 100644 bite create mode 100644 ruleCon create mode 100644 src/backend/Wolf.java diff --git a/.classpath b/.classpath index 9f9bbb5..57bca72 100644 --- a/.classpath +++ b/.classpath @@ -1,6 +1,6 @@ - + diff --git a/.gitignore b/.gitignore deleted file mode 100644 index ae3c172..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/bin/ diff --git a/.project b/.project index e4220b0..141ae74 100644 --- a/.project +++ b/.project @@ -1,6 +1,6 @@ - Project + OOP_Java diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 8aabe8d..8c9943d 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,8 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=16 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=16 +org.eclipse.jdt.core.compiler.compliance=17 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -11,4 +11,4 @@ org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=16 +org.eclipse.jdt.core.compiler.source=17 diff --git a/Agents/flock.csv b/Agents/flock.csv index 4c685d8..b096d20 100644 --- a/Agents/flock.csv +++ b/Agents/flock.csv @@ -1 +1 @@ -10,10;11,11;9,11;12,10 \ No newline at end of file +4,50;30,52;30,51;32,49;34 diff --git a/Agents/sheeps&wolf.xlsx b/Agents/sheeps&wolf.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..74b6725e03fe19c130d6a27edf4ad2c35eb75f6d GIT binary patch literal 9334 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 literal 0 HcmV?d00001 diff --git a/Agents/sheeps^0wolf.csv b/Agents/sheeps^0wolf.csv new file mode 100644 index 0000000..4e409d6 --- /dev/null +++ b/Agents/sheeps^0wolf.csv @@ -0,0 +1,2 @@ +4,47;16,23;11,19;39,17;14,44;31,34;21,38;45,20;16,16;21,20;27,21;27,18;27,19;50,31;10,11;24,33;43,33;27,24;45,45;28,10;48,46;32,21;21,29;14,11;23,16;44,41;48,50;35 +5,11;24,19;43,40;26,11;21,19;25,17;16,45;14,28;10,39;43,34;19,,,,,,,,,,,,,,,,, diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..e7cc92c --- /dev/null +++ b/README.txt @@ -0,0 +1,41 @@ +Welcome to our game of life! + + +Interface: + +- Start/Pause: pretty self explanatory, allows to start or pause the game. +- Toggle click: this buttons allows the user to cycle through the differents types of cells and agents. The user can then manually place the different cells or agents on the grid. A simple click on a already placed cell would remove it. +- Load world: allows to load a new world by selecting a file (CSV), for any type of cell. +- Save world: allows to save the current world played with in a CSV file to be able to reuse later. +- Load rule: allows to load the desired rules you want to play with, by selecting a CSV file. The current survival and birth rules are displayed below the buttons like so [2,3]S meaning that if a living cell has 2 or 3 living neighbors, it shall survive. For the [3]B, it means that if a dead cell has 3 living neighbors, it shall come to life. This display can be observed for all rules appliable. +- Load agents: allows to load the predefined agents into the grid by selecting the desired CSV file. The file named sheeps^0wolf.csv contains the wolf and the sheep agents. +- Save agents: allows to save the loaded and manually added agents into a new CSV file, saving their coordinates to reuse when called. +- I have the high ground: allows the player to switch the game play between the classical Conway's game of life and the high grounds variant. The current game mode is displayed below the buttons as 'Conway has the High Grounds' if the rules are Conway's, and as 'I have the High Grounds' if the battle between General Kenobi and Anakin is on. +- Random field: generates a field with a random amount of cells depending on the rules selected. The density of that generation can be adjusted by the slider below. + + +The differents ways of playing: + +- Classic Conway's Game of Life + - Any cell with 2 or 3 neighbors alive survives. + - Any dead cell with exactly 3 alive neighbors rises to life. + - All the others cells shall die in the next generation, and all of the other dead cells shall remain dead. + +- General Kenobi VS Anakin: The remake + - General K is represented by blue cells, Anakin, by red ones. + - We start by counting the numbers of enemies above one cell, and the friends next to it (note that the cell in itself is considered as a friend (so number of friends is always at least 1)). If the number of enemies is equal or greater than the number of friends, then the cell shall die. + - When the battle is a bit more calm, one cell can birth an ally by looking around at the difference in numbers in friends or enemy. If there's a numerical difference of 2 or more cells between ennemies and friends, then a cell can be birthed. + + + +Agents: + +Agents are operating independantly of the cells' interaction, whatever rules are implemented. They can interact with the other agents and the cell itself. We implemented 2 types of agents, sheeps, and wolves. Both need to eat to survive, and can reproduce. +We defined their behavior as: + - They both move randomly + - Sheep agents eat the cells to reduce their hunger level. + - Wolf agents eat the sheeps to reduce their hunger level. + - They both can reproduce with a chance of 10% when 2 of the same agent meet. + + + diff --git a/Rule/High Life.csv b/Rule/High Life.csv new file mode 100644 index 0000000..3ee627a --- /dev/null +++ b/Rule/High Life.csv @@ -0,0 +1,2 @@ +2;3 +3;6 diff --git a/WandS b/WandS new file mode 100644 index 0000000..f66f644 --- /dev/null +++ b/WandS @@ -0,0 +1,2 @@ +2,12;39,34;45,51;10,29;27,49;12,34;51,7;39,27;27,26;32,5;39,8;36,25;31,24;30,6;34,24;28,25;31, +3,9;26,23;43,41;31,10;22,10;22,12;13,39;20,32;4,39;43,29;20,6;25,21;3,14;23,12;25,30;19,29;5,33;16,21;3,39;14,19;53,41;39,29;20,46;19,34;15,29;16,7;20,36;16,24;47,39;45,18;21,28;6,28;19,33;15,17;26,12;31,21;50,40;40,9;18,28;17,27;3,29;12,11;17,9;27,29;11,33;17,13;14,31;10,27;18,30;4,4;13,32;8,8;24,10;25,27;5,22;0,22;6,11;16,11;25,22;17,27;13,5;16,13;15,37;16,28;6,17;40,10;24,40;22,31;7,30;12,10;23,20;41,14;22,21;2,13;26,0;18,10;28,43;22,11;20,10;21,11;22,10;22,9;29,9;29,29;20,25;16,18;0,35;12,36;38,31;24,34;2,9;22,10;17,29;14,10;28,10;18,28;15,18;8,27;8,29;7,8;19,30;3,11;23,9;12,35;16,12;22,37;37,14;17,10;29,18;2,12;19,26;17,33;5,27;18,6;19,29;9,24;17,31;5,7;15,29;16,14;19,32;19,21;5,25;24,28;17,20;46,40;32,32;21,18;51,29;9,3;16,5;28,20;11,11;27,33;7,9;25,38;13,6;19,18;5,21;7,10;21,11;14,41;18,36;4,26;19,37;37,25;46,29;16,6;24,29;18,20;6,9;13,9;19,24;21,6;23,31;11,3;14,43;27,9;21,10;33,44;17,27;16,28;21,13;23,26;11,2;15,25;1,22;15,25;5,49;22,11;16,8;32,25;20,25;7,41;17,23;11,23;3,10;20,20;5,22;9,21;3,29;16,21;42,40;40,11;23,19;45,18;23,30;8,17;52,10;15,24;13,18;43,8;28,4;19,21;2,9;23,28;20,9;16,30;17,25;21,26;9,10;32,9;19,12;14,33;18,20;17,25;5,25;3,10;13,17;4,35;1,34;20,39;18,22;2,24;22,26;5,12;22,19;3,35;10,23;20,31;5,30;0,23;5,11;27,9;24,8;30,19;-1,30;8,37;8,24;15,28;12,23;1,19;3,6;23,36;4,36;44,18;4,45;24,8;27,7;23,30;8,25;3,21;11,13;20,33;1,9;22,8;24,3;10,27;12,30;23,26;6,2;15,8;24,8;20,27;8,22;6,28;22,20;17,10;13,34;1,5;28,21;16,26;13,5;12,27;9,11;23,24;15,4;17,5;25,5;12,22;11,6;28,21;3,30;20,40;40,21;3,24;20,25;4,9;25,17;2,23;7,5;8,16;51,27;20,30;15,4;15,14;22,12;28,13;23,9;27,17;0,8;19,6;11,9;19,35;33,24;10,3;16,19;5,25;16,3;24,20;10,24;15,1;12,19;18,30;2,17;-1,9;23,25;7,8;11,6;30,20;1,6;22,13;14,42;19,9;23,26;5,6;25,36;11,28;21,9;16,9;25,21;5,3;15,6;19,33;35,8;22,25;18,40;38,26;19,11;17,30;5,23;3,11;27,30;0,20;15,31;3,25;16,32;16,5;10,40;22,0;15,10;18,35;5,31;21,2;25,5;20,12;12,13;25,10;26,27;6,15;42,12;20,30;19,34;4,34;17,46;22,26;13,33;2,6;9,31;13,5;21,11;21,31;1,6;21,15;24,29;10,30;8,10;26,0;18,28;4,30;20,2;28,32;6,40;17,35;3,22;2,19;9,23;12,4;17,8;15,31;8,10;20,3;8,27;8,23;4,5;25,37;11,19;6,11;26,19;14,5;10,11;19,30;17,40;30,38;44,39;39,27;16,28;10,30;10,27;5,16;40,20;1,9;23,27;14,11;21,23;16,19;47,20;1,8;15,32;17,9;14,33;19,23;14,5;22,17;3,6;22,33;0,4;11,4;11,20;2,15;50,3;14,2;23,41;18,25;6,30;12,18;8,10;27, diff --git a/bin/Main.class b/bin/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..b4e46a5930fd3f49e86733c730e8df450a5cebe4 GIT binary patch literal 492 zcmaJ-%T5A85Ug1i_8~7t@yWs4f{FV9s239x&7ud)ChBQe1{?yj$+AfNEH9F1;s^Lq z#-7E<#dztO?w+oy?$58c4*;iVSTGpO4wuS;$xt2fC+?5A8u~ZAk%&@;!iiKeJ!8mu z&5-_{$9>@<2d9WU3JjG%DserV^h9#YdtGa+QC zdk?`%vzsPT4cpDo!aBqLT&jLNzf`G620Rje=lS>Tq6$Zc%_6o?XK<$?4dqm34ovSp z^U9MUY1aObpmipr0YfABM}%y;-FTKn;zH`h9PRyB+r=S>flde*^rAyhv?%il8DYM) zfc=uSU5dI5m{_A&Tz()dQRbkG3RU#*6_FW)<#$x?7IeoW^A)ufOF5IYVbfFzZpKz$ VPGB25G-;F4F7}9z&PTa{gKq(UUn~Fs literal 0 HcmV?d00001 diff --git a/bin/backend/Agent.class b/bin/backend/Agent.class new file mode 100644 index 0000000000000000000000000000000000000000..97d479810110b454bcf943d134658fdd16af6bd2 GIT binary patch literal 1143 zcmZ`(+fEZv6kVrt>BT9ng+a6hL`B*nj8|Sj5&|(cDf&=ClqXNyp*=WEaXN$Y1-|(a zK9i`4MB;-V;71YnIc=&oCC&8gv%A+`Yp>n*_r=d&0G{GW95IG;oj2aPe$&}#xqcXj z&X7Ie$K3I_-*R5o58Ot`z&_AZq349bXmq?zKxI``$KQv}rp&A|m}|lp;W~p|tW<_S zF6}bto1Lbcf`%~*DP$P5Vre%ChN~6~m@*o-5bs5{g#?lenX2&J7tvwe4R(0la~X2g zPJ?^9JP`8UPwHV?bY=B_6OpP+%MG_g_sHWXN+{urrD1iXjmlmrMKq|qyk&3E+E77;#O%())p<4WZu~KI?^>W;7t*c zPNOOI_lZxPM5Q-Hmw@S7NDJBKNByZ1o;Y@QqQGZZEcQf4q41oIAmAref~*eat%<|P z;~{OLw8xOFiI&g9C?LPqMk3b+NVWUb^~+kNYMm%(xX*<2KBbD6GRogE@s)xem8p_B)!OP6 z^jk9&FijaL`(JSObO>yZ1ka2F=Z3*kBf+z{*=PPjW5lHblAX;rS9Cgah31N3>$cvu z4clnH`FM`Gb1ZyXF>Q1DGYtJylQf$0GN=5?(+{bDENPm@jG}zrYdi4K8Tja^4N4y! za@(Xn2`peyZ8D2l+@r{#J}E3wWMY{r6JQruVvNzhhlBeh{sCoUcu3JB6+Qj~A0fOm literal 0 HcmV?d00001 diff --git a/bin/backend/Sheep.class b/bin/backend/Sheep.class new file mode 100644 index 0000000000000000000000000000000000000000..e4ebd0d746d12ccd030cb7a3d6a6c269433d67fe GIT binary patch literal 2984 zcma)8Yfltc7=F&~>@K?w7cUEnfrZO9gKXyCaM)J2=cD^rmh6 z(56WnKh;Z{sxcvHOk=B{)@qu5Xq)~dV``ss_QI7Mh2cQ*Q?HDoBu7H0ulO8c00TCC_93!0+Sk!aIm^5M;*Gk0> z^Tr|`ckQb-I^xzkEp?lu8mV?5r}PXpa{(hQ;!3j?SUs8Du{^KPu$ zPT7u*MOaMX^P`q)3RGp?6h3!^;6+%+0#plxY4O$XP5nU#EY%T2NbZ*D@WCIz3fg)# z;t-ajUfNnI;BCxmuF?@enLuTal{R}bW5cF%#28L7ltn#u!btTSjwR2zOU)g%CZzOB zC=v=W#WgKZma-&#-Z!Z zlA4_bO~q5kw$i2~3avWU!7q0)9dE)P!g_27;BA40g~0RPb!@~Yfxw9AcAKeGj<~o~ zc}K@)Y~i&j_NpoUN)C(Mte+^?=JuLM_1*~ zHOasvkLT_?7GN0301`}m z-c0_h4il$2fYRm^r`nRd1qJHC;WK8!RpW)=S~x>FcEC{uEu-@yrDH6AJs|zqI>xb^ z-N1V4RVIbSrl+QVQUR{Y-*9qMbbdx;+m(f%HVua!)O$cqqiG!<;v<@rA;#tG)f(eX zs`oz8@u~DyX-)Ll_PCWE*=ajTIhBJ+%VF$_*-)RIaT4YpOHQni8tG991XhtnFUP)I z9Ef~E4mv(Pa#Zpy??^J`%DEeZres$}maq5)6%Vi^qRpZv;+;ip72Mhroq5lwtYc;`X03gKQZ zgf8i{rX_M8az*FxmUaV+3uo^f+GbE58Mu#HZAgYUhjt3qR)ucCr`_@1p-l}k#(Jg< z?tF|Y%xG3Kp0$i6M(-Qwe?Hc(LabfQ+0(Q||*DC67&914KUCaqvR4Fa-{uLL!4Q5%Gj7vd(ULw$0#* zr%ju|ms*>zc@D?g12br^4LpJ&@H@Qi{#ySWM%v2c>ug&vTqe1%8@hpTI4DaXtZ^Uo zw)x1rRO3jy_TrDQ?qSgZQ&w#=Tx56~p^Ztt%NR!; z&T|*!d8y*aU&M^`kY}b7WzXRga=lUhG_<{-8UC|WbdP7)GM2oax0F=6o0Lo}vJii%^IByq zFBR1&Mcqmz6^v9Rc$Bltt2%O!)eTm45QCfq$Jq}j*z+gJ@F}utkj(_YB>8J{FrFqa zqh#R>2l82bffO$D_6lrVCwI5`^(XT6fJ{BXl;XWQi&l>JAZBrajAiFW1%l7fD3+Gj Ql!q(B3wV2xv3T&=e{WZE2mk;8 literal 0 HcmV?d00001 diff --git a/bin/backend/Simulator.class b/bin/backend/Simulator.class new file mode 100644 index 0000000000000000000000000000000000000000..57135293810d2a10045d92e770a60e84f579e59f GIT binary patch literal 12817 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 We>&s)Gl(SQcV6cE`2jvkfqww%P{J1g literal 0 HcmV?d00001 diff --git a/bin/backend/Wolf.class b/bin/backend/Wolf.class new file mode 100644 index 0000000000000000000000000000000000000000..4dd3953df44d9ca577894d2f0bddf04caf3d9de0 GIT binary patch literal 3074 zcma)8Yi|@)7=F&~?9T2or7f_fEf9jlD4s2)2bhZUi zLBj`)iN+5`3L1rwG%?2DrA0)D@q-$Fk}=lj%63lNgkxt5BL;=Upg@d!dvw>ZXs6q>Ot(iM(wxbpPSDmaJ8Q&IgJmje z1(tdy^=Y?#mz}pA4a>2DLODmjBv9i!3{JZe2%}DehLr+I8hrdbbs`Rd1`Tl}d{btV6-GW2U-4!*v15K}VT|JdeB?!l}8lIC$CdTb4!>=GcScaJ!8@3(BpR5=f zi#KgMc@}qh;A=5Tfx7=9a%rN3$}^SBJsB@a)bEmzhxCaeoLbJz+3xNgIm^%sECTtI zam!i8GD&cp67dAKRRpIZ7C{olB4sM7J{f1Ax0rk?*z;^9@CtUS*iqtjUbk}Xhje#L z!!GRRZIBnq9`|UrJG%Y;jQqPHOS4}?1_#KlQPawv&_{I3J!(&yu4$7ptrY{TnA@q0 zwAL%xTt(VV1U5pac#&h%q~%V1n2db6qRs!8v~<#k<0|?|iN)I#kXgg4;8l;AuHi@~ zlOoNjGA?9_`&~wBEXNcwn;eg zG?NXp?JIoP{WwB)HI5hDl}56N_R4)tq^_4A0m3HqnG;u4rA>gC6CK^O4t6RH%3X1n8a}FPNgxoN2=S;U26YUuk$zJ2)XMHBliT8Z2#{?H zkZmg>TSvV^I81O-e2%axN*UTxzJzudLNbEAF-YX7Ohi1Sie&DsP|qx`hdPv5ysvab zTIO-AQ=LU;gL)sY3H*X^XS5+Yk24)H`O-V$$ru65t{M6g$z+_<(WJt8JlqkPMU_+= z6S%SPYceu}Ev>$2QEDFNZ(v>I=Y%vF_K%J~M7N)O-#TvfNGVBgu z83W!!boTOR$v&pBpO+&;@*m)L`5;%l93?LM*_)2y0*>)2_Teh}@d1wGL+X7>{V#Yb zaUS&n2yng?;C!oya|oZ)N|YGK@DUu&6nediNoq#uy9F)^+)eY2Oz|CK9BVMmS)A*7 zFP3OoWu%8vWx5gj8xbL&1*Q`tUsd#}$P4mTWr*llpc($=D%;0j*c$qaenRq>h)--W z$oS;-ctjjGsPnkkz3MA2@x2`QC$IlnK706_=ku{dUKy&zAGcAH9`F`($j;)*k9czi zmtVhnbGE|c-N^w4i(OC?5QvFhjtAn1g?9Gy;tf#xxlW9-a;&*So$+K0G8dWGo z-D*!No~{|;a`CbclHI^*CVz&^KFeARp$9rEKFkVd$@ftVBFEVn#$mE9=UIhuc6tl% z@hkH&CUBj*H(8xKJo$#TxW}qI#AUDUbv|0~8)+PKxWbD0-DxS}f1_E{SFNl{RwtKm L_bOuv;hld0P{eq% literal 0 HcmV?d00001 diff --git a/bin/windowInterface/JPanelDraw$1.class b/bin/windowInterface/JPanelDraw$1.class new file mode 100644 index 0000000000000000000000000000000000000000..3e737b36c4fe3b76dea8eb5514532ac8afcdef3f GIT binary patch literal 1226 zcmaJ=YflqF6g|@xmadCDLVn06cnH3A+|ggTS9^<_;K2fbY;6scBfQ+mI>Cx z4<>#x@kbf&l!8QrHnY8R_spGh?mhkW``dQ_OL(gxzz}U%PQ`7QjuhSpUKZ)C9qtG_ z=kZ2-UPFi>@{u3&G;heXI2Mjf7u>opRxA97PB3)Js^!P$s8Ig;N*Tf}T8<@`8O9Pf z0h2|BP}Z%8Fc@wb=s>5AAi51`xXlnuC_qo%a>RDMRubMjUa|#4f8H%~yU0CD?c2$a zqQ(%r;lB7hQ8Q{v(T*p4UsMR6$p26Ani8K$7Q-0CkcN8 zWYHkYk{HbsN1VFF5UA1MBR9;7fqkN7(mG-2-jy_h0zYcIL*I4lURkVL%0E4ST|cXO zLYXzEY`ebY92A7Cx)o)>O@{HS?!DA-vIp78bR6MjZBBL~`*m##Uv9d-q>)i4>95Cn zdzGeeKfMfosA3$#}mJvH@(9$#U6Zee=p*-02+2)*<)TCt8k^wW;ag@Ja3A5=d? zx&72B^i$mZiSDx~(!|(Q6Y+MwiBwgEO{DE5%FkWopS1JO?B#YYI@-kZGjK-n2}1FS z5pN&@9Z|YHhG~o;M+$c^fjvyNc&5&{w0ROMEMtY3PSf`_R!M7)&c2~2h-|Ae8=xaO b3IkZfI{k)d@*6NI(&?aTf%+ zUh#&a;Qfj5#Tgh0US=2{93S+_H(&J4C*Sl<8Sy(ONlU?TXLfV`|NQ6wzyEsj!#`hN z2kcLlc-iY>t>?36Emw@}9sf&&u1T z(`V&9JL~RCZWa*R1!i<+UC%dNzt40EmQE}35dxvi_#Qh`5SY_FU=AL)+*Cr+j_GIf zZ2~jxiuJ8dcEEH57I)tct7m)?B2R=i*skrj3)~(1U&*FE0j)EevLXm#wt-sA5eUYb z`l=xiH4s6KT+K6JU`7}X0*h`pJQa_|RT0d`LaAkuz>+&HPl>iQ^+l-nE(1$&H{)fd zQa#y%XLZ}2Z@E@pU}>ydMmAxN`Uz{qa{a_K0V-fzx^36mQOFEf`Mu_VV=)`u*+ItL zWb{dwnVLUjdqjRmByPb&uWkRBK-jbVQYz-g{v#JEUY<%-ZO&v`I_JcY8N><$O^8=xB_0SPAy7Lh*qL>*c>}AkT0kFgn0!WKN{`xZlc8E`;6b#o zh6r#I#nSm~!A-GZZn0XDE`@fzfrrp4P?fg)$Ly3pr1F}KU<1~N@vuPM9hD}{Y&7tQ zJXXzP+blahJ=Bn5m&qJ6FR>&a>DmVDGth^}$Roy1%V9g{ z+-*uqko^V@NRZ)-nPyf@$vb4=amfqjt(2sX7&xjN8DJMm#(;rA$6N%i(uNDRGol4>HB& z3Km@qwxmm?$zx-Dlbm;~$=uL>5_G>r^b6ETQO;bB6ow;YsuanwG0lD2n6bxaOZAw! z^2CVj$rkd1R+lYj%FL-Tu~GsQFp@53RHtKlp2eiq?65q)$C6{n!%{X;kW)Q~1<(;9 z6($ux6<B zjtRG``3g1_u_f4|UBcq1HqkizCAPQd%~3rV)un6^JI`n$s+Bc-dh?e_+2v)~lH|Im zK3%q>B6~L2qF=(8)DYFA)ZUg*G;|T6OE?-0X`diM6#I!H8q!O|K}Cd0#9>8*ON6P2 zsuGbR(Odx?)h867Mmn&ZZxQJ;x}X!vb%HrP-H%LZW4H*nmGIgd^sm4Q{T3%$wdMw` zh^M4>xj0#hid;TdwlTw%R@AqM33>D-fr~e<%QOaAf56wAX~6wV<4WG!3C!XBvJ9*F zU4!*li*{Zm+t7l2T&Ktx=2hXN6{om%Q zID|tYjmJd>hlNLagnK7psQCiud&>giNkoE2m@FpdhsS#LA0?H-@-YT zqzmK7Zx& J5noNx{{kfpVYdJP literal 0 HcmV?d00001 diff --git a/bin/windowInterface/MyInterface$1.class b/bin/windowInterface/MyInterface$1.class new file mode 100644 index 0000000000000000000000000000000000000000..32d0a7cc380a81fddc21ee07711ba338e99c4091 GIT binary patch literal 734 zcmaJ<+fLg+5IviOIC0&^P)buSB|siRkZO?nMlX;ED3YO-TIGG?EXg9XE7=<&J`1T( zi3dKQABC88Bie_`mS#OOI%nq0?EZeZy9e+Q8x9H#D-)>(dUC9cNX~d9f|IK!zq#X} z#NeOvOCH2r4TG=!a}gN_Wg=!-J~4r~6v_nqk&#-3GBrYpgrRIkGHq@XFwAMOOTZ6O zN%M)J(aJ?`_83ZCJrGqeJon(B;-ZL}hbnxAV#@+*p;Y2@e9;%l58jUj!(6B%9`|@6 zZ9GkutT=|%yoSvk5?ABdSl?(lI=K)7;UT^E2kngUvz5Fpj8&hX25*kZj@d|fvgIbvd_qSPqEFo?X4Sl?O%9tondC_EE5L! zj5#{J%y;n;^As_>!osw|9{p{FO8Y0gTfF|uceDIH_3dOe7XIL-HHd*_tPs0|x5O`C WmGpw5I%-%W&uX*^?6*!ZP;ny5$s literal 0 HcmV?d00001 diff --git a/bin/windowInterface/MyInterface$10.class b/bin/windowInterface/MyInterface$10.class new file mode 100644 index 0000000000000000000000000000000000000000..2bbe46520af1c99bc241de186082b2dd0fda1f56 GIT binary patch literal 745 zcmaJ<+fLg+5IviiI5BSHQZAuf+wu@n34_!(3Zft=NQPEwmG_OaO%|D5$=(q0EeQUh zQVUWa_y9f%F>9i>50x#=dS-NH&Y9W0fB1a|U<+?ulo%F=Qg!w4NEwlS=dlQnFaG!| z8|y9{hTxQ+^DyD67k=)XirBcQFf8O*J~W{?7s`YmVxmk!@Z8JD~x+`j6c;>@J)k7I|A2kFF<)#JHBdNs6;H)FkZ@iNThKWeW zJZbY(+IW<7tT|5K_5s!Pfop7v;W^F>q)-d88I+Ln* zEKFaMc>hSz?d&By%LLI>Pef)8b!Mfgc5Ph4NI5CE}EtEh%X?sY6gsIe90RdGJmE3{=<-T#I=~m9JWN#bsdl1}_ z`XTke58y{3W=#YfkS)!6X7py>o7w&G^ZGl0XIS@96Ih-oJv5VjZ7DyJDa8k${`ebP zTRuF2=tQ2$IFou5za5-VYJD^WmddQ0*qF{p+xTT_mC=bRENRLG8unNf8&4RRRB-Gt z@Tt@b%1uFG##Ff2b6!5gNy`b6O+oU zFLUMMY0`7zn6ZkG$7gkIS<8%JfsgwF3l)QhSa7Q6 zMs8cu(tFAGFn(oZ&J>=^N4&YkDk6d4gE`Gpdac};(LWdW*y&^GdpgZbq4em0?6Kj# z;l5_J-Aon*@%YU{D(o9mSgi6&>ufh5qR4HQpGb|Zg@Cg++1uvWWrE(L3xvHZ-2PT# zX83F{2KbCwKEu)vFo!!F3Eai}w8IPjyAI9XIl@ca`&%EB`7g}-wd^tf8#nF26|M|yXT3L1B zFa&4(f`{7dL)%N7@T)Sdd$0tU>J*Z%##jJ zrHw~P$C9IoMFVMlVpr$+UWX))PR~V;q1lT5yZWw`VSTydp@9!B-ZM-UEbe2I~02sB1!Mr{aO3E-jSqmE91HbQ~=zyUh3(sVFCn^Jxxrx^*X#3qs1MCQun z%VNWk6WFL)*xzAt9a+kH$L5&)jAq<3i2tj6&$+O>J@L`S9S^q!dKJ0@^c?A4lBwk7 z+*+fLOqymi;{3yfm8@3gDI2&}wNSu+Z{~SIuar|8{&Rf~9Z#09r<2SSN~il|PYg>4 z#+t8al*ytXcA<4Zg?(cRi%oX6&gT+D7&?RbN2&2?!{_Q{jvjOFD*o`n7X-s^xcaHY zT;q3>F~DoA@H;4DAJ=h%Gl82}T~2t;UpJvO{EXl$ZvE}|%ler2zAb00Uf`B9xC3ig e=k5mXa(@jQ%om(>(ZM~A97o5%J@@(4(ESaltFB=H literal 0 HcmV?d00001 diff --git a/bin/windowInterface/MyInterface$3.class b/bin/windowInterface/MyInterface$3.class new file mode 100644 index 0000000000000000000000000000000000000000..7d8fa7253a7c479e6fb25e784c2126f1afa3b8dd GIT binary patch literal 739 zcmah{O;6iE5Ph4tabgTHl+v^mLLrBcN*IaWXc1CGRU`ukP!6a)Y@BIgWY);LeElq> zen>s^2lPi(oi$P03#p}9&y3!@c{95|e|`S};4Ri%lmwQp6E(=L_m!dilZ+`mxc%d| zwp=&@!I`|0VJg)yJnElOY+O_XR&4er)LcId>57yIyCcR>lxRbWa)F8&CAziAO`-{1 zwi);)QHj}M()L8;dQZUVW&^50VA_X^s)sV_K57UA%54j%M~R}t%kw_vC$gWCz+9BY zGVRGcvGF+RSaAZ)Nex?DEY85_` zt%(P(9+EciGi|WK%Pg}!f(Qb;Q+^&Lwi-OnPOfgc5Ph43I5CEV^n*ZKTG|}aAk`dlYm0!Yh)QljqRM^a4CzMBu4Hc-@w1Rh zEA_w+;73)RH4$(?wlwRR(R(v*X7|_K?N0!Q*zr&j*qAFlGV>E{Dg7#A3QxcN@jHDF z6@lhNUdk|$dK`WlPAIk>s!YtYa&AMqByGcYu~kM#Dzl_16{y+^m33Y-Fe+%V&%gtv zm38fI6B2<*oxXBBkkUHXTxWE{6#Tv?3GBWFS-J z;zhFJ#0hK`HSF|RTtnt#edgtubV?)Ubff=He(biezdP{J#&ZwP1l9`X4zT7#x8g*_ zk&&YhDxvo?YmMe1Wjf})trztX@V}T@8j~aP75#H-drlrJKh|+#GNs3-WG@UW4^A}S z%uynbp=GuQ5Y49BE5DBtTOB@UAF|iy*k%0Qs~-q@H+cL#$2{S) z${1jR7N0@x`&hye^;T_yFze{r+@i=o=>>%G_SGx8@H&z46I{=*%iEC ZehHhb7aX$mvgnNJ!rD}^nAQ@T-l>5e+hDByqvNwtNS(RFl zIPe4dqpHrjQQJdhOS7ICy*Kk_c7ObQcm!~OR~||NYZIjhW^$@6rC(%B;o0pUzrE+7 zBG9~+V;Lq=55rIWYl^LhDiiapoY;`Yq;2>iw#w*8WtKFh0#$pZvi2JWMg=YQ8TeLd zW#0*Gb_$W(J%P%h8BiSpPXlLMR<{}fzq$gA5 z;%Tzt#0hK^HEi#(xQ5Kf`pnBQ=?x8-(~15&`H|bg{&vqt3(Fo}2&@#$9bma4)Vkjg++pc2-_P@w`;PJ&i@$Nx8qB~d)|g$v aI`d1|V7=g|g$B0Ra~hoj_q}8*q4f*P2doVM literal 0 HcmV?d00001 diff --git a/bin/windowInterface/MyInterface$6.class b/bin/windowInterface/MyInterface$6.class new file mode 100644 index 0000000000000000000000000000000000000000..ab1d8351edb04f2a41d65ff228a0e2061e115ce4 GIT binary patch literal 744 zcmaJfgc5Ph4ZabjE&3WW5F7RVtD66Szkz0L%%AOfg9RiC1Jk)%Y(FjmSQ=r^+fJUS=olMUMl)jULgano%6U(G8 zQ|01$vf{)EY!o%@Y_qtA%*T4m%Q5LW4Vlx8{yX`;+rrLP-$xrO9+m}G3+4{6>O{BV zM8%Pj!_#R(2P&c0Q)`XpL1jAP-K`b%67bK=G>vm2U(-J~_rytL_4_(bOs4ecnC#fF z`rt_O?d&Bo%ZL|HJE6=Tn#^L8ms)09fM_<|ZuyOr*y`{(dxO1a9J`F)d;ASS?+0#v z$uYP1tTG1ph$TLQ-1l)CcQ_Kbi`KltOa8kGwcb|*-*NAn@8|hX-1l={qxBazufYtg fVV&6(+-H6X8>|-`wb8%>_MAqizX9NF_ z2|p4a`~&=>2(xFSKA5{?_GTvEH}lQx{<`_`6ToY{@K6$1oG3jolU;2oJ(4kndtd+f z?M)9Af#!)E%P^687=G%XP;5O^nV4tg#D+8`ZNqo5RYpfDv!p2%sM=$dwbvOK6|~r5 z;47t-eIu~kDMYUJ1S;ERKy?V*3*e#Vql`v?I+_CIjsr9zrD=b3+Nbo3>?b5J6PZ{h zJ((&OPm>iVPGG61VSAIsHDo^4XI_p;PierMPW0c&cia}XR(n2Lc$(f#M;aUmC*Z<-3tU)c>I^|=lL`4d!E;r`;D8{ hU6Fv literal 0 HcmV?d00001 diff --git a/bin/windowInterface/MyInterface$8.class b/bin/windowInterface/MyInterface$8.class new file mode 100644 index 0000000000000000000000000000000000000000..75dc8a972ce0cdfc211fcf4dc3ea0e8316dd0649 GIT binary patch literal 746 zcmaJzUDeGjC@1$Ioxy0X)Xt05yU2xi%9!KQK<^Z)K|D!*_rD z{&s+dK=(wR$vBf{8owN$sMG~$l2~Tt+{Nll85i%SPFs`c!YQM2fu=jwMgIYTNkxkt z0v~Ck-4lV$K_zl)B+%Hi6V-;mr3e99A?oNvXrn7oA9z3~(MBE3PRA;LBgdH%SW0Xv zvysfTj~B^?7bmb$)v&)!aUEHX^@_`}`Kg+aGf4hB`M%%6&ekYI4>tqc5Lm64JHo0L z-Agl_CRR>%r(_q;b*7%poU?|b%6!W0tyOgs2w&S-o+?k|Mg4Pk_q|B!-#2My3vH%{ z${kzkj}8p)XD^dQp}2z9kt*B^TR3cTt##T3h;G+!m#?HoYa?X#BE5%61>;o;{$ zetX+PMWA^u$1+T$9)=(L=M-BHRVLK45$u)2LU|Pe3a1$P)Ads+;MD zK+wI$!*4m}5ua7Y0ADb}XOR0o9^(l|0<)N#R(Q*QSE1JZj^GOOfBAl%zvRAO^BQx% kanl;iz!H|3UBNTvm$1Tm!BGnhtg+`bItA`qXDgv~2MMpP-~a#s literal 0 HcmV?d00001 diff --git a/bin/windowInterface/MyInterface.class b/bin/windowInterface/MyInterface.class new file mode 100644 index 0000000000000000000000000000000000000000..28cb3be5376873c353011f9d8d81c0623ea35e10 GIT binary patch literal 11845 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 I-rBwY0{3$>F8}}l literal 0 HcmV?d00001 diff --git a/bite b/bite new file mode 100644 index 0000000..a10d09e --- /dev/null +++ b/bite @@ -0,0 +1,100 @@ +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;1;0;1;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; +0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; diff --git a/ruleCon b/ruleCon new file mode 100644 index 0000000..6f6079d --- /dev/null +++ b/ruleCon @@ -0,0 +1,2 @@ +2;3; +3; diff --git a/src/backend/Sheep.java b/src/backend/Sheep.java index b05d141..b14e17c 100644 --- a/src/backend/Sheep.java +++ b/src/backend/Sheep.java @@ -12,6 +12,7 @@ public class Sheep extends Agent { int hunger; Random rand; + private boolean hasReproduced = true; Sheep(int x,int y){ //first we call the constructor of the superClass(Animal) @@ -30,30 +31,94 @@ public class Sheep extends Agent { * as you wish */ public boolean liveTurn(ArrayList neighbors, Simulator world) { + hasReproduced = false; if(world.getCell(x, y)==1) { - world.setCell(x, y, 0); + world.setCell(x, y, 0); // Eat the cell } else { hunger++; } this.moveRandom(); - return hunger>10; + return hunger<10; + } + + public boolean hasItReproduced() { + return hasReproduced; + } + + public Sheep reproduce(ArrayList neighbors, Simulator world) { + hasReproduced = true; + // If there are Sheep neighbors and a random chance is met, then reproduce + if (Math.random() < 0.1) { // 10% chance to reproduce + // Find a vacant neighboring cell + int[] position = findVacantPosition(neighbors, world); + if (position != null) { + // Create a new Sheep in the vacant cell + Sheep sheepBaby = new Sheep(position[0], position[1]); + return sheepBaby; + } + } + return null; + } + + // Method to find a vacant neighboring cell for reproduction + private int[] findVacantPosition(ArrayList neighbors, Simulator world) { + for (int i = -1; i <= 1; i++) { + for(int j = -1; j <= 1; j++) { + boolean vacant = true; + for (Agent nearAgent : neighbors) { + int nearX = nearAgent.getX(); + int nearY = nearAgent.getY(); + if (nearX == (x + i) && nearY == (y + j)) { + vacant = false; + break; + } + } + if (vacant && world.getCell(x + i, y + j) == 0) { + int[] position = new int[2]; + position[0] = x + i; + position[1] = y + j; + return position; + } + } + } + return null; } + private void moveRandom() { - int direction = rand.nextInt(4); - if(direction == 0) { - x+=1; - } - if(direction == 1) { - y+=1; - } - if(direction == 2) { - x-=1; - } - if(direction == 3) { - y-=1; - } + int direction = rand.nextInt(4); + switch (direction) { + case 0: // Move right + if (x + 1 < Simulator.COL_NUM) { + x += 1; + } else if (Simulator.isLoopingBorder()) { + x = 0; // Loop to the leftmost column + } + break; + case 1: // Move down + if (y + 1 < Simulator.LINE_NUM) { + y += 1; + } else if (Simulator.isLoopingBorder()) { + y = 0; // Loop to the topmost row + } + break; + case 2: // Move left + if (x - 1 >= 0) { + x -= 1; + } else if (Simulator.isLoopingBorder()) { + x = Simulator.COL_NUM - 1; // Loop to the rightmost column + } + break; + case 3: // Move up + if (y - 1 >= 0) { + y -= 1; + } else if (Simulator.isLoopingBorder()) { + y = Simulator.LINE_NUM - 1; // Loop to the bottommost row + } + break; + } } + } diff --git a/src/backend/Simulator.java b/src/backend/Simulator.java index 7cccc18..d8c6bc6 100644 --- a/src/backend/Simulator.java +++ b/src/backend/Simulator.java @@ -7,67 +7,56 @@ public class Simulator extends Thread { private MyInterface mjf; - private final int COL_NUM = 100; - private final int LINE_NUM = 100; + public final static int COL_NUM = 200; + public final static int LINE_NUM = 100; private final int LIFE_TYPE_NUM = 4; //Conway Radius : 1 private final int LIFE_AREA_RADIUS = 1; //Animal Neighborhood Radius : 5 private final int ANIMAL_AREA_RADIUS = 2; - private ArrayList fieldSurviveValues; - private ArrayList fieldBirthValues; + public ArrayList fieldSurviveValues; + public ArrayList fieldBirthValues; private ArrayList agents; + private int[][] field; // 2D array to represent the field private boolean stopFlag; private boolean pauseFlag; - private boolean loopingBorder; - private boolean clickActionFlag; + private static boolean loopingBorder; + private boolean iHaveTheHighGroundFlag; + private int clickActionFlag; private int loopDelay = 150; - - private int height; - private int width; - private int[][] world; - //private World myWorld; - - - //TODO : add missing attribute(s) public Simulator(MyInterface mjfParam) { mjf = mjfParam; stopFlag=false; pauseFlag=false; loopingBorder=false; - clickActionFlag=false; - // started to mingle here - this.height = 100; - this.width = 150; - //this.world = myWorld.getWorld(); + iHaveTheHighGroundFlag=false; // New game play flag + clickActionFlag=1; // 1:cell ; 2:anakin ; 3:general; 4:sheep ; 5:wolf + agents = new ArrayList(); + field = new int[getHeight()][getWidth()]; // Initialize the field with the correct dimensions fieldBirthValues = new ArrayList(); fieldSurviveValues = new ArrayList(); - //TODO : add missing attribute initialization - - - - //Default rule : Survive always, birth never + // Initialize survival and birth values with basic rules + fieldBirthValues.add(3); + fieldSurviveValues.add(2); + fieldSurviveValues.add(3); + /*Default rule : Survive always, birth never for(int i =0; i<9; i++) { fieldSurviveValues.add(i); - } - + }*/ } public int getWidth() { - //TODO : replace with proper return - // getWidth() = - return width; + return COL_NUM; } public int getHeight() { - //TODO : replace with proper return - return height; + return LINE_NUM; } //Should probably stay as is @@ -102,21 +91,52 @@ public class Simulator extends Thread { // only modify if sure of what you do // to modify agent behavior, see liveTurn method // in agent classes + ArrayList agentsToRemove = new ArrayList<>(); + ArrayList agentsToAdd = new ArrayList<>(); for(Agent agent : agents) { - ArrayList neighbors = - this.getNeighboringAnimals( - agent.getX(), - agent.getY(), - ANIMAL_AREA_RADIUS); - if(!agent.liveTurn( - neighbors, - this)) { - agents.remove(agent); + ArrayList neighbors = this.getNeighboringAnimals(agent.getX(), agent.getY(), ANIMAL_AREA_RADIUS); + if(!agent.liveTurn(neighbors, this)) { + agentsToRemove.add(agent); + } + // Reproduction + for (Agent neigborAgent : neighbors) { + if (agent instanceof Sheep && neigborAgent instanceof Sheep) { + if (!((Sheep) agent).hasItReproduced() && !((Sheep) neigborAgent).hasItReproduced()) { + Sheep sheepBaby = ((Sheep) agent).reproduce(neighbors, this); + if (sheepBaby != null) { + agentsToAdd.add(sheepBaby); + } + } + } + else if (agent instanceof Wolf && neigborAgent instanceof Wolf) { + if (!((Wolf) agent).hasItReproduced() && !((Wolf) neigborAgent).hasItReproduced()) { + Wolf wolfBaby = ((Wolf) agent).reproduce(neighbors, this); + if (wolfBaby != null) { + agentsToAdd.add(wolfBaby); + } + } + } + else if (agent instanceof Wolf && neigborAgent instanceof Sheep) { + Wolf wolf = (Wolf) agent; + wolf.gigotDAgneau(); + agentsToRemove.add(neigborAgent); + + } } } - //then evolution of the field - // TODO : apply game rule to all cells of the field + // Remove agents after the loop + agents.removeAll(agentsToRemove); + agents.addAll(agentsToAdd); + + //then evolution of the field + int[][] newField = new int[LINE_NUM][COL_NUM]; + for (int y = 0; y < LINE_NUM; y++) { + for (int x = 0; x < COL_NUM; x++) { + newField[y][x] = applyRules(x, y); + } + } + field = newField; /* you should distribute this action in methods/classes * don't write everything here ! * @@ -128,45 +148,157 @@ public class Simulator extends Thread { * then the cell stays alive * if the cell is not alive * and the count is in the birth list, - * then the cell becomes alive - */ - - - - + * then the cell becomes alive */ + } + + private int applyRules(int x, int y) { + int currentState = getCell(x, y); + if (isHighGround()) { + if (currentState != 0) { // Cell is alive + int enemyAbove = countHighGround(x, y, currentState); + int friendSupport = countFriends(x, y, currentState); + + if (friendSupport > enemyAbove) { + return currentState; // Stays alive + } else { + return 0; // Dies + } /*else { // Switch sides + return currentState == 3 ? 2 : 3;*/ + } else { + int anakinCount = countAliveNeighbors(x, y, 2); + int generalKCount = countAliveNeighbors(x, y, 3); + int differenceOfForce = generalKCount - anakinCount; + if (differenceOfForce < -1) { + return 2; + } else if (differenceOfForce > 1) { + return 3; + } else { + return 0; + } + } + } + else { + int aliveNeighbors = countAliveNeighbors(x, y, 1); + if (currentState == 1) { // Cell is alive + if (fieldSurviveValues.contains(aliveNeighbors)) { + return 1; // Stays alive + } else { + return 0; // Dies + } + } else { // Cell is dead + if (fieldBirthValues.contains(aliveNeighbors)) { + return 1; // Becomes alive + } else { + return 0; // Stays dead + } + } + } + } + + private int countAliveNeighbors(int x, int y, int val) { + int count = 0; + for (int i = -1; i <= 1; i++) { + for (int j = -1; j <= 1; j++) { + if (i == 0 && j == 0) continue; // Skip the cell itself + int nx = x + i; + int ny = y + j; + if (nx >= 0 && nx < COL_NUM && ny >= 0 && ny < LINE_NUM && getCell(nx, ny) == val) { + count += 1; + } + else { + if (isLoopingBorder()) { + nx = (nx % COL_NUM + COL_NUM) % COL_NUM; + ny = (ny % LINE_NUM + LINE_NUM) % LINE_NUM; + if (getCell(nx, ny) == val) { + count += 1; + } + } + } + } + } + return count; + } + + private int countHighGround(int x, int y, int val) { + int count = 0; + for (int i = -1; i <= 1; i++) { + int nx = x + i; + int ny = y - 1; + if (nx >= 0 && nx < COL_NUM && ny >= 0 && ny < LINE_NUM && ((getCell(nx, ny) == 3 && val == 2) || (getCell(nx, ny) == 2 && val == 3))) { + count += 1; + } + else { + if (isLoopingBorder()) { + nx = (nx % COL_NUM + COL_NUM) % COL_NUM; + ny = (ny % LINE_NUM + LINE_NUM) % LINE_NUM; + if ((getCell(nx, ny) == 3 && val == 2) || (getCell(nx, ny) == 2 && val == 3)) { + count += 1; + } + } + } + + } + return count; + } + + private int countFriends(int x, int y, int val) { + int count = 0; //There is always a friend in you + for (int i = -1; i <= 1; i++) { + int nx = x + i; + int ny = y; + if (nx >= 0 && nx < COL_NUM && ny >= 0 && ny < LINE_NUM && getCell(nx, ny) == val) { + count += 1; + } + else if (isLoopingBorder()) { + nx = (nx % COL_NUM + COL_NUM) % COL_NUM; + ny = (ny % LINE_NUM + LINE_NUM) % LINE_NUM; + if (getCell(nx, ny) == val) { + count += 1; + } + } + + } + return count; } - /* - * leave this as is - */ public void stopSimu() { - stopFlag=true; + stopFlag = true; } - /* - * method called when clicking pause button - */ public void togglePause() { - // TODO : actually toggle the corresponding flag - pauseFlag =!pauseFlag; + pauseFlag = !pauseFlag; } - - /** - * method called when clicking on a cell in the interface - */ + public void clickCell(int x, int y) { - //TODO : complete method + if (getCell(x, y) == 0) { + switch(clickActionFlag) { + case 4: // Sheep + Sheep sheep = new Sheep(x, y); // Assuming Sheep has a constructor with (x, y) + agents.add(sheep); + break; + case 5: // Wolf + Wolf wolf = new Wolf(x, y); // Assuming Wolf has a constructor with (x, y) + agents.add(wolf); + break; + default: + setCell(x, y, clickActionFlag); + } + } else { + setCell(x, y, 0); + for (Agent agent : agents) { + if (agent.getX() == x && agent.getY() == y) { + agents.remove(agent); + } + } + } } - /** - * get cell value in simulated world - * @param x coordinate of cell - * @param y coordinate of cell - * @return value of cell - */ public int getCell(int x, int y) { - //TODO : complete method with proper return - return world[x][y]; + if (x >= 0 && x < COL_NUM && y >= 0 && y < LINE_NUM) { + return field[y][x]; + } else { + return 0; + } } /** * @@ -193,36 +325,30 @@ public class Simulator extends Thread { return inArea; } - /** - * set value of cell - * @param x coord of cell - * @param y coord of cell - * @param val to set in cell - */ public void setCell(int x, int y, int val) { - //TODO : complete method + if (x >= 0 && x < COL_NUM && y >= 0 && y < LINE_NUM) { + field[y][x] = val; + } else { + return; + } } - /** - * - * @return lines of file representing - * the simulated world in its present state - */ + public ArrayList getSaveState() { - //TODO : complete method with proper return - return null; + ArrayList saveState = new ArrayList<>(); + for (int y = 0; y < LINE_NUM; y++) { + StringBuilder line = new StringBuilder(); + for (int x = 0; x < COL_NUM; x++) { + line.append(getCell(x, y)).append(";"); + } + saveState.add(line.toString()); + } + return saveState; } /** - * * @param lines of file representing saved world state */ public void loadSaveState(ArrayList lines) { - /* - * First some checks that the file is usable - * We call early returns in conditions like this - * "Guard clauses", as they guard the method - * against unwanted inputs - */ if(lines.size()<=0) { return; } @@ -231,10 +357,7 @@ public class Simulator extends Thread { if(firstLineElements.length<=0) { return; } - /* - * now we fill in the world - * with the content of the file - */ + for(int y =0; y 6) { + clickActionFlag = 1; // Reset to 1 if it exceeds the maximum action value + } + } - /** - * prepare the content of a file saving present ruleSet - * as you might want to save a state, - * initialy written in this class constructor - * as a file for future use - * @return File content as an ArrayList of Lines (String) - * @see loadRule for inverse process - */ public ArrayList getRule() { - //TODO : complete method with proper return - - return null; + ArrayList rule = new ArrayList<>(); + StringBuilder survive = new StringBuilder(); + for (int value : fieldSurviveValues) { + survive.append(value).append(";"); + } + StringBuilder birth = new StringBuilder(); + for (int value : fieldBirthValues) { + birth.append(value).append(";"); + } + rule.add(survive.toString()); + rule.add(birth.toString()); + return rule; } public void loadRule(ArrayList lines) { @@ -300,45 +446,96 @@ public class Simulator extends Thread { System.out.println("empty rule file"); return; } - //TODO : remove previous rule (=emptying lists) - - + fieldSurviveValues.clear(); + fieldBirthValues.clear(); String surviveLine = lines.get(0); String birthLine = lines.get(1); String[] surviveElements = surviveLine.split(";"); for(int x=0; x getAgentsSave() { - //TODO : Same idea as the other save method, but for agents - return null; + ArrayList agentSaveState = new ArrayList<>(); + String sheeps = "2,"; + String wolfs = "3,"; + for (Agent agent : agents) { + int x = agent.getX(); + int y = agent.getY(); + if (agent instanceof Sheep) + { + sheeps = sheeps + x + ";" + y + ","; + } + else if (agent instanceof Wolf) + { + wolfs = wolfs + x + ";" + y + ","; + } + } + agentSaveState.add(sheeps); + agentSaveState.add(wolfs); + return agentSaveState; } public void loadAgents(ArrayList stringArray) { - //TODO : Same idea as other load methods, but for agent list - + if (stringArray.size() <= 0) { + System.out.println("empty agent file"); + return; + } + agents.clear(); + for (int y = 0; y < stringArray.size(); y++) { + String line = stringArray.get(y).trim(); + // Remove BOM if present + if (y == 0 && line.startsWith("\uFEFF")) { + line = line.substring(1); + } + String[] lineElements = line.split(","); + try { + int agentType = Integer.parseInt(lineElements[0].trim()); + for (int x = 1; x < lineElements.length; x++) { + if (!lineElements[x].contains(";")) continue; // Skip malformed entries + String[] coordinates = lineElements[x].split(";"); + if (coordinates.length != 2) continue; // Skip malformed entries + int i = Integer.parseInt(coordinates[0].trim()); + int j = Integer.parseInt(coordinates[1].trim()); + if (agentType == 4) { + Sheep newSheep = new Sheep(i, j); + agents.add(newSheep); + } + if (agentType == 5) { + Wolf newWolf = new Wolf(i, j); + agents.add(newWolf); + } + } + } catch (NumberFormatException e) { + System.out.println("Error parsing agent type or coordinates: " + e.getMessage()); + } + } } - /** - * used by label in interface to show the active click action - * @return String representation of click action - */ public String clickActionName() { - // TODO : initially return "sheep" or "cell" - // depending on clickActionFlag - return ""; + switch(clickActionFlag) { + case 1: + return "Cell"; + case 2: + return "Anakin"; + case 3: + return "General"; + case 4: + return "Sheep"; + case 5: + return "Wolf"; + default: + return "Unknown"; + } } - + } diff --git a/src/backend/Wolf.java b/src/backend/Wolf.java new file mode 100644 index 0000000..c9bac3f --- /dev/null +++ b/src/backend/Wolf.java @@ -0,0 +1,127 @@ +package backend; + +import java.awt.Color; +import java.util.ArrayList; +import java.util.Random; + +// example of basic animal. +// do not hesitate to make it more complex +// and DO add at least another species that interact with it +// for example wolves that eat Sheep +public class Wolf extends Agent { + + int hunger; + Random rand; + private boolean hasReproduced = false; + private boolean hasEaten = false; + + Wolf(int x,int y){ + //first we call the constructor of the superClass(Animal) + //with the values we want. + // here we decide that a Sheep is initially white using this constructor + super(x,y,Color.gray); + // we give our sheep a hunger value of zero at birth + hunger = 0; + //we initialize the random number generator we will use to move randomly + rand = new Random(); + } + + /** + * action of the animal + * it can interact with the cells or with other animals + * as you wish + */ + public boolean liveTurn(ArrayList neighbors, Simulator world) { + hasReproduced = false; + hasEaten = false; + if (hasEaten) { + hunger = 0; + } + this.moveRandom(); + return hunger<10; + } + + public void gigotDAgneau() { + hasReproduced = !hasReproduced; + } + + public boolean hasItReproduced() { + return hasReproduced; + } + + public Wolf reproduce(ArrayList neighbors, Simulator world) { + hasReproduced = true; + // If there are Wolf neighbors and a random chance is met, then reproduce + if (Math.random() < 0.1) { // 10% chance to reproduce + // Find a vacant neighboring cell + int[] position = findVacantPosition(neighbors, world); + if (position != null) { + // Create a new Wolf in the vacant cell + Wolf wolfBaby = new Wolf(position[0], position[1]); + return wolfBaby; + } + } + return null; + } + + // Method to find a vacant neighboring cell for reproduction + private int[] findVacantPosition(ArrayList neighbors, Simulator world) { + for (int i = -1; i <= 1; i++) { + for(int j = -1; j <= 1; j++) { + boolean vacant = true; + for (Agent nearAgent : neighbors) { + int nearX = nearAgent.getX(); + int nearY = nearAgent.getY(); + if (nearX == (x + i) && nearY == (y + j)) { + vacant = false; + break; + } + } + if (vacant && world.getCell(x + i, y + j) == 0) { + int[] position = new int[2]; + position[0] = x + i; + position[1] = y + j; + return position; + } + } + } + return null; + } + + private void moveRandom() { + int direction = rand.nextInt(4); + switch (direction) { + case 0: // Move right + if (x + 1 < Simulator.COL_NUM) { + x += 1; + } else if (Simulator.isLoopingBorder()) { + x = 0; // Loop to the leftmost column + } + break; + case 1: // Move down + if (y + 1 < Simulator.LINE_NUM) { + y += 1; + } else if (Simulator.isLoopingBorder()) { + y = 0; // Loop to the topmost row + } + break; + case 2: // Move left + if (x - 1 >= 0) { + x -= 1; + } else if (Simulator.isLoopingBorder()) { + x = Simulator.COL_NUM - 1; // Loop to the rightmost column + } + break; + case 3: // Move up + if (y - 1 >= 0) { + y -= 1; + } else if (Simulator.isLoopingBorder()) { + y = Simulator.LINE_NUM - 1; // Loop to the bottommost row + } + break; + } + } + + + +} diff --git a/src/windowInterface/JPanelDraw.java b/src/windowInterface/JPanelDraw.java index 0f46c44..923c0ea 100644 --- a/src/windowInterface/JPanelDraw.java +++ b/src/windowInterface/JPanelDraw.java @@ -5,7 +5,7 @@ import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; -// this import is not in loic's + import javax.swing.JPanel; import backend.Agent; @@ -16,7 +16,7 @@ public class JPanelDraw extends JPanel { private static final long serialVersionUID = 1L; private Simulator mySimu; private MyInterface interfaceGlobal; -// missing a private gamemode gamemode; + public JPanelDraw(MyInterface itf) { super(); mySimu = null; @@ -64,13 +64,19 @@ public class JPanelDraw extends JPanel { continue; } if(cellContent == 1) { - g.setColor(Color.green); + g.setColor(Color.magenta); } if(cellContent == 2) { - g.setColor(Color.yellow); + g.setColor(Color.red); } if(cellContent == 3) { - g.setColor(Color.cyan); + g.setColor(Color.blue); + } + if(cellContent == 4) { + g.setColor(Color.white); + } + if(cellContent == 5) { + g.setColor(Color.pink); } g.fillRect( (int) Math.round(x*cellWidth), diff --git a/src/windowInterface/MyInterface.java b/src/windowInterface/MyInterface.java index d84a21d..c43a484 100644 --- a/src/windowInterface/MyInterface.java +++ b/src/windowInterface/MyInterface.java @@ -23,6 +23,7 @@ import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.awt.event.ActionEvent; public class MyInterface extends JFrame { @@ -37,6 +38,8 @@ public class MyInterface extends JFrame { private JSlider randSlider; private JSlider speedSlider; private JLabel clickLabel; + private JLabel highGroundsLabel; + private JLabel gameRuleLabel; /** * Create the frame. @@ -63,6 +66,7 @@ public class MyInterface extends JFrame { } }); panelTop.add(btnGo); + JButton btnClickAct = new JButton("Toggle Click"); btnClickAct.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { @@ -109,8 +113,6 @@ public class MyInterface extends JFrame { JButton btnSave = new JButton("Save World"); btnSave.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { - // SaveFile save = new SaveFile(mySimu.getFileRepresentation(), mySimu); - // save.clicSaveToFileButton(); clicSaveToFileButton(); } }); @@ -124,7 +126,7 @@ public class MyInterface extends JFrame { } }); panelRight.add(btnLoadRule); - + JButton btnSaveRule = new JButton("Save Rule"); btnSaveRule.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { @@ -148,7 +150,15 @@ public class MyInterface extends JFrame { } }); panelRight.add(btnSaveAgents); - + + JButton btnHighGround = new JButton("I Have The High Grounds"); + btnHighGround.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent arg0) { + clicButtonHighGrounds(); + } + }); + panelRight.add(btnHighGround); + JButton btnRandGen = new JButton("Random Field"); btnRandGen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { @@ -156,7 +166,6 @@ public class MyInterface extends JFrame { } }); panelRight.add(btnRandGen); - JLabel randLabel = new JLabel("random density slider :"); panelRight.add(randLabel); @@ -184,12 +193,19 @@ public class MyInterface extends JFrame { borderLabel = new JLabel("border : X"); panelRight.add(borderLabel); - borderLabel.setText("border : " + - (mySimu.isLoopingBorder()?"loop":"closed")); + borderLabel.setText("border : " + (mySimu.isLoopingBorder()?"loop":"closed")); clickLabel = new JLabel("click : X"); panelRight.add(clickLabel); clickLabel.setText("click : " + mySimu.clickActionName()); + + gameRuleLabel = new JLabel("Rule : X"); + panelRight.add(gameRuleLabel); + gameRuleLabel.setText("Rule : " + mySimu.fieldSurviveValues + " S, " + mySimu.fieldBirthValues + " B"); + + highGroundsLabel = new JLabel("I have the High Grounds"); + panelRight.add(highGroundsLabel); + highGroundsLabel.setText((mySimu.isHighGround()?"I have":"Conway has") + " the High Grounds"); } public void setStepBanner(String s) { @@ -239,6 +255,13 @@ public class MyInterface extends JFrame { } } + public void clicButtonHighGrounds() { + if(mySimu != null) { + mySimu.toggleHighGrounds(); + highGroundsLabel.setText((mySimu.isHighGround()?"I have":"Conway has") + " the High Grounds"); + } + } + public void generateRandomBoard() { this.instantiateSimu(); float chanceOfLife = ((float)randSlider.getValue())/((float)randSlider.getMaximum()); @@ -300,6 +323,7 @@ public class MyInterface extends JFrame { mySimu.loadRule(stringArray); this.repaint(); } + gameRuleLabel.setText("Rule : " + mySimu.fieldSurviveValues + " S, " + mySimu.fieldBirthValues + " B"); } public void clicLoadAgentsFileButton() { @@ -327,7 +351,8 @@ public class MyInterface extends JFrame { String fileName=SelectFile(); if (fileName.length()>0) { ArrayList content = mySimu.getSaveState(); - writeFile(fileName, (String[]) content.toArray()); + String[] strArr = Arrays.copyOf(content.toArray(), content.toArray().length, String[].class); + writeFile(fileName, strArr); } } @@ -335,7 +360,8 @@ public class MyInterface extends JFrame { String fileName=SelectFile(); if (fileName.length()>0) { ArrayList content = mySimu.getRule(); - writeFile(fileName, (String[]) content.toArray()); + String[] strArr = Arrays.copyOf(content.toArray(), content.toArray().length, String[].class); + writeFile(fileName, strArr); } } @@ -343,7 +369,8 @@ public class MyInterface extends JFrame { String fileName=SelectFile(); if (fileName.length()>0) { ArrayList content = mySimu.getAgentsSave(); - writeFile(fileName, (String[]) content.toArray()); + String[] strArr = Arrays.copyOf(content.toArray(), content.toArray().length, String[].class); + writeFile(fileName, strArr); } }