anchor.diff:      }
   }
   
  +
  +class Elem {
  +    int level;
  +
  +    Elem(this.level);
  +
  +    bool isEmpty() {
  +        return level == 0;
  +    }
  +
  +    String toString() {
  +        return level.toString();
  +    }
  +}
  +
   class Grid {
       final int x, y;
  -
  -    Grid(this.x, this.y);
  +    List<Elem> elems;
  +
  +    Grid(this.x, this.y) {
  +        elems = new List<Elem>.generate(x*y, (int _) => new Elem(0));
  +    }
  +
  +    Elem getElem(int xi, int yi) {
  +        return elems[yi*x + xi];
  +    }
  +
  +    void setElem(int xi, int yi, Elem e) {
  +       elems[yi*x + xi] = e;
  +    }
  +
  +    void incElem(int xi, int yi, int lvl) {
  +       elems[yi*x + xi].level += 1;
  +    }
   }
   
   void prSquare(sq) {
  
positive.code:         dg.UnHlSquare();
      });
  
      // TODO: add click support
      // TODO: match 3 mechanic
  }
  
negative.code:     CanvasRenderingContext2D ctx = canvas.getContext('2d');
  
      ctx.lineWidth = 4;
      ctx.font = "40pt Calibri";
      ctx.textAlign = "center";
      ctx.textBaseline = "middle";
      // const bgColor = '#B8D6D3';
      // ctx.fillStyle = bgColor;
      // ctx.fillRect(0, 0, size, size);
  