Преглед изворни кода

определился с механизмом аспектов

kpmy пре 7 година
родитељ
комит
2390dcc3f4
30 измењених фајлова са 921 додато и 204 уклоњено
  1. 7 0
      pom.xml
  2. 1 2
      src/main/java/in/ocsf/frei/geld/core/App.java
  3. 205 8
      src/main/java/in/ocsf/frei/geld/core/model/Dwarf.java
  4. 18 0
      src/main/java/in/ocsf/frei/geld/core/model/DwarfAspect.java
  5. 57 0
      src/main/java/in/ocsf/frei/geld/core/model/DwarfContext.java
  6. 11 0
      src/main/java/in/ocsf/frei/geld/core/model/DwarfDefaultAspect.java
  7. 4 0
      src/main/java/in/ocsf/frei/geld/core/model/LiveCycle.java
  8. 5 0
      src/main/java/in/ocsf/frei/geld/core/model/SimpleConsequence.java
  9. 0 34
      src/main/java/in/ocsf/frei/geld/core/model/Supply.java
  10. 0 7
      src/main/java/in/ocsf/frei/geld/core/model/SupplyHolder.java
  11. 0 15
      src/main/java/in/ocsf/frei/geld/core/model/SupplyType.java
  12. 0 27
      src/main/java/in/ocsf/frei/geld/core/model/Token.java
  13. 0 5
      src/main/java/in/ocsf/frei/geld/core/model/TokenState.java
  14. 186 10
      src/main/java/in/ocsf/frei/geld/core/model/World.java
  15. 206 0
      src/main/java/in/ocsf/frei/geld/core/model/WorldMaps.java
  16. 5 0
      src/main/java/in/ocsf/frei/geld/core/model/WorldObjectType.java
  17. 4 2
      src/main/java/in/ocsf/frei/geld/core/repo/DwarfRepository.java
  18. 0 8
      src/main/java/in/ocsf/frei/geld/core/repo/TokenRepository.java
  19. 11 0
      src/main/java/in/ocsf/frei/geld/core/repo/WorldDwarfObjectRepository.java
  20. 9 0
      src/main/java/in/ocsf/frei/geld/core/repo/WorldObjectRepository.java
  21. 43 21
      src/main/java/in/ocsf/frei/geld/core/rest/DevController.java
  22. 25 23
      src/main/java/in/ocsf/frei/geld/core/service/DwarfService.java
  23. 40 22
      src/main/java/in/ocsf/frei/geld/core/service/LiveCycleService.java
  24. 0 20
      src/main/java/in/ocsf/frei/geld/core/service/WorldService.java
  25. 26 0
      src/main/resources/static/bower.json
  26. 5 0
      src/main/resources/static/components/app.js
  27. 3 0
      src/main/resources/static/components/root.html
  28. 6 0
      src/main/resources/static/components/root.js
  29. 15 0
      src/main/resources/static/components/route.js
  30. 29 0
      src/main/resources/static/index.html

+ 7 - 0
pom.xml

@@ -64,6 +64,13 @@
             <version>1.11</version>
         </dependency>
 
+        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.7</version>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 1 - 2
src/main/java/in/ocsf/frei/geld/core/App.java

@@ -2,10 +2,9 @@ package in.ocsf.frei.geld.core;/* kpmy 28.10.2017 */
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.scheduling.annotation.EnableScheduling;
 
 @SpringBootApplication
-@EnableScheduling
+//@EnableScheduling
 public class App {
     public static void main(String[] args) throws Exception {
         SpringApplication.run(App.class, args);

+ 205 - 8
src/main/java/in/ocsf/frei/geld/core/model/Dwarf.java

@@ -1,19 +1,28 @@
 package in.ocsf.frei.geld.core.model;/* kpmy 15.11.2017 */
 
+import org.apache.commons.lang3.Range;
+import org.apache.commons.lang3.tuple.MutablePair;
 import org.bson.types.ObjectId;
 import org.springframework.data.annotation.Id;
 import org.springframework.data.annotation.Version;
+import org.springframework.data.mongodb.core.mapping.DBRef;
 import org.springframework.data.mongodb.core.mapping.Document;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.function.BiConsumer;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
 
 @Document(collection = "dwarf")
-public class Dwarf implements SupplyHolder {
+public class Dwarf {
 
     @Id
     private ObjectId id;
 
+    @Version
+    private Long _version;
+
     private Integer age;
 
     private Integer death;
@@ -22,19 +31,58 @@ public class Dwarf implements SupplyHolder {
 
     private Integer day;
 
-    @Version
-    private Long version;
+    private Integer hour;
 
     private String name;
 
-    private Map<SupplyType, Supply> supply = new HashMap<>();
+    private EnergyAspect energy;
+
+    private ActivityAspect activity;
+
+    private FeelingsAspect feelings;
+
+    private VisionAspect vision;
+
+    @DBRef
+    private World world;
+
+    public Dwarf() {
+        energy = new EnergyAspect();
+        activity = new ActivityAspect();
+        feelings = new FeelingsAspect();
+        vision = new VisionAspect();
+    }
+
+    public VisionAspect getVision() {
+        return vision;
+    }
+
+    public void setVision(VisionAspect vision) {
+        this.vision = vision;
+    }
+
+    public EnergyAspect getEnergy() {
+        return energy;
+    }
 
-    public Map<SupplyType, Supply> getSupply() {
-        return supply;
+    public void setEnergy(EnergyAspect energy) {
+        this.energy = energy;
     }
 
-    public void setSupply(Map<SupplyType, Supply> supply) {
-        this.supply = supply;
+    public ActivityAspect getActivity() {
+        return activity;
+    }
+
+    public void setActivity(ActivityAspect activity) {
+        this.activity = activity;
+    }
+
+    public FeelingsAspect getFeelings() {
+        return feelings;
+    }
+
+    public void setFeelings(FeelingsAspect feelings) {
+        this.feelings = feelings;
     }
 
     public DwarfState getState() {
@@ -84,4 +132,153 @@ public class Dwarf implements SupplyHolder {
     public void setName(String name) {
         this.name = name;
     }
+
+    public World getWorld() {
+        return world;
+    }
+
+    public void setWorld(World world) {
+        this.world = world;
+    }
+
+    public Integer getHour() {
+        return hour;
+    }
+
+    public void setHour(Integer hour) {
+        this.hour = hour;
+    }
+
+    public static class ActivityAspect implements DwarfAspect {
+
+        private boolean active;
+
+        public ActivityAspect() {
+            this.active = true;
+        }
+
+        @Override
+        public BiConsumer<DwarfContext, Dwarf> perform() {
+            return (ctx, dwarf) -> {
+                if (ctx.getConsequences().contains(SimpleConsequence.SLEEP)) {
+                    active = false;
+                    ctx.getConsequences().remove(SimpleConsequence.SLEEP);
+                } else if (ctx.getConsequences().contains(SimpleConsequence.AWAKE)) {
+                    active = true;
+                    ctx.getConsequences().remove(SimpleConsequence.AWAKE);
+                }
+            };
+        }
+
+        public boolean isActive() {
+            return active;
+        }
+
+        public void setActive(boolean active) {
+            this.active = active;
+        }
+    }
+
+    public static class EnergyAspect implements DwarfAspect {
+
+        private static final Range<Double> sleepRange = Range.between(LiveCycle.DAYLY_ENERGY * 2 / 3, LiveCycle.DAYLY_ENERGY);
+
+        private Double energy;
+        private Double loss;
+
+        public EnergyAspect() {
+            this.energy = LiveCycle.TOTAL_ENERGY;
+            this.loss = 0.0;
+        }
+
+        public Double getEnergy() {
+            return energy;
+        }
+
+        public void setEnergy(Double energy) {
+            this.energy = energy;
+        }
+
+        @Override
+        public BiConsumer<DwarfContext, Dwarf> perform() {
+            return (context, dwarf) -> {
+                double deltaLoss = (LiveCycle.DAYLY_ENERGY / LiveCycle.HOURS);
+                this.energy = this.energy - deltaLoss;
+                this.loss = this.loss + deltaLoss;
+                if (this.energy <= 0) {
+                    context.addSimpleConsequence(this, SimpleConsequence.DEATH);
+                } else if (sleepRange.contains(this.loss)) {
+                    context.addSimpleConsequence(this, SimpleConsequence.SLEEP);
+                } else if (sleepRange.isBefore(this.loss)) {
+                    this.loss = deltaLoss;
+                    context.addSimpleConsequence(this, SimpleConsequence.AWAKE);
+                }
+            };
+        }
+    }
+
+    public static class FeelingsAspect implements DwarfAspect {
+
+        private double hunger;
+
+        public FeelingsAspect() {
+            this.hunger = 0.0;
+        }
+
+        public double getHunger() {
+            return hunger;
+        }
+
+        public void setHunger(double hunger) {
+            this.hunger = hunger;
+        }
+
+        @Override
+        public BiConsumer<DwarfContext, Dwarf> perform() {
+            return (ctx, d) -> {
+                this.hunger = (Math.min(LiveCycle.DAYLY_ENERGY, LiveCycle.TOTAL_ENERGY - d.getEnergy().getEnergy()) / LiveCycle.DAYLY_ENERGY) * 100;
+            };
+        }
+    }
+
+    public static class VisionAspect implements DwarfDefaultAspect {
+
+        private Map<String, MutablePair<WorldObjectType, Object>> frame;
+
+        @DBRef
+        private World.DwarfPoint self;
+
+        public VisionAspect() {
+            frame = new HashMap<>();
+        }
+
+        public Map<String, MutablePair<WorldObjectType, Object>> getFrame() {
+            return frame;
+        }
+
+        public void setFrame(Map<String, MutablePair<WorldObjectType, Object>> frame) {
+            this.frame = frame;
+        }
+
+        @Override
+        public Consumer<Dwarf> skip() {
+            return (d) -> frame = new HashMap<>();
+        }
+
+        public World.DwarfPoint getSelf() {
+            return self;
+        }
+
+        public void setSelf(World.DwarfPoint self) {
+            this.self = self;
+        }
+
+        @Override
+        public BiConsumer<DwarfContext, Dwarf> perform() {
+            return (ctx, dwarf) -> {
+                self = ctx.getDwarfPosition(dwarf);
+                frame = ctx.getAllAround(self).stream().filter(s -> !s.getPoint().equals(self.getPoint())).collect(Collectors.toMap(s -> s.getPoint().toString(), World.Something::getRef, (same, key) -> same));
+            };
+        }
+    }
 }

+ 18 - 0
src/main/java/in/ocsf/frei/geld/core/model/DwarfAspect.java

@@ -0,0 +1,18 @@
+package in.ocsf.frei.geld.core.model;/* kpmy 24.11.2017 */
+
+import java.util.function.BiConsumer;
+import java.util.function.BiFunction;
+import java.util.function.Consumer;
+
+public interface DwarfAspect {
+    BiConsumer<DwarfContext, Dwarf> perform();
+
+    default BiFunction<DwarfContext, Dwarf, Boolean> isAvailable() {
+        return (c, d) -> true;
+    }
+
+    default Consumer<Dwarf> skip() {
+        return (x) -> {
+        };
+    }
+}

+ 57 - 0
src/main/java/in/ocsf/frei/geld/core/model/DwarfContext.java

@@ -0,0 +1,57 @@
+package in.ocsf.frei.geld.core.model;/* kpmy 24.11.2017 */
+
+import in.ocsf.frei.geld.core.repo.WorldDwarfObjectRepository;
+import in.ocsf.frei.geld.core.repo.WorldObjectRepository;
+import org.springframework.context.ApplicationContext;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import static in.ocsf.frei.geld.core.model.QWorld_Something.something;
+
+public class DwarfContext {
+
+    private ApplicationContext context;
+
+    private Set<SimpleConsequence> consequences = new HashSet<>();
+
+    private Long hour;
+
+    public DwarfContext(ApplicationContext context) {
+        this.context = context;
+    }
+
+    public void addSimpleConsequence(Dwarf.EnergyAspect aspect, SimpleConsequence consequence) {
+        consequences.add(consequence);
+    }
+
+    public Set<SimpleConsequence> getConsequences() {
+        return consequences;
+    }
+
+    public void setConsequences(Set<SimpleConsequence> consequences) {
+        this.consequences = consequences;
+    }
+
+    public Long getHour() {
+        return hour;
+    }
+
+    public void setHour(Long hour) {
+        this.hour = hour;
+    }
+
+    public World.DwarfPoint getDwarfPosition(Dwarf dwarf) {
+        WorldDwarfObjectRepository objectRepo = context.getBean(WorldDwarfObjectRepository.class);
+        return objectRepo.findFirstByDwarf(dwarf).orElseThrow(RuntimeException::new);
+    }
+
+    public List<World.Something> getAllAround(World.Something self) {
+        WorldObjectRepository pointRepo = context.getBean(WorldObjectRepository.class);
+        List<World.Something> ret = new ArrayList<>();
+        pointRepo.findAll(something.point.x.between(self.getPoint().getX() - LiveCycle.VISION_LENGTH, self.getPoint().getX() + LiveCycle.VISION_LENGTH).and(something.point.y.between(self.getPoint().getY() - LiveCycle.VISION_LENGTH, self.getPoint().getY() + LiveCycle.VISION_LENGTH)).and(something.world.id.eq(self.getWorld().getId()))).forEach(ret::add);
+        return ret;
+    }
+}

+ 11 - 0
src/main/java/in/ocsf/frei/geld/core/model/DwarfDefaultAspect.java

@@ -0,0 +1,11 @@
+package in.ocsf.frei.geld.core.model;/* kpmy 25.11.2017 */
+
+import java.util.function.BiFunction;
+
+public interface DwarfDefaultAspect extends DwarfAspect {
+
+    @Override
+    default BiFunction<DwarfContext, Dwarf, Boolean> isAvailable() {
+        return (ctx, dwarf) -> dwarf.getActivity().isActive();
+    }
+}

+ 4 - 0
src/main/java/in/ocsf/frei/geld/core/model/LiveCycle.java

@@ -2,4 +2,8 @@ package in.ocsf.frei.geld.core.model;/* kpmy 15.11.2017 */
 
 public class LiveCycle {
     public static final int DAYS = 364;
+    public static final int HOURS = 24;
+    public static final double TOTAL_ENERGY = 300_000.0;
+    public static final double DAYLY_ENERGY = 2_500.0;
+    public static final int VISION_LENGTH = 10;
 }

+ 5 - 0
src/main/java/in/ocsf/frei/geld/core/model/SimpleConsequence.java

@@ -0,0 +1,5 @@
+package in.ocsf.frei.geld.core.model;/* kpmy 24.11.2017 */
+
+public enum SimpleConsequence {
+    DEATH, SLEEP, AWAKE
+}

+ 0 - 34
src/main/java/in/ocsf/frei/geld/core/model/Supply.java

@@ -1,34 +0,0 @@
-package in.ocsf.frei.geld.core.model;/* kpmy 15.11.2017 */
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-
-public class Supply {
-
-    private Double value = 0.0;
-
-    public Double getValue() {
-        return value;
-    }
-
-    public void setValue(Double value) {
-        this.value = value;
-    }
-
-    @JsonIgnore
-    public void incValue(Double add) {
-        value += add;
-    }
-
-    @JsonIgnore
-    public Double decValue(Double dec) {
-        Double ret;
-        if (dec >= value) {
-            ret = value;
-            value = 0.0;
-        } else {
-            ret = dec;
-            value = value - dec;
-        }
-        return ret;
-    }
-}

+ 0 - 7
src/main/java/in/ocsf/frei/geld/core/model/SupplyHolder.java

@@ -1,7 +0,0 @@
-package in.ocsf.frei.geld.core.model;/* kpmy 15.11.2017 */
-
-import java.util.Map;
-
-public interface SupplyHolder {
-    Map<SupplyType, Supply> getSupply();
-}

+ 0 - 15
src/main/java/in/ocsf/frei/geld/core/model/SupplyType.java

@@ -1,15 +0,0 @@
-package in.ocsf.frei.geld.core.model;/* kpmy 15.11.2017 */
-
-public enum SupplyType {
-    inner(-2500.0), food(0.0);
-
-    private double dayDelta;
-
-    SupplyType(double dayDelta) {
-        this.dayDelta = dayDelta;
-    }
-
-    public double getDayDelta() {
-        return dayDelta;
-    }
-}

+ 0 - 27
src/main/java/in/ocsf/frei/geld/core/model/Token.java

@@ -1,27 +0,0 @@
-package in.ocsf.frei.geld.core.model;/* kpmy 06.11.2017 */
-
-import org.bson.types.ObjectId;
-import org.springframework.data.annotation.Id;
-import org.springframework.data.annotation.Version;
-import org.springframework.data.mongodb.core.mapping.Document;
-
-@Document(collection = "token")
-public class Token {
-
-    @Id
-    private ObjectId id;
-
-    private TokenState state;
-
-    @Version
-    private Long version;
-
-    private Long initial;
-
-    private Long current;
-
-    private Integer era;
-
-    private ObjectId parent;
-
-}

+ 0 - 5
src/main/java/in/ocsf/frei/geld/core/model/TokenState.java

@@ -1,5 +0,0 @@
-package in.ocsf.frei.geld.core.model;/* kpmy 06.11.2017 */
-
-public enum TokenState {
-    ACTIVE, ARCHIVE
-}

+ 186 - 10
src/main/java/in/ocsf/frei/geld/core/model/World.java

@@ -1,14 +1,19 @@
 package in.ocsf.frei.geld.core.model;/* kpmy 15.11.2017 */
 
+import com.querydsl.core.annotations.QueryEntity;
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import org.apache.commons.lang3.tuple.MutablePair;
 import org.springframework.data.annotation.Id;
 import org.springframework.data.annotation.Version;
+import org.springframework.data.mongodb.core.mapping.DBRef;
 import org.springframework.data.mongodb.core.mapping.Document;
 
-import java.util.HashMap;
-import java.util.Map;
+import java.io.Serializable;
+
 
 @Document(collection = "world")
-public class World implements SupplyHolder {
+public class World {
 
     public static final int defaultId = 42;
 
@@ -16,17 +21,23 @@ public class World implements SupplyHolder {
     private Integer id = defaultId;
 
     @Version
-    private Long version;
+    private Long _version;
+
+    private Long hour;
 
-    private Map<SupplyType, Supply> supply = new HashMap<>();
+    private Long day;
+
+    public World() {
+        this.hour = 0L;
+        this.day = 0L;
+    }
 
-    @Override
-    public Map<SupplyType, Supply> getSupply() {
-        return supply;
+    public Long getHour() {
+        return hour;
     }
 
-    public void setSupply(Map<SupplyType, Supply> supply) {
-        this.supply = supply;
+    public void setHour(Long hour) {
+        this.hour = hour;
     }
 
     public Integer getId() {
@@ -36,4 +47,169 @@ public class World implements SupplyHolder {
     public void setId(Integer id) {
         this.id = id;
     }
+
+    public Long getDay() {
+        return day;
+    }
+
+    public void setDay(Long day) {
+        this.day = day;
+    }
+
+    @QueryEntity
+    public static class WorldPoint2D implements Serializable {
+
+        private int x;
+        private int y;
+        private WorldObjectType type;
+
+        public WorldPoint2D(int x, int y, WorldObjectType type) {
+            this.x = x;
+            this.y = y;
+            this.type = type;
+        }
+
+        public WorldPoint2D() {
+        }
+
+        public static WorldPoint2D fromString(String value) {
+            String[] p = value.split("-", -1);
+            return new WorldPoint2D(Integer.parseInt(p[1]), Integer.parseInt(p[2]), WorldObjectType.valueOf(p[0]));
+        }
+
+        public WorldObjectType getType() {
+            return type;
+        }
+
+        public void setType(WorldObjectType type) {
+            this.type = type;
+        }
+
+        public int getX() {
+            return x;
+        }
+
+        public void setX(int x) {
+            this.x = x;
+        }
+
+        public int getY() {
+            return y;
+        }
+
+        public void setY(int y) {
+            this.y = y;
+        }
+
+        @Override
+        public String toString() {
+            return type.name() + "-" + x + "-" + y;
+        }
+
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) return true;
+
+            if (o == null || getClass() != o.getClass()) return false;
+
+            WorldPoint2D that = (WorldPoint2D) o;
+
+            return new EqualsBuilder()
+                    .append(x, that.x)
+                    .append(y, that.y)
+                    .isEquals();
+        }
+
+        @Override
+        public int hashCode() {
+            return new HashCodeBuilder(17, 37)
+                    .append(x)
+                    .append(y)
+                    .toHashCode();
+        }
+    }
+
+    @Document(collection = "world-object")
+    public static abstract class Something {
+
+        @Id
+        private WorldPoint2D point;
+
+        @Version
+        private Long _version;
+
+        @DBRef
+        private World world;
+
+        public Something() {
+            this.point = new WorldPoint2D(0, 0, WorldObjectType.EMPTY);
+        }
+
+        public World getWorld() {
+            return world;
+        }
+
+        public void setWorld(World world) {
+            this.world = world;
+        }
+
+        public WorldPoint2D getPoint() {
+            return point;
+        }
+
+        public void setPoint(WorldPoint2D point) {
+            this.point = point;
+        }
+
+        public abstract MutablePair<WorldObjectType, Object> getRef();
+    }
+
+    @Document(collection = "world-object")
+    public static class DwarfPoint extends Something {
+
+        @DBRef
+        private Dwarf dwarf;
+
+        public DwarfPoint() {
+            super();
+        }
+
+        public DwarfPoint(World world, Dwarf dwarf, int x, int y) {
+            this();
+            this.dwarf = dwarf;
+            this.setWorld(world);
+            this.setPoint(new WorldPoint2D(x, y, WorldObjectType.DWARF));
+        }
+
+        public Dwarf getDwarf() {
+            return dwarf;
+        }
+
+        public void setDwarf(Dwarf dwarf) {
+            this.dwarf = dwarf;
+        }
+
+        @Override
+        public MutablePair<WorldObjectType, Object> getRef() {
+            return MutablePair.of(getPoint().getType(), dwarf.getId());
+        }
+    }
+
+    public static class FoodPoint extends Something {
+
+        public FoodPoint() {
+            super();
+        }
+
+        public FoodPoint(World world, int x, int y) {
+            this();
+            this.setWorld(world);
+            this.setPoint(new WorldPoint2D(x, y, WorldObjectType.FOOD));
+        }
+
+        @Override
+        public MutablePair<WorldObjectType, Object> getRef() {
+            return MutablePair.of(getPoint().getType(), "f00d");
+        }
+    }
 }

+ 206 - 0
src/main/java/in/ocsf/frei/geld/core/model/WorldMaps.java

@@ -0,0 +1,206 @@
+package in.ocsf.frei.geld.core.model;/* kpmy 25.11.2017 */
+
+public class WorldMaps {
+
+    public static final String HEAVEN = "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEFEEEFEEEEEEEEEEEEEEFEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEEEEEFEFFEEEEEEEEEEEEFEEEEEEEEEEFEFEEEEEEEEEEEEEEEFEEEEEEEEEEFEEEEEEEEEEFEFFFFFEFEFEFEFEEEEEEEEEEEEEEEEFEFEFE\n" +
+            "EEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEFFFFFFEFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEFE\n" +
+            "FFFFFFFEFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEFEFEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFEEEEEEFEEEEEFE\n" +
+            "EEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\n" +
+            "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n";
+
+}

+ 5 - 0
src/main/java/in/ocsf/frei/geld/core/model/WorldObjectType.java

@@ -0,0 +1,5 @@
+package in.ocsf.frei.geld.core.model;/* kpmy 25.11.2017 */
+
+public enum WorldObjectType {
+    EMPTY, DWARF, FOOD
+}

+ 4 - 2
src/main/java/in/ocsf/frei/geld/core/repo/DwarfRepository.java

@@ -2,11 +2,13 @@ package in.ocsf.frei.geld.core.repo;/* kpmy 15.11.2017 */
 
 import in.ocsf.frei.geld.core.model.Dwarf;
 import in.ocsf.frei.geld.core.model.DwarfState;
+import in.ocsf.frei.geld.core.model.World;
 import org.bson.types.ObjectId;
 import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.data.querydsl.QueryDslPredicateExecutor;
 
 import java.util.stream.Stream;
 
-public interface DwarfRepository extends MongoRepository<Dwarf, ObjectId> {
-    Stream<Dwarf> findAllByStateIn(DwarfState[] states);
+public interface DwarfRepository extends MongoRepository<Dwarf, ObjectId>, QueryDslPredicateExecutor<Dwarf> {
+    Stream<Dwarf> findAllByStateInAndWorld(DwarfState[] states, World world);
 }

+ 0 - 8
src/main/java/in/ocsf/frei/geld/core/repo/TokenRepository.java

@@ -1,8 +0,0 @@
-package in.ocsf.frei.geld.core.repo;/* kpmy 06.11.2017 */
-
-import in.ocsf.frei.geld.core.model.Token;
-import org.bson.types.ObjectId;
-import org.springframework.data.mongodb.repository.MongoRepository;
-
-public interface TokenRepository extends MongoRepository<Token, ObjectId> {
-}

+ 11 - 0
src/main/java/in/ocsf/frei/geld/core/repo/WorldDwarfObjectRepository.java

@@ -0,0 +1,11 @@
+package in.ocsf.frei.geld.core.repo;/* kpmy 25.11.2017 */
+
+import in.ocsf.frei.geld.core.model.Dwarf;
+import in.ocsf.frei.geld.core.model.World;
+import org.springframework.data.mongodb.repository.MongoRepository;
+
+import java.util.Optional;
+
+public interface WorldDwarfObjectRepository extends MongoRepository<World.DwarfPoint, World.WorldPoint2D> {
+    Optional<World.DwarfPoint> findFirstByDwarf(Dwarf dwarf);
+}

+ 9 - 0
src/main/java/in/ocsf/frei/geld/core/repo/WorldObjectRepository.java

@@ -0,0 +1,9 @@
+package in.ocsf.frei.geld.core.repo;/* kpmy 25.11.2017 */
+
+import in.ocsf.frei.geld.core.model.World;
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.data.querydsl.QueryDslPredicateExecutor;
+
+
+public interface WorldObjectRepository extends MongoRepository<World.Something, World.WorldPoint2D>, QueryDslPredicateExecutor<World.Something> {
+}

+ 43 - 21
src/main/java/in/ocsf/frei/geld/core/rest/DevController.java

@@ -3,60 +3,82 @@ package in.ocsf.frei.geld.core.rest;/* kpmy 06.11.2017 */
 import in.ocsf.frei.geld.core.misc.DwarfNames;
 import in.ocsf.frei.geld.core.model.*;
 import in.ocsf.frei.geld.core.repo.DwarfRepository;
-import in.ocsf.frei.geld.core.repo.TokenRepository;
+import in.ocsf.frei.geld.core.repo.WorldObjectRepository;
 import in.ocsf.frei.geld.core.repo.WorldRepository;
+import in.ocsf.frei.geld.core.service.LiveCycleService;
 import org.springframework.data.mongodb.core.MongoOperations;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.inject.Inject;
+import java.util.ArrayList;
+import java.util.List;
 
 @RestController
 @RequestMapping("dev")
 public class DevController {
 
-    @Inject
-    private TokenRepository tokenRepo;
-
     @Inject
     private WorldRepository worldRepo;
 
     @Inject
     private DwarfRepository dwarfRepo;
 
+    @Inject
+    private WorldObjectRepository objectRepo;
+
+    @Inject
+    private LiveCycleService liveCycleService;
+
     @Inject
     private MongoOperations mongo;
 
     @RequestMapping("reset")
     public void reset() {
         mongo.dropCollection(World.class);
-        mongo.dropCollection(Token.class);
         mongo.dropCollection(Dwarf.class);
+        mongo.dropCollection(World.Something.class);
 
-        World world = new World();
-        Supply wholeFood = new Supply();
-        wholeFood.setValue(Double.MAX_VALUE);
-        world.getSupply().put(SupplyType.food, wholeFood);
-        worldRepo.save(world);
-
-        for (int i = 0; i < 10; i++) {
+        World world = worldRepo.save(new World());
+        loadMap(world, WorldMaps.HEAVEN);
+        for (int i = 0; i < 2; i++) {
             Dwarf dwarf = new Dwarf();
-
+            dwarf.setWorld(world);
             dwarf.setName(DwarfNames.getRandomName());
             dwarf.setAge(18);
             dwarf.setDeath(Long.valueOf(50 + Math.round(25 * Math.random())).intValue());
             dwarf.setState(DwarfState.mature);
             dwarf.setDay(Long.valueOf(Math.max(1, Math.round(LiveCycle.DAYS * Math.random()))).intValue());
+            dwarf.setHour(0);
+            dwarfRepo.save(dwarf);
+            objectRepo.save(new World.DwarfPoint(world, dwarf, i * i, i * i));
+        }
 
-            Supply inner = new Supply();
-            inner.setValue(300_000.0);
-            dwarf.getSupply().put(SupplyType.inner, inner);
-
-            Supply food = new Supply();
-            food.setValue(0.0);
-            dwarf.getSupply().put(SupplyType.food, food);
+        for (int y = 0; y < 1; y++) {
+            liveCycleService.run();
+        }
+    }
 
-            dwarfRepo.save(dwarf);
+    private void loadMap(World world, String map) {
+        int row = 0;
+        int col = 0;
+        List<World.Something> list = new ArrayList<>();
+        for (int i = 0; i < map.length(); i++) {
+            switch (map.charAt(i)) {
+                case 'E':
+                    row++;
+                    break;
+                case 'F':
+                    World.FoodPoint point = new World.FoodPoint(world, row, col);
+                    list.add(point);
+                    row++;
+                    break;
+                default:
+                    row = 0;
+                    col++;
+            }
         }
+        objectRepo.save(list);
     }
+
 }

+ 25 - 23
src/main/java/in/ocsf/frei/geld/core/service/DwarfService.java

@@ -1,9 +1,14 @@
 package in.ocsf.frei.geld.core.service;/* kpmy 15.11.2017 */
 
 import in.ocsf.frei.geld.core.model.*;
+import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Service;
 
 import javax.inject.Inject;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @Service
 public class DwarfService {
@@ -11,31 +16,28 @@ public class DwarfService {
     @Inject
     private WorldService worldService;
 
-    public void runDwarfDay(World world, Dwarf dwarf) {
-        getFoodIfNeeded(world, dwarf);
-        eat(dwarf);
-        rest(dwarf);
-    }
-
-    private void eat(Dwarf dwarf) {
-        Supply inner = dwarf.getSupply().get(SupplyType.inner);
-        Supply food = dwarf.getSupply().getOrDefault(SupplyType.food, new Supply());
-        inner.incValue(food.decValue(Math.abs(SupplyType.inner.getDayDelta())));
-    }
-
-    private void rest(Dwarf dwarf) {
-        Supply inner = dwarf.getSupply().get(SupplyType.inner);
-        inner.setValue(inner.getValue() + SupplyType.inner.getDayDelta());
-        if (inner.getValue() <= 0.0) {
-            dwarf.setState(DwarfState.dead);
+    @Inject
+    private ApplicationContext applicationContext;
+
+    public void runDwarfHour(World world, Dwarf dwarf) {
+        DwarfContext context = new DwarfContext(applicationContext);
+        context.setHour(world.getHour());
+        for (DwarfAspect aspect : getAspects(dwarf)) {
+            if (aspect.isAvailable().apply(context, dwarf))
+                aspect.perform().accept(context, dwarf);
+            else
+                aspect.skip().accept(dwarf);
+            if (context.getConsequences().contains(SimpleConsequence.DEATH)) {
+                dwarf.setState(DwarfState.dead);
+                return;
+            }
         }
     }
 
-    private void getFoodIfNeeded(World world, Dwarf dwarf) {
-        Supply food = dwarf.getSupply().getOrDefault(SupplyType.food, new Supply());
-        if (food.getValue() < Math.abs(SupplyType.inner.getDayDelta())) {
-            Supply newFood = worldService.getSupplyFrom(world, SupplyType.food);
-            food.setValue(food.getValue() + newFood.getValue());
-        }
+    private List<DwarfAspect> getAspects(Dwarf dwarf) {
+        return Stream.of(dwarf.getEnergy(), dwarf.getFeelings(), dwarf.getActivity(), dwarf.getVision())
+                .filter(Objects::nonNull)
+                .collect(Collectors.toList());
     }
+
 }

+ 40 - 22
src/main/java/in/ocsf/frei/geld/core/service/LiveCycleService.java

@@ -11,8 +11,10 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
 import javax.inject.Inject;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 @Service
 public class LiveCycleService {
@@ -22,38 +24,54 @@ public class LiveCycleService {
 
     @Inject
     private WorldRepository worldRepo;
+
     @Inject
     private DwarfService dwarfService;
 
     private Logger log = Logger.getLogger(getClass());
 
-    @Scheduled(fixedDelay = 200L)
+    @Scheduled(fixedDelay = 1000L)
     public void run() {
-        World world = worldRepo.findOne(World.defaultId);
-        List<Dwarf> dwarves = dwarfRepo.findAllByStateIn(new DwarfState[]{DwarfState.old, DwarfState.mature, DwarfState.child}).collect(Collectors.toList());
-        for (int i = 1; i <= LiveCycle.DAYS; i++) runDay(world, dwarves);
-        dwarfRepo.save(dwarves);
-    }
-
-    private void runDay(World world, List<Dwarf> dwarves) {
-        dwarves.parallelStream()
-                .filter(d -> d.getState() != DwarfState.dead)
-                .forEach(d -> runDwarfDay(world, d));
+        IntStream.rangeClosed(1, LiveCycle.DAYS).forEach(day -> {
+            log.info("day " + day);
+            IntStream.range(0, LiveCycle.HOURS).forEach(hour -> {
+                World world = worldRepo.findOne(World.defaultId);
+                List<Dwarf> dwarves = new ArrayList<>();
+                dwarves.addAll(dwarfRepo.findAllByStateInAndWorld(new DwarfState[]{DwarfState.old, DwarfState.mature, DwarfState.child}, world).collect(Collectors.toList()));
+                dwarves.parallelStream().peek(dwarf -> runDwarfHour(world, hour, dwarf)).forEach(dwarf -> dwarfRepo.save(dwarf));
+                world.setHour(world.getHour() + 1);
+                worldRepo.save(world);
+            });
+            World world = worldRepo.findOne(World.defaultId);
+            world.setDay(world.getDay() + 1);
+            worldRepo.save(world);
+        });
     }
 
-    private void runDwarfDay(World world, Dwarf dwarf) {
-        if (dwarf.getDay() == LiveCycle.DAYS) {
-            dwarf.setDay(1);
-            dwarf.setAge(dwarf.getAge() + 1);
-        } else {
-            dwarf.setDay(dwarf.getDay() + 1);
+    private void runDwarfHour(World world, Integer hour, Dwarf dwarf) {
+        if (hour == 0) {
+            if (dwarf.getDay() == LiveCycle.DAYS) {
+                dwarf.setDay(1);
+                dwarf.setAge(dwarf.getAge() + 1);
+            } else {
+                dwarf.setDay(dwarf.getDay() + 1);
+            }
+            if (dwarf.getAge() >= dwarf.getDeath()) {
+                dwarf.setState(DwarfState.dead);
+            }
         }
-        if (dwarf.getAge() >= dwarf.getDeath()) {
-            dwarf.setState(DwarfState.dead);
-        } else {
-            dwarfService.runDwarfDay(world, dwarf);
+        if (!dwarf.getState().equals(DwarfState.dead)) {
+            dwarfService.runDwarfHour(world, dwarf);
         }
-        if (dwarf.getState().equals(DwarfState.dead))
+        if (dwarf.getState().equals(DwarfState.dead)) {
             log.info("dwarf " + dwarf.getName() + " dead");
+        } else {
+            dwarf.setHour(hour);
+            if (dwarf.getAge() > 45) {
+                dwarf.setState(DwarfState.old);
+            } else if (dwarf.getAge() >= 18) {
+                dwarf.setState(DwarfState.mature);
+            }
+        }
     }
 }

+ 0 - 20
src/main/java/in/ocsf/frei/geld/core/service/WorldService.java

@@ -1,28 +1,8 @@
 package in.ocsf.frei.geld.core.service;/* kpmy 15.11.2017 */
 
-import in.ocsf.frei.geld.core.model.Supply;
-import in.ocsf.frei.geld.core.model.SupplyType;
-import in.ocsf.frei.geld.core.model.World;
 import org.springframework.stereotype.Service;
 
 @Service
 public class WorldService {
 
-    public Supply getSupplyFrom(World world, SupplyType type) {
-        Supply ret;
-        if (world.getSupply().containsKey(type)) {
-            Supply supply = world.getSupply().get(type);
-            switch (type) {
-                case food:
-                    ret = new Supply();
-                    ret.setValue(3000 + 3000 * Math.random());
-                    break;
-                default:
-                    return null;
-            }
-        } else {
-            return null;
-        }
-        return ret;
-    }
 }

+ 26 - 0
src/main/resources/static/bower.json

@@ -0,0 +1,26 @@
+{
+  "name": "freigeld-client",
+  "authors": [
+    "kpmy <petryxa.clever@gmail.com>"
+  ],
+  "description": "",
+  "main": "index.html",
+  "license": "MIT",
+  "homepage": "",
+  "ignore": [
+    "**/.*",
+    "node_modules",
+    "bower_components",
+    "test",
+    "tests"
+  ],
+  "dependencies": {
+    "angular": "^1.6.6",
+    "angular-sanitize": "^1.6.6",
+    "angular-ui-router": "^1.0.10",
+    "angular-material": "^1.1.5",
+    "roboto-fontface": "^0.8.0",
+    "underscore": "^1.8.3",
+    "jquery": "^3.2.1"
+  }
+}

+ 5 - 0
src/main/resources/static/components/app.js

@@ -0,0 +1,5 @@
+angular.module('FreiG', ['ui.router', 'ngMaterial', 'ngMessages', 'ngSanitize']);
+
+var _contextPath = 'frei';
+
+angular.module('FreiG').constant('contextPath', _.isEmpty(_contextPath) ? "" : "/" + _contextPath);

+ 3 - 0
src/main/resources/static/components/root.html

@@ -0,0 +1,3 @@
+<div>
+    <md-button ng-click="send()">SEND</md-button>
+</div>

+ 6 - 0
src/main/resources/static/components/root.js

@@ -0,0 +1,6 @@
+angular.module("FreiG").controller("IndexController", function ($scope, $http, contextPath) {
+
+    $scope.send = function () {
+        $http.post(contextPath + "/api/new/ticket/", {from: "pk", to: "tmp", amount: 1});
+    }
+});

+ 15 - 0
src/main/resources/static/components/route.js

@@ -0,0 +1,15 @@
+angular.module('FreiG')
+    .config(function ($stateProvider) {
+        $stateProvider.state({
+            name: 'root',
+            url: '/',
+            controller: 'IndexController',
+            templateUrl: 'components/root.html'
+        }).state({
+            name: 'otherwise',
+            url: '*path',
+            controller: function ($state) {
+                $state.go('root');
+            }
+        });
+    });

+ 29 - 0
src/main/resources/static/index.html

@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html lang="en" ng-app="FreiG">
+<head>
+    <meta charset="UTF-8">
+    <title>FG</title>
+    <link rel="icon" href="favicon.ico"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+    <link rel="stylesheet" href="bower_components/angular/angular-csp.css"/>
+    <link rel="stylesheet" href="bower_components/angular-material/angular-material.css"/>
+    <link rel="stylesheet" href="bower_components/roboto-fontface/css/roboto/roboto-fontface.css"/>
+</head>
+<body ui-view>
+<script src="bower_components/underscore/underscore.js"></script>
+<script src="bower_components/jquery/dist/jquery.min.js"></script>
+
+<script src="bower_components/angular/angular.js"></script>
+<script src="bower_components/angular-ui-router/release/angular-ui-router.js"></script>
+
+<script src="bower_components/angular-aria/angular-aria.js"></script>
+<script src="bower_components/angular-animate/angular-animate.js"></script>
+<script src="bower_components/angular-material/angular-material.js"></script>
+<script src="bower_components/angular-messages/angular-messages.js"></script>
+<script src="bower_components/angular-sanitize/angular-sanitize.js"></script>
+
+<script src="components/app.js"></script>
+<script src="components/root.js"></script>
+<script src="components/route.js"></script>
+</body>
+</html>