anchor.diff:  
   class HttpComms extends Comms {
       Http.Client _client;
  +    _ReadBuffer _readBuffer;
   
       HttpComms(String myserver) : super(myserver) {
           if (server.endsWith("/")) server = server.substring(0, server.length - 1);
  +
  +        final int bytesPerPoint = 3 * 4 /* + 4*4 */;
  +        final int pointsPerTile = 1024 * 64;
  +        _readBuffer = new _ReadBuffer(bytesPerPoint * pointsPerTile);
       }
   
       @override
  
positive.code:     Future<bool> readAsBytes(String webpath, FlushFunc handler) {
          Completer c = new Completer();
  
          final int bytesPerPoint = 3 * 4 /* + 4*4 */;
          final int pointsPerTile = 1024 * 128;
          _ReadBuffer readBuffer = new _ReadBuffer(bytesPerPoint * pointsPerTile, handler);
  
          WebSocket ws = new WebSocket('ws://localhost:12345/points/');
          ws.onOpen.listen((_) {
  
negative.code: typedef FlushFunc(ByteBuffer, used);
  
  class _ReadBuffer {
      int _maxsize;
      Uint8List _buffer;
      int _used;
      FlushFunc _flushfunc;
  
      _ReadBuffer(int this._maxsize);
  
      void open(FlushFunc f) {
          _buffer = null;
          _used = 0;
          _flushfunc = f;
      }
  
      void push(ByteBuffer src) {
          int p = 0;
          while (p < src.lengthInBytes) {
              int amt = min(_maxsize - _used, src.lengthInBytes - p);
              append(src, p, amt);
              flush();
              p += amt;
  