anchor.diff:  
       return true;
     }
  -}
  -
  -T readRuntimeObject<T extends Core<CoreContext>>(BinaryReader reader,
  -    [T instance]) {
  -  int coreObjectKey = reader.readVarUint();
  -
  -  var object = instance ?? RiveCoreContext.makeCoreInstance(coreObjectKey);
  -  if (object is! T) {
  -    return null;
  -  }
  -
  -  while (true) {
  -    int propertyKey = reader.readVarUint();
  -    if (propertyKey == 0) {
  -      // Terminator. https://media.giphy.com/media/7TtvTUMm9mp20/giphy.gif
  -      break;
  -    }
  -
  -    var fieldType = RiveCoreContext.coreType(propertyKey);
  -    if (fieldType == null) {
  +
  +  void _skipProperty(BinaryReader reader, int propertyKey) {
  +    var field = _propertyToField[propertyKey];
  +    if (field == null) {
         throw UnsupportedError('Unsupported property key $propertyKey. '
             'A new runtime is likely necessary to play this file.');
       }
  -
  -    RiveCoreContext.setObjectProperty(
  -        object, propertyKey, fieldType.deserialize(reader));
  +    // Desrialize but don't do anything with the contents...
  +    field.deserialize(reader);
     }
  -  return object as T;
  +
  +  T _readRuntimeObject<T extends Core<CoreContext>>(BinaryReader reader,
  +      [T instance]) {
  +    int coreObjectKey = reader.readVarUint();
  +
  +    var object = instance ?? RiveCoreContext.makeCoreInstance(coreObjectKey);
  +
  +    while (true) {
  +      int propertyKey = reader.readVarUint();
  +      if (propertyKey == 0) {
  +        // Terminator. https://media.giphy.com/media/7TtvTUMm9mp20/giphy.gif
  +        break;
  +      }
  +
  +      var fieldType = RiveCoreContext.coreType(propertyKey);
  +      if (fieldType == null || object == null) {
  +        _skipProperty(reader, propertyKey);
  +      } else if (object != null) {
  +        RiveCoreContext.setObjectProperty(
  +            object, propertyKey, fieldType.deserialize(reader));
  +      }
  +    }
  +    return object as T;
  +  }
   }
  
positive.code: 
                var numKeyframes = reader.readVarUint();
                for (int l = 0; l < numKeyframes; l++) {
                  var keyframe = readRuntimeObject<KeyFrame>(reader);
                  if (keyframe == null) {
                    continue;
                  }
  
negative.code:     var reader = BinaryReader(bytes);
      _header = RuntimeHeader.read(reader);
  
      // Read property fields toc.
      final indexToField = <CoreFieldType>[
        RiveCoreContext.uintType,
        RiveCoreContext.stringType,
        RiveCoreContext.doubleType,
        RiveCoreContext.colorType
      ];
  
      var propertyKeys = <int>[];
      for (int propertyKey = reader.readVarUint();
          propertyKey != 0;
          propertyKey = reader.readVarUint()) {
        propertyKeys.add(propertyKey);
      }
      int currentInt = 0;
      int currentBit = 8;
      for (final propertyKey in propertyKeys) {
        if (currentBit == 8) {
          currentInt = reader.readUint32();
          currentBit = 0;
        }
        int fieldIndex = (currentInt >> currentBit) & 3;
        if (fieldIndex < 0 || fieldIndex >= indexToField.length) {
          throw RiveFormatErrorException('unexpected field index $fieldIndex');
        }
  
        _propertyToField[propertyKey] = indexToField[fieldIndex];
        currentBit += 2;
      }
  
      _backboard = _readRuntimeObject<Backboard>(reader);
      if (_backboard == null) {
        throw const RiveFormatErrorException(
            'expected first object to be a Backboard');
  