anchor.diff:            if (value is int) {
               result = value;
             } else if (value is String) {
  -            result = tryParse32Bit(value);
  +            result = _tryParse32BitProto3(value, context);
             } else {
               throw context.parseException(
                   'Expected int or stringified int', value);
             }
  -          return check32BitUnsigned(result);
  +          return _check32BitUnsignedProto3(result, context);
           case PbFieldType._INT32_BIT:
           case PbFieldType._SINT32_BIT:
           case PbFieldType._SFIXED32_BIT:
  
positive.code:         case PbFieldType._UINT64_BIT:
            // TODO(sigurdm): We do not throw on negative values here.
            // That would probably require going via bignum.
            return tryParse64Bit(key);
          case PbFieldType._INT64_BIT:
          case PbFieldType._SINT64_BIT:
          case PbFieldType._SFIXED64_BIT:
          case PbFieldType._FIXED64_BIT:
            return tryParse64Bit(key);
          case PbFieldType._INT32_BIT:
          case PbFieldType._SINT32_BIT:
          case PbFieldType._FIXED32_BIT:
          case PbFieldType._SFIXED32_BIT:
            return check32BitSigned(tryParse32Bit(key));
          case PbFieldType._UINT32_BIT:
            return check32BitUnsigned(tryParse32Bit(key));
          default:
            throw StateError('Not a valid key type $fieldType');
        }
  
negative.code:       ignoreUnknownFields, supportNamesWithUnderscores, permissiveEnums);
  
    void recursionHelper(Object? json, _FieldSet fieldSet) {
      Object? convertProto3JsonValue(Object? value, FieldInfo fieldInfo) {
        if (value == null) {
          return fieldInfo.makeDefault!();
  