// Path: src/com/sproutlife/model/GameClock.java
// public class GameClock {
//     private int time;
// 
//     public GameClock() {
//         time = 0;
//     }
// 
//     public int getTime() {
//         return time;
//     }
// 
//     void increment() {
//         time++;
//     }
// 
//     void reset() {
//         this.time = 0;
//     }
// }
// 
// Path: src/com/sproutlife/model/seed/Seed.java
// public class Seed {
//     
//     protected SeedSproutPattern pattern;       
//     public Point position = null;    
//     public Rotation rotation;    
//     public int seedBorder = 1;   
//     public Point parentPosition;
//     //Organism organism;   
// 
//     public Seed(SeedSproutPattern pattern, Rotation r) {    
//         this.pattern = pattern;
//         this.rotation = r;
//     }      
//     
//     public Seed(SeedSproutPattern pattern) {
//         this(pattern, Rotations.get());
//     }
//      
//     public Rotation getRotation() {
//         return rotation;
//     }
//     
//     public Point getPosition() {        
//         return position;        
//     }
//     
//     public void setPosition(int x, int y) {
//         this.position = new Point(x,y);
//     }                  
//     
//     public int getSeedBorder() {
//         return seedBorder;
//     }
//     
//     public void setSeedBorder(int b) {
//         this.seedBorder = b;
//     }
//     
//     public Point getParentPosition() {
//         return parentPosition;
//     }
//     
//     public void setParentPosition(Point parentPosition) {
//         this.parentPosition = parentPosition;
//     }
//     /*
//     public Organism getOrganism() {
//         return organism;
//     }
//     
//     public void setOrganism(Organism organism) {
//         this.organism = organism;
//     }
//     */
//     
//     public SeedSproutPattern getSeedSproutPattern() {
//         return pattern;
//     }
//     
//     public BitPattern getSeedPattern() {
//         return pattern.getSeedPattern();
//     }
//     
//     public BitPattern getSproutPattern() {
//         return pattern.getSproutPattern();
//     }       
//     
//     public boolean getSeedBit(int x, int y) {       
//         return getSeedPattern().getBit(x, y, getRotation());
//     }
//     
//     public boolean getSproutBit(int x, int y) {       
//         return getSproutPattern().getBit(x, y, getRotation());
//     }
//      
//     public int getSeedWidth() {
//         return getSeedPattern().getWidth(getRotation());
//     }
//     
//     public int getSeedHeight() {
//         return getSeedPattern().getHeight(getRotation());
//     }
//         
//     public int getSproutWidth() {
//         return getSproutPattern().getWidth(getRotation());
//     }
//         
//     public int getSproutHeight() {
//         return getSproutPattern().getHeight(getRotation());
//     }
//         
//     public Point getSproutOffset() {
//         return Rotations.offsetToBoard(
//                 pattern.getSproutOffset(), 
//                 getSeedPattern(), 
//                 getSproutPattern(), 
//                 getRotation());
//     }
//     
//     public Point getSproutPosition() {
//         Point sproutOffset = getSproutOffset();
//         return new Point(position.x + sproutOffset.x, position.y + sproutOffset.y);
//     }
//     
//     public Point getSproutCenter() {        
//         Point sproutPosition = getSproutPosition();
//         Point sproutCenter = getSproutPattern().getCenter(getRotation());       
// 
//         int ssX = sproutPosition.x+sproutCenter.x;
//         int ssY = sproutPosition.y+sproutCenter.y;
//         
//         return new Point(ssX, ssY);        
//     }
//     
//     public Point getSeedOnBit() {
//         return pattern.getSeedPattern().getOnBit(getRotation());
//     }
//     
//     public Point getSeedOnPosition() {
//         Point pos = this.getPosition();
//         Point onOffset = this.getSeedOnBit();        
//         return new Point(pos.x+onOffset.x,pos.y+onOffset.y);
//     }
// }


import java.awt.Dimension;
import java.awt.Point;
import java.awt.Rectangle;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Deque;
import java.util.HashSet;
import java.util.List;
import com.sproutlife.model.GameClock;
import com.sproutlife.model.seed.Seed;
    /*
     * Create a cell but don't add it
     */
    public Cell createCell(int x, int y, Organism o) {
        return o.createCell(x, y);
    }

    public void removeCell(int x, int y) {
        Cell c = getBoard().getCell(x, y);
        if (c != null) {
            removeCell(c);
        }
    }

    public void setDefaultOrgLifespan(int orgLifespan) {
        this.defaultOrgLifespan = orgLifespan;
    }

    public int getDefaultOrgLifespan() {
        return defaultOrgLifespan;
    }

    public int getRetirementTimeSpan() {
        return retirementTimeSpan;
    }

    public void setRetirementTimeSpan(int retirementTimeSpan) {
        this.retirementTimeSpan = retirementTimeSpan;
    }

// Path: src/com/sproutlife/model/GameClock.java
// public class GameClock {
//     private int time;
// 
//     public GameClock() {
//         time = 0;
//     }
// 
//     public int getTime() {
//         return time;
//     }
// 
//     void increment() {
//         time++;
//     }
// 
//     void reset() {
//         this.time = 0;
//     }
// }
// 
// Path: src/com/sproutlife/model/seed/Seed.java
// public class Seed {
//     
//     protected SeedSproutPattern pattern;       
//     public Point position = null;    
//     public Rotation rotation;    
//     public int seedBorder = 1;   
//     public Point parentPosition;
//     //Organism organism;   
// 
//     public Seed(SeedSproutPattern pattern, Rotation r) {    
//         this.pattern = pattern;
//         this.rotation = r;
//     }      
//     
//     public Seed(SeedSproutPattern pattern) {
//         this(pattern, Rotations.get());
//     }
//      
//     public Rotation getRotation() {
//         return rotation;
//     }
//     
//     public Point getPosition() {        
//         return position;        
//     }
//     
//     public void setPosition(int x, int y) {
//         this.position = new Point(x,y);
//     }                  
//     
//     public int getSeedBorder() {
//         return seedBorder;
//     }
//     
//     public void setSeedBorder(int b) {
//         this.seedBorder = b;
//     }
//     
//     public Point getParentPosition() {
//         return parentPosition;
//     }
//     
//     public void setParentPosition(Point parentPosition) {
//         this.parentPosition = parentPosition;
//     }
//     /*
//     public Organism getOrganism() {
//         return organism;
//     }
//     
//     public void setOrganism(Organism organism) {
//         this.organism = organism;
//     }
//     */
//     
//     public SeedSproutPattern getSeedSproutPattern() {
//         return pattern;
//     }
//     
//     public BitPattern getSeedPattern() {
//         return pattern.getSeedPattern();
//     }
//     
//     public BitPattern getSproutPattern() {
//         return pattern.getSproutPattern();
//     }       
//     
//     public boolean getSeedBit(int x, int y) {       
//         return getSeedPattern().getBit(x, y, getRotation());
//     }
//     
//     public boolean getSproutBit(int x, int y) {       
//         return getSproutPattern().getBit(x, y, getRotation());
//     }
//      
//     public int getSeedWidth() {
//         return getSeedPattern().getWidth(getRotation());
//     }
//     
//     public int getSeedHeight() {
//         return getSeedPattern().getHeight(getRotation());
//     }
//         
//     public int getSproutWidth() {
//         return getSproutPattern().getWidth(getRotation());
//     }
//         
//     public int getSproutHeight() {
//         return getSproutPattern().getHeight(getRotation());
//     }
//         
//     public Point getSproutOffset() {
//         return Rotations.offsetToBoard(
//                 pattern.getSproutOffset(), 
//                 getSeedPattern(), 
//                 getSproutPattern(), 
//                 getRotation());
//     }
//     
//     public Point getSproutPosition() {
//         Point sproutOffset = getSproutOffset();
//         return new Point(position.x + sproutOffset.x, position.y + sproutOffset.y);
//     }
//     
//     public Point getSproutCenter() {        
//         Point sproutPosition = getSproutPosition();
//         Point sproutCenter = getSproutPattern().getCenter(getRotation());       
// 
//         int ssX = sproutPosition.x+sproutCenter.x;
//         int ssY = sproutPosition.y+sproutCenter.y;
//         
//         return new Point(ssX, ssY);        
//     }
//     
//     public Point getSeedOnBit() {
//         return pattern.getSeedPattern().getOnBit(getRotation());
//     }
//     
//     public Point getSeedOnPosition() {
//         Point pos = this.getPosition();
//         Point onOffset = this.getSeedOnBit();        
//         return new Point(pos.x+onOffset.x,pos.y+onOffset.y);
//     }
// }


// Path: src/com/sproutlife/model/echosystem/Echosystem.java
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Rectangle;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Deque;
import java.util.HashSet;
import java.util.List;
import com.sproutlife.model.GameClock;
import com.sproutlife.model.seed.Seed;

    /*
     * Create a cell but don't add it
     */
    public Cell createCell(int x, int y, Organism o) {
        return o.createCell(x, y);
    }

    public void removeCell(int x, int y) {
        Cell c = getBoard().getCell(x, y);
        if (c != null) {
            removeCell(c);
        }
    }

    public void setDefaultOrgLifespan(int orgLifespan) {
        this.defaultOrgLifespan = orgLifespan;
    }

    public int getDefaultOrgLifespan() {
        return defaultOrgLifespan;
    }

    public int getRetirementTimeSpan() {
        return retirementTimeSpan;
    }

    public void setRetirementTimeSpan(int retirementTimeSpan) {
        this.retirementTimeSpan = retirementTimeSpan;
    }

    public Organism createOrganism(int x, int y, Organism parent, Seed seed) {