anchor.diff:  
     _LogItemSink _logSink;
   
  +  LogItemTransformer({this.allowNonSequentialMsgs: false});
  +
     /// The MsgN of the last message in the session log.
     int get lastMsgN => _logSink.lastMsgN;
   
     /// The number of missing messages.
     int get missingMsgCount => _logSink.missingMsgCount;
  -
  -  LogItemTransformer({this.allowNonSequentialMsgs: false});
   
     @override
     List<String> convert(String input) {
  
positive.code:     }
  
      // Sanity check messages are sequential
      int nextMsgN = dataMap["msgN"];
      if (lastMsgN != null) {
        if (nextMsgN != lastMsgN + 1) {
          missingMsgCount += max(nextMsgN - lastMsgN - 1, 0);
          if (!allowNonSequentialMsgs || nextMsgN < lastMsgN + 1) {
            var exMsg = "Non-sequential MsgN in file: $lastMsgN, $nextMsgN";
            lastMsgN = nextMsgN;
            throw exMsg;
          }
        }
      }
      lastMsgN = nextMsgN;
  
negative.code: 
    // Sanity check tracking: {"sessionID":"1422988642527.3444824218750","msgN":0,
    String sessionID;
    int lastMsgN = -1;
  
    /// The carry-over from the previous chunk.
    String _carry;
  