// Path: app/src/main/java/hu/supercluster/gameoflife/game/event/CellStateChange.java
// public class CellStateChange {
//     public final int x;
//     public final int y;
//     public final int stateSnapshot;
//     public final Cell cell;
// 
//     public CellStateChange(Cell cell) {
//         this.cell = cell;
//         x = cell.getX();
//         y = cell.getY();
//         stateSnapshot = cell.getState();
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         CellStateChange that = (CellStateChange) o;
// 
//         if (stateSnapshot != that.stateSnapshot) return false;
//         if (x != that.x) return false;
//         if (y != that.y) return false;
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = x;
//         result = 31 * result + y;
//         result = 31 * result + stateSnapshot;
//         return result;
//     }
// }


import java.util.concurrent.atomic.AtomicLong;
import hu.supercluster.gameoflife.game.event.CellStateChange;
        this.state = state;
        neighborCount = 0;
    }

    @Override
    public long getId() {
        return id;
    }

    @Override
    public int getX() {
        return x;
    }

    @Override
    public int getY() {
        return y;
    }

    @Override
    public int getState() {
        return state;
    }

    @Override
    public void setState(int newState) {
        int oldState = this.state;
        this.state = newState;

        if (newState != oldState && overseer != null) {
// Path: app/src/main/java/hu/supercluster/gameoflife/game/event/CellStateChange.java
// public class CellStateChange {
//     public final int x;
//     public final int y;
//     public final int stateSnapshot;
//     public final Cell cell;
// 
//     public CellStateChange(Cell cell) {
//         this.cell = cell;
//         x = cell.getX();
//         y = cell.getY();
//         stateSnapshot = cell.getState();
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         CellStateChange that = (CellStateChange) o;
// 
//         if (stateSnapshot != that.stateSnapshot) return false;
//         if (x != that.x) return false;
//         if (y != that.y) return false;
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = x;
//         result = 31 * result + y;
//         result = 31 * result + stateSnapshot;
//         return result;
//     }
// }


// Path: app/src/main/java/hu/supercluster/gameoflife/game/cell/SimpleCell.java
import java.util.concurrent.atomic.AtomicLong;
import hu.supercluster.gameoflife.game.event.CellStateChange;

        this.state = state;
        neighborCount = 0;
    }

    @Override
    public long getId() {
        return id;
    }

    @Override
    public int getX() {
        return x;
    }

    @Override
    public int getY() {
        return y;
    }

    @Override
    public int getState() {
        return state;
    }

    @Override
    public void setState(int newState) {
        int oldState = this.state;
        this.state = newState;

        if (newState != oldState && overseer != null) {
            overseer.onCellStateChanged(new CellStateChange(this));