// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: openxc.proto

package com.openxc;

public final class BinaryMessages {
  private BinaryMessages() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
  }
  public interface VehicleMessageOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // optional .openxc.VehicleMessage.Type type = 1;
    boolean hasType();
    com.openxc.BinaryMessages.VehicleMessage.Type getType();
    
    // optional .openxc.CanMessage can_message = 2;
    boolean hasCanMessage();
    com.openxc.BinaryMessages.CanMessage getCanMessage();
    com.openxc.BinaryMessages.CanMessageOrBuilder getCanMessageOrBuilder();
    
    // optional .openxc.SimpleMessage simple_message = 3;
    boolean hasSimpleMessage();
    com.openxc.BinaryMessages.SimpleMessage getSimpleMessage();
    com.openxc.BinaryMessages.SimpleMessageOrBuilder getSimpleMessageOrBuilder();
    
    // optional .openxc.DiagnosticResponse diagnostic_response = 4;
    boolean hasDiagnosticResponse();
    com.openxc.BinaryMessages.DiagnosticResponse getDiagnosticResponse();
    com.openxc.BinaryMessages.DiagnosticResponseOrBuilder getDiagnosticResponseOrBuilder();
    
    // optional .openxc.ControlCommand control_command = 5;
    boolean hasControlCommand();
    com.openxc.BinaryMessages.ControlCommand getControlCommand();
    com.openxc.BinaryMessages.ControlCommandOrBuilder getControlCommandOrBuilder();
    
    // optional .openxc.CommandResponse command_response = 6;
    boolean hasCommandResponse();
    com.openxc.BinaryMessages.CommandResponse getCommandResponse();
    com.openxc.BinaryMessages.CommandResponseOrBuilder getCommandResponseOrBuilder();
    
    // optional uint64 timestamp = 7;
    boolean hasTimestamp();
    long getTimestamp();
  }
  public static final class VehicleMessage extends
      com.google.protobuf.GeneratedMessage
      implements VehicleMessageOrBuilder {
    // Use VehicleMessage.newBuilder() to construct.
    private VehicleMessage(Builder builder) {
      super(builder);
    }
    private VehicleMessage(boolean noInit) {}
    
    private static final VehicleMessage defaultInstance;
    public static VehicleMessage getDefaultInstance() {
      return defaultInstance;
    }
    
    public VehicleMessage getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.openxc.BinaryMessages.internal_static_openxc_VehicleMessage_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.openxc.BinaryMessages.internal_static_openxc_VehicleMessage_fieldAccessorTable;
    }
    
    public enum Type
        implements com.google.protobuf.ProtocolMessageEnum {
      CAN(0, 1),
      SIMPLE(1, 2),
      DIAGNOSTIC(2, 3),
      CONTROL_COMMAND(3, 4),
      COMMAND_RESPONSE(4, 5),
      ;
      
      public static final int CAN_VALUE = 1;
      public static final int SIMPLE_VALUE = 2;
      public static final int DIAGNOSTIC_VALUE = 3;
      public static final int CONTROL_COMMAND_VALUE = 4;
      public static final int COMMAND_RESPONSE_VALUE = 5;
      
      
      public final int getNumber() { return value; }
      
      public static Type valueOf(int value) {
        switch (value) {
          case 1: return CAN;
          case 2: return SIMPLE;
          case 3: return DIAGNOSTIC;
          case 4: return CONTROL_COMMAND;
          case 5: return COMMAND_RESPONSE;
          default: return null;
        }
      }
      
      public static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Type>() {
              public Type findValueByNumber(int number) {
                return Type.valueOf(number);
              }
            };
      
      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.VehicleMessage.getDescriptor().getEnumTypes().get(0);
      }
      
      private static final Type[] VALUES = {
        CAN, SIMPLE, DIAGNOSTIC, CONTROL_COMMAND, COMMAND_RESPONSE, 
      };
      
      public static Type valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }
      
      private final int index;
      private final int value;
      
      private Type(int index, int value) {
        this.index = index;
        this.value = value;
      }
      
      // @@protoc_insertion_point(enum_scope:openxc.VehicleMessage.Type)
    }
    
    private int bitField0_;
    // optional .openxc.VehicleMessage.Type type = 1;
    public static final int TYPE_FIELD_NUMBER = 1;
    private com.openxc.BinaryMessages.VehicleMessage.Type type_;
    public boolean hasType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public com.openxc.BinaryMessages.VehicleMessage.Type getType() {
      return type_;
    }
    
    // optional .openxc.CanMessage can_message = 2;
    public static final int CAN_MESSAGE_FIELD_NUMBER = 2;
    private com.openxc.BinaryMessages.CanMessage canMessage_;
    public boolean hasCanMessage() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public com.openxc.BinaryMessages.CanMessage getCanMessage() {
      return canMessage_;
    }
    public com.openxc.BinaryMessages.CanMessageOrBuilder getCanMessageOrBuilder() {
      return canMessage_;
    }
    
    // optional .openxc.SimpleMessage simple_message = 3;
    public static final int SIMPLE_MESSAGE_FIELD_NUMBER = 3;
    private com.openxc.BinaryMessages.SimpleMessage simpleMessage_;
    public boolean hasSimpleMessage() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    public com.openxc.BinaryMessages.SimpleMessage getSimpleMessage() {
      return simpleMessage_;
    }
    public com.openxc.BinaryMessages.SimpleMessageOrBuilder getSimpleMessageOrBuilder() {
      return simpleMessage_;
    }
    
    // optional .openxc.DiagnosticResponse diagnostic_response = 4;
    public static final int DIAGNOSTIC_RESPONSE_FIELD_NUMBER = 4;
    private com.openxc.BinaryMessages.DiagnosticResponse diagnosticResponse_;
    public boolean hasDiagnosticResponse() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    public com.openxc.BinaryMessages.DiagnosticResponse getDiagnosticResponse() {
      return diagnosticResponse_;
    }
    public com.openxc.BinaryMessages.DiagnosticResponseOrBuilder getDiagnosticResponseOrBuilder() {
      return diagnosticResponse_;
    }
    
    // optional .openxc.ControlCommand control_command = 5;
    public static final int CONTROL_COMMAND_FIELD_NUMBER = 5;
    private com.openxc.BinaryMessages.ControlCommand controlCommand_;
    public boolean hasControlCommand() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    public com.openxc.BinaryMessages.ControlCommand getControlCommand() {
      return controlCommand_;
    }
    public com.openxc.BinaryMessages.ControlCommandOrBuilder getControlCommandOrBuilder() {
      return controlCommand_;
    }
    
    // optional .openxc.CommandResponse command_response = 6;
    public static final int COMMAND_RESPONSE_FIELD_NUMBER = 6;
    private com.openxc.BinaryMessages.CommandResponse commandResponse_;
    public boolean hasCommandResponse() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    public com.openxc.BinaryMessages.CommandResponse getCommandResponse() {
      return commandResponse_;
    }
    public com.openxc.BinaryMessages.CommandResponseOrBuilder getCommandResponseOrBuilder() {
      return commandResponse_;
    }
    
    // optional uint64 timestamp = 7;
    public static final int TIMESTAMP_FIELD_NUMBER = 7;
    private long timestamp_;
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    public long getTimestamp() {
      return timestamp_;
    }
    
    private void initFields() {
      type_ = com.openxc.BinaryMessages.VehicleMessage.Type.CAN;
      canMessage_ = com.openxc.BinaryMessages.CanMessage.getDefaultInstance();
      simpleMessage_ = com.openxc.BinaryMessages.SimpleMessage.getDefaultInstance();
      diagnosticResponse_ = com.openxc.BinaryMessages.DiagnosticResponse.getDefaultInstance();
      controlCommand_ = com.openxc.BinaryMessages.ControlCommand.getDefaultInstance();
      commandResponse_ = com.openxc.BinaryMessages.CommandResponse.getDefaultInstance();
      timestamp_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, type_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, canMessage_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, simpleMessage_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, diagnosticResponse_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(5, controlCommand_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(6, commandResponse_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeUInt64(7, timestamp_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, type_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, canMessage_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, simpleMessage_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, diagnosticResponse_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, controlCommand_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, commandResponse_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(7, timestamp_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static com.openxc.BinaryMessages.VehicleMessage parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.VehicleMessage parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.VehicleMessage parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.VehicleMessage parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.VehicleMessage parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.VehicleMessage parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.VehicleMessage parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.VehicleMessage parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.VehicleMessage parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.VehicleMessage parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.openxc.BinaryMessages.VehicleMessage prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.openxc.BinaryMessages.VehicleMessageOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.internal_static_openxc_VehicleMessage_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.openxc.BinaryMessages.internal_static_openxc_VehicleMessage_fieldAccessorTable;
      }
      
      // Construct using com.openxc.BinaryMessages.VehicleMessage.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getCanMessageFieldBuilder();
          getSimpleMessageFieldBuilder();
          getDiagnosticResponseFieldBuilder();
          getControlCommandFieldBuilder();
          getCommandResponseFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        type_ = com.openxc.BinaryMessages.VehicleMessage.Type.CAN;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (canMessageBuilder_ == null) {
          canMessage_ = com.openxc.BinaryMessages.CanMessage.getDefaultInstance();
        } else {
          canMessageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (simpleMessageBuilder_ == null) {
          simpleMessage_ = com.openxc.BinaryMessages.SimpleMessage.getDefaultInstance();
        } else {
          simpleMessageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (diagnosticResponseBuilder_ == null) {
          diagnosticResponse_ = com.openxc.BinaryMessages.DiagnosticResponse.getDefaultInstance();
        } else {
          diagnosticResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        if (controlCommandBuilder_ == null) {
          controlCommand_ = com.openxc.BinaryMessages.ControlCommand.getDefaultInstance();
        } else {
          controlCommandBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        if (commandResponseBuilder_ == null) {
          commandResponse_ = com.openxc.BinaryMessages.CommandResponse.getDefaultInstance();
        } else {
          commandResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        timestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.openxc.BinaryMessages.VehicleMessage.getDescriptor();
      }
      
      public com.openxc.BinaryMessages.VehicleMessage getDefaultInstanceForType() {
        return com.openxc.BinaryMessages.VehicleMessage.getDefaultInstance();
      }
      
      public com.openxc.BinaryMessages.VehicleMessage build() {
        com.openxc.BinaryMessages.VehicleMessage result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private com.openxc.BinaryMessages.VehicleMessage buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        com.openxc.BinaryMessages.VehicleMessage result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public com.openxc.BinaryMessages.VehicleMessage buildPartial() {
        com.openxc.BinaryMessages.VehicleMessage result = new com.openxc.BinaryMessages.VehicleMessage(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (canMessageBuilder_ == null) {
          result.canMessage_ = canMessage_;
        } else {
          result.canMessage_ = canMessageBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (simpleMessageBuilder_ == null) {
          result.simpleMessage_ = simpleMessage_;
        } else {
          result.simpleMessage_ = simpleMessageBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (diagnosticResponseBuilder_ == null) {
          result.diagnosticResponse_ = diagnosticResponse_;
        } else {
          result.diagnosticResponse_ = diagnosticResponseBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        if (controlCommandBuilder_ == null) {
          result.controlCommand_ = controlCommand_;
        } else {
          result.controlCommand_ = controlCommandBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        if (commandResponseBuilder_ == null) {
          result.commandResponse_ = commandResponse_;
        } else {
          result.commandResponse_ = commandResponseBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.timestamp_ = timestamp_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.openxc.BinaryMessages.VehicleMessage) {
          return mergeFrom((com.openxc.BinaryMessages.VehicleMessage)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(com.openxc.BinaryMessages.VehicleMessage other) {
        if (other == com.openxc.BinaryMessages.VehicleMessage.getDefaultInstance()) return this;
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasCanMessage()) {
          mergeCanMessage(other.getCanMessage());
        }
        if (other.hasSimpleMessage()) {
          mergeSimpleMessage(other.getSimpleMessage());
        }
        if (other.hasDiagnosticResponse()) {
          mergeDiagnosticResponse(other.getDiagnosticResponse());
        }
        if (other.hasControlCommand()) {
          mergeControlCommand(other.getControlCommand());
        }
        if (other.hasCommandResponse()) {
          mergeCommandResponse(other.getCommandResponse());
        }
        if (other.hasTimestamp()) {
          setTimestamp(other.getTimestamp());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.openxc.BinaryMessages.VehicleMessage.Type value = com.openxc.BinaryMessages.VehicleMessage.Type.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                type_ = value;
              }
              break;
            }
            case 18: {
              com.openxc.BinaryMessages.CanMessage.Builder subBuilder = com.openxc.BinaryMessages.CanMessage.newBuilder();
              if (hasCanMessage()) {
                subBuilder.mergeFrom(getCanMessage());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setCanMessage(subBuilder.buildPartial());
              break;
            }
            case 26: {
              com.openxc.BinaryMessages.SimpleMessage.Builder subBuilder = com.openxc.BinaryMessages.SimpleMessage.newBuilder();
              if (hasSimpleMessage()) {
                subBuilder.mergeFrom(getSimpleMessage());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setSimpleMessage(subBuilder.buildPartial());
              break;
            }
            case 34: {
              com.openxc.BinaryMessages.DiagnosticResponse.Builder subBuilder = com.openxc.BinaryMessages.DiagnosticResponse.newBuilder();
              if (hasDiagnosticResponse()) {
                subBuilder.mergeFrom(getDiagnosticResponse());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setDiagnosticResponse(subBuilder.buildPartial());
              break;
            }
            case 42: {
              com.openxc.BinaryMessages.ControlCommand.Builder subBuilder = com.openxc.BinaryMessages.ControlCommand.newBuilder();
              if (hasControlCommand()) {
                subBuilder.mergeFrom(getControlCommand());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setControlCommand(subBuilder.buildPartial());
              break;
            }
            case 50: {
              com.openxc.BinaryMessages.CommandResponse.Builder subBuilder = com.openxc.BinaryMessages.CommandResponse.newBuilder();
              if (hasCommandResponse()) {
                subBuilder.mergeFrom(getCommandResponse());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setCommandResponse(subBuilder.buildPartial());
              break;
            }
            case 56: {
              bitField0_ |= 0x00000040;
              timestamp_ = input.readUInt64();
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // optional .openxc.VehicleMessage.Type type = 1;
      private com.openxc.BinaryMessages.VehicleMessage.Type type_ = com.openxc.BinaryMessages.VehicleMessage.Type.CAN;
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public com.openxc.BinaryMessages.VehicleMessage.Type getType() {
        return type_;
      }
      public Builder setType(com.openxc.BinaryMessages.VehicleMessage.Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        type_ = value;
        onChanged();
        return this;
      }
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = com.openxc.BinaryMessages.VehicleMessage.Type.CAN;
        onChanged();
        return this;
      }
      
      // optional .openxc.CanMessage can_message = 2;
      private com.openxc.BinaryMessages.CanMessage canMessage_ = com.openxc.BinaryMessages.CanMessage.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.CanMessage, com.openxc.BinaryMessages.CanMessage.Builder, com.openxc.BinaryMessages.CanMessageOrBuilder> canMessageBuilder_;
      public boolean hasCanMessage() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public com.openxc.BinaryMessages.CanMessage getCanMessage() {
        if (canMessageBuilder_ == null) {
          return canMessage_;
        } else {
          return canMessageBuilder_.getMessage();
        }
      }
      public Builder setCanMessage(com.openxc.BinaryMessages.CanMessage value) {
        if (canMessageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          canMessage_ = value;
          onChanged();
        } else {
          canMessageBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      public Builder setCanMessage(
          com.openxc.BinaryMessages.CanMessage.Builder builderForValue) {
        if (canMessageBuilder_ == null) {
          canMessage_ = builderForValue.build();
          onChanged();
        } else {
          canMessageBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      public Builder mergeCanMessage(com.openxc.BinaryMessages.CanMessage value) {
        if (canMessageBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              canMessage_ != com.openxc.BinaryMessages.CanMessage.getDefaultInstance()) {
            canMessage_ =
              com.openxc.BinaryMessages.CanMessage.newBuilder(canMessage_).mergeFrom(value).buildPartial();
          } else {
            canMessage_ = value;
          }
          onChanged();
        } else {
          canMessageBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      public Builder clearCanMessage() {
        if (canMessageBuilder_ == null) {
          canMessage_ = com.openxc.BinaryMessages.CanMessage.getDefaultInstance();
          onChanged();
        } else {
          canMessageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      public com.openxc.BinaryMessages.CanMessage.Builder getCanMessageBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getCanMessageFieldBuilder().getBuilder();
      }
      public com.openxc.BinaryMessages.CanMessageOrBuilder getCanMessageOrBuilder() {
        if (canMessageBuilder_ != null) {
          return canMessageBuilder_.getMessageOrBuilder();
        } else {
          return canMessage_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.CanMessage, com.openxc.BinaryMessages.CanMessage.Builder, com.openxc.BinaryMessages.CanMessageOrBuilder> 
          getCanMessageFieldBuilder() {
        if (canMessageBuilder_ == null) {
          canMessageBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.openxc.BinaryMessages.CanMessage, com.openxc.BinaryMessages.CanMessage.Builder, com.openxc.BinaryMessages.CanMessageOrBuilder>(
                  canMessage_,
                  getParentForChildren(),
                  isClean());
          canMessage_ = null;
        }
        return canMessageBuilder_;
      }
      
      // optional .openxc.SimpleMessage simple_message = 3;
      private com.openxc.BinaryMessages.SimpleMessage simpleMessage_ = com.openxc.BinaryMessages.SimpleMessage.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.SimpleMessage, com.openxc.BinaryMessages.SimpleMessage.Builder, com.openxc.BinaryMessages.SimpleMessageOrBuilder> simpleMessageBuilder_;
      public boolean hasSimpleMessage() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public com.openxc.BinaryMessages.SimpleMessage getSimpleMessage() {
        if (simpleMessageBuilder_ == null) {
          return simpleMessage_;
        } else {
          return simpleMessageBuilder_.getMessage();
        }
      }
      public Builder setSimpleMessage(com.openxc.BinaryMessages.SimpleMessage value) {
        if (simpleMessageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          simpleMessage_ = value;
          onChanged();
        } else {
          simpleMessageBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      public Builder setSimpleMessage(
          com.openxc.BinaryMessages.SimpleMessage.Builder builderForValue) {
        if (simpleMessageBuilder_ == null) {
          simpleMessage_ = builderForValue.build();
          onChanged();
        } else {
          simpleMessageBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      public Builder mergeSimpleMessage(com.openxc.BinaryMessages.SimpleMessage value) {
        if (simpleMessageBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              simpleMessage_ != com.openxc.BinaryMessages.SimpleMessage.getDefaultInstance()) {
            simpleMessage_ =
              com.openxc.BinaryMessages.SimpleMessage.newBuilder(simpleMessage_).mergeFrom(value).buildPartial();
          } else {
            simpleMessage_ = value;
          }
          onChanged();
        } else {
          simpleMessageBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      public Builder clearSimpleMessage() {
        if (simpleMessageBuilder_ == null) {
          simpleMessage_ = com.openxc.BinaryMessages.SimpleMessage.getDefaultInstance();
          onChanged();
        } else {
          simpleMessageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      public com.openxc.BinaryMessages.SimpleMessage.Builder getSimpleMessageBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getSimpleMessageFieldBuilder().getBuilder();
      }
      public com.openxc.BinaryMessages.SimpleMessageOrBuilder getSimpleMessageOrBuilder() {
        if (simpleMessageBuilder_ != null) {
          return simpleMessageBuilder_.getMessageOrBuilder();
        } else {
          return simpleMessage_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.SimpleMessage, com.openxc.BinaryMessages.SimpleMessage.Builder, com.openxc.BinaryMessages.SimpleMessageOrBuilder> 
          getSimpleMessageFieldBuilder() {
        if (simpleMessageBuilder_ == null) {
          simpleMessageBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.openxc.BinaryMessages.SimpleMessage, com.openxc.BinaryMessages.SimpleMessage.Builder, com.openxc.BinaryMessages.SimpleMessageOrBuilder>(
                  simpleMessage_,
                  getParentForChildren(),
                  isClean());
          simpleMessage_ = null;
        }
        return simpleMessageBuilder_;
      }
      
      // optional .openxc.DiagnosticResponse diagnostic_response = 4;
      private com.openxc.BinaryMessages.DiagnosticResponse diagnosticResponse_ = com.openxc.BinaryMessages.DiagnosticResponse.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.DiagnosticResponse, com.openxc.BinaryMessages.DiagnosticResponse.Builder, com.openxc.BinaryMessages.DiagnosticResponseOrBuilder> diagnosticResponseBuilder_;
      public boolean hasDiagnosticResponse() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      public com.openxc.BinaryMessages.DiagnosticResponse getDiagnosticResponse() {
        if (diagnosticResponseBuilder_ == null) {
          return diagnosticResponse_;
        } else {
          return diagnosticResponseBuilder_.getMessage();
        }
      }
      public Builder setDiagnosticResponse(com.openxc.BinaryMessages.DiagnosticResponse value) {
        if (diagnosticResponseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          diagnosticResponse_ = value;
          onChanged();
        } else {
          diagnosticResponseBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      public Builder setDiagnosticResponse(
          com.openxc.BinaryMessages.DiagnosticResponse.Builder builderForValue) {
        if (diagnosticResponseBuilder_ == null) {
          diagnosticResponse_ = builderForValue.build();
          onChanged();
        } else {
          diagnosticResponseBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      public Builder mergeDiagnosticResponse(com.openxc.BinaryMessages.DiagnosticResponse value) {
        if (diagnosticResponseBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              diagnosticResponse_ != com.openxc.BinaryMessages.DiagnosticResponse.getDefaultInstance()) {
            diagnosticResponse_ =
              com.openxc.BinaryMessages.DiagnosticResponse.newBuilder(diagnosticResponse_).mergeFrom(value).buildPartial();
          } else {
            diagnosticResponse_ = value;
          }
          onChanged();
        } else {
          diagnosticResponseBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      public Builder clearDiagnosticResponse() {
        if (diagnosticResponseBuilder_ == null) {
          diagnosticResponse_ = com.openxc.BinaryMessages.DiagnosticResponse.getDefaultInstance();
          onChanged();
        } else {
          diagnosticResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      public com.openxc.BinaryMessages.DiagnosticResponse.Builder getDiagnosticResponseBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getDiagnosticResponseFieldBuilder().getBuilder();
      }
      public com.openxc.BinaryMessages.DiagnosticResponseOrBuilder getDiagnosticResponseOrBuilder() {
        if (diagnosticResponseBuilder_ != null) {
          return diagnosticResponseBuilder_.getMessageOrBuilder();
        } else {
          return diagnosticResponse_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.DiagnosticResponse, com.openxc.BinaryMessages.DiagnosticResponse.Builder, com.openxc.BinaryMessages.DiagnosticResponseOrBuilder> 
          getDiagnosticResponseFieldBuilder() {
        if (diagnosticResponseBuilder_ == null) {
          diagnosticResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.openxc.BinaryMessages.DiagnosticResponse, com.openxc.BinaryMessages.DiagnosticResponse.Builder, com.openxc.BinaryMessages.DiagnosticResponseOrBuilder>(
                  diagnosticResponse_,
                  getParentForChildren(),
                  isClean());
          diagnosticResponse_ = null;
        }
        return diagnosticResponseBuilder_;
      }
      
      // optional .openxc.ControlCommand control_command = 5;
      private com.openxc.BinaryMessages.ControlCommand controlCommand_ = com.openxc.BinaryMessages.ControlCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.ControlCommand, com.openxc.BinaryMessages.ControlCommand.Builder, com.openxc.BinaryMessages.ControlCommandOrBuilder> controlCommandBuilder_;
      public boolean hasControlCommand() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      public com.openxc.BinaryMessages.ControlCommand getControlCommand() {
        if (controlCommandBuilder_ == null) {
          return controlCommand_;
        } else {
          return controlCommandBuilder_.getMessage();
        }
      }
      public Builder setControlCommand(com.openxc.BinaryMessages.ControlCommand value) {
        if (controlCommandBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          controlCommand_ = value;
          onChanged();
        } else {
          controlCommandBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      public Builder setControlCommand(
          com.openxc.BinaryMessages.ControlCommand.Builder builderForValue) {
        if (controlCommandBuilder_ == null) {
          controlCommand_ = builderForValue.build();
          onChanged();
        } else {
          controlCommandBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      public Builder mergeControlCommand(com.openxc.BinaryMessages.ControlCommand value) {
        if (controlCommandBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010) &&
              controlCommand_ != com.openxc.BinaryMessages.ControlCommand.getDefaultInstance()) {
            controlCommand_ =
              com.openxc.BinaryMessages.ControlCommand.newBuilder(controlCommand_).mergeFrom(value).buildPartial();
          } else {
            controlCommand_ = value;
          }
          onChanged();
        } else {
          controlCommandBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      public Builder clearControlCommand() {
        if (controlCommandBuilder_ == null) {
          controlCommand_ = com.openxc.BinaryMessages.ControlCommand.getDefaultInstance();
          onChanged();
        } else {
          controlCommandBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      public com.openxc.BinaryMessages.ControlCommand.Builder getControlCommandBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getControlCommandFieldBuilder().getBuilder();
      }
      public com.openxc.BinaryMessages.ControlCommandOrBuilder getControlCommandOrBuilder() {
        if (controlCommandBuilder_ != null) {
          return controlCommandBuilder_.getMessageOrBuilder();
        } else {
          return controlCommand_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.ControlCommand, com.openxc.BinaryMessages.ControlCommand.Builder, com.openxc.BinaryMessages.ControlCommandOrBuilder> 
          getControlCommandFieldBuilder() {
        if (controlCommandBuilder_ == null) {
          controlCommandBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.openxc.BinaryMessages.ControlCommand, com.openxc.BinaryMessages.ControlCommand.Builder, com.openxc.BinaryMessages.ControlCommandOrBuilder>(
                  controlCommand_,
                  getParentForChildren(),
                  isClean());
          controlCommand_ = null;
        }
        return controlCommandBuilder_;
      }
      
      // optional .openxc.CommandResponse command_response = 6;
      private com.openxc.BinaryMessages.CommandResponse commandResponse_ = com.openxc.BinaryMessages.CommandResponse.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.CommandResponse, com.openxc.BinaryMessages.CommandResponse.Builder, com.openxc.BinaryMessages.CommandResponseOrBuilder> commandResponseBuilder_;
      public boolean hasCommandResponse() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      public com.openxc.BinaryMessages.CommandResponse getCommandResponse() {
        if (commandResponseBuilder_ == null) {
          return commandResponse_;
        } else {
          return commandResponseBuilder_.getMessage();
        }
      }
      public Builder setCommandResponse(com.openxc.BinaryMessages.CommandResponse value) {
        if (commandResponseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          commandResponse_ = value;
          onChanged();
        } else {
          commandResponseBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      public Builder setCommandResponse(
          com.openxc.BinaryMessages.CommandResponse.Builder builderForValue) {
        if (commandResponseBuilder_ == null) {
          commandResponse_ = builderForValue.build();
          onChanged();
        } else {
          commandResponseBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      public Builder mergeCommandResponse(com.openxc.BinaryMessages.CommandResponse value) {
        if (commandResponseBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              commandResponse_ != com.openxc.BinaryMessages.CommandResponse.getDefaultInstance()) {
            commandResponse_ =
              com.openxc.BinaryMessages.CommandResponse.newBuilder(commandResponse_).mergeFrom(value).buildPartial();
          } else {
            commandResponse_ = value;
          }
          onChanged();
        } else {
          commandResponseBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      public Builder clearCommandResponse() {
        if (commandResponseBuilder_ == null) {
          commandResponse_ = com.openxc.BinaryMessages.CommandResponse.getDefaultInstance();
          onChanged();
        } else {
          commandResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      public com.openxc.BinaryMessages.CommandResponse.Builder getCommandResponseBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getCommandResponseFieldBuilder().getBuilder();
      }
      public com.openxc.BinaryMessages.CommandResponseOrBuilder getCommandResponseOrBuilder() {
        if (commandResponseBuilder_ != null) {
          return commandResponseBuilder_.getMessageOrBuilder();
        } else {
          return commandResponse_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.CommandResponse, com.openxc.BinaryMessages.CommandResponse.Builder, com.openxc.BinaryMessages.CommandResponseOrBuilder> 
          getCommandResponseFieldBuilder() {
        if (commandResponseBuilder_ == null) {
          commandResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.openxc.BinaryMessages.CommandResponse, com.openxc.BinaryMessages.CommandResponse.Builder, com.openxc.BinaryMessages.CommandResponseOrBuilder>(
                  commandResponse_,
                  getParentForChildren(),
                  isClean());
          commandResponse_ = null;
        }
        return commandResponseBuilder_;
      }
      
      // optional uint64 timestamp = 7;
      private long timestamp_ ;
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      public long getTimestamp() {
        return timestamp_;
      }
      public Builder setTimestamp(long value) {
        bitField0_ |= 0x00000040;
        timestamp_ = value;
        onChanged();
        return this;
      }
      public Builder clearTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000040);
        timestamp_ = 0L;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:openxc.VehicleMessage)
    }
    
    static {
      defaultInstance = new VehicleMessage(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:openxc.VehicleMessage)
  }
  
  public interface CanMessageOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // optional int32 bus = 1;
    boolean hasBus();
    int getBus();
    
    // optional uint32 id = 2;
    boolean hasId();
    int getId();
    
    // optional bytes data = 3;
    boolean hasData();
    com.google.protobuf.ByteString getData();
    
    // optional .openxc.CanMessage.FrameFormat frame_format = 4;
    boolean hasFrameFormat();
    com.openxc.BinaryMessages.CanMessage.FrameFormat getFrameFormat();
  }
  public static final class CanMessage extends
      com.google.protobuf.GeneratedMessage
      implements CanMessageOrBuilder {
    // Use CanMessage.newBuilder() to construct.
    private CanMessage(Builder builder) {
      super(builder);
    }
    private CanMessage(boolean noInit) {}
    
    private static final CanMessage defaultInstance;
    public static CanMessage getDefaultInstance() {
      return defaultInstance;
    }
    
    public CanMessage getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.openxc.BinaryMessages.internal_static_openxc_CanMessage_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.openxc.BinaryMessages.internal_static_openxc_CanMessage_fieldAccessorTable;
    }
    
    public enum FrameFormat
        implements com.google.protobuf.ProtocolMessageEnum {
      STANDARD(0, 1),
      EXTENDED(1, 2),
      ;
      
      public static final int STANDARD_VALUE = 1;
      public static final int EXTENDED_VALUE = 2;
      
      
      public final int getNumber() { return value; }
      
      public static FrameFormat valueOf(int value) {
        switch (value) {
          case 1: return STANDARD;
          case 2: return EXTENDED;
          default: return null;
        }
      }
      
      public static com.google.protobuf.Internal.EnumLiteMap<FrameFormat>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<FrameFormat>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<FrameFormat>() {
              public FrameFormat findValueByNumber(int number) {
                return FrameFormat.valueOf(number);
              }
            };
      
      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.CanMessage.getDescriptor().getEnumTypes().get(0);
      }
      
      private static final FrameFormat[] VALUES = {
        STANDARD, EXTENDED, 
      };
      
      public static FrameFormat valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }
      
      private final int index;
      private final int value;
      
      private FrameFormat(int index, int value) {
        this.index = index;
        this.value = value;
      }
      
      // @@protoc_insertion_point(enum_scope:openxc.CanMessage.FrameFormat)
    }
    
    private int bitField0_;
    // optional int32 bus = 1;
    public static final int BUS_FIELD_NUMBER = 1;
    private int bus_;
    public boolean hasBus() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public int getBus() {
      return bus_;
    }
    
    // optional uint32 id = 2;
    public static final int ID_FIELD_NUMBER = 2;
    private int id_;
    public boolean hasId() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public int getId() {
      return id_;
    }
    
    // optional bytes data = 3;
    public static final int DATA_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString data_;
    public boolean hasData() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    public com.google.protobuf.ByteString getData() {
      return data_;
    }
    
    // optional .openxc.CanMessage.FrameFormat frame_format = 4;
    public static final int FRAME_FORMAT_FIELD_NUMBER = 4;
    private com.openxc.BinaryMessages.CanMessage.FrameFormat frameFormat_;
    public boolean hasFrameFormat() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    public com.openxc.BinaryMessages.CanMessage.FrameFormat getFrameFormat() {
      return frameFormat_;
    }
    
    private void initFields() {
      bus_ = 0;
      id_ = 0;
      data_ = com.google.protobuf.ByteString.EMPTY;
      frameFormat_ = com.openxc.BinaryMessages.CanMessage.FrameFormat.STANDARD;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, bus_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt32(2, id_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, data_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeEnum(4, frameFormat_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, bus_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, id_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, data_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(4, frameFormat_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static com.openxc.BinaryMessages.CanMessage parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.CanMessage parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.CanMessage parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.CanMessage parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.CanMessage parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.CanMessage parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.CanMessage parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.CanMessage parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.CanMessage parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.CanMessage parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.openxc.BinaryMessages.CanMessage prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.openxc.BinaryMessages.CanMessageOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.internal_static_openxc_CanMessage_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.openxc.BinaryMessages.internal_static_openxc_CanMessage_fieldAccessorTable;
      }
      
      // Construct using com.openxc.BinaryMessages.CanMessage.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        bus_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        data_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        frameFormat_ = com.openxc.BinaryMessages.CanMessage.FrameFormat.STANDARD;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.openxc.BinaryMessages.CanMessage.getDescriptor();
      }
      
      public com.openxc.BinaryMessages.CanMessage getDefaultInstanceForType() {
        return com.openxc.BinaryMessages.CanMessage.getDefaultInstance();
      }
      
      public com.openxc.BinaryMessages.CanMessage build() {
        com.openxc.BinaryMessages.CanMessage result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private com.openxc.BinaryMessages.CanMessage buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        com.openxc.BinaryMessages.CanMessage result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public com.openxc.BinaryMessages.CanMessage buildPartial() {
        com.openxc.BinaryMessages.CanMessage result = new com.openxc.BinaryMessages.CanMessage(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.bus_ = bus_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.id_ = id_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.data_ = data_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.frameFormat_ = frameFormat_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.openxc.BinaryMessages.CanMessage) {
          return mergeFrom((com.openxc.BinaryMessages.CanMessage)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(com.openxc.BinaryMessages.CanMessage other) {
        if (other == com.openxc.BinaryMessages.CanMessage.getDefaultInstance()) return this;
        if (other.hasBus()) {
          setBus(other.getBus());
        }
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasData()) {
          setData(other.getData());
        }
        if (other.hasFrameFormat()) {
          setFrameFormat(other.getFrameFormat());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              bus_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              id_ = input.readUInt32();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              data_ = input.readBytes();
              break;
            }
            case 32: {
              int rawValue = input.readEnum();
              com.openxc.BinaryMessages.CanMessage.FrameFormat value = com.openxc.BinaryMessages.CanMessage.FrameFormat.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(4, rawValue);
              } else {
                bitField0_ |= 0x00000008;
                frameFormat_ = value;
              }
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // optional int32 bus = 1;
      private int bus_ ;
      public boolean hasBus() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public int getBus() {
        return bus_;
      }
      public Builder setBus(int value) {
        bitField0_ |= 0x00000001;
        bus_ = value;
        onChanged();
        return this;
      }
      public Builder clearBus() {
        bitField0_ = (bitField0_ & ~0x00000001);
        bus_ = 0;
        onChanged();
        return this;
      }
      
      // optional uint32 id = 2;
      private int id_ ;
      public boolean hasId() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public int getId() {
        return id_;
      }
      public Builder setId(int value) {
        bitField0_ |= 0x00000002;
        id_ = value;
        onChanged();
        return this;
      }
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000002);
        id_ = 0;
        onChanged();
        return this;
      }
      
      // optional bytes data = 3;
      private com.google.protobuf.ByteString data_ = com.google.protobuf.ByteString.EMPTY;
      public boolean hasData() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public com.google.protobuf.ByteString getData() {
        return data_;
      }
      public Builder setData(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        data_ = value;
        onChanged();
        return this;
      }
      public Builder clearData() {
        bitField0_ = (bitField0_ & ~0x00000004);
        data_ = getDefaultInstance().getData();
        onChanged();
        return this;
      }
      
      // optional .openxc.CanMessage.FrameFormat frame_format = 4;
      private com.openxc.BinaryMessages.CanMessage.FrameFormat frameFormat_ = com.openxc.BinaryMessages.CanMessage.FrameFormat.STANDARD;
      public boolean hasFrameFormat() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      public com.openxc.BinaryMessages.CanMessage.FrameFormat getFrameFormat() {
        return frameFormat_;
      }
      public Builder setFrameFormat(com.openxc.BinaryMessages.CanMessage.FrameFormat value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        frameFormat_ = value;
        onChanged();
        return this;
      }
      public Builder clearFrameFormat() {
        bitField0_ = (bitField0_ & ~0x00000008);
        frameFormat_ = com.openxc.BinaryMessages.CanMessage.FrameFormat.STANDARD;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:openxc.CanMessage)
    }
    
    static {
      defaultInstance = new CanMessage(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:openxc.CanMessage)
  }
  
  public interface ControlCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // optional .openxc.ControlCommand.Type type = 1;
    boolean hasType();
    com.openxc.BinaryMessages.ControlCommand.Type getType();
    
    // optional .openxc.DiagnosticControlCommand diagnostic_request = 2;
    boolean hasDiagnosticRequest();
    com.openxc.BinaryMessages.DiagnosticControlCommand getDiagnosticRequest();
    com.openxc.BinaryMessages.DiagnosticControlCommandOrBuilder getDiagnosticRequestOrBuilder();
    
    // optional .openxc.PassthroughModeControlCommand passthrough_mode_request = 3;
    boolean hasPassthroughModeRequest();
    com.openxc.BinaryMessages.PassthroughModeControlCommand getPassthroughModeRequest();
    com.openxc.BinaryMessages.PassthroughModeControlCommandOrBuilder getPassthroughModeRequestOrBuilder();
    
    // optional .openxc.AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;
    boolean hasAcceptanceFilterBypassCommand();
    com.openxc.BinaryMessages.AcceptanceFilterBypassCommand getAcceptanceFilterBypassCommand();
    com.openxc.BinaryMessages.AcceptanceFilterBypassCommandOrBuilder getAcceptanceFilterBypassCommandOrBuilder();
    
    // optional .openxc.PayloadFormatCommand payload_format_command = 5;
    boolean hasPayloadFormatCommand();
    com.openxc.BinaryMessages.PayloadFormatCommand getPayloadFormatCommand();
    com.openxc.BinaryMessages.PayloadFormatCommandOrBuilder getPayloadFormatCommandOrBuilder();
    
    // optional .openxc.PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;
    boolean hasPredefinedObd2RequestsCommand();
    com.openxc.BinaryMessages.PredefinedObd2RequestsCommand getPredefinedObd2RequestsCommand();
    com.openxc.BinaryMessages.PredefinedObd2RequestsCommandOrBuilder getPredefinedObd2RequestsCommandOrBuilder();
    
    // optional .openxc.ModemConfigurationCommand modem_configuration_command = 7;
    boolean hasModemConfigurationCommand();
    com.openxc.BinaryMessages.ModemConfigurationCommand getModemConfigurationCommand();
    com.openxc.BinaryMessages.ModemConfigurationCommandOrBuilder getModemConfigurationCommandOrBuilder();
    
    // optional .openxc.RTCConfigurationCommand rtc_configuration_command = 8;
    boolean hasRtcConfigurationCommand();
    com.openxc.BinaryMessages.RTCConfigurationCommand getRtcConfigurationCommand();
    com.openxc.BinaryMessages.RTCConfigurationCommandOrBuilder getRtcConfigurationCommandOrBuilder();
  }
  public static final class ControlCommand extends
      com.google.protobuf.GeneratedMessage
      implements ControlCommandOrBuilder {
    // Use ControlCommand.newBuilder() to construct.
    private ControlCommand(Builder builder) {
      super(builder);
    }
    private ControlCommand(boolean noInit) {}
    
    private static final ControlCommand defaultInstance;
    public static ControlCommand getDefaultInstance() {
      return defaultInstance;
    }
    
    public ControlCommand getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.openxc.BinaryMessages.internal_static_openxc_ControlCommand_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.openxc.BinaryMessages.internal_static_openxc_ControlCommand_fieldAccessorTable;
    }
    
    public enum Type
        implements com.google.protobuf.ProtocolMessageEnum {
      VERSION(0, 1),
      DEVICE_ID(1, 2),
      DIAGNOSTIC(2, 3),
      PASSTHROUGH(3, 4),
      ACCEPTANCE_FILTER_BYPASS(4, 5),
      PAYLOAD_FORMAT(5, 6),
      PREDEFINED_OBD2_REQUESTS(6, 7),
      MODEM_CONFIGURATION(7, 8),
      RTC_CONFIGURATION(8, 9),
      SD_MOUNT_STATUS(9, 10),
      PLATFORM(10, 11),
      ;
      
      public static final int VERSION_VALUE = 1;
      public static final int DEVICE_ID_VALUE = 2;
      public static final int DIAGNOSTIC_VALUE = 3;
      public static final int PASSTHROUGH_VALUE = 4;
      public static final int ACCEPTANCE_FILTER_BYPASS_VALUE = 5;
      public static final int PAYLOAD_FORMAT_VALUE = 6;
      public static final int PREDEFINED_OBD2_REQUESTS_VALUE = 7;
      public static final int MODEM_CONFIGURATION_VALUE = 8;
      public static final int RTC_CONFIGURATION_VALUE = 9;
      public static final int SD_MOUNT_STATUS_VALUE = 10;
      public static final int PLATFORM_VALUE = 11;
      
      
      public final int getNumber() { return value; }
      
      public static Type valueOf(int value) {
        switch (value) {
          case 1: return VERSION;
          case 2: return DEVICE_ID;
          case 3: return DIAGNOSTIC;
          case 4: return PASSTHROUGH;
          case 5: return ACCEPTANCE_FILTER_BYPASS;
          case 6: return PAYLOAD_FORMAT;
          case 7: return PREDEFINED_OBD2_REQUESTS;
          case 8: return MODEM_CONFIGURATION;
          case 9: return RTC_CONFIGURATION;
          case 10: return SD_MOUNT_STATUS;
          case 11: return PLATFORM;
          default: return null;
        }
      }
      
      public static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Type>() {
              public Type findValueByNumber(int number) {
                return Type.valueOf(number);
              }
            };
      
      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.ControlCommand.getDescriptor().getEnumTypes().get(0);
      }
      
      private static final Type[] VALUES = {
        VERSION, DEVICE_ID, DIAGNOSTIC, PASSTHROUGH, ACCEPTANCE_FILTER_BYPASS, PAYLOAD_FORMAT, PREDEFINED_OBD2_REQUESTS, MODEM_CONFIGURATION, RTC_CONFIGURATION, SD_MOUNT_STATUS, PLATFORM, 
      };
      
      public static Type valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }
      
      private final int index;
      private final int value;
      
      private Type(int index, int value) {
        this.index = index;
        this.value = value;
      }
      
      // @@protoc_insertion_point(enum_scope:openxc.ControlCommand.Type)
    }
    
    private int bitField0_;
    // optional .openxc.ControlCommand.Type type = 1;
    public static final int TYPE_FIELD_NUMBER = 1;
    private com.openxc.BinaryMessages.ControlCommand.Type type_;
    public boolean hasType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public com.openxc.BinaryMessages.ControlCommand.Type getType() {
      return type_;
    }
    
    // optional .openxc.DiagnosticControlCommand diagnostic_request = 2;
    public static final int DIAGNOSTIC_REQUEST_FIELD_NUMBER = 2;
    private com.openxc.BinaryMessages.DiagnosticControlCommand diagnosticRequest_;
    public boolean hasDiagnosticRequest() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public com.openxc.BinaryMessages.DiagnosticControlCommand getDiagnosticRequest() {
      return diagnosticRequest_;
    }
    public com.openxc.BinaryMessages.DiagnosticControlCommandOrBuilder getDiagnosticRequestOrBuilder() {
      return diagnosticRequest_;
    }
    
    // optional .openxc.PassthroughModeControlCommand passthrough_mode_request = 3;
    public static final int PASSTHROUGH_MODE_REQUEST_FIELD_NUMBER = 3;
    private com.openxc.BinaryMessages.PassthroughModeControlCommand passthroughModeRequest_;
    public boolean hasPassthroughModeRequest() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    public com.openxc.BinaryMessages.PassthroughModeControlCommand getPassthroughModeRequest() {
      return passthroughModeRequest_;
    }
    public com.openxc.BinaryMessages.PassthroughModeControlCommandOrBuilder getPassthroughModeRequestOrBuilder() {
      return passthroughModeRequest_;
    }
    
    // optional .openxc.AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;
    public static final int ACCEPTANCE_FILTER_BYPASS_COMMAND_FIELD_NUMBER = 4;
    private com.openxc.BinaryMessages.AcceptanceFilterBypassCommand acceptanceFilterBypassCommand_;
    public boolean hasAcceptanceFilterBypassCommand() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    public com.openxc.BinaryMessages.AcceptanceFilterBypassCommand getAcceptanceFilterBypassCommand() {
      return acceptanceFilterBypassCommand_;
    }
    public com.openxc.BinaryMessages.AcceptanceFilterBypassCommandOrBuilder getAcceptanceFilterBypassCommandOrBuilder() {
      return acceptanceFilterBypassCommand_;
    }
    
    // optional .openxc.PayloadFormatCommand payload_format_command = 5;
    public static final int PAYLOAD_FORMAT_COMMAND_FIELD_NUMBER = 5;
    private com.openxc.BinaryMessages.PayloadFormatCommand payloadFormatCommand_;
    public boolean hasPayloadFormatCommand() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    public com.openxc.BinaryMessages.PayloadFormatCommand getPayloadFormatCommand() {
      return payloadFormatCommand_;
    }
    public com.openxc.BinaryMessages.PayloadFormatCommandOrBuilder getPayloadFormatCommandOrBuilder() {
      return payloadFormatCommand_;
    }
    
    // optional .openxc.PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;
    public static final int PREDEFINED_OBD2_REQUESTS_COMMAND_FIELD_NUMBER = 6;
    private com.openxc.BinaryMessages.PredefinedObd2RequestsCommand predefinedObd2RequestsCommand_;
    public boolean hasPredefinedObd2RequestsCommand() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    public com.openxc.BinaryMessages.PredefinedObd2RequestsCommand getPredefinedObd2RequestsCommand() {
      return predefinedObd2RequestsCommand_;
    }
    public com.openxc.BinaryMessages.PredefinedObd2RequestsCommandOrBuilder getPredefinedObd2RequestsCommandOrBuilder() {
      return predefinedObd2RequestsCommand_;
    }
    
    // optional .openxc.ModemConfigurationCommand modem_configuration_command = 7;
    public static final int MODEM_CONFIGURATION_COMMAND_FIELD_NUMBER = 7;
    private com.openxc.BinaryMessages.ModemConfigurationCommand modemConfigurationCommand_;
    public boolean hasModemConfigurationCommand() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    public com.openxc.BinaryMessages.ModemConfigurationCommand getModemConfigurationCommand() {
      return modemConfigurationCommand_;
    }
    public com.openxc.BinaryMessages.ModemConfigurationCommandOrBuilder getModemConfigurationCommandOrBuilder() {
      return modemConfigurationCommand_;
    }
    
    // optional .openxc.RTCConfigurationCommand rtc_configuration_command = 8;
    public static final int RTC_CONFIGURATION_COMMAND_FIELD_NUMBER = 8;
    private com.openxc.BinaryMessages.RTCConfigurationCommand rtcConfigurationCommand_;
    public boolean hasRtcConfigurationCommand() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    public com.openxc.BinaryMessages.RTCConfigurationCommand getRtcConfigurationCommand() {
      return rtcConfigurationCommand_;
    }
    public com.openxc.BinaryMessages.RTCConfigurationCommandOrBuilder getRtcConfigurationCommandOrBuilder() {
      return rtcConfigurationCommand_;
    }
    
    private void initFields() {
      type_ = com.openxc.BinaryMessages.ControlCommand.Type.VERSION;
      diagnosticRequest_ = com.openxc.BinaryMessages.DiagnosticControlCommand.getDefaultInstance();
      passthroughModeRequest_ = com.openxc.BinaryMessages.PassthroughModeControlCommand.getDefaultInstance();
      acceptanceFilterBypassCommand_ = com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.getDefaultInstance();
      payloadFormatCommand_ = com.openxc.BinaryMessages.PayloadFormatCommand.getDefaultInstance();
      predefinedObd2RequestsCommand_ = com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.getDefaultInstance();
      modemConfigurationCommand_ = com.openxc.BinaryMessages.ModemConfigurationCommand.getDefaultInstance();
      rtcConfigurationCommand_ = com.openxc.BinaryMessages.RTCConfigurationCommand.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, type_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, diagnosticRequest_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, passthroughModeRequest_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, acceptanceFilterBypassCommand_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(5, payloadFormatCommand_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(6, predefinedObd2RequestsCommand_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(7, modemConfigurationCommand_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeMessage(8, rtcConfigurationCommand_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, type_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, diagnosticRequest_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, passthroughModeRequest_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, acceptanceFilterBypassCommand_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, payloadFormatCommand_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, predefinedObd2RequestsCommand_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, modemConfigurationCommand_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, rtcConfigurationCommand_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static com.openxc.BinaryMessages.ControlCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.ControlCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.ControlCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.ControlCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.ControlCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.ControlCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.ControlCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.ControlCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.ControlCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.ControlCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.openxc.BinaryMessages.ControlCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.openxc.BinaryMessages.ControlCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.internal_static_openxc_ControlCommand_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.openxc.BinaryMessages.internal_static_openxc_ControlCommand_fieldAccessorTable;
      }
      
      // Construct using com.openxc.BinaryMessages.ControlCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getDiagnosticRequestFieldBuilder();
          getPassthroughModeRequestFieldBuilder();
          getAcceptanceFilterBypassCommandFieldBuilder();
          getPayloadFormatCommandFieldBuilder();
          getPredefinedObd2RequestsCommandFieldBuilder();
          getModemConfigurationCommandFieldBuilder();
          getRtcConfigurationCommandFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        type_ = com.openxc.BinaryMessages.ControlCommand.Type.VERSION;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (diagnosticRequestBuilder_ == null) {
          diagnosticRequest_ = com.openxc.BinaryMessages.DiagnosticControlCommand.getDefaultInstance();
        } else {
          diagnosticRequestBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (passthroughModeRequestBuilder_ == null) {
          passthroughModeRequest_ = com.openxc.BinaryMessages.PassthroughModeControlCommand.getDefaultInstance();
        } else {
          passthroughModeRequestBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (acceptanceFilterBypassCommandBuilder_ == null) {
          acceptanceFilterBypassCommand_ = com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.getDefaultInstance();
        } else {
          acceptanceFilterBypassCommandBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        if (payloadFormatCommandBuilder_ == null) {
          payloadFormatCommand_ = com.openxc.BinaryMessages.PayloadFormatCommand.getDefaultInstance();
        } else {
          payloadFormatCommandBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        if (predefinedObd2RequestsCommandBuilder_ == null) {
          predefinedObd2RequestsCommand_ = com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.getDefaultInstance();
        } else {
          predefinedObd2RequestsCommandBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        if (modemConfigurationCommandBuilder_ == null) {
          modemConfigurationCommand_ = com.openxc.BinaryMessages.ModemConfigurationCommand.getDefaultInstance();
        } else {
          modemConfigurationCommandBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        if (rtcConfigurationCommandBuilder_ == null) {
          rtcConfigurationCommand_ = com.openxc.BinaryMessages.RTCConfigurationCommand.getDefaultInstance();
        } else {
          rtcConfigurationCommandBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.openxc.BinaryMessages.ControlCommand.getDescriptor();
      }
      
      public com.openxc.BinaryMessages.ControlCommand getDefaultInstanceForType() {
        return com.openxc.BinaryMessages.ControlCommand.getDefaultInstance();
      }
      
      public com.openxc.BinaryMessages.ControlCommand build() {
        com.openxc.BinaryMessages.ControlCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private com.openxc.BinaryMessages.ControlCommand buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        com.openxc.BinaryMessages.ControlCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public com.openxc.BinaryMessages.ControlCommand buildPartial() {
        com.openxc.BinaryMessages.ControlCommand result = new com.openxc.BinaryMessages.ControlCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (diagnosticRequestBuilder_ == null) {
          result.diagnosticRequest_ = diagnosticRequest_;
        } else {
          result.diagnosticRequest_ = diagnosticRequestBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (passthroughModeRequestBuilder_ == null) {
          result.passthroughModeRequest_ = passthroughModeRequest_;
        } else {
          result.passthroughModeRequest_ = passthroughModeRequestBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (acceptanceFilterBypassCommandBuilder_ == null) {
          result.acceptanceFilterBypassCommand_ = acceptanceFilterBypassCommand_;
        } else {
          result.acceptanceFilterBypassCommand_ = acceptanceFilterBypassCommandBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        if (payloadFormatCommandBuilder_ == null) {
          result.payloadFormatCommand_ = payloadFormatCommand_;
        } else {
          result.payloadFormatCommand_ = payloadFormatCommandBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        if (predefinedObd2RequestsCommandBuilder_ == null) {
          result.predefinedObd2RequestsCommand_ = predefinedObd2RequestsCommand_;
        } else {
          result.predefinedObd2RequestsCommand_ = predefinedObd2RequestsCommandBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        if (modemConfigurationCommandBuilder_ == null) {
          result.modemConfigurationCommand_ = modemConfigurationCommand_;
        } else {
          result.modemConfigurationCommand_ = modemConfigurationCommandBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        if (rtcConfigurationCommandBuilder_ == null) {
          result.rtcConfigurationCommand_ = rtcConfigurationCommand_;
        } else {
          result.rtcConfigurationCommand_ = rtcConfigurationCommandBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.openxc.BinaryMessages.ControlCommand) {
          return mergeFrom((com.openxc.BinaryMessages.ControlCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(com.openxc.BinaryMessages.ControlCommand other) {
        if (other == com.openxc.BinaryMessages.ControlCommand.getDefaultInstance()) return this;
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasDiagnosticRequest()) {
          mergeDiagnosticRequest(other.getDiagnosticRequest());
        }
        if (other.hasPassthroughModeRequest()) {
          mergePassthroughModeRequest(other.getPassthroughModeRequest());
        }
        if (other.hasAcceptanceFilterBypassCommand()) {
          mergeAcceptanceFilterBypassCommand(other.getAcceptanceFilterBypassCommand());
        }
        if (other.hasPayloadFormatCommand()) {
          mergePayloadFormatCommand(other.getPayloadFormatCommand());
        }
        if (other.hasPredefinedObd2RequestsCommand()) {
          mergePredefinedObd2RequestsCommand(other.getPredefinedObd2RequestsCommand());
        }
        if (other.hasModemConfigurationCommand()) {
          mergeModemConfigurationCommand(other.getModemConfigurationCommand());
        }
        if (other.hasRtcConfigurationCommand()) {
          mergeRtcConfigurationCommand(other.getRtcConfigurationCommand());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.openxc.BinaryMessages.ControlCommand.Type value = com.openxc.BinaryMessages.ControlCommand.Type.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                type_ = value;
              }
              break;
            }
            case 18: {
              com.openxc.BinaryMessages.DiagnosticControlCommand.Builder subBuilder = com.openxc.BinaryMessages.DiagnosticControlCommand.newBuilder();
              if (hasDiagnosticRequest()) {
                subBuilder.mergeFrom(getDiagnosticRequest());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setDiagnosticRequest(subBuilder.buildPartial());
              break;
            }
            case 26: {
              com.openxc.BinaryMessages.PassthroughModeControlCommand.Builder subBuilder = com.openxc.BinaryMessages.PassthroughModeControlCommand.newBuilder();
              if (hasPassthroughModeRequest()) {
                subBuilder.mergeFrom(getPassthroughModeRequest());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setPassthroughModeRequest(subBuilder.buildPartial());
              break;
            }
            case 34: {
              com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.Builder subBuilder = com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.newBuilder();
              if (hasAcceptanceFilterBypassCommand()) {
                subBuilder.mergeFrom(getAcceptanceFilterBypassCommand());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setAcceptanceFilterBypassCommand(subBuilder.buildPartial());
              break;
            }
            case 42: {
              com.openxc.BinaryMessages.PayloadFormatCommand.Builder subBuilder = com.openxc.BinaryMessages.PayloadFormatCommand.newBuilder();
              if (hasPayloadFormatCommand()) {
                subBuilder.mergeFrom(getPayloadFormatCommand());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setPayloadFormatCommand(subBuilder.buildPartial());
              break;
            }
            case 50: {
              com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.Builder subBuilder = com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.newBuilder();
              if (hasPredefinedObd2RequestsCommand()) {
                subBuilder.mergeFrom(getPredefinedObd2RequestsCommand());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setPredefinedObd2RequestsCommand(subBuilder.buildPartial());
              break;
            }
            case 58: {
              com.openxc.BinaryMessages.ModemConfigurationCommand.Builder subBuilder = com.openxc.BinaryMessages.ModemConfigurationCommand.newBuilder();
              if (hasModemConfigurationCommand()) {
                subBuilder.mergeFrom(getModemConfigurationCommand());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setModemConfigurationCommand(subBuilder.buildPartial());
              break;
            }
            case 66: {
              com.openxc.BinaryMessages.RTCConfigurationCommand.Builder subBuilder = com.openxc.BinaryMessages.RTCConfigurationCommand.newBuilder();
              if (hasRtcConfigurationCommand()) {
                subBuilder.mergeFrom(getRtcConfigurationCommand());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setRtcConfigurationCommand(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // optional .openxc.ControlCommand.Type type = 1;
      private com.openxc.BinaryMessages.ControlCommand.Type type_ = com.openxc.BinaryMessages.ControlCommand.Type.VERSION;
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public com.openxc.BinaryMessages.ControlCommand.Type getType() {
        return type_;
      }
      public Builder setType(com.openxc.BinaryMessages.ControlCommand.Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        type_ = value;
        onChanged();
        return this;
      }
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = com.openxc.BinaryMessages.ControlCommand.Type.VERSION;
        onChanged();
        return this;
      }
      
      // optional .openxc.DiagnosticControlCommand diagnostic_request = 2;
      private com.openxc.BinaryMessages.DiagnosticControlCommand diagnosticRequest_ = com.openxc.BinaryMessages.DiagnosticControlCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.DiagnosticControlCommand, com.openxc.BinaryMessages.DiagnosticControlCommand.Builder, com.openxc.BinaryMessages.DiagnosticControlCommandOrBuilder> diagnosticRequestBuilder_;
      public boolean hasDiagnosticRequest() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public com.openxc.BinaryMessages.DiagnosticControlCommand getDiagnosticRequest() {
        if (diagnosticRequestBuilder_ == null) {
          return diagnosticRequest_;
        } else {
          return diagnosticRequestBuilder_.getMessage();
        }
      }
      public Builder setDiagnosticRequest(com.openxc.BinaryMessages.DiagnosticControlCommand value) {
        if (diagnosticRequestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          diagnosticRequest_ = value;
          onChanged();
        } else {
          diagnosticRequestBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      public Builder setDiagnosticRequest(
          com.openxc.BinaryMessages.DiagnosticControlCommand.Builder builderForValue) {
        if (diagnosticRequestBuilder_ == null) {
          diagnosticRequest_ = builderForValue.build();
          onChanged();
        } else {
          diagnosticRequestBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      public Builder mergeDiagnosticRequest(com.openxc.BinaryMessages.DiagnosticControlCommand value) {
        if (diagnosticRequestBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              diagnosticRequest_ != com.openxc.BinaryMessages.DiagnosticControlCommand.getDefaultInstance()) {
            diagnosticRequest_ =
              com.openxc.BinaryMessages.DiagnosticControlCommand.newBuilder(diagnosticRequest_).mergeFrom(value).buildPartial();
          } else {
            diagnosticRequest_ = value;
          }
          onChanged();
        } else {
          diagnosticRequestBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      public Builder clearDiagnosticRequest() {
        if (diagnosticRequestBuilder_ == null) {
          diagnosticRequest_ = com.openxc.BinaryMessages.DiagnosticControlCommand.getDefaultInstance();
          onChanged();
        } else {
          diagnosticRequestBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      public com.openxc.BinaryMessages.DiagnosticControlCommand.Builder getDiagnosticRequestBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getDiagnosticRequestFieldBuilder().getBuilder();
      }
      public com.openxc.BinaryMessages.DiagnosticControlCommandOrBuilder getDiagnosticRequestOrBuilder() {
        if (diagnosticRequestBuilder_ != null) {
          return diagnosticRequestBuilder_.getMessageOrBuilder();
        } else {
          return diagnosticRequest_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.DiagnosticControlCommand, com.openxc.BinaryMessages.DiagnosticControlCommand.Builder, com.openxc.BinaryMessages.DiagnosticControlCommandOrBuilder> 
          getDiagnosticRequestFieldBuilder() {
        if (diagnosticRequestBuilder_ == null) {
          diagnosticRequestBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.openxc.BinaryMessages.DiagnosticControlCommand, com.openxc.BinaryMessages.DiagnosticControlCommand.Builder, com.openxc.BinaryMessages.DiagnosticControlCommandOrBuilder>(
                  diagnosticRequest_,
                  getParentForChildren(),
                  isClean());
          diagnosticRequest_ = null;
        }
        return diagnosticRequestBuilder_;
      }
      
      // optional .openxc.PassthroughModeControlCommand passthrough_mode_request = 3;
      private com.openxc.BinaryMessages.PassthroughModeControlCommand passthroughModeRequest_ = com.openxc.BinaryMessages.PassthroughModeControlCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.PassthroughModeControlCommand, com.openxc.BinaryMessages.PassthroughModeControlCommand.Builder, com.openxc.BinaryMessages.PassthroughModeControlCommandOrBuilder> passthroughModeRequestBuilder_;
      public boolean hasPassthroughModeRequest() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public com.openxc.BinaryMessages.PassthroughModeControlCommand getPassthroughModeRequest() {
        if (passthroughModeRequestBuilder_ == null) {
          return passthroughModeRequest_;
        } else {
          return passthroughModeRequestBuilder_.getMessage();
        }
      }
      public Builder setPassthroughModeRequest(com.openxc.BinaryMessages.PassthroughModeControlCommand value) {
        if (passthroughModeRequestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          passthroughModeRequest_ = value;
          onChanged();
        } else {
          passthroughModeRequestBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      public Builder setPassthroughModeRequest(
          com.openxc.BinaryMessages.PassthroughModeControlCommand.Builder builderForValue) {
        if (passthroughModeRequestBuilder_ == null) {
          passthroughModeRequest_ = builderForValue.build();
          onChanged();
        } else {
          passthroughModeRequestBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      public Builder mergePassthroughModeRequest(com.openxc.BinaryMessages.PassthroughModeControlCommand value) {
        if (passthroughModeRequestBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              passthroughModeRequest_ != com.openxc.BinaryMessages.PassthroughModeControlCommand.getDefaultInstance()) {
            passthroughModeRequest_ =
              com.openxc.BinaryMessages.PassthroughModeControlCommand.newBuilder(passthroughModeRequest_).mergeFrom(value).buildPartial();
          } else {
            passthroughModeRequest_ = value;
          }
          onChanged();
        } else {
          passthroughModeRequestBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      public Builder clearPassthroughModeRequest() {
        if (passthroughModeRequestBuilder_ == null) {
          passthroughModeRequest_ = com.openxc.BinaryMessages.PassthroughModeControlCommand.getDefaultInstance();
          onChanged();
        } else {
          passthroughModeRequestBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      public com.openxc.BinaryMessages.PassthroughModeControlCommand.Builder getPassthroughModeRequestBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getPassthroughModeRequestFieldBuilder().getBuilder();
      }
      public com.openxc.BinaryMessages.PassthroughModeControlCommandOrBuilder getPassthroughModeRequestOrBuilder() {
        if (passthroughModeRequestBuilder_ != null) {
          return passthroughModeRequestBuilder_.getMessageOrBuilder();
        } else {
          return passthroughModeRequest_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.PassthroughModeControlCommand, com.openxc.BinaryMessages.PassthroughModeControlCommand.Builder, com.openxc.BinaryMessages.PassthroughModeControlCommandOrBuilder> 
          getPassthroughModeRequestFieldBuilder() {
        if (passthroughModeRequestBuilder_ == null) {
          passthroughModeRequestBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.openxc.BinaryMessages.PassthroughModeControlCommand, com.openxc.BinaryMessages.PassthroughModeControlCommand.Builder, com.openxc.BinaryMessages.PassthroughModeControlCommandOrBuilder>(
                  passthroughModeRequest_,
                  getParentForChildren(),
                  isClean());
          passthroughModeRequest_ = null;
        }
        return passthroughModeRequestBuilder_;
      }
      
      // optional .openxc.AcceptanceFilterBypassCommand acceptance_filter_bypass_command = 4;
      private com.openxc.BinaryMessages.AcceptanceFilterBypassCommand acceptanceFilterBypassCommand_ = com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.AcceptanceFilterBypassCommand, com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.Builder, com.openxc.BinaryMessages.AcceptanceFilterBypassCommandOrBuilder> acceptanceFilterBypassCommandBuilder_;
      public boolean hasAcceptanceFilterBypassCommand() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      public com.openxc.BinaryMessages.AcceptanceFilterBypassCommand getAcceptanceFilterBypassCommand() {
        if (acceptanceFilterBypassCommandBuilder_ == null) {
          return acceptanceFilterBypassCommand_;
        } else {
          return acceptanceFilterBypassCommandBuilder_.getMessage();
        }
      }
      public Builder setAcceptanceFilterBypassCommand(com.openxc.BinaryMessages.AcceptanceFilterBypassCommand value) {
        if (acceptanceFilterBypassCommandBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          acceptanceFilterBypassCommand_ = value;
          onChanged();
        } else {
          acceptanceFilterBypassCommandBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      public Builder setAcceptanceFilterBypassCommand(
          com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.Builder builderForValue) {
        if (acceptanceFilterBypassCommandBuilder_ == null) {
          acceptanceFilterBypassCommand_ = builderForValue.build();
          onChanged();
        } else {
          acceptanceFilterBypassCommandBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      public Builder mergeAcceptanceFilterBypassCommand(com.openxc.BinaryMessages.AcceptanceFilterBypassCommand value) {
        if (acceptanceFilterBypassCommandBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              acceptanceFilterBypassCommand_ != com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.getDefaultInstance()) {
            acceptanceFilterBypassCommand_ =
              com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.newBuilder(acceptanceFilterBypassCommand_).mergeFrom(value).buildPartial();
          } else {
            acceptanceFilterBypassCommand_ = value;
          }
          onChanged();
        } else {
          acceptanceFilterBypassCommandBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      public Builder clearAcceptanceFilterBypassCommand() {
        if (acceptanceFilterBypassCommandBuilder_ == null) {
          acceptanceFilterBypassCommand_ = com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.getDefaultInstance();
          onChanged();
        } else {
          acceptanceFilterBypassCommandBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      public com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.Builder getAcceptanceFilterBypassCommandBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getAcceptanceFilterBypassCommandFieldBuilder().getBuilder();
      }
      public com.openxc.BinaryMessages.AcceptanceFilterBypassCommandOrBuilder getAcceptanceFilterBypassCommandOrBuilder() {
        if (acceptanceFilterBypassCommandBuilder_ != null) {
          return acceptanceFilterBypassCommandBuilder_.getMessageOrBuilder();
        } else {
          return acceptanceFilterBypassCommand_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.AcceptanceFilterBypassCommand, com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.Builder, com.openxc.BinaryMessages.AcceptanceFilterBypassCommandOrBuilder> 
          getAcceptanceFilterBypassCommandFieldBuilder() {
        if (acceptanceFilterBypassCommandBuilder_ == null) {
          acceptanceFilterBypassCommandBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.openxc.BinaryMessages.AcceptanceFilterBypassCommand, com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.Builder, com.openxc.BinaryMessages.AcceptanceFilterBypassCommandOrBuilder>(
                  acceptanceFilterBypassCommand_,
                  getParentForChildren(),
                  isClean());
          acceptanceFilterBypassCommand_ = null;
        }
        return acceptanceFilterBypassCommandBuilder_;
      }
      
      // optional .openxc.PayloadFormatCommand payload_format_command = 5;
      private com.openxc.BinaryMessages.PayloadFormatCommand payloadFormatCommand_ = com.openxc.BinaryMessages.PayloadFormatCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.PayloadFormatCommand, com.openxc.BinaryMessages.PayloadFormatCommand.Builder, com.openxc.BinaryMessages.PayloadFormatCommandOrBuilder> payloadFormatCommandBuilder_;
      public boolean hasPayloadFormatCommand() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      public com.openxc.BinaryMessages.PayloadFormatCommand getPayloadFormatCommand() {
        if (payloadFormatCommandBuilder_ == null) {
          return payloadFormatCommand_;
        } else {
          return payloadFormatCommandBuilder_.getMessage();
        }
      }
      public Builder setPayloadFormatCommand(com.openxc.BinaryMessages.PayloadFormatCommand value) {
        if (payloadFormatCommandBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          payloadFormatCommand_ = value;
          onChanged();
        } else {
          payloadFormatCommandBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      public Builder setPayloadFormatCommand(
          com.openxc.BinaryMessages.PayloadFormatCommand.Builder builderForValue) {
        if (payloadFormatCommandBuilder_ == null) {
          payloadFormatCommand_ = builderForValue.build();
          onChanged();
        } else {
          payloadFormatCommandBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      public Builder mergePayloadFormatCommand(com.openxc.BinaryMessages.PayloadFormatCommand value) {
        if (payloadFormatCommandBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010) &&
              payloadFormatCommand_ != com.openxc.BinaryMessages.PayloadFormatCommand.getDefaultInstance()) {
            payloadFormatCommand_ =
              com.openxc.BinaryMessages.PayloadFormatCommand.newBuilder(payloadFormatCommand_).mergeFrom(value).buildPartial();
          } else {
            payloadFormatCommand_ = value;
          }
          onChanged();
        } else {
          payloadFormatCommandBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      public Builder clearPayloadFormatCommand() {
        if (payloadFormatCommandBuilder_ == null) {
          payloadFormatCommand_ = com.openxc.BinaryMessages.PayloadFormatCommand.getDefaultInstance();
          onChanged();
        } else {
          payloadFormatCommandBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      public com.openxc.BinaryMessages.PayloadFormatCommand.Builder getPayloadFormatCommandBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getPayloadFormatCommandFieldBuilder().getBuilder();
      }
      public com.openxc.BinaryMessages.PayloadFormatCommandOrBuilder getPayloadFormatCommandOrBuilder() {
        if (payloadFormatCommandBuilder_ != null) {
          return payloadFormatCommandBuilder_.getMessageOrBuilder();
        } else {
          return payloadFormatCommand_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.PayloadFormatCommand, com.openxc.BinaryMessages.PayloadFormatCommand.Builder, com.openxc.BinaryMessages.PayloadFormatCommandOrBuilder> 
          getPayloadFormatCommandFieldBuilder() {
        if (payloadFormatCommandBuilder_ == null) {
          payloadFormatCommandBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.openxc.BinaryMessages.PayloadFormatCommand, com.openxc.BinaryMessages.PayloadFormatCommand.Builder, com.openxc.BinaryMessages.PayloadFormatCommandOrBuilder>(
                  payloadFormatCommand_,
                  getParentForChildren(),
                  isClean());
          payloadFormatCommand_ = null;
        }
        return payloadFormatCommandBuilder_;
      }
      
      // optional .openxc.PredefinedObd2RequestsCommand predefined_obd2_requests_command = 6;
      private com.openxc.BinaryMessages.PredefinedObd2RequestsCommand predefinedObd2RequestsCommand_ = com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.PredefinedObd2RequestsCommand, com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.Builder, com.openxc.BinaryMessages.PredefinedObd2RequestsCommandOrBuilder> predefinedObd2RequestsCommandBuilder_;
      public boolean hasPredefinedObd2RequestsCommand() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      public com.openxc.BinaryMessages.PredefinedObd2RequestsCommand getPredefinedObd2RequestsCommand() {
        if (predefinedObd2RequestsCommandBuilder_ == null) {
          return predefinedObd2RequestsCommand_;
        } else {
          return predefinedObd2RequestsCommandBuilder_.getMessage();
        }
      }
      public Builder setPredefinedObd2RequestsCommand(com.openxc.BinaryMessages.PredefinedObd2RequestsCommand value) {
        if (predefinedObd2RequestsCommandBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          predefinedObd2RequestsCommand_ = value;
          onChanged();
        } else {
          predefinedObd2RequestsCommandBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      public Builder setPredefinedObd2RequestsCommand(
          com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.Builder builderForValue) {
        if (predefinedObd2RequestsCommandBuilder_ == null) {
          predefinedObd2RequestsCommand_ = builderForValue.build();
          onChanged();
        } else {
          predefinedObd2RequestsCommandBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      public Builder mergePredefinedObd2RequestsCommand(com.openxc.BinaryMessages.PredefinedObd2RequestsCommand value) {
        if (predefinedObd2RequestsCommandBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              predefinedObd2RequestsCommand_ != com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.getDefaultInstance()) {
            predefinedObd2RequestsCommand_ =
              com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.newBuilder(predefinedObd2RequestsCommand_).mergeFrom(value).buildPartial();
          } else {
            predefinedObd2RequestsCommand_ = value;
          }
          onChanged();
        } else {
          predefinedObd2RequestsCommandBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      public Builder clearPredefinedObd2RequestsCommand() {
        if (predefinedObd2RequestsCommandBuilder_ == null) {
          predefinedObd2RequestsCommand_ = com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.getDefaultInstance();
          onChanged();
        } else {
          predefinedObd2RequestsCommandBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      public com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.Builder getPredefinedObd2RequestsCommandBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getPredefinedObd2RequestsCommandFieldBuilder().getBuilder();
      }
      public com.openxc.BinaryMessages.PredefinedObd2RequestsCommandOrBuilder getPredefinedObd2RequestsCommandOrBuilder() {
        if (predefinedObd2RequestsCommandBuilder_ != null) {
          return predefinedObd2RequestsCommandBuilder_.getMessageOrBuilder();
        } else {
          return predefinedObd2RequestsCommand_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.PredefinedObd2RequestsCommand, com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.Builder, com.openxc.BinaryMessages.PredefinedObd2RequestsCommandOrBuilder> 
          getPredefinedObd2RequestsCommandFieldBuilder() {
        if (predefinedObd2RequestsCommandBuilder_ == null) {
          predefinedObd2RequestsCommandBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.openxc.BinaryMessages.PredefinedObd2RequestsCommand, com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.Builder, com.openxc.BinaryMessages.PredefinedObd2RequestsCommandOrBuilder>(
                  predefinedObd2RequestsCommand_,
                  getParentForChildren(),
                  isClean());
          predefinedObd2RequestsCommand_ = null;
        }
        return predefinedObd2RequestsCommandBuilder_;
      }
      
      // optional .openxc.ModemConfigurationCommand modem_configuration_command = 7;
      private com.openxc.BinaryMessages.ModemConfigurationCommand modemConfigurationCommand_ = com.openxc.BinaryMessages.ModemConfigurationCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.ModemConfigurationCommand, com.openxc.BinaryMessages.ModemConfigurationCommand.Builder, com.openxc.BinaryMessages.ModemConfigurationCommandOrBuilder> modemConfigurationCommandBuilder_;
      public boolean hasModemConfigurationCommand() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      public com.openxc.BinaryMessages.ModemConfigurationCommand getModemConfigurationCommand() {
        if (modemConfigurationCommandBuilder_ == null) {
          return modemConfigurationCommand_;
        } else {
          return modemConfigurationCommandBuilder_.getMessage();
        }
      }
      public Builder setModemConfigurationCommand(com.openxc.BinaryMessages.ModemConfigurationCommand value) {
        if (modemConfigurationCommandBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          modemConfigurationCommand_ = value;
          onChanged();
        } else {
          modemConfigurationCommandBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      public Builder setModemConfigurationCommand(
          com.openxc.BinaryMessages.ModemConfigurationCommand.Builder builderForValue) {
        if (modemConfigurationCommandBuilder_ == null) {
          modemConfigurationCommand_ = builderForValue.build();
          onChanged();
        } else {
          modemConfigurationCommandBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      public Builder mergeModemConfigurationCommand(com.openxc.BinaryMessages.ModemConfigurationCommand value) {
        if (modemConfigurationCommandBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              modemConfigurationCommand_ != com.openxc.BinaryMessages.ModemConfigurationCommand.getDefaultInstance()) {
            modemConfigurationCommand_ =
              com.openxc.BinaryMessages.ModemConfigurationCommand.newBuilder(modemConfigurationCommand_).mergeFrom(value).buildPartial();
          } else {
            modemConfigurationCommand_ = value;
          }
          onChanged();
        } else {
          modemConfigurationCommandBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      public Builder clearModemConfigurationCommand() {
        if (modemConfigurationCommandBuilder_ == null) {
          modemConfigurationCommand_ = com.openxc.BinaryMessages.ModemConfigurationCommand.getDefaultInstance();
          onChanged();
        } else {
          modemConfigurationCommandBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      public com.openxc.BinaryMessages.ModemConfigurationCommand.Builder getModemConfigurationCommandBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getModemConfigurationCommandFieldBuilder().getBuilder();
      }
      public com.openxc.BinaryMessages.ModemConfigurationCommandOrBuilder getModemConfigurationCommandOrBuilder() {
        if (modemConfigurationCommandBuilder_ != null) {
          return modemConfigurationCommandBuilder_.getMessageOrBuilder();
        } else {
          return modemConfigurationCommand_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.ModemConfigurationCommand, com.openxc.BinaryMessages.ModemConfigurationCommand.Builder, com.openxc.BinaryMessages.ModemConfigurationCommandOrBuilder> 
          getModemConfigurationCommandFieldBuilder() {
        if (modemConfigurationCommandBuilder_ == null) {
          modemConfigurationCommandBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.openxc.BinaryMessages.ModemConfigurationCommand, com.openxc.BinaryMessages.ModemConfigurationCommand.Builder, com.openxc.BinaryMessages.ModemConfigurationCommandOrBuilder>(
                  modemConfigurationCommand_,
                  getParentForChildren(),
                  isClean());
          modemConfigurationCommand_ = null;
        }
        return modemConfigurationCommandBuilder_;
      }
      
      // optional .openxc.RTCConfigurationCommand rtc_configuration_command = 8;
      private com.openxc.BinaryMessages.RTCConfigurationCommand rtcConfigurationCommand_ = com.openxc.BinaryMessages.RTCConfigurationCommand.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.RTCConfigurationCommand, com.openxc.BinaryMessages.RTCConfigurationCommand.Builder, com.openxc.BinaryMessages.RTCConfigurationCommandOrBuilder> rtcConfigurationCommandBuilder_;
      public boolean hasRtcConfigurationCommand() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      public com.openxc.BinaryMessages.RTCConfigurationCommand getRtcConfigurationCommand() {
        if (rtcConfigurationCommandBuilder_ == null) {
          return rtcConfigurationCommand_;
        } else {
          return rtcConfigurationCommandBuilder_.getMessage();
        }
      }
      public Builder setRtcConfigurationCommand(com.openxc.BinaryMessages.RTCConfigurationCommand value) {
        if (rtcConfigurationCommandBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          rtcConfigurationCommand_ = value;
          onChanged();
        } else {
          rtcConfigurationCommandBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      public Builder setRtcConfigurationCommand(
          com.openxc.BinaryMessages.RTCConfigurationCommand.Builder builderForValue) {
        if (rtcConfigurationCommandBuilder_ == null) {
          rtcConfigurationCommand_ = builderForValue.build();
          onChanged();
        } else {
          rtcConfigurationCommandBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      public Builder mergeRtcConfigurationCommand(com.openxc.BinaryMessages.RTCConfigurationCommand value) {
        if (rtcConfigurationCommandBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              rtcConfigurationCommand_ != com.openxc.BinaryMessages.RTCConfigurationCommand.getDefaultInstance()) {
            rtcConfigurationCommand_ =
              com.openxc.BinaryMessages.RTCConfigurationCommand.newBuilder(rtcConfigurationCommand_).mergeFrom(value).buildPartial();
          } else {
            rtcConfigurationCommand_ = value;
          }
          onChanged();
        } else {
          rtcConfigurationCommandBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      public Builder clearRtcConfigurationCommand() {
        if (rtcConfigurationCommandBuilder_ == null) {
          rtcConfigurationCommand_ = com.openxc.BinaryMessages.RTCConfigurationCommand.getDefaultInstance();
          onChanged();
        } else {
          rtcConfigurationCommandBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      public com.openxc.BinaryMessages.RTCConfigurationCommand.Builder getRtcConfigurationCommandBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getRtcConfigurationCommandFieldBuilder().getBuilder();
      }
      public com.openxc.BinaryMessages.RTCConfigurationCommandOrBuilder getRtcConfigurationCommandOrBuilder() {
        if (rtcConfigurationCommandBuilder_ != null) {
          return rtcConfigurationCommandBuilder_.getMessageOrBuilder();
        } else {
          return rtcConfigurationCommand_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.RTCConfigurationCommand, com.openxc.BinaryMessages.RTCConfigurationCommand.Builder, com.openxc.BinaryMessages.RTCConfigurationCommandOrBuilder> 
          getRtcConfigurationCommandFieldBuilder() {
        if (rtcConfigurationCommandBuilder_ == null) {
          rtcConfigurationCommandBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.openxc.BinaryMessages.RTCConfigurationCommand, com.openxc.BinaryMessages.RTCConfigurationCommand.Builder, com.openxc.BinaryMessages.RTCConfigurationCommandOrBuilder>(
                  rtcConfigurationCommand_,
                  getParentForChildren(),
                  isClean());
          rtcConfigurationCommand_ = null;
        }
        return rtcConfigurationCommandBuilder_;
      }
      
      // @@protoc_insertion_point(builder_scope:openxc.ControlCommand)
    }
    
    static {
      defaultInstance = new ControlCommand(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:openxc.ControlCommand)
  }
  
  public interface DiagnosticControlCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // optional .openxc.DiagnosticRequest request = 1;
    boolean hasRequest();
    com.openxc.BinaryMessages.DiagnosticRequest getRequest();
    com.openxc.BinaryMessages.DiagnosticRequestOrBuilder getRequestOrBuilder();
    
    // optional .openxc.DiagnosticControlCommand.Action action = 2;
    boolean hasAction();
    com.openxc.BinaryMessages.DiagnosticControlCommand.Action getAction();
  }
  public static final class DiagnosticControlCommand extends
      com.google.protobuf.GeneratedMessage
      implements DiagnosticControlCommandOrBuilder {
    // Use DiagnosticControlCommand.newBuilder() to construct.
    private DiagnosticControlCommand(Builder builder) {
      super(builder);
    }
    private DiagnosticControlCommand(boolean noInit) {}
    
    private static final DiagnosticControlCommand defaultInstance;
    public static DiagnosticControlCommand getDefaultInstance() {
      return defaultInstance;
    }
    
    public DiagnosticControlCommand getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticControlCommand_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticControlCommand_fieldAccessorTable;
    }
    
    public enum Action
        implements com.google.protobuf.ProtocolMessageEnum {
      ADD(0, 1),
      CANCEL(1, 2),
      ;
      
      public static final int ADD_VALUE = 1;
      public static final int CANCEL_VALUE = 2;
      
      
      public final int getNumber() { return value; }
      
      public static Action valueOf(int value) {
        switch (value) {
          case 1: return ADD;
          case 2: return CANCEL;
          default: return null;
        }
      }
      
      public static com.google.protobuf.Internal.EnumLiteMap<Action>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<Action>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Action>() {
              public Action findValueByNumber(int number) {
                return Action.valueOf(number);
              }
            };
      
      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.DiagnosticControlCommand.getDescriptor().getEnumTypes().get(0);
      }
      
      private static final Action[] VALUES = {
        ADD, CANCEL, 
      };
      
      public static Action valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }
      
      private final int index;
      private final int value;
      
      private Action(int index, int value) {
        this.index = index;
        this.value = value;
      }
      
      // @@protoc_insertion_point(enum_scope:openxc.DiagnosticControlCommand.Action)
    }
    
    private int bitField0_;
    // optional .openxc.DiagnosticRequest request = 1;
    public static final int REQUEST_FIELD_NUMBER = 1;
    private com.openxc.BinaryMessages.DiagnosticRequest request_;
    public boolean hasRequest() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public com.openxc.BinaryMessages.DiagnosticRequest getRequest() {
      return request_;
    }
    public com.openxc.BinaryMessages.DiagnosticRequestOrBuilder getRequestOrBuilder() {
      return request_;
    }
    
    // optional .openxc.DiagnosticControlCommand.Action action = 2;
    public static final int ACTION_FIELD_NUMBER = 2;
    private com.openxc.BinaryMessages.DiagnosticControlCommand.Action action_;
    public boolean hasAction() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public com.openxc.BinaryMessages.DiagnosticControlCommand.Action getAction() {
      return action_;
    }
    
    private void initFields() {
      request_ = com.openxc.BinaryMessages.DiagnosticRequest.getDefaultInstance();
      action_ = com.openxc.BinaryMessages.DiagnosticControlCommand.Action.ADD;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, request_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(2, action_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, request_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, action_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static com.openxc.BinaryMessages.DiagnosticControlCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticControlCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticControlCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticControlCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticControlCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticControlCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticControlCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.DiagnosticControlCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.DiagnosticControlCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticControlCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.openxc.BinaryMessages.DiagnosticControlCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.openxc.BinaryMessages.DiagnosticControlCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticControlCommand_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticControlCommand_fieldAccessorTable;
      }
      
      // Construct using com.openxc.BinaryMessages.DiagnosticControlCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getRequestFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        if (requestBuilder_ == null) {
          request_ = com.openxc.BinaryMessages.DiagnosticRequest.getDefaultInstance();
        } else {
          requestBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        action_ = com.openxc.BinaryMessages.DiagnosticControlCommand.Action.ADD;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.openxc.BinaryMessages.DiagnosticControlCommand.getDescriptor();
      }
      
      public com.openxc.BinaryMessages.DiagnosticControlCommand getDefaultInstanceForType() {
        return com.openxc.BinaryMessages.DiagnosticControlCommand.getDefaultInstance();
      }
      
      public com.openxc.BinaryMessages.DiagnosticControlCommand build() {
        com.openxc.BinaryMessages.DiagnosticControlCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private com.openxc.BinaryMessages.DiagnosticControlCommand buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        com.openxc.BinaryMessages.DiagnosticControlCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public com.openxc.BinaryMessages.DiagnosticControlCommand buildPartial() {
        com.openxc.BinaryMessages.DiagnosticControlCommand result = new com.openxc.BinaryMessages.DiagnosticControlCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (requestBuilder_ == null) {
          result.request_ = request_;
        } else {
          result.request_ = requestBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.action_ = action_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.openxc.BinaryMessages.DiagnosticControlCommand) {
          return mergeFrom((com.openxc.BinaryMessages.DiagnosticControlCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(com.openxc.BinaryMessages.DiagnosticControlCommand other) {
        if (other == com.openxc.BinaryMessages.DiagnosticControlCommand.getDefaultInstance()) return this;
        if (other.hasRequest()) {
          mergeRequest(other.getRequest());
        }
        if (other.hasAction()) {
          setAction(other.getAction());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 10: {
              com.openxc.BinaryMessages.DiagnosticRequest.Builder subBuilder = com.openxc.BinaryMessages.DiagnosticRequest.newBuilder();
              if (hasRequest()) {
                subBuilder.mergeFrom(getRequest());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setRequest(subBuilder.buildPartial());
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
              com.openxc.BinaryMessages.DiagnosticControlCommand.Action value = com.openxc.BinaryMessages.DiagnosticControlCommand.Action.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                action_ = value;
              }
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // optional .openxc.DiagnosticRequest request = 1;
      private com.openxc.BinaryMessages.DiagnosticRequest request_ = com.openxc.BinaryMessages.DiagnosticRequest.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.DiagnosticRequest, com.openxc.BinaryMessages.DiagnosticRequest.Builder, com.openxc.BinaryMessages.DiagnosticRequestOrBuilder> requestBuilder_;
      public boolean hasRequest() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public com.openxc.BinaryMessages.DiagnosticRequest getRequest() {
        if (requestBuilder_ == null) {
          return request_;
        } else {
          return requestBuilder_.getMessage();
        }
      }
      public Builder setRequest(com.openxc.BinaryMessages.DiagnosticRequest value) {
        if (requestBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          request_ = value;
          onChanged();
        } else {
          requestBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      public Builder setRequest(
          com.openxc.BinaryMessages.DiagnosticRequest.Builder builderForValue) {
        if (requestBuilder_ == null) {
          request_ = builderForValue.build();
          onChanged();
        } else {
          requestBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      public Builder mergeRequest(com.openxc.BinaryMessages.DiagnosticRequest value) {
        if (requestBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              request_ != com.openxc.BinaryMessages.DiagnosticRequest.getDefaultInstance()) {
            request_ =
              com.openxc.BinaryMessages.DiagnosticRequest.newBuilder(request_).mergeFrom(value).buildPartial();
          } else {
            request_ = value;
          }
          onChanged();
        } else {
          requestBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      public Builder clearRequest() {
        if (requestBuilder_ == null) {
          request_ = com.openxc.BinaryMessages.DiagnosticRequest.getDefaultInstance();
          onChanged();
        } else {
          requestBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      public com.openxc.BinaryMessages.DiagnosticRequest.Builder getRequestBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getRequestFieldBuilder().getBuilder();
      }
      public com.openxc.BinaryMessages.DiagnosticRequestOrBuilder getRequestOrBuilder() {
        if (requestBuilder_ != null) {
          return requestBuilder_.getMessageOrBuilder();
        } else {
          return request_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.DiagnosticRequest, com.openxc.BinaryMessages.DiagnosticRequest.Builder, com.openxc.BinaryMessages.DiagnosticRequestOrBuilder> 
          getRequestFieldBuilder() {
        if (requestBuilder_ == null) {
          requestBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.openxc.BinaryMessages.DiagnosticRequest, com.openxc.BinaryMessages.DiagnosticRequest.Builder, com.openxc.BinaryMessages.DiagnosticRequestOrBuilder>(
                  request_,
                  getParentForChildren(),
                  isClean());
          request_ = null;
        }
        return requestBuilder_;
      }
      
      // optional .openxc.DiagnosticControlCommand.Action action = 2;
      private com.openxc.BinaryMessages.DiagnosticControlCommand.Action action_ = com.openxc.BinaryMessages.DiagnosticControlCommand.Action.ADD;
      public boolean hasAction() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public com.openxc.BinaryMessages.DiagnosticControlCommand.Action getAction() {
        return action_;
      }
      public Builder setAction(com.openxc.BinaryMessages.DiagnosticControlCommand.Action value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        action_ = value;
        onChanged();
        return this;
      }
      public Builder clearAction() {
        bitField0_ = (bitField0_ & ~0x00000002);
        action_ = com.openxc.BinaryMessages.DiagnosticControlCommand.Action.ADD;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:openxc.DiagnosticControlCommand)
    }
    
    static {
      defaultInstance = new DiagnosticControlCommand(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:openxc.DiagnosticControlCommand)
  }
  
  public interface PassthroughModeControlCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // optional int32 bus = 1;
    boolean hasBus();
    int getBus();
    
    // optional bool enabled = 2;
    boolean hasEnabled();
    boolean getEnabled();
  }
  public static final class PassthroughModeControlCommand extends
      com.google.protobuf.GeneratedMessage
      implements PassthroughModeControlCommandOrBuilder {
    // Use PassthroughModeControlCommand.newBuilder() to construct.
    private PassthroughModeControlCommand(Builder builder) {
      super(builder);
    }
    private PassthroughModeControlCommand(boolean noInit) {}
    
    private static final PassthroughModeControlCommand defaultInstance;
    public static PassthroughModeControlCommand getDefaultInstance() {
      return defaultInstance;
    }
    
    public PassthroughModeControlCommand getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.openxc.BinaryMessages.internal_static_openxc_PassthroughModeControlCommand_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.openxc.BinaryMessages.internal_static_openxc_PassthroughModeControlCommand_fieldAccessorTable;
    }
    
    private int bitField0_;
    // optional int32 bus = 1;
    public static final int BUS_FIELD_NUMBER = 1;
    private int bus_;
    public boolean hasBus() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public int getBus() {
      return bus_;
    }
    
    // optional bool enabled = 2;
    public static final int ENABLED_FIELD_NUMBER = 2;
    private boolean enabled_;
    public boolean hasEnabled() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public boolean getEnabled() {
      return enabled_;
    }
    
    private void initFields() {
      bus_ = 0;
      enabled_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, bus_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, enabled_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, bus_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, enabled_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static com.openxc.BinaryMessages.PassthroughModeControlCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.PassthroughModeControlCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.PassthroughModeControlCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.PassthroughModeControlCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.PassthroughModeControlCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.PassthroughModeControlCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.PassthroughModeControlCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.PassthroughModeControlCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.PassthroughModeControlCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.PassthroughModeControlCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.openxc.BinaryMessages.PassthroughModeControlCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.openxc.BinaryMessages.PassthroughModeControlCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.internal_static_openxc_PassthroughModeControlCommand_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.openxc.BinaryMessages.internal_static_openxc_PassthroughModeControlCommand_fieldAccessorTable;
      }
      
      // Construct using com.openxc.BinaryMessages.PassthroughModeControlCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        bus_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        enabled_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.openxc.BinaryMessages.PassthroughModeControlCommand.getDescriptor();
      }
      
      public com.openxc.BinaryMessages.PassthroughModeControlCommand getDefaultInstanceForType() {
        return com.openxc.BinaryMessages.PassthroughModeControlCommand.getDefaultInstance();
      }
      
      public com.openxc.BinaryMessages.PassthroughModeControlCommand build() {
        com.openxc.BinaryMessages.PassthroughModeControlCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private com.openxc.BinaryMessages.PassthroughModeControlCommand buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        com.openxc.BinaryMessages.PassthroughModeControlCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public com.openxc.BinaryMessages.PassthroughModeControlCommand buildPartial() {
        com.openxc.BinaryMessages.PassthroughModeControlCommand result = new com.openxc.BinaryMessages.PassthroughModeControlCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.bus_ = bus_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.enabled_ = enabled_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.openxc.BinaryMessages.PassthroughModeControlCommand) {
          return mergeFrom((com.openxc.BinaryMessages.PassthroughModeControlCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(com.openxc.BinaryMessages.PassthroughModeControlCommand other) {
        if (other == com.openxc.BinaryMessages.PassthroughModeControlCommand.getDefaultInstance()) return this;
        if (other.hasBus()) {
          setBus(other.getBus());
        }
        if (other.hasEnabled()) {
          setEnabled(other.getEnabled());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              bus_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              enabled_ = input.readBool();
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // optional int32 bus = 1;
      private int bus_ ;
      public boolean hasBus() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public int getBus() {
        return bus_;
      }
      public Builder setBus(int value) {
        bitField0_ |= 0x00000001;
        bus_ = value;
        onChanged();
        return this;
      }
      public Builder clearBus() {
        bitField0_ = (bitField0_ & ~0x00000001);
        bus_ = 0;
        onChanged();
        return this;
      }
      
      // optional bool enabled = 2;
      private boolean enabled_ ;
      public boolean hasEnabled() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public boolean getEnabled() {
        return enabled_;
      }
      public Builder setEnabled(boolean value) {
        bitField0_ |= 0x00000002;
        enabled_ = value;
        onChanged();
        return this;
      }
      public Builder clearEnabled() {
        bitField0_ = (bitField0_ & ~0x00000002);
        enabled_ = false;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:openxc.PassthroughModeControlCommand)
    }
    
    static {
      defaultInstance = new PassthroughModeControlCommand(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:openxc.PassthroughModeControlCommand)
  }
  
  public interface AcceptanceFilterBypassCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // optional int32 bus = 1;
    boolean hasBus();
    int getBus();
    
    // optional bool bypass = 2;
    boolean hasBypass();
    boolean getBypass();
  }
  public static final class AcceptanceFilterBypassCommand extends
      com.google.protobuf.GeneratedMessage
      implements AcceptanceFilterBypassCommandOrBuilder {
    // Use AcceptanceFilterBypassCommand.newBuilder() to construct.
    private AcceptanceFilterBypassCommand(Builder builder) {
      super(builder);
    }
    private AcceptanceFilterBypassCommand(boolean noInit) {}
    
    private static final AcceptanceFilterBypassCommand defaultInstance;
    public static AcceptanceFilterBypassCommand getDefaultInstance() {
      return defaultInstance;
    }
    
    public AcceptanceFilterBypassCommand getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.openxc.BinaryMessages.internal_static_openxc_AcceptanceFilterBypassCommand_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.openxc.BinaryMessages.internal_static_openxc_AcceptanceFilterBypassCommand_fieldAccessorTable;
    }
    
    private int bitField0_;
    // optional int32 bus = 1;
    public static final int BUS_FIELD_NUMBER = 1;
    private int bus_;
    public boolean hasBus() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public int getBus() {
      return bus_;
    }
    
    // optional bool bypass = 2;
    public static final int BYPASS_FIELD_NUMBER = 2;
    private boolean bypass_;
    public boolean hasBypass() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public boolean getBypass() {
      return bypass_;
    }
    
    private void initFields() {
      bus_ = 0;
      bypass_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, bus_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, bypass_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, bus_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, bypass_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static com.openxc.BinaryMessages.AcceptanceFilterBypassCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.AcceptanceFilterBypassCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.AcceptanceFilterBypassCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.AcceptanceFilterBypassCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.AcceptanceFilterBypassCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.AcceptanceFilterBypassCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.AcceptanceFilterBypassCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.AcceptanceFilterBypassCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.AcceptanceFilterBypassCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.AcceptanceFilterBypassCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.openxc.BinaryMessages.AcceptanceFilterBypassCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.openxc.BinaryMessages.AcceptanceFilterBypassCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.internal_static_openxc_AcceptanceFilterBypassCommand_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.openxc.BinaryMessages.internal_static_openxc_AcceptanceFilterBypassCommand_fieldAccessorTable;
      }
      
      // Construct using com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        bus_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        bypass_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.getDescriptor();
      }
      
      public com.openxc.BinaryMessages.AcceptanceFilterBypassCommand getDefaultInstanceForType() {
        return com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.getDefaultInstance();
      }
      
      public com.openxc.BinaryMessages.AcceptanceFilterBypassCommand build() {
        com.openxc.BinaryMessages.AcceptanceFilterBypassCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private com.openxc.BinaryMessages.AcceptanceFilterBypassCommand buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        com.openxc.BinaryMessages.AcceptanceFilterBypassCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public com.openxc.BinaryMessages.AcceptanceFilterBypassCommand buildPartial() {
        com.openxc.BinaryMessages.AcceptanceFilterBypassCommand result = new com.openxc.BinaryMessages.AcceptanceFilterBypassCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.bus_ = bus_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.bypass_ = bypass_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.openxc.BinaryMessages.AcceptanceFilterBypassCommand) {
          return mergeFrom((com.openxc.BinaryMessages.AcceptanceFilterBypassCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(com.openxc.BinaryMessages.AcceptanceFilterBypassCommand other) {
        if (other == com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.getDefaultInstance()) return this;
        if (other.hasBus()) {
          setBus(other.getBus());
        }
        if (other.hasBypass()) {
          setBypass(other.getBypass());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              bus_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              bypass_ = input.readBool();
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // optional int32 bus = 1;
      private int bus_ ;
      public boolean hasBus() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public int getBus() {
        return bus_;
      }
      public Builder setBus(int value) {
        bitField0_ |= 0x00000001;
        bus_ = value;
        onChanged();
        return this;
      }
      public Builder clearBus() {
        bitField0_ = (bitField0_ & ~0x00000001);
        bus_ = 0;
        onChanged();
        return this;
      }
      
      // optional bool bypass = 2;
      private boolean bypass_ ;
      public boolean hasBypass() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public boolean getBypass() {
        return bypass_;
      }
      public Builder setBypass(boolean value) {
        bitField0_ |= 0x00000002;
        bypass_ = value;
        onChanged();
        return this;
      }
      public Builder clearBypass() {
        bitField0_ = (bitField0_ & ~0x00000002);
        bypass_ = false;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:openxc.AcceptanceFilterBypassCommand)
    }
    
    static {
      defaultInstance = new AcceptanceFilterBypassCommand(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:openxc.AcceptanceFilterBypassCommand)
  }
  
  public interface PayloadFormatCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // optional .openxc.PayloadFormatCommand.PayloadFormat format = 1;
    boolean hasFormat();
    com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat getFormat();
  }
  public static final class PayloadFormatCommand extends
      com.google.protobuf.GeneratedMessage
      implements PayloadFormatCommandOrBuilder {
    // Use PayloadFormatCommand.newBuilder() to construct.
    private PayloadFormatCommand(Builder builder) {
      super(builder);
    }
    private PayloadFormatCommand(boolean noInit) {}
    
    private static final PayloadFormatCommand defaultInstance;
    public static PayloadFormatCommand getDefaultInstance() {
      return defaultInstance;
    }
    
    public PayloadFormatCommand getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.openxc.BinaryMessages.internal_static_openxc_PayloadFormatCommand_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.openxc.BinaryMessages.internal_static_openxc_PayloadFormatCommand_fieldAccessorTable;
    }
    
    public enum PayloadFormat
        implements com.google.protobuf.ProtocolMessageEnum {
      JSON(0, 1),
      PROTOBUF(1, 2),
      MESSAGEPACK(2, 3),
      ;
      
      public static final int JSON_VALUE = 1;
      public static final int PROTOBUF_VALUE = 2;
      public static final int MESSAGEPACK_VALUE = 3;
      
      
      public final int getNumber() { return value; }
      
      public static PayloadFormat valueOf(int value) {
        switch (value) {
          case 1: return JSON;
          case 2: return PROTOBUF;
          case 3: return MESSAGEPACK;
          default: return null;
        }
      }
      
      public static com.google.protobuf.Internal.EnumLiteMap<PayloadFormat>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<PayloadFormat>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<PayloadFormat>() {
              public PayloadFormat findValueByNumber(int number) {
                return PayloadFormat.valueOf(number);
              }
            };
      
      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.PayloadFormatCommand.getDescriptor().getEnumTypes().get(0);
      }
      
      private static final PayloadFormat[] VALUES = {
        JSON, PROTOBUF, MESSAGEPACK, 
      };
      
      public static PayloadFormat valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }
      
      private final int index;
      private final int value;
      
      private PayloadFormat(int index, int value) {
        this.index = index;
        this.value = value;
      }
      
      // @@protoc_insertion_point(enum_scope:openxc.PayloadFormatCommand.PayloadFormat)
    }
    
    private int bitField0_;
    // optional .openxc.PayloadFormatCommand.PayloadFormat format = 1;
    public static final int FORMAT_FIELD_NUMBER = 1;
    private com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat format_;
    public boolean hasFormat() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat getFormat() {
      return format_;
    }
    
    private void initFields() {
      format_ = com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat.JSON;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, format_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, format_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static com.openxc.BinaryMessages.PayloadFormatCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.PayloadFormatCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.PayloadFormatCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.PayloadFormatCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.PayloadFormatCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.PayloadFormatCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.PayloadFormatCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.PayloadFormatCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.PayloadFormatCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.PayloadFormatCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.openxc.BinaryMessages.PayloadFormatCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.openxc.BinaryMessages.PayloadFormatCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.internal_static_openxc_PayloadFormatCommand_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.openxc.BinaryMessages.internal_static_openxc_PayloadFormatCommand_fieldAccessorTable;
      }
      
      // Construct using com.openxc.BinaryMessages.PayloadFormatCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        format_ = com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat.JSON;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.openxc.BinaryMessages.PayloadFormatCommand.getDescriptor();
      }
      
      public com.openxc.BinaryMessages.PayloadFormatCommand getDefaultInstanceForType() {
        return com.openxc.BinaryMessages.PayloadFormatCommand.getDefaultInstance();
      }
      
      public com.openxc.BinaryMessages.PayloadFormatCommand build() {
        com.openxc.BinaryMessages.PayloadFormatCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private com.openxc.BinaryMessages.PayloadFormatCommand buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        com.openxc.BinaryMessages.PayloadFormatCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public com.openxc.BinaryMessages.PayloadFormatCommand buildPartial() {
        com.openxc.BinaryMessages.PayloadFormatCommand result = new com.openxc.BinaryMessages.PayloadFormatCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.format_ = format_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.openxc.BinaryMessages.PayloadFormatCommand) {
          return mergeFrom((com.openxc.BinaryMessages.PayloadFormatCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(com.openxc.BinaryMessages.PayloadFormatCommand other) {
        if (other == com.openxc.BinaryMessages.PayloadFormatCommand.getDefaultInstance()) return this;
        if (other.hasFormat()) {
          setFormat(other.getFormat());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat value = com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                format_ = value;
              }
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // optional .openxc.PayloadFormatCommand.PayloadFormat format = 1;
      private com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat format_ = com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat.JSON;
      public boolean hasFormat() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat getFormat() {
        return format_;
      }
      public Builder setFormat(com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        format_ = value;
        onChanged();
        return this;
      }
      public Builder clearFormat() {
        bitField0_ = (bitField0_ & ~0x00000001);
        format_ = com.openxc.BinaryMessages.PayloadFormatCommand.PayloadFormat.JSON;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:openxc.PayloadFormatCommand)
    }
    
    static {
      defaultInstance = new PayloadFormatCommand(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:openxc.PayloadFormatCommand)
  }
  
  public interface PredefinedObd2RequestsCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // optional bool enabled = 1;
    boolean hasEnabled();
    boolean getEnabled();
  }
  public static final class PredefinedObd2RequestsCommand extends
      com.google.protobuf.GeneratedMessage
      implements PredefinedObd2RequestsCommandOrBuilder {
    // Use PredefinedObd2RequestsCommand.newBuilder() to construct.
    private PredefinedObd2RequestsCommand(Builder builder) {
      super(builder);
    }
    private PredefinedObd2RequestsCommand(boolean noInit) {}
    
    private static final PredefinedObd2RequestsCommand defaultInstance;
    public static PredefinedObd2RequestsCommand getDefaultInstance() {
      return defaultInstance;
    }
    
    public PredefinedObd2RequestsCommand getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.openxc.BinaryMessages.internal_static_openxc_PredefinedObd2RequestsCommand_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.openxc.BinaryMessages.internal_static_openxc_PredefinedObd2RequestsCommand_fieldAccessorTable;
    }
    
    private int bitField0_;
    // optional bool enabled = 1;
    public static final int ENABLED_FIELD_NUMBER = 1;
    private boolean enabled_;
    public boolean hasEnabled() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public boolean getEnabled() {
      return enabled_;
    }
    
    private void initFields() {
      enabled_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, enabled_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, enabled_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.PredefinedObd2RequestsCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.openxc.BinaryMessages.PredefinedObd2RequestsCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.openxc.BinaryMessages.PredefinedObd2RequestsCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.internal_static_openxc_PredefinedObd2RequestsCommand_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.openxc.BinaryMessages.internal_static_openxc_PredefinedObd2RequestsCommand_fieldAccessorTable;
      }
      
      // Construct using com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        enabled_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.getDescriptor();
      }
      
      public com.openxc.BinaryMessages.PredefinedObd2RequestsCommand getDefaultInstanceForType() {
        return com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.getDefaultInstance();
      }
      
      public com.openxc.BinaryMessages.PredefinedObd2RequestsCommand build() {
        com.openxc.BinaryMessages.PredefinedObd2RequestsCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private com.openxc.BinaryMessages.PredefinedObd2RequestsCommand buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        com.openxc.BinaryMessages.PredefinedObd2RequestsCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public com.openxc.BinaryMessages.PredefinedObd2RequestsCommand buildPartial() {
        com.openxc.BinaryMessages.PredefinedObd2RequestsCommand result = new com.openxc.BinaryMessages.PredefinedObd2RequestsCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.enabled_ = enabled_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.openxc.BinaryMessages.PredefinedObd2RequestsCommand) {
          return mergeFrom((com.openxc.BinaryMessages.PredefinedObd2RequestsCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(com.openxc.BinaryMessages.PredefinedObd2RequestsCommand other) {
        if (other == com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.getDefaultInstance()) return this;
        if (other.hasEnabled()) {
          setEnabled(other.getEnabled());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              enabled_ = input.readBool();
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // optional bool enabled = 1;
      private boolean enabled_ ;
      public boolean hasEnabled() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public boolean getEnabled() {
        return enabled_;
      }
      public Builder setEnabled(boolean value) {
        bitField0_ |= 0x00000001;
        enabled_ = value;
        onChanged();
        return this;
      }
      public Builder clearEnabled() {
        bitField0_ = (bitField0_ & ~0x00000001);
        enabled_ = false;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:openxc.PredefinedObd2RequestsCommand)
    }
    
    static {
      defaultInstance = new PredefinedObd2RequestsCommand(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:openxc.PredefinedObd2RequestsCommand)
  }
  
  public interface NetworkOperatorSettingsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // optional bool allowDataRoaming = 1;
    boolean hasAllowDataRoaming();
    boolean getAllowDataRoaming();
    
    // optional .openxc.NetworkOperatorSettings.OperatorSelectMode operatorSelectMode = 2;
    boolean hasOperatorSelectMode();
    com.openxc.BinaryMessages.NetworkOperatorSettings.OperatorSelectMode getOperatorSelectMode();
    
    // optional .openxc.NetworkOperatorSettings.NetworkDescriptor networkDescriptor = 3;
    boolean hasNetworkDescriptor();
    com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor getNetworkDescriptor();
    com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptorOrBuilder getNetworkDescriptorOrBuilder();
  }
  public static final class NetworkOperatorSettings extends
      com.google.protobuf.GeneratedMessage
      implements NetworkOperatorSettingsOrBuilder {
    // Use NetworkOperatorSettings.newBuilder() to construct.
    private NetworkOperatorSettings(Builder builder) {
      super(builder);
    }
    private NetworkOperatorSettings(boolean noInit) {}
    
    private static final NetworkOperatorSettings defaultInstance;
    public static NetworkOperatorSettings getDefaultInstance() {
      return defaultInstance;
    }
    
    public NetworkOperatorSettings getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.openxc.BinaryMessages.internal_static_openxc_NetworkOperatorSettings_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.openxc.BinaryMessages.internal_static_openxc_NetworkOperatorSettings_fieldAccessorTable;
    }
    
    public enum OperatorSelectMode
        implements com.google.protobuf.ProtocolMessageEnum {
      AUTOMATIC(0, 0),
      MANUAL(1, 1),
      DEREGISTER(2, 2),
      SET_ONLY(3, 3),
      MANUAL_AUTOMATIC(4, 4),
      ;
      
      public static final int AUTOMATIC_VALUE = 0;
      public static final int MANUAL_VALUE = 1;
      public static final int DEREGISTER_VALUE = 2;
      public static final int SET_ONLY_VALUE = 3;
      public static final int MANUAL_AUTOMATIC_VALUE = 4;
      
      
      public final int getNumber() { return value; }
      
      public static OperatorSelectMode valueOf(int value) {
        switch (value) {
          case 0: return AUTOMATIC;
          case 1: return MANUAL;
          case 2: return DEREGISTER;
          case 3: return SET_ONLY;
          case 4: return MANUAL_AUTOMATIC;
          default: return null;
        }
      }
      
      public static com.google.protobuf.Internal.EnumLiteMap<OperatorSelectMode>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<OperatorSelectMode>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<OperatorSelectMode>() {
              public OperatorSelectMode findValueByNumber(int number) {
                return OperatorSelectMode.valueOf(number);
              }
            };
      
      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.NetworkOperatorSettings.getDescriptor().getEnumTypes().get(0);
      }
      
      private static final OperatorSelectMode[] VALUES = {
        AUTOMATIC, MANUAL, DEREGISTER, SET_ONLY, MANUAL_AUTOMATIC, 
      };
      
      public static OperatorSelectMode valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }
      
      private final int index;
      private final int value;
      
      private OperatorSelectMode(int index, int value) {
        this.index = index;
        this.value = value;
      }
      
      // @@protoc_insertion_point(enum_scope:openxc.NetworkOperatorSettings.OperatorSelectMode)
    }
    
    public interface NetworkDescriptorOrBuilder
        extends com.google.protobuf.MessageOrBuilder {
      
      // optional uint32 PLMN = 1;
      boolean hasPLMN();
      int getPLMN();
      
      // optional .openxc.NetworkOperatorSettings.NetworkDescriptor.NetworkType networkType = 2;
      boolean hasNetworkType();
      com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.NetworkType getNetworkType();
    }
    public static final class NetworkDescriptor extends
        com.google.protobuf.GeneratedMessage
        implements NetworkDescriptorOrBuilder {
      // Use NetworkDescriptor.newBuilder() to construct.
      private NetworkDescriptor(Builder builder) {
        super(builder);
      }
      private NetworkDescriptor(boolean noInit) {}
      
      private static final NetworkDescriptor defaultInstance;
      public static NetworkDescriptor getDefaultInstance() {
        return defaultInstance;
      }
      
      public NetworkDescriptor getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.internal_static_openxc_NetworkOperatorSettings_NetworkDescriptor_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.openxc.BinaryMessages.internal_static_openxc_NetworkOperatorSettings_NetworkDescriptor_fieldAccessorTable;
      }
      
      public enum NetworkType
          implements com.google.protobuf.ProtocolMessageEnum {
        GSM(0, 0),
        UTRAN(1, 2),
        ;
        
        public static final int GSM_VALUE = 0;
        public static final int UTRAN_VALUE = 2;
        
        
        public final int getNumber() { return value; }
        
        public static NetworkType valueOf(int value) {
          switch (value) {
            case 0: return GSM;
            case 2: return UTRAN;
            default: return null;
          }
        }
        
        public static com.google.protobuf.Internal.EnumLiteMap<NetworkType>
            internalGetValueMap() {
          return internalValueMap;
        }
        private static com.google.protobuf.Internal.EnumLiteMap<NetworkType>
            internalValueMap =
              new com.google.protobuf.Internal.EnumLiteMap<NetworkType>() {
                public NetworkType findValueByNumber(int number) {
                  return NetworkType.valueOf(number);
                }
              };
        
        public final com.google.protobuf.Descriptors.EnumValueDescriptor
            getValueDescriptor() {
          return getDescriptor().getValues().get(index);
        }
        public final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptorForType() {
          return getDescriptor();
        }
        public static final com.google.protobuf.Descriptors.EnumDescriptor
            getDescriptor() {
          return com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.getDescriptor().getEnumTypes().get(0);
        }
        
        private static final NetworkType[] VALUES = {
          GSM, UTRAN, 
        };
        
        public static NetworkType valueOf(
            com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
          if (desc.getType() != getDescriptor()) {
            throw new java.lang.IllegalArgumentException(
              "EnumValueDescriptor is not for this type.");
          }
          return VALUES[desc.getIndex()];
        }
        
        private final int index;
        private final int value;
        
        private NetworkType(int index, int value) {
          this.index = index;
          this.value = value;
        }
        
        // @@protoc_insertion_point(enum_scope:openxc.NetworkOperatorSettings.NetworkDescriptor.NetworkType)
      }
      
      private int bitField0_;
      // optional uint32 PLMN = 1;
      public static final int PLMN_FIELD_NUMBER = 1;
      private int pLMN_;
      public boolean hasPLMN() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public int getPLMN() {
        return pLMN_;
      }
      
      // optional .openxc.NetworkOperatorSettings.NetworkDescriptor.NetworkType networkType = 2;
      public static final int NETWORKTYPE_FIELD_NUMBER = 2;
      private com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.NetworkType networkType_;
      public boolean hasNetworkType() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.NetworkType getNetworkType() {
        return networkType_;
      }
      
      private void initFields() {
        pLMN_ = 0;
        networkType_ = com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.NetworkType.GSM;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;
        
        memoizedIsInitialized = 1;
        return true;
      }
      
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeUInt32(1, pLMN_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeEnum(2, networkType_.getNumber());
        }
        getUnknownFields().writeTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeUInt32Size(1, pLMN_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeEnumSize(2, networkType_.getNumber());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
      
      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }
      
      public static com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }
      
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptorOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.openxc.BinaryMessages.internal_static_openxc_NetworkOperatorSettings_NetworkDescriptor_descriptor;
        }
        
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.openxc.BinaryMessages.internal_static_openxc_NetworkOperatorSettings_NetworkDescriptor_fieldAccessorTable;
        }
        
        // Construct using com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
        
        private Builder(BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }
        
        public Builder clear() {
          super.clear();
          pLMN_ = 0;
          bitField0_ = (bitField0_ & ~0x00000001);
          networkType_ = com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.NetworkType.GSM;
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }
        
        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }
        
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.getDescriptor();
        }
        
        public com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor getDefaultInstanceForType() {
          return com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.getDefaultInstance();
        }
        
        public com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor build() {
          com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
        
        private com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return result;
        }
        
        public com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor buildPartial() {
          com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor result = new com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.pLMN_ = pLMN_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.networkType_ = networkType_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }
        
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor) {
            return mergeFrom((com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor other) {
          if (other == com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.getDefaultInstance()) return this;
          if (other.hasPLMN()) {
            setPLMN(other.getPLMN());
          }
          if (other.hasNetworkType()) {
            setNetworkType(other.getNetworkType());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        public final boolean isInitialized() {
          return true;
        }
        
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  onChanged();
                  return this;
                }
                break;
              }
              case 8: {
                bitField0_ |= 0x00000001;
                pLMN_ = input.readUInt32();
                break;
              }
              case 16: {
                int rawValue = input.readEnum();
                com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.NetworkType value = com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.NetworkType.valueOf(rawValue);
                if (value == null) {
                  unknownFields.mergeVarintField(2, rawValue);
                } else {
                  bitField0_ |= 0x00000002;
                  networkType_ = value;
                }
                break;
              }
            }
          }
        }
        
        private int bitField0_;
        
        // optional uint32 PLMN = 1;
        private int pLMN_ ;
        public boolean hasPLMN() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        public int getPLMN() {
          return pLMN_;
        }
        public Builder setPLMN(int value) {
          bitField0_ |= 0x00000001;
          pLMN_ = value;
          onChanged();
          return this;
        }
        public Builder clearPLMN() {
          bitField0_ = (bitField0_ & ~0x00000001);
          pLMN_ = 0;
          onChanged();
          return this;
        }
        
        // optional .openxc.NetworkOperatorSettings.NetworkDescriptor.NetworkType networkType = 2;
        private com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.NetworkType networkType_ = com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.NetworkType.GSM;
        public boolean hasNetworkType() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        public com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.NetworkType getNetworkType() {
          return networkType_;
        }
        public Builder setNetworkType(com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.NetworkType value) {
          if (value == null) {
            throw new NullPointerException();
          }
          bitField0_ |= 0x00000002;
          networkType_ = value;
          onChanged();
          return this;
        }
        public Builder clearNetworkType() {
          bitField0_ = (bitField0_ & ~0x00000002);
          networkType_ = com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.NetworkType.GSM;
          onChanged();
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:openxc.NetworkOperatorSettings.NetworkDescriptor)
      }
      
      static {
        defaultInstance = new NetworkDescriptor(true);
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:openxc.NetworkOperatorSettings.NetworkDescriptor)
    }
    
    private int bitField0_;
    // optional bool allowDataRoaming = 1;
    public static final int ALLOWDATAROAMING_FIELD_NUMBER = 1;
    private boolean allowDataRoaming_;
    public boolean hasAllowDataRoaming() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public boolean getAllowDataRoaming() {
      return allowDataRoaming_;
    }
    
    // optional .openxc.NetworkOperatorSettings.OperatorSelectMode operatorSelectMode = 2;
    public static final int OPERATORSELECTMODE_FIELD_NUMBER = 2;
    private com.openxc.BinaryMessages.NetworkOperatorSettings.OperatorSelectMode operatorSelectMode_;
    public boolean hasOperatorSelectMode() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public com.openxc.BinaryMessages.NetworkOperatorSettings.OperatorSelectMode getOperatorSelectMode() {
      return operatorSelectMode_;
    }
    
    // optional .openxc.NetworkOperatorSettings.NetworkDescriptor networkDescriptor = 3;
    public static final int NETWORKDESCRIPTOR_FIELD_NUMBER = 3;
    private com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor networkDescriptor_;
    public boolean hasNetworkDescriptor() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    public com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor getNetworkDescriptor() {
      return networkDescriptor_;
    }
    public com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptorOrBuilder getNetworkDescriptorOrBuilder() {
      return networkDescriptor_;
    }
    
    private void initFields() {
      allowDataRoaming_ = false;
      operatorSelectMode_ = com.openxc.BinaryMessages.NetworkOperatorSettings.OperatorSelectMode.AUTOMATIC;
      networkDescriptor_ = com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, allowDataRoaming_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(2, operatorSelectMode_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, networkDescriptor_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, allowDataRoaming_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, operatorSelectMode_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, networkDescriptor_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static com.openxc.BinaryMessages.NetworkOperatorSettings parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.NetworkOperatorSettings parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.NetworkOperatorSettings parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.NetworkOperatorSettings parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.NetworkOperatorSettings parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.NetworkOperatorSettings parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.NetworkOperatorSettings parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.NetworkOperatorSettings parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.NetworkOperatorSettings parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.NetworkOperatorSettings parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.openxc.BinaryMessages.NetworkOperatorSettings prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.openxc.BinaryMessages.NetworkOperatorSettingsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.internal_static_openxc_NetworkOperatorSettings_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.openxc.BinaryMessages.internal_static_openxc_NetworkOperatorSettings_fieldAccessorTable;
      }
      
      // Construct using com.openxc.BinaryMessages.NetworkOperatorSettings.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getNetworkDescriptorFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        allowDataRoaming_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        operatorSelectMode_ = com.openxc.BinaryMessages.NetworkOperatorSettings.OperatorSelectMode.AUTOMATIC;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (networkDescriptorBuilder_ == null) {
          networkDescriptor_ = com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.getDefaultInstance();
        } else {
          networkDescriptorBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.openxc.BinaryMessages.NetworkOperatorSettings.getDescriptor();
      }
      
      public com.openxc.BinaryMessages.NetworkOperatorSettings getDefaultInstanceForType() {
        return com.openxc.BinaryMessages.NetworkOperatorSettings.getDefaultInstance();
      }
      
      public com.openxc.BinaryMessages.NetworkOperatorSettings build() {
        com.openxc.BinaryMessages.NetworkOperatorSettings result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private com.openxc.BinaryMessages.NetworkOperatorSettings buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        com.openxc.BinaryMessages.NetworkOperatorSettings result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public com.openxc.BinaryMessages.NetworkOperatorSettings buildPartial() {
        com.openxc.BinaryMessages.NetworkOperatorSettings result = new com.openxc.BinaryMessages.NetworkOperatorSettings(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.allowDataRoaming_ = allowDataRoaming_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.operatorSelectMode_ = operatorSelectMode_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (networkDescriptorBuilder_ == null) {
          result.networkDescriptor_ = networkDescriptor_;
        } else {
          result.networkDescriptor_ = networkDescriptorBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.openxc.BinaryMessages.NetworkOperatorSettings) {
          return mergeFrom((com.openxc.BinaryMessages.NetworkOperatorSettings)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(com.openxc.BinaryMessages.NetworkOperatorSettings other) {
        if (other == com.openxc.BinaryMessages.NetworkOperatorSettings.getDefaultInstance()) return this;
        if (other.hasAllowDataRoaming()) {
          setAllowDataRoaming(other.getAllowDataRoaming());
        }
        if (other.hasOperatorSelectMode()) {
          setOperatorSelectMode(other.getOperatorSelectMode());
        }
        if (other.hasNetworkDescriptor()) {
          mergeNetworkDescriptor(other.getNetworkDescriptor());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              allowDataRoaming_ = input.readBool();
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
              com.openxc.BinaryMessages.NetworkOperatorSettings.OperatorSelectMode value = com.openxc.BinaryMessages.NetworkOperatorSettings.OperatorSelectMode.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                operatorSelectMode_ = value;
              }
              break;
            }
            case 26: {
              com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.Builder subBuilder = com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.newBuilder();
              if (hasNetworkDescriptor()) {
                subBuilder.mergeFrom(getNetworkDescriptor());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setNetworkDescriptor(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // optional bool allowDataRoaming = 1;
      private boolean allowDataRoaming_ ;
      public boolean hasAllowDataRoaming() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public boolean getAllowDataRoaming() {
        return allowDataRoaming_;
      }
      public Builder setAllowDataRoaming(boolean value) {
        bitField0_ |= 0x00000001;
        allowDataRoaming_ = value;
        onChanged();
        return this;
      }
      public Builder clearAllowDataRoaming() {
        bitField0_ = (bitField0_ & ~0x00000001);
        allowDataRoaming_ = false;
        onChanged();
        return this;
      }
      
      // optional .openxc.NetworkOperatorSettings.OperatorSelectMode operatorSelectMode = 2;
      private com.openxc.BinaryMessages.NetworkOperatorSettings.OperatorSelectMode operatorSelectMode_ = com.openxc.BinaryMessages.NetworkOperatorSettings.OperatorSelectMode.AUTOMATIC;
      public boolean hasOperatorSelectMode() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public com.openxc.BinaryMessages.NetworkOperatorSettings.OperatorSelectMode getOperatorSelectMode() {
        return operatorSelectMode_;
      }
      public Builder setOperatorSelectMode(com.openxc.BinaryMessages.NetworkOperatorSettings.OperatorSelectMode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        operatorSelectMode_ = value;
        onChanged();
        return this;
      }
      public Builder clearOperatorSelectMode() {
        bitField0_ = (bitField0_ & ~0x00000002);
        operatorSelectMode_ = com.openxc.BinaryMessages.NetworkOperatorSettings.OperatorSelectMode.AUTOMATIC;
        onChanged();
        return this;
      }
      
      // optional .openxc.NetworkOperatorSettings.NetworkDescriptor networkDescriptor = 3;
      private com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor networkDescriptor_ = com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor, com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.Builder, com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptorOrBuilder> networkDescriptorBuilder_;
      public boolean hasNetworkDescriptor() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor getNetworkDescriptor() {
        if (networkDescriptorBuilder_ == null) {
          return networkDescriptor_;
        } else {
          return networkDescriptorBuilder_.getMessage();
        }
      }
      public Builder setNetworkDescriptor(com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor value) {
        if (networkDescriptorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          networkDescriptor_ = value;
          onChanged();
        } else {
          networkDescriptorBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      public Builder setNetworkDescriptor(
          com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.Builder builderForValue) {
        if (networkDescriptorBuilder_ == null) {
          networkDescriptor_ = builderForValue.build();
          onChanged();
        } else {
          networkDescriptorBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      public Builder mergeNetworkDescriptor(com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor value) {
        if (networkDescriptorBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              networkDescriptor_ != com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.getDefaultInstance()) {
            networkDescriptor_ =
              com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.newBuilder(networkDescriptor_).mergeFrom(value).buildPartial();
          } else {
            networkDescriptor_ = value;
          }
          onChanged();
        } else {
          networkDescriptorBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      public Builder clearNetworkDescriptor() {
        if (networkDescriptorBuilder_ == null) {
          networkDescriptor_ = com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.getDefaultInstance();
          onChanged();
        } else {
          networkDescriptorBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      public com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.Builder getNetworkDescriptorBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getNetworkDescriptorFieldBuilder().getBuilder();
      }
      public com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptorOrBuilder getNetworkDescriptorOrBuilder() {
        if (networkDescriptorBuilder_ != null) {
          return networkDescriptorBuilder_.getMessageOrBuilder();
        } else {
          return networkDescriptor_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor, com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.Builder, com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptorOrBuilder> 
          getNetworkDescriptorFieldBuilder() {
        if (networkDescriptorBuilder_ == null) {
          networkDescriptorBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor, com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.Builder, com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptorOrBuilder>(
                  networkDescriptor_,
                  getParentForChildren(),
                  isClean());
          networkDescriptor_ = null;
        }
        return networkDescriptorBuilder_;
      }
      
      // @@protoc_insertion_point(builder_scope:openxc.NetworkOperatorSettings)
    }
    
    static {
      defaultInstance = new NetworkOperatorSettings(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:openxc.NetworkOperatorSettings)
  }
  
  public interface NetworkDataSettingsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // optional string APN = 1;
    boolean hasAPN();
    String getAPN();
  }
  public static final class NetworkDataSettings extends
      com.google.protobuf.GeneratedMessage
      implements NetworkDataSettingsOrBuilder {
    // Use NetworkDataSettings.newBuilder() to construct.
    private NetworkDataSettings(Builder builder) {
      super(builder);
    }
    private NetworkDataSettings(boolean noInit) {}
    
    private static final NetworkDataSettings defaultInstance;
    public static NetworkDataSettings getDefaultInstance() {
      return defaultInstance;
    }
    
    public NetworkDataSettings getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.openxc.BinaryMessages.internal_static_openxc_NetworkDataSettings_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.openxc.BinaryMessages.internal_static_openxc_NetworkDataSettings_fieldAccessorTable;
    }
    
    private int bitField0_;
    // optional string APN = 1;
    public static final int APN_FIELD_NUMBER = 1;
    private java.lang.Object aPN_;
    public boolean hasAPN() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public String getAPN() {
      java.lang.Object ref = aPN_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
          aPN_ = s;
        }
        return s;
      }
    }
    private com.google.protobuf.ByteString getAPNBytes() {
      java.lang.Object ref = aPN_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
        aPN_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    
    private void initFields() {
      aPN_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getAPNBytes());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getAPNBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static com.openxc.BinaryMessages.NetworkDataSettings parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.NetworkDataSettings parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.NetworkDataSettings parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.NetworkDataSettings parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.NetworkDataSettings parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.NetworkDataSettings parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.NetworkDataSettings parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.NetworkDataSettings parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.NetworkDataSettings parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.NetworkDataSettings parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.openxc.BinaryMessages.NetworkDataSettings prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.openxc.BinaryMessages.NetworkDataSettingsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.internal_static_openxc_NetworkDataSettings_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.openxc.BinaryMessages.internal_static_openxc_NetworkDataSettings_fieldAccessorTable;
      }
      
      // Construct using com.openxc.BinaryMessages.NetworkDataSettings.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        aPN_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.openxc.BinaryMessages.NetworkDataSettings.getDescriptor();
      }
      
      public com.openxc.BinaryMessages.NetworkDataSettings getDefaultInstanceForType() {
        return com.openxc.BinaryMessages.NetworkDataSettings.getDefaultInstance();
      }
      
      public com.openxc.BinaryMessages.NetworkDataSettings build() {
        com.openxc.BinaryMessages.NetworkDataSettings result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private com.openxc.BinaryMessages.NetworkDataSettings buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        com.openxc.BinaryMessages.NetworkDataSettings result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public com.openxc.BinaryMessages.NetworkDataSettings buildPartial() {
        com.openxc.BinaryMessages.NetworkDataSettings result = new com.openxc.BinaryMessages.NetworkDataSettings(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.aPN_ = aPN_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.openxc.BinaryMessages.NetworkDataSettings) {
          return mergeFrom((com.openxc.BinaryMessages.NetworkDataSettings)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(com.openxc.BinaryMessages.NetworkDataSettings other) {
        if (other == com.openxc.BinaryMessages.NetworkDataSettings.getDefaultInstance()) return this;
        if (other.hasAPN()) {
          setAPN(other.getAPN());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              aPN_ = input.readBytes();
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // optional string APN = 1;
      private java.lang.Object aPN_ = "";
      public boolean hasAPN() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public String getAPN() {
        java.lang.Object ref = aPN_;
        if (!(ref instanceof String)) {
          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
          aPN_ = s;
          return s;
        } else {
          return (String) ref;
        }
      }
      public Builder setAPN(String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        aPN_ = value;
        onChanged();
        return this;
      }
      public Builder clearAPN() {
        bitField0_ = (bitField0_ & ~0x00000001);
        aPN_ = getDefaultInstance().getAPN();
        onChanged();
        return this;
      }
      void setAPN(com.google.protobuf.ByteString value) {
        bitField0_ |= 0x00000001;
        aPN_ = value;
        onChanged();
      }
      
      // @@protoc_insertion_point(builder_scope:openxc.NetworkDataSettings)
    }
    
    static {
      defaultInstance = new NetworkDataSettings(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:openxc.NetworkDataSettings)
  }
  
  public interface ServerConnectSettingsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // optional string host = 1;
    boolean hasHost();
    String getHost();
    
    // optional uint32 port = 2;
    boolean hasPort();
    int getPort();
  }
  public static final class ServerConnectSettings extends
      com.google.protobuf.GeneratedMessage
      implements ServerConnectSettingsOrBuilder {
    // Use ServerConnectSettings.newBuilder() to construct.
    private ServerConnectSettings(Builder builder) {
      super(builder);
    }
    private ServerConnectSettings(boolean noInit) {}
    
    private static final ServerConnectSettings defaultInstance;
    public static ServerConnectSettings getDefaultInstance() {
      return defaultInstance;
    }
    
    public ServerConnectSettings getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.openxc.BinaryMessages.internal_static_openxc_ServerConnectSettings_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.openxc.BinaryMessages.internal_static_openxc_ServerConnectSettings_fieldAccessorTable;
    }
    
    private int bitField0_;
    // optional string host = 1;
    public static final int HOST_FIELD_NUMBER = 1;
    private java.lang.Object host_;
    public boolean hasHost() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public String getHost() {
      java.lang.Object ref = host_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
          host_ = s;
        }
        return s;
      }
    }
    private com.google.protobuf.ByteString getHostBytes() {
      java.lang.Object ref = host_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
        host_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    
    // optional uint32 port = 2;
    public static final int PORT_FIELD_NUMBER = 2;
    private int port_;
    public boolean hasPort() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public int getPort() {
      return port_;
    }
    
    private void initFields() {
      host_ = "";
      port_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getHostBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt32(2, port_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getHostBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, port_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static com.openxc.BinaryMessages.ServerConnectSettings parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.ServerConnectSettings parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.ServerConnectSettings parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.ServerConnectSettings parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.ServerConnectSettings parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.ServerConnectSettings parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.ServerConnectSettings parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.ServerConnectSettings parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.ServerConnectSettings parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.ServerConnectSettings parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.openxc.BinaryMessages.ServerConnectSettings prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.openxc.BinaryMessages.ServerConnectSettingsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.internal_static_openxc_ServerConnectSettings_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.openxc.BinaryMessages.internal_static_openxc_ServerConnectSettings_fieldAccessorTable;
      }
      
      // Construct using com.openxc.BinaryMessages.ServerConnectSettings.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        host_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        port_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.openxc.BinaryMessages.ServerConnectSettings.getDescriptor();
      }
      
      public com.openxc.BinaryMessages.ServerConnectSettings getDefaultInstanceForType() {
        return com.openxc.BinaryMessages.ServerConnectSettings.getDefaultInstance();
      }
      
      public com.openxc.BinaryMessages.ServerConnectSettings build() {
        com.openxc.BinaryMessages.ServerConnectSettings result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private com.openxc.BinaryMessages.ServerConnectSettings buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        com.openxc.BinaryMessages.ServerConnectSettings result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public com.openxc.BinaryMessages.ServerConnectSettings buildPartial() {
        com.openxc.BinaryMessages.ServerConnectSettings result = new com.openxc.BinaryMessages.ServerConnectSettings(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.host_ = host_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.port_ = port_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.openxc.BinaryMessages.ServerConnectSettings) {
          return mergeFrom((com.openxc.BinaryMessages.ServerConnectSettings)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(com.openxc.BinaryMessages.ServerConnectSettings other) {
        if (other == com.openxc.BinaryMessages.ServerConnectSettings.getDefaultInstance()) return this;
        if (other.hasHost()) {
          setHost(other.getHost());
        }
        if (other.hasPort()) {
          setPort(other.getPort());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              host_ = input.readBytes();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              port_ = input.readUInt32();
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // optional string host = 1;
      private java.lang.Object host_ = "";
      public boolean hasHost() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public String getHost() {
        java.lang.Object ref = host_;
        if (!(ref instanceof String)) {
          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
          host_ = s;
          return s;
        } else {
          return (String) ref;
        }
      }
      public Builder setHost(String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        host_ = value;
        onChanged();
        return this;
      }
      public Builder clearHost() {
        bitField0_ = (bitField0_ & ~0x00000001);
        host_ = getDefaultInstance().getHost();
        onChanged();
        return this;
      }
      void setHost(com.google.protobuf.ByteString value) {
        bitField0_ |= 0x00000001;
        host_ = value;
        onChanged();
      }
      
      // optional uint32 port = 2;
      private int port_ ;
      public boolean hasPort() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public int getPort() {
        return port_;
      }
      public Builder setPort(int value) {
        bitField0_ |= 0x00000002;
        port_ = value;
        onChanged();
        return this;
      }
      public Builder clearPort() {
        bitField0_ = (bitField0_ & ~0x00000002);
        port_ = 0;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:openxc.ServerConnectSettings)
    }
    
    static {
      defaultInstance = new ServerConnectSettings(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:openxc.ServerConnectSettings)
  }
  
  public interface ModemConfigurationCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // optional .openxc.NetworkOperatorSettings networkOperatorSettings = 1;
    boolean hasNetworkOperatorSettings();
    com.openxc.BinaryMessages.NetworkOperatorSettings getNetworkOperatorSettings();
    com.openxc.BinaryMessages.NetworkOperatorSettingsOrBuilder getNetworkOperatorSettingsOrBuilder();
    
    // optional .openxc.NetworkDataSettings networkDataSettings = 2;
    boolean hasNetworkDataSettings();
    com.openxc.BinaryMessages.NetworkDataSettings getNetworkDataSettings();
    com.openxc.BinaryMessages.NetworkDataSettingsOrBuilder getNetworkDataSettingsOrBuilder();
    
    // optional .openxc.ServerConnectSettings serverConnectSettings = 3;
    boolean hasServerConnectSettings();
    com.openxc.BinaryMessages.ServerConnectSettings getServerConnectSettings();
    com.openxc.BinaryMessages.ServerConnectSettingsOrBuilder getServerConnectSettingsOrBuilder();
  }
  public static final class ModemConfigurationCommand extends
      com.google.protobuf.GeneratedMessage
      implements ModemConfigurationCommandOrBuilder {
    // Use ModemConfigurationCommand.newBuilder() to construct.
    private ModemConfigurationCommand(Builder builder) {
      super(builder);
    }
    private ModemConfigurationCommand(boolean noInit) {}
    
    private static final ModemConfigurationCommand defaultInstance;
    public static ModemConfigurationCommand getDefaultInstance() {
      return defaultInstance;
    }
    
    public ModemConfigurationCommand getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.openxc.BinaryMessages.internal_static_openxc_ModemConfigurationCommand_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.openxc.BinaryMessages.internal_static_openxc_ModemConfigurationCommand_fieldAccessorTable;
    }
    
    private int bitField0_;
    // optional .openxc.NetworkOperatorSettings networkOperatorSettings = 1;
    public static final int NETWORKOPERATORSETTINGS_FIELD_NUMBER = 1;
    private com.openxc.BinaryMessages.NetworkOperatorSettings networkOperatorSettings_;
    public boolean hasNetworkOperatorSettings() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public com.openxc.BinaryMessages.NetworkOperatorSettings getNetworkOperatorSettings() {
      return networkOperatorSettings_;
    }
    public com.openxc.BinaryMessages.NetworkOperatorSettingsOrBuilder getNetworkOperatorSettingsOrBuilder() {
      return networkOperatorSettings_;
    }
    
    // optional .openxc.NetworkDataSettings networkDataSettings = 2;
    public static final int NETWORKDATASETTINGS_FIELD_NUMBER = 2;
    private com.openxc.BinaryMessages.NetworkDataSettings networkDataSettings_;
    public boolean hasNetworkDataSettings() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public com.openxc.BinaryMessages.NetworkDataSettings getNetworkDataSettings() {
      return networkDataSettings_;
    }
    public com.openxc.BinaryMessages.NetworkDataSettingsOrBuilder getNetworkDataSettingsOrBuilder() {
      return networkDataSettings_;
    }
    
    // optional .openxc.ServerConnectSettings serverConnectSettings = 3;
    public static final int SERVERCONNECTSETTINGS_FIELD_NUMBER = 3;
    private com.openxc.BinaryMessages.ServerConnectSettings serverConnectSettings_;
    public boolean hasServerConnectSettings() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    public com.openxc.BinaryMessages.ServerConnectSettings getServerConnectSettings() {
      return serverConnectSettings_;
    }
    public com.openxc.BinaryMessages.ServerConnectSettingsOrBuilder getServerConnectSettingsOrBuilder() {
      return serverConnectSettings_;
    }
    
    private void initFields() {
      networkOperatorSettings_ = com.openxc.BinaryMessages.NetworkOperatorSettings.getDefaultInstance();
      networkDataSettings_ = com.openxc.BinaryMessages.NetworkDataSettings.getDefaultInstance();
      serverConnectSettings_ = com.openxc.BinaryMessages.ServerConnectSettings.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, networkOperatorSettings_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, networkDataSettings_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, serverConnectSettings_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, networkOperatorSettings_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, networkDataSettings_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, serverConnectSettings_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static com.openxc.BinaryMessages.ModemConfigurationCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.ModemConfigurationCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.ModemConfigurationCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.ModemConfigurationCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.ModemConfigurationCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.ModemConfigurationCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.ModemConfigurationCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.ModemConfigurationCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.ModemConfigurationCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.ModemConfigurationCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.openxc.BinaryMessages.ModemConfigurationCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.openxc.BinaryMessages.ModemConfigurationCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.internal_static_openxc_ModemConfigurationCommand_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.openxc.BinaryMessages.internal_static_openxc_ModemConfigurationCommand_fieldAccessorTable;
      }
      
      // Construct using com.openxc.BinaryMessages.ModemConfigurationCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getNetworkOperatorSettingsFieldBuilder();
          getNetworkDataSettingsFieldBuilder();
          getServerConnectSettingsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        if (networkOperatorSettingsBuilder_ == null) {
          networkOperatorSettings_ = com.openxc.BinaryMessages.NetworkOperatorSettings.getDefaultInstance();
        } else {
          networkOperatorSettingsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (networkDataSettingsBuilder_ == null) {
          networkDataSettings_ = com.openxc.BinaryMessages.NetworkDataSettings.getDefaultInstance();
        } else {
          networkDataSettingsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (serverConnectSettingsBuilder_ == null) {
          serverConnectSettings_ = com.openxc.BinaryMessages.ServerConnectSettings.getDefaultInstance();
        } else {
          serverConnectSettingsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.openxc.BinaryMessages.ModemConfigurationCommand.getDescriptor();
      }
      
      public com.openxc.BinaryMessages.ModemConfigurationCommand getDefaultInstanceForType() {
        return com.openxc.BinaryMessages.ModemConfigurationCommand.getDefaultInstance();
      }
      
      public com.openxc.BinaryMessages.ModemConfigurationCommand build() {
        com.openxc.BinaryMessages.ModemConfigurationCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private com.openxc.BinaryMessages.ModemConfigurationCommand buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        com.openxc.BinaryMessages.ModemConfigurationCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public com.openxc.BinaryMessages.ModemConfigurationCommand buildPartial() {
        com.openxc.BinaryMessages.ModemConfigurationCommand result = new com.openxc.BinaryMessages.ModemConfigurationCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (networkOperatorSettingsBuilder_ == null) {
          result.networkOperatorSettings_ = networkOperatorSettings_;
        } else {
          result.networkOperatorSettings_ = networkOperatorSettingsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (networkDataSettingsBuilder_ == null) {
          result.networkDataSettings_ = networkDataSettings_;
        } else {
          result.networkDataSettings_ = networkDataSettingsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (serverConnectSettingsBuilder_ == null) {
          result.serverConnectSettings_ = serverConnectSettings_;
        } else {
          result.serverConnectSettings_ = serverConnectSettingsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.openxc.BinaryMessages.ModemConfigurationCommand) {
          return mergeFrom((com.openxc.BinaryMessages.ModemConfigurationCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(com.openxc.BinaryMessages.ModemConfigurationCommand other) {
        if (other == com.openxc.BinaryMessages.ModemConfigurationCommand.getDefaultInstance()) return this;
        if (other.hasNetworkOperatorSettings()) {
          mergeNetworkOperatorSettings(other.getNetworkOperatorSettings());
        }
        if (other.hasNetworkDataSettings()) {
          mergeNetworkDataSettings(other.getNetworkDataSettings());
        }
        if (other.hasServerConnectSettings()) {
          mergeServerConnectSettings(other.getServerConnectSettings());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 10: {
              com.openxc.BinaryMessages.NetworkOperatorSettings.Builder subBuilder = com.openxc.BinaryMessages.NetworkOperatorSettings.newBuilder();
              if (hasNetworkOperatorSettings()) {
                subBuilder.mergeFrom(getNetworkOperatorSettings());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setNetworkOperatorSettings(subBuilder.buildPartial());
              break;
            }
            case 18: {
              com.openxc.BinaryMessages.NetworkDataSettings.Builder subBuilder = com.openxc.BinaryMessages.NetworkDataSettings.newBuilder();
              if (hasNetworkDataSettings()) {
                subBuilder.mergeFrom(getNetworkDataSettings());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setNetworkDataSettings(subBuilder.buildPartial());
              break;
            }
            case 26: {
              com.openxc.BinaryMessages.ServerConnectSettings.Builder subBuilder = com.openxc.BinaryMessages.ServerConnectSettings.newBuilder();
              if (hasServerConnectSettings()) {
                subBuilder.mergeFrom(getServerConnectSettings());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setServerConnectSettings(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // optional .openxc.NetworkOperatorSettings networkOperatorSettings = 1;
      private com.openxc.BinaryMessages.NetworkOperatorSettings networkOperatorSettings_ = com.openxc.BinaryMessages.NetworkOperatorSettings.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.NetworkOperatorSettings, com.openxc.BinaryMessages.NetworkOperatorSettings.Builder, com.openxc.BinaryMessages.NetworkOperatorSettingsOrBuilder> networkOperatorSettingsBuilder_;
      public boolean hasNetworkOperatorSettings() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public com.openxc.BinaryMessages.NetworkOperatorSettings getNetworkOperatorSettings() {
        if (networkOperatorSettingsBuilder_ == null) {
          return networkOperatorSettings_;
        } else {
          return networkOperatorSettingsBuilder_.getMessage();
        }
      }
      public Builder setNetworkOperatorSettings(com.openxc.BinaryMessages.NetworkOperatorSettings value) {
        if (networkOperatorSettingsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          networkOperatorSettings_ = value;
          onChanged();
        } else {
          networkOperatorSettingsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      public Builder setNetworkOperatorSettings(
          com.openxc.BinaryMessages.NetworkOperatorSettings.Builder builderForValue) {
        if (networkOperatorSettingsBuilder_ == null) {
          networkOperatorSettings_ = builderForValue.build();
          onChanged();
        } else {
          networkOperatorSettingsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      public Builder mergeNetworkOperatorSettings(com.openxc.BinaryMessages.NetworkOperatorSettings value) {
        if (networkOperatorSettingsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              networkOperatorSettings_ != com.openxc.BinaryMessages.NetworkOperatorSettings.getDefaultInstance()) {
            networkOperatorSettings_ =
              com.openxc.BinaryMessages.NetworkOperatorSettings.newBuilder(networkOperatorSettings_).mergeFrom(value).buildPartial();
          } else {
            networkOperatorSettings_ = value;
          }
          onChanged();
        } else {
          networkOperatorSettingsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      public Builder clearNetworkOperatorSettings() {
        if (networkOperatorSettingsBuilder_ == null) {
          networkOperatorSettings_ = com.openxc.BinaryMessages.NetworkOperatorSettings.getDefaultInstance();
          onChanged();
        } else {
          networkOperatorSettingsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      public com.openxc.BinaryMessages.NetworkOperatorSettings.Builder getNetworkOperatorSettingsBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getNetworkOperatorSettingsFieldBuilder().getBuilder();
      }
      public com.openxc.BinaryMessages.NetworkOperatorSettingsOrBuilder getNetworkOperatorSettingsOrBuilder() {
        if (networkOperatorSettingsBuilder_ != null) {
          return networkOperatorSettingsBuilder_.getMessageOrBuilder();
        } else {
          return networkOperatorSettings_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.NetworkOperatorSettings, com.openxc.BinaryMessages.NetworkOperatorSettings.Builder, com.openxc.BinaryMessages.NetworkOperatorSettingsOrBuilder> 
          getNetworkOperatorSettingsFieldBuilder() {
        if (networkOperatorSettingsBuilder_ == null) {
          networkOperatorSettingsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.openxc.BinaryMessages.NetworkOperatorSettings, com.openxc.BinaryMessages.NetworkOperatorSettings.Builder, com.openxc.BinaryMessages.NetworkOperatorSettingsOrBuilder>(
                  networkOperatorSettings_,
                  getParentForChildren(),
                  isClean());
          networkOperatorSettings_ = null;
        }
        return networkOperatorSettingsBuilder_;
      }
      
      // optional .openxc.NetworkDataSettings networkDataSettings = 2;
      private com.openxc.BinaryMessages.NetworkDataSettings networkDataSettings_ = com.openxc.BinaryMessages.NetworkDataSettings.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.NetworkDataSettings, com.openxc.BinaryMessages.NetworkDataSettings.Builder, com.openxc.BinaryMessages.NetworkDataSettingsOrBuilder> networkDataSettingsBuilder_;
      public boolean hasNetworkDataSettings() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public com.openxc.BinaryMessages.NetworkDataSettings getNetworkDataSettings() {
        if (networkDataSettingsBuilder_ == null) {
          return networkDataSettings_;
        } else {
          return networkDataSettingsBuilder_.getMessage();
        }
      }
      public Builder setNetworkDataSettings(com.openxc.BinaryMessages.NetworkDataSettings value) {
        if (networkDataSettingsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          networkDataSettings_ = value;
          onChanged();
        } else {
          networkDataSettingsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      public Builder setNetworkDataSettings(
          com.openxc.BinaryMessages.NetworkDataSettings.Builder builderForValue) {
        if (networkDataSettingsBuilder_ == null) {
          networkDataSettings_ = builderForValue.build();
          onChanged();
        } else {
          networkDataSettingsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      public Builder mergeNetworkDataSettings(com.openxc.BinaryMessages.NetworkDataSettings value) {
        if (networkDataSettingsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              networkDataSettings_ != com.openxc.BinaryMessages.NetworkDataSettings.getDefaultInstance()) {
            networkDataSettings_ =
              com.openxc.BinaryMessages.NetworkDataSettings.newBuilder(networkDataSettings_).mergeFrom(value).buildPartial();
          } else {
            networkDataSettings_ = value;
          }
          onChanged();
        } else {
          networkDataSettingsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      public Builder clearNetworkDataSettings() {
        if (networkDataSettingsBuilder_ == null) {
          networkDataSettings_ = com.openxc.BinaryMessages.NetworkDataSettings.getDefaultInstance();
          onChanged();
        } else {
          networkDataSettingsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      public com.openxc.BinaryMessages.NetworkDataSettings.Builder getNetworkDataSettingsBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getNetworkDataSettingsFieldBuilder().getBuilder();
      }
      public com.openxc.BinaryMessages.NetworkDataSettingsOrBuilder getNetworkDataSettingsOrBuilder() {
        if (networkDataSettingsBuilder_ != null) {
          return networkDataSettingsBuilder_.getMessageOrBuilder();
        } else {
          return networkDataSettings_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.NetworkDataSettings, com.openxc.BinaryMessages.NetworkDataSettings.Builder, com.openxc.BinaryMessages.NetworkDataSettingsOrBuilder> 
          getNetworkDataSettingsFieldBuilder() {
        if (networkDataSettingsBuilder_ == null) {
          networkDataSettingsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.openxc.BinaryMessages.NetworkDataSettings, com.openxc.BinaryMessages.NetworkDataSettings.Builder, com.openxc.BinaryMessages.NetworkDataSettingsOrBuilder>(
                  networkDataSettings_,
                  getParentForChildren(),
                  isClean());
          networkDataSettings_ = null;
        }
        return networkDataSettingsBuilder_;
      }
      
      // optional .openxc.ServerConnectSettings serverConnectSettings = 3;
      private com.openxc.BinaryMessages.ServerConnectSettings serverConnectSettings_ = com.openxc.BinaryMessages.ServerConnectSettings.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.ServerConnectSettings, com.openxc.BinaryMessages.ServerConnectSettings.Builder, com.openxc.BinaryMessages.ServerConnectSettingsOrBuilder> serverConnectSettingsBuilder_;
      public boolean hasServerConnectSettings() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public com.openxc.BinaryMessages.ServerConnectSettings getServerConnectSettings() {
        if (serverConnectSettingsBuilder_ == null) {
          return serverConnectSettings_;
        } else {
          return serverConnectSettingsBuilder_.getMessage();
        }
      }
      public Builder setServerConnectSettings(com.openxc.BinaryMessages.ServerConnectSettings value) {
        if (serverConnectSettingsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          serverConnectSettings_ = value;
          onChanged();
        } else {
          serverConnectSettingsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      public Builder setServerConnectSettings(
          com.openxc.BinaryMessages.ServerConnectSettings.Builder builderForValue) {
        if (serverConnectSettingsBuilder_ == null) {
          serverConnectSettings_ = builderForValue.build();
          onChanged();
        } else {
          serverConnectSettingsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      public Builder mergeServerConnectSettings(com.openxc.BinaryMessages.ServerConnectSettings value) {
        if (serverConnectSettingsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              serverConnectSettings_ != com.openxc.BinaryMessages.ServerConnectSettings.getDefaultInstance()) {
            serverConnectSettings_ =
              com.openxc.BinaryMessages.ServerConnectSettings.newBuilder(serverConnectSettings_).mergeFrom(value).buildPartial();
          } else {
            serverConnectSettings_ = value;
          }
          onChanged();
        } else {
          serverConnectSettingsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      public Builder clearServerConnectSettings() {
        if (serverConnectSettingsBuilder_ == null) {
          serverConnectSettings_ = com.openxc.BinaryMessages.ServerConnectSettings.getDefaultInstance();
          onChanged();
        } else {
          serverConnectSettingsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      public com.openxc.BinaryMessages.ServerConnectSettings.Builder getServerConnectSettingsBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getServerConnectSettingsFieldBuilder().getBuilder();
      }
      public com.openxc.BinaryMessages.ServerConnectSettingsOrBuilder getServerConnectSettingsOrBuilder() {
        if (serverConnectSettingsBuilder_ != null) {
          return serverConnectSettingsBuilder_.getMessageOrBuilder();
        } else {
          return serverConnectSettings_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.ServerConnectSettings, com.openxc.BinaryMessages.ServerConnectSettings.Builder, com.openxc.BinaryMessages.ServerConnectSettingsOrBuilder> 
          getServerConnectSettingsFieldBuilder() {
        if (serverConnectSettingsBuilder_ == null) {
          serverConnectSettingsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.openxc.BinaryMessages.ServerConnectSettings, com.openxc.BinaryMessages.ServerConnectSettings.Builder, com.openxc.BinaryMessages.ServerConnectSettingsOrBuilder>(
                  serverConnectSettings_,
                  getParentForChildren(),
                  isClean());
          serverConnectSettings_ = null;
        }
        return serverConnectSettingsBuilder_;
      }
      
      // @@protoc_insertion_point(builder_scope:openxc.ModemConfigurationCommand)
    }
    
    static {
      defaultInstance = new ModemConfigurationCommand(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:openxc.ModemConfigurationCommand)
  }
  
  public interface RTCConfigurationCommandOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // optional uint32 unix_time = 1;
    boolean hasUnixTime();
    int getUnixTime();
  }
  public static final class RTCConfigurationCommand extends
      com.google.protobuf.GeneratedMessage
      implements RTCConfigurationCommandOrBuilder {
    // Use RTCConfigurationCommand.newBuilder() to construct.
    private RTCConfigurationCommand(Builder builder) {
      super(builder);
    }
    private RTCConfigurationCommand(boolean noInit) {}
    
    private static final RTCConfigurationCommand defaultInstance;
    public static RTCConfigurationCommand getDefaultInstance() {
      return defaultInstance;
    }
    
    public RTCConfigurationCommand getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.openxc.BinaryMessages.internal_static_openxc_RTCConfigurationCommand_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.openxc.BinaryMessages.internal_static_openxc_RTCConfigurationCommand_fieldAccessorTable;
    }
    
    private int bitField0_;
    // optional uint32 unix_time = 1;
    public static final int UNIX_TIME_FIELD_NUMBER = 1;
    private int unixTime_;
    public boolean hasUnixTime() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public int getUnixTime() {
      return unixTime_;
    }
    
    private void initFields() {
      unixTime_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeUInt32(1, unixTime_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, unixTime_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.RTCConfigurationCommand parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.openxc.BinaryMessages.RTCConfigurationCommand prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.openxc.BinaryMessages.RTCConfigurationCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.internal_static_openxc_RTCConfigurationCommand_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.openxc.BinaryMessages.internal_static_openxc_RTCConfigurationCommand_fieldAccessorTable;
      }
      
      // Construct using com.openxc.BinaryMessages.RTCConfigurationCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        unixTime_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.openxc.BinaryMessages.RTCConfigurationCommand.getDescriptor();
      }
      
      public com.openxc.BinaryMessages.RTCConfigurationCommand getDefaultInstanceForType() {
        return com.openxc.BinaryMessages.RTCConfigurationCommand.getDefaultInstance();
      }
      
      public com.openxc.BinaryMessages.RTCConfigurationCommand build() {
        com.openxc.BinaryMessages.RTCConfigurationCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private com.openxc.BinaryMessages.RTCConfigurationCommand buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        com.openxc.BinaryMessages.RTCConfigurationCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public com.openxc.BinaryMessages.RTCConfigurationCommand buildPartial() {
        com.openxc.BinaryMessages.RTCConfigurationCommand result = new com.openxc.BinaryMessages.RTCConfigurationCommand(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.unixTime_ = unixTime_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.openxc.BinaryMessages.RTCConfigurationCommand) {
          return mergeFrom((com.openxc.BinaryMessages.RTCConfigurationCommand)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(com.openxc.BinaryMessages.RTCConfigurationCommand other) {
        if (other == com.openxc.BinaryMessages.RTCConfigurationCommand.getDefaultInstance()) return this;
        if (other.hasUnixTime()) {
          setUnixTime(other.getUnixTime());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              unixTime_ = input.readUInt32();
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // optional uint32 unix_time = 1;
      private int unixTime_ ;
      public boolean hasUnixTime() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public int getUnixTime() {
        return unixTime_;
      }
      public Builder setUnixTime(int value) {
        bitField0_ |= 0x00000001;
        unixTime_ = value;
        onChanged();
        return this;
      }
      public Builder clearUnixTime() {
        bitField0_ = (bitField0_ & ~0x00000001);
        unixTime_ = 0;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:openxc.RTCConfigurationCommand)
    }
    
    static {
      defaultInstance = new RTCConfigurationCommand(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:openxc.RTCConfigurationCommand)
  }
  
  public interface CommandResponseOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // optional .openxc.ControlCommand.Type type = 1;
    boolean hasType();
    com.openxc.BinaryMessages.ControlCommand.Type getType();
    
    // optional string message = 2;
    boolean hasMessage();
    String getMessage();
    
    // optional bool status = 3;
    boolean hasStatus();
    boolean getStatus();
  }
  public static final class CommandResponse extends
      com.google.protobuf.GeneratedMessage
      implements CommandResponseOrBuilder {
    // Use CommandResponse.newBuilder() to construct.
    private CommandResponse(Builder builder) {
      super(builder);
    }
    private CommandResponse(boolean noInit) {}
    
    private static final CommandResponse defaultInstance;
    public static CommandResponse getDefaultInstance() {
      return defaultInstance;
    }
    
    public CommandResponse getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.openxc.BinaryMessages.internal_static_openxc_CommandResponse_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.openxc.BinaryMessages.internal_static_openxc_CommandResponse_fieldAccessorTable;
    }
    
    private int bitField0_;
    // optional .openxc.ControlCommand.Type type = 1;
    public static final int TYPE_FIELD_NUMBER = 1;
    private com.openxc.BinaryMessages.ControlCommand.Type type_;
    public boolean hasType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public com.openxc.BinaryMessages.ControlCommand.Type getType() {
      return type_;
    }
    
    // optional string message = 2;
    public static final int MESSAGE_FIELD_NUMBER = 2;
    private java.lang.Object message_;
    public boolean hasMessage() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public String getMessage() {
      java.lang.Object ref = message_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
          message_ = s;
        }
        return s;
      }
    }
    private com.google.protobuf.ByteString getMessageBytes() {
      java.lang.Object ref = message_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
        message_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    
    // optional bool status = 3;
    public static final int STATUS_FIELD_NUMBER = 3;
    private boolean status_;
    public boolean hasStatus() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    public boolean getStatus() {
      return status_;
    }
    
    private void initFields() {
      type_ = com.openxc.BinaryMessages.ControlCommand.Type.VERSION;
      message_ = "";
      status_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, type_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getMessageBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(3, status_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, type_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getMessageBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, status_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static com.openxc.BinaryMessages.CommandResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.CommandResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.CommandResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.CommandResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.CommandResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.CommandResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.CommandResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.CommandResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.CommandResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.CommandResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.openxc.BinaryMessages.CommandResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.openxc.BinaryMessages.CommandResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.internal_static_openxc_CommandResponse_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.openxc.BinaryMessages.internal_static_openxc_CommandResponse_fieldAccessorTable;
      }
      
      // Construct using com.openxc.BinaryMessages.CommandResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        type_ = com.openxc.BinaryMessages.ControlCommand.Type.VERSION;
        bitField0_ = (bitField0_ & ~0x00000001);
        message_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        status_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.openxc.BinaryMessages.CommandResponse.getDescriptor();
      }
      
      public com.openxc.BinaryMessages.CommandResponse getDefaultInstanceForType() {
        return com.openxc.BinaryMessages.CommandResponse.getDefaultInstance();
      }
      
      public com.openxc.BinaryMessages.CommandResponse build() {
        com.openxc.BinaryMessages.CommandResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private com.openxc.BinaryMessages.CommandResponse buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        com.openxc.BinaryMessages.CommandResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public com.openxc.BinaryMessages.CommandResponse buildPartial() {
        com.openxc.BinaryMessages.CommandResponse result = new com.openxc.BinaryMessages.CommandResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.message_ = message_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.status_ = status_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.openxc.BinaryMessages.CommandResponse) {
          return mergeFrom((com.openxc.BinaryMessages.CommandResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(com.openxc.BinaryMessages.CommandResponse other) {
        if (other == com.openxc.BinaryMessages.CommandResponse.getDefaultInstance()) return this;
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasMessage()) {
          setMessage(other.getMessage());
        }
        if (other.hasStatus()) {
          setStatus(other.getStatus());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.openxc.BinaryMessages.ControlCommand.Type value = com.openxc.BinaryMessages.ControlCommand.Type.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                type_ = value;
              }
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              message_ = input.readBytes();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              status_ = input.readBool();
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // optional .openxc.ControlCommand.Type type = 1;
      private com.openxc.BinaryMessages.ControlCommand.Type type_ = com.openxc.BinaryMessages.ControlCommand.Type.VERSION;
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public com.openxc.BinaryMessages.ControlCommand.Type getType() {
        return type_;
      }
      public Builder setType(com.openxc.BinaryMessages.ControlCommand.Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        type_ = value;
        onChanged();
        return this;
      }
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = com.openxc.BinaryMessages.ControlCommand.Type.VERSION;
        onChanged();
        return this;
      }
      
      // optional string message = 2;
      private java.lang.Object message_ = "";
      public boolean hasMessage() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public String getMessage() {
        java.lang.Object ref = message_;
        if (!(ref instanceof String)) {
          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
          message_ = s;
          return s;
        } else {
          return (String) ref;
        }
      }
      public Builder setMessage(String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        message_ = value;
        onChanged();
        return this;
      }
      public Builder clearMessage() {
        bitField0_ = (bitField0_ & ~0x00000002);
        message_ = getDefaultInstance().getMessage();
        onChanged();
        return this;
      }
      void setMessage(com.google.protobuf.ByteString value) {
        bitField0_ |= 0x00000002;
        message_ = value;
        onChanged();
      }
      
      // optional bool status = 3;
      private boolean status_ ;
      public boolean hasStatus() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public boolean getStatus() {
        return status_;
      }
      public Builder setStatus(boolean value) {
        bitField0_ |= 0x00000004;
        status_ = value;
        onChanged();
        return this;
      }
      public Builder clearStatus() {
        bitField0_ = (bitField0_ & ~0x00000004);
        status_ = false;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:openxc.CommandResponse)
    }
    
    static {
      defaultInstance = new CommandResponse(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:openxc.CommandResponse)
  }
  
  public interface DiagnosticRequestOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // optional int32 bus = 1;
    boolean hasBus();
    int getBus();
    
    // optional uint32 message_id = 2;
    boolean hasMessageId();
    int getMessageId();
    
    // optional uint32 mode = 3;
    boolean hasMode();
    int getMode();
    
    // optional uint32 pid = 4;
    boolean hasPid();
    int getPid();
    
    // optional bytes payload = 5;
    boolean hasPayload();
    com.google.protobuf.ByteString getPayload();
    
    // optional bool multiple_responses = 6;
    boolean hasMultipleResponses();
    boolean getMultipleResponses();
    
    // optional double frequency = 7;
    boolean hasFrequency();
    double getFrequency();
    
    // optional string name = 8;
    boolean hasName();
    String getName();
    
    // optional .openxc.DiagnosticRequest.DecodedType decoded_type = 9;
    boolean hasDecodedType();
    com.openxc.BinaryMessages.DiagnosticRequest.DecodedType getDecodedType();
  }
  public static final class DiagnosticRequest extends
      com.google.protobuf.GeneratedMessage
      implements DiagnosticRequestOrBuilder {
    // Use DiagnosticRequest.newBuilder() to construct.
    private DiagnosticRequest(Builder builder) {
      super(builder);
    }
    private DiagnosticRequest(boolean noInit) {}
    
    private static final DiagnosticRequest defaultInstance;
    public static DiagnosticRequest getDefaultInstance() {
      return defaultInstance;
    }
    
    public DiagnosticRequest getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticRequest_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticRequest_fieldAccessorTable;
    }
    
    public enum DecodedType
        implements com.google.protobuf.ProtocolMessageEnum {
      NONE(0, 1),
      OBD2(1, 2),
      ;
      
      public static final int NONE_VALUE = 1;
      public static final int OBD2_VALUE = 2;
      
      
      public final int getNumber() { return value; }
      
      public static DecodedType valueOf(int value) {
        switch (value) {
          case 1: return NONE;
          case 2: return OBD2;
          default: return null;
        }
      }
      
      public static com.google.protobuf.Internal.EnumLiteMap<DecodedType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<DecodedType>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<DecodedType>() {
              public DecodedType findValueByNumber(int number) {
                return DecodedType.valueOf(number);
              }
            };
      
      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.DiagnosticRequest.getDescriptor().getEnumTypes().get(0);
      }
      
      private static final DecodedType[] VALUES = {
        NONE, OBD2, 
      };
      
      public static DecodedType valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }
      
      private final int index;
      private final int value;
      
      private DecodedType(int index, int value) {
        this.index = index;
        this.value = value;
      }
      
      // @@protoc_insertion_point(enum_scope:openxc.DiagnosticRequest.DecodedType)
    }
    
    private int bitField0_;
    // optional int32 bus = 1;
    public static final int BUS_FIELD_NUMBER = 1;
    private int bus_;
    public boolean hasBus() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public int getBus() {
      return bus_;
    }
    
    // optional uint32 message_id = 2;
    public static final int MESSAGE_ID_FIELD_NUMBER = 2;
    private int messageId_;
    public boolean hasMessageId() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public int getMessageId() {
      return messageId_;
    }
    
    // optional uint32 mode = 3;
    public static final int MODE_FIELD_NUMBER = 3;
    private int mode_;
    public boolean hasMode() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    public int getMode() {
      return mode_;
    }
    
    // optional uint32 pid = 4;
    public static final int PID_FIELD_NUMBER = 4;
    private int pid_;
    public boolean hasPid() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    public int getPid() {
      return pid_;
    }
    
    // optional bytes payload = 5;
    public static final int PAYLOAD_FIELD_NUMBER = 5;
    private com.google.protobuf.ByteString payload_;
    public boolean hasPayload() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    public com.google.protobuf.ByteString getPayload() {
      return payload_;
    }
    
    // optional bool multiple_responses = 6;
    public static final int MULTIPLE_RESPONSES_FIELD_NUMBER = 6;
    private boolean multipleResponses_;
    public boolean hasMultipleResponses() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    public boolean getMultipleResponses() {
      return multipleResponses_;
    }
    
    // optional double frequency = 7;
    public static final int FREQUENCY_FIELD_NUMBER = 7;
    private double frequency_;
    public boolean hasFrequency() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    public double getFrequency() {
      return frequency_;
    }
    
    // optional string name = 8;
    public static final int NAME_FIELD_NUMBER = 8;
    private java.lang.Object name_;
    public boolean hasName() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    public String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
          name_ = s;
        }
        return s;
      }
    }
    private com.google.protobuf.ByteString getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    
    // optional .openxc.DiagnosticRequest.DecodedType decoded_type = 9;
    public static final int DECODED_TYPE_FIELD_NUMBER = 9;
    private com.openxc.BinaryMessages.DiagnosticRequest.DecodedType decodedType_;
    public boolean hasDecodedType() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    public com.openxc.BinaryMessages.DiagnosticRequest.DecodedType getDecodedType() {
      return decodedType_;
    }
    
    private void initFields() {
      bus_ = 0;
      messageId_ = 0;
      mode_ = 0;
      pid_ = 0;
      payload_ = com.google.protobuf.ByteString.EMPTY;
      multipleResponses_ = false;
      frequency_ = 0D;
      name_ = "";
      decodedType_ = com.openxc.BinaryMessages.DiagnosticRequest.DecodedType.NONE;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, bus_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt32(2, messageId_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeUInt32(3, mode_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt32(4, pid_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, payload_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBool(6, multipleResponses_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeDouble(7, frequency_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeBytes(8, getNameBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeEnum(9, decodedType_.getNumber());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, bus_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, messageId_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, mode_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, pid_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, payload_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, multipleResponses_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(7, frequency_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getNameBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(9, decodedType_.getNumber());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static com.openxc.BinaryMessages.DiagnosticRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticRequest parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.DiagnosticRequest parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.DiagnosticRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.openxc.BinaryMessages.DiagnosticRequest prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.openxc.BinaryMessages.DiagnosticRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticRequest_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticRequest_fieldAccessorTable;
      }
      
      // Construct using com.openxc.BinaryMessages.DiagnosticRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        bus_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        messageId_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        mode_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        pid_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        payload_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000010);
        multipleResponses_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        frequency_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000040);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        decodedType_ = com.openxc.BinaryMessages.DiagnosticRequest.DecodedType.NONE;
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.openxc.BinaryMessages.DiagnosticRequest.getDescriptor();
      }
      
      public com.openxc.BinaryMessages.DiagnosticRequest getDefaultInstanceForType() {
        return com.openxc.BinaryMessages.DiagnosticRequest.getDefaultInstance();
      }
      
      public com.openxc.BinaryMessages.DiagnosticRequest build() {
        com.openxc.BinaryMessages.DiagnosticRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private com.openxc.BinaryMessages.DiagnosticRequest buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        com.openxc.BinaryMessages.DiagnosticRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public com.openxc.BinaryMessages.DiagnosticRequest buildPartial() {
        com.openxc.BinaryMessages.DiagnosticRequest result = new com.openxc.BinaryMessages.DiagnosticRequest(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.bus_ = bus_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.messageId_ = messageId_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.mode_ = mode_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.pid_ = pid_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.payload_ = payload_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.multipleResponses_ = multipleResponses_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.frequency_ = frequency_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        result.decodedType_ = decodedType_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.openxc.BinaryMessages.DiagnosticRequest) {
          return mergeFrom((com.openxc.BinaryMessages.DiagnosticRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(com.openxc.BinaryMessages.DiagnosticRequest other) {
        if (other == com.openxc.BinaryMessages.DiagnosticRequest.getDefaultInstance()) return this;
        if (other.hasBus()) {
          setBus(other.getBus());
        }
        if (other.hasMessageId()) {
          setMessageId(other.getMessageId());
        }
        if (other.hasMode()) {
          setMode(other.getMode());
        }
        if (other.hasPid()) {
          setPid(other.getPid());
        }
        if (other.hasPayload()) {
          setPayload(other.getPayload());
        }
        if (other.hasMultipleResponses()) {
          setMultipleResponses(other.getMultipleResponses());
        }
        if (other.hasFrequency()) {
          setFrequency(other.getFrequency());
        }
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasDecodedType()) {
          setDecodedType(other.getDecodedType());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              bus_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              messageId_ = input.readUInt32();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              mode_ = input.readUInt32();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              pid_ = input.readUInt32();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              payload_ = input.readBytes();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              multipleResponses_ = input.readBool();
              break;
            }
            case 57: {
              bitField0_ |= 0x00000040;
              frequency_ = input.readDouble();
              break;
            }
            case 66: {
              bitField0_ |= 0x00000080;
              name_ = input.readBytes();
              break;
            }
            case 72: {
              int rawValue = input.readEnum();
              com.openxc.BinaryMessages.DiagnosticRequest.DecodedType value = com.openxc.BinaryMessages.DiagnosticRequest.DecodedType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(9, rawValue);
              } else {
                bitField0_ |= 0x00000100;
                decodedType_ = value;
              }
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // optional int32 bus = 1;
      private int bus_ ;
      public boolean hasBus() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public int getBus() {
        return bus_;
      }
      public Builder setBus(int value) {
        bitField0_ |= 0x00000001;
        bus_ = value;
        onChanged();
        return this;
      }
      public Builder clearBus() {
        bitField0_ = (bitField0_ & ~0x00000001);
        bus_ = 0;
        onChanged();
        return this;
      }
      
      // optional uint32 message_id = 2;
      private int messageId_ ;
      public boolean hasMessageId() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public int getMessageId() {
        return messageId_;
      }
      public Builder setMessageId(int value) {
        bitField0_ |= 0x00000002;
        messageId_ = value;
        onChanged();
        return this;
      }
      public Builder clearMessageId() {
        bitField0_ = (bitField0_ & ~0x00000002);
        messageId_ = 0;
        onChanged();
        return this;
      }
      
      // optional uint32 mode = 3;
      private int mode_ ;
      public boolean hasMode() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public int getMode() {
        return mode_;
      }
      public Builder setMode(int value) {
        bitField0_ |= 0x00000004;
        mode_ = value;
        onChanged();
        return this;
      }
      public Builder clearMode() {
        bitField0_ = (bitField0_ & ~0x00000004);
        mode_ = 0;
        onChanged();
        return this;
      }
      
      // optional uint32 pid = 4;
      private int pid_ ;
      public boolean hasPid() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      public int getPid() {
        return pid_;
      }
      public Builder setPid(int value) {
        bitField0_ |= 0x00000008;
        pid_ = value;
        onChanged();
        return this;
      }
      public Builder clearPid() {
        bitField0_ = (bitField0_ & ~0x00000008);
        pid_ = 0;
        onChanged();
        return this;
      }
      
      // optional bytes payload = 5;
      private com.google.protobuf.ByteString payload_ = com.google.protobuf.ByteString.EMPTY;
      public boolean hasPayload() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      public com.google.protobuf.ByteString getPayload() {
        return payload_;
      }
      public Builder setPayload(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        payload_ = value;
        onChanged();
        return this;
      }
      public Builder clearPayload() {
        bitField0_ = (bitField0_ & ~0x00000010);
        payload_ = getDefaultInstance().getPayload();
        onChanged();
        return this;
      }
      
      // optional bool multiple_responses = 6;
      private boolean multipleResponses_ ;
      public boolean hasMultipleResponses() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      public boolean getMultipleResponses() {
        return multipleResponses_;
      }
      public Builder setMultipleResponses(boolean value) {
        bitField0_ |= 0x00000020;
        multipleResponses_ = value;
        onChanged();
        return this;
      }
      public Builder clearMultipleResponses() {
        bitField0_ = (bitField0_ & ~0x00000020);
        multipleResponses_ = false;
        onChanged();
        return this;
      }
      
      // optional double frequency = 7;
      private double frequency_ ;
      public boolean hasFrequency() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      public double getFrequency() {
        return frequency_;
      }
      public Builder setFrequency(double value) {
        bitField0_ |= 0x00000040;
        frequency_ = value;
        onChanged();
        return this;
      }
      public Builder clearFrequency() {
        bitField0_ = (bitField0_ & ~0x00000040);
        frequency_ = 0D;
        onChanged();
        return this;
      }
      
      // optional string name = 8;
      private java.lang.Object name_ = "";
      public boolean hasName() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      public String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof String)) {
          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (String) ref;
        }
      }
      public Builder setName(String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        name_ = value;
        onChanged();
        return this;
      }
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000080);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      void setName(com.google.protobuf.ByteString value) {
        bitField0_ |= 0x00000080;
        name_ = value;
        onChanged();
      }
      
      // optional .openxc.DiagnosticRequest.DecodedType decoded_type = 9;
      private com.openxc.BinaryMessages.DiagnosticRequest.DecodedType decodedType_ = com.openxc.BinaryMessages.DiagnosticRequest.DecodedType.NONE;
      public boolean hasDecodedType() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      public com.openxc.BinaryMessages.DiagnosticRequest.DecodedType getDecodedType() {
        return decodedType_;
      }
      public Builder setDecodedType(com.openxc.BinaryMessages.DiagnosticRequest.DecodedType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000100;
        decodedType_ = value;
        onChanged();
        return this;
      }
      public Builder clearDecodedType() {
        bitField0_ = (bitField0_ & ~0x00000100);
        decodedType_ = com.openxc.BinaryMessages.DiagnosticRequest.DecodedType.NONE;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:openxc.DiagnosticRequest)
    }
    
    static {
      defaultInstance = new DiagnosticRequest(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:openxc.DiagnosticRequest)
  }
  
  public interface DiagnosticResponseOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // optional int32 bus = 1;
    boolean hasBus();
    int getBus();
    
    // optional uint32 message_id = 2;
    boolean hasMessageId();
    int getMessageId();
    
    // optional uint32 mode = 3;
    boolean hasMode();
    int getMode();
    
    // optional uint32 pid = 4;
    boolean hasPid();
    int getPid();
    
    // optional bool success = 5;
    boolean hasSuccess();
    boolean getSuccess();
    
    // optional uint32 negative_response_code = 6;
    boolean hasNegativeResponseCode();
    int getNegativeResponseCode();
    
    // optional bytes payload = 7;
    boolean hasPayload();
    com.google.protobuf.ByteString getPayload();
    
    // optional double value = 8;
    boolean hasValue();
    double getValue();
  }
  public static final class DiagnosticResponse extends
      com.google.protobuf.GeneratedMessage
      implements DiagnosticResponseOrBuilder {
    // Use DiagnosticResponse.newBuilder() to construct.
    private DiagnosticResponse(Builder builder) {
      super(builder);
    }
    private DiagnosticResponse(boolean noInit) {}
    
    private static final DiagnosticResponse defaultInstance;
    public static DiagnosticResponse getDefaultInstance() {
      return defaultInstance;
    }
    
    public DiagnosticResponse getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticResponse_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticResponse_fieldAccessorTable;
    }
    
    private int bitField0_;
    // optional int32 bus = 1;
    public static final int BUS_FIELD_NUMBER = 1;
    private int bus_;
    public boolean hasBus() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public int getBus() {
      return bus_;
    }
    
    // optional uint32 message_id = 2;
    public static final int MESSAGE_ID_FIELD_NUMBER = 2;
    private int messageId_;
    public boolean hasMessageId() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public int getMessageId() {
      return messageId_;
    }
    
    // optional uint32 mode = 3;
    public static final int MODE_FIELD_NUMBER = 3;
    private int mode_;
    public boolean hasMode() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    public int getMode() {
      return mode_;
    }
    
    // optional uint32 pid = 4;
    public static final int PID_FIELD_NUMBER = 4;
    private int pid_;
    public boolean hasPid() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    public int getPid() {
      return pid_;
    }
    
    // optional bool success = 5;
    public static final int SUCCESS_FIELD_NUMBER = 5;
    private boolean success_;
    public boolean hasSuccess() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    public boolean getSuccess() {
      return success_;
    }
    
    // optional uint32 negative_response_code = 6;
    public static final int NEGATIVE_RESPONSE_CODE_FIELD_NUMBER = 6;
    private int negativeResponseCode_;
    public boolean hasNegativeResponseCode() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    public int getNegativeResponseCode() {
      return negativeResponseCode_;
    }
    
    // optional bytes payload = 7;
    public static final int PAYLOAD_FIELD_NUMBER = 7;
    private com.google.protobuf.ByteString payload_;
    public boolean hasPayload() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    public com.google.protobuf.ByteString getPayload() {
      return payload_;
    }
    
    // optional double value = 8;
    public static final int VALUE_FIELD_NUMBER = 8;
    private double value_;
    public boolean hasValue() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    public double getValue() {
      return value_;
    }
    
    private void initFields() {
      bus_ = 0;
      messageId_ = 0;
      mode_ = 0;
      pid_ = 0;
      success_ = false;
      negativeResponseCode_ = 0;
      payload_ = com.google.protobuf.ByteString.EMPTY;
      value_ = 0D;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, bus_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt32(2, messageId_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeUInt32(3, mode_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt32(4, pid_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBool(5, success_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeUInt32(6, negativeResponseCode_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBytes(7, payload_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeDouble(8, value_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, bus_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, messageId_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, mode_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, pid_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, success_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(6, negativeResponseCode_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, payload_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(8, value_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static com.openxc.BinaryMessages.DiagnosticResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.DiagnosticResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.DiagnosticResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.DiagnosticResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.openxc.BinaryMessages.DiagnosticResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.openxc.BinaryMessages.DiagnosticResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticResponse_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.openxc.BinaryMessages.internal_static_openxc_DiagnosticResponse_fieldAccessorTable;
      }
      
      // Construct using com.openxc.BinaryMessages.DiagnosticResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        bus_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        messageId_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        mode_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        pid_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        success_ = false;
        bitField0_ = (bitField0_ & ~0x00000010);
        negativeResponseCode_ = 0;
        bitField0_ = (bitField0_ & ~0x00000020);
        payload_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000040);
        value_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.openxc.BinaryMessages.DiagnosticResponse.getDescriptor();
      }
      
      public com.openxc.BinaryMessages.DiagnosticResponse getDefaultInstanceForType() {
        return com.openxc.BinaryMessages.DiagnosticResponse.getDefaultInstance();
      }
      
      public com.openxc.BinaryMessages.DiagnosticResponse build() {
        com.openxc.BinaryMessages.DiagnosticResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private com.openxc.BinaryMessages.DiagnosticResponse buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        com.openxc.BinaryMessages.DiagnosticResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public com.openxc.BinaryMessages.DiagnosticResponse buildPartial() {
        com.openxc.BinaryMessages.DiagnosticResponse result = new com.openxc.BinaryMessages.DiagnosticResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.bus_ = bus_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.messageId_ = messageId_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.mode_ = mode_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.pid_ = pid_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.success_ = success_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.negativeResponseCode_ = negativeResponseCode_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.payload_ = payload_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.value_ = value_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.openxc.BinaryMessages.DiagnosticResponse) {
          return mergeFrom((com.openxc.BinaryMessages.DiagnosticResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(com.openxc.BinaryMessages.DiagnosticResponse other) {
        if (other == com.openxc.BinaryMessages.DiagnosticResponse.getDefaultInstance()) return this;
        if (other.hasBus()) {
          setBus(other.getBus());
        }
        if (other.hasMessageId()) {
          setMessageId(other.getMessageId());
        }
        if (other.hasMode()) {
          setMode(other.getMode());
        }
        if (other.hasPid()) {
          setPid(other.getPid());
        }
        if (other.hasSuccess()) {
          setSuccess(other.getSuccess());
        }
        if (other.hasNegativeResponseCode()) {
          setNegativeResponseCode(other.getNegativeResponseCode());
        }
        if (other.hasPayload()) {
          setPayload(other.getPayload());
        }
        if (other.hasValue()) {
          setValue(other.getValue());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              bus_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              messageId_ = input.readUInt32();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              mode_ = input.readUInt32();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              pid_ = input.readUInt32();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              success_ = input.readBool();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              negativeResponseCode_ = input.readUInt32();
              break;
            }
            case 58: {
              bitField0_ |= 0x00000040;
              payload_ = input.readBytes();
              break;
            }
            case 65: {
              bitField0_ |= 0x00000080;
              value_ = input.readDouble();
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // optional int32 bus = 1;
      private int bus_ ;
      public boolean hasBus() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public int getBus() {
        return bus_;
      }
      public Builder setBus(int value) {
        bitField0_ |= 0x00000001;
        bus_ = value;
        onChanged();
        return this;
      }
      public Builder clearBus() {
        bitField0_ = (bitField0_ & ~0x00000001);
        bus_ = 0;
        onChanged();
        return this;
      }
      
      // optional uint32 message_id = 2;
      private int messageId_ ;
      public boolean hasMessageId() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public int getMessageId() {
        return messageId_;
      }
      public Builder setMessageId(int value) {
        bitField0_ |= 0x00000002;
        messageId_ = value;
        onChanged();
        return this;
      }
      public Builder clearMessageId() {
        bitField0_ = (bitField0_ & ~0x00000002);
        messageId_ = 0;
        onChanged();
        return this;
      }
      
      // optional uint32 mode = 3;
      private int mode_ ;
      public boolean hasMode() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public int getMode() {
        return mode_;
      }
      public Builder setMode(int value) {
        bitField0_ |= 0x00000004;
        mode_ = value;
        onChanged();
        return this;
      }
      public Builder clearMode() {
        bitField0_ = (bitField0_ & ~0x00000004);
        mode_ = 0;
        onChanged();
        return this;
      }
      
      // optional uint32 pid = 4;
      private int pid_ ;
      public boolean hasPid() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      public int getPid() {
        return pid_;
      }
      public Builder setPid(int value) {
        bitField0_ |= 0x00000008;
        pid_ = value;
        onChanged();
        return this;
      }
      public Builder clearPid() {
        bitField0_ = (bitField0_ & ~0x00000008);
        pid_ = 0;
        onChanged();
        return this;
      }
      
      // optional bool success = 5;
      private boolean success_ ;
      public boolean hasSuccess() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      public boolean getSuccess() {
        return success_;
      }
      public Builder setSuccess(boolean value) {
        bitField0_ |= 0x00000010;
        success_ = value;
        onChanged();
        return this;
      }
      public Builder clearSuccess() {
        bitField0_ = (bitField0_ & ~0x00000010);
        success_ = false;
        onChanged();
        return this;
      }
      
      // optional uint32 negative_response_code = 6;
      private int negativeResponseCode_ ;
      public boolean hasNegativeResponseCode() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      public int getNegativeResponseCode() {
        return negativeResponseCode_;
      }
      public Builder setNegativeResponseCode(int value) {
        bitField0_ |= 0x00000020;
        negativeResponseCode_ = value;
        onChanged();
        return this;
      }
      public Builder clearNegativeResponseCode() {
        bitField0_ = (bitField0_ & ~0x00000020);
        negativeResponseCode_ = 0;
        onChanged();
        return this;
      }
      
      // optional bytes payload = 7;
      private com.google.protobuf.ByteString payload_ = com.google.protobuf.ByteString.EMPTY;
      public boolean hasPayload() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      public com.google.protobuf.ByteString getPayload() {
        return payload_;
      }
      public Builder setPayload(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        payload_ = value;
        onChanged();
        return this;
      }
      public Builder clearPayload() {
        bitField0_ = (bitField0_ & ~0x00000040);
        payload_ = getDefaultInstance().getPayload();
        onChanged();
        return this;
      }
      
      // optional double value = 8;
      private double value_ ;
      public boolean hasValue() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      public double getValue() {
        return value_;
      }
      public Builder setValue(double value) {
        bitField0_ |= 0x00000080;
        value_ = value;
        onChanged();
        return this;
      }
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000080);
        value_ = 0D;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:openxc.DiagnosticResponse)
    }
    
    static {
      defaultInstance = new DiagnosticResponse(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:openxc.DiagnosticResponse)
  }
  
  public interface DynamicFieldOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // optional .openxc.DynamicField.Type type = 1;
    boolean hasType();
    com.openxc.BinaryMessages.DynamicField.Type getType();
    
    // optional string string_value = 2;
    boolean hasStringValue();
    String getStringValue();
    
    // optional double numeric_value = 3;
    boolean hasNumericValue();
    double getNumericValue();
    
    // optional bool boolean_value = 4;
    boolean hasBooleanValue();
    boolean getBooleanValue();
  }
  public static final class DynamicField extends
      com.google.protobuf.GeneratedMessage
      implements DynamicFieldOrBuilder {
    // Use DynamicField.newBuilder() to construct.
    private DynamicField(Builder builder) {
      super(builder);
    }
    private DynamicField(boolean noInit) {}
    
    private static final DynamicField defaultInstance;
    public static DynamicField getDefaultInstance() {
      return defaultInstance;
    }
    
    public DynamicField getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.openxc.BinaryMessages.internal_static_openxc_DynamicField_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.openxc.BinaryMessages.internal_static_openxc_DynamicField_fieldAccessorTable;
    }
    
    public enum Type
        implements com.google.protobuf.ProtocolMessageEnum {
      STRING(0, 1),
      NUM(1, 2),
      BOOL(2, 3),
      ;
      
      public static final int STRING_VALUE = 1;
      public static final int NUM_VALUE = 2;
      public static final int BOOL_VALUE = 3;
      
      
      public final int getNumber() { return value; }
      
      public static Type valueOf(int value) {
        switch (value) {
          case 1: return STRING;
          case 2: return NUM;
          case 3: return BOOL;
          default: return null;
        }
      }
      
      public static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Type>() {
              public Type findValueByNumber(int number) {
                return Type.valueOf(number);
              }
            };
      
      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.DynamicField.getDescriptor().getEnumTypes().get(0);
      }
      
      private static final Type[] VALUES = {
        STRING, NUM, BOOL, 
      };
      
      public static Type valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }
      
      private final int index;
      private final int value;
      
      private Type(int index, int value) {
        this.index = index;
        this.value = value;
      }
      
      // @@protoc_insertion_point(enum_scope:openxc.DynamicField.Type)
    }
    
    private int bitField0_;
    // optional .openxc.DynamicField.Type type = 1;
    public static final int TYPE_FIELD_NUMBER = 1;
    private com.openxc.BinaryMessages.DynamicField.Type type_;
    public boolean hasType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public com.openxc.BinaryMessages.DynamicField.Type getType() {
      return type_;
    }
    
    // optional string string_value = 2;
    public static final int STRING_VALUE_FIELD_NUMBER = 2;
    private java.lang.Object stringValue_;
    public boolean hasStringValue() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public String getStringValue() {
      java.lang.Object ref = stringValue_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
          stringValue_ = s;
        }
        return s;
      }
    }
    private com.google.protobuf.ByteString getStringValueBytes() {
      java.lang.Object ref = stringValue_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
        stringValue_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    
    // optional double numeric_value = 3;
    public static final int NUMERIC_VALUE_FIELD_NUMBER = 3;
    private double numericValue_;
    public boolean hasNumericValue() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    public double getNumericValue() {
      return numericValue_;
    }
    
    // optional bool boolean_value = 4;
    public static final int BOOLEAN_VALUE_FIELD_NUMBER = 4;
    private boolean booleanValue_;
    public boolean hasBooleanValue() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    public boolean getBooleanValue() {
      return booleanValue_;
    }
    
    private void initFields() {
      type_ = com.openxc.BinaryMessages.DynamicField.Type.STRING;
      stringValue_ = "";
      numericValue_ = 0D;
      booleanValue_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, type_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getStringValueBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeDouble(3, numericValue_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(4, booleanValue_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, type_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getStringValueBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, numericValue_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, booleanValue_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static com.openxc.BinaryMessages.DynamicField parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.DynamicField parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.DynamicField parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.DynamicField parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.DynamicField parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.DynamicField parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.DynamicField parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.DynamicField parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.DynamicField parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.DynamicField parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.openxc.BinaryMessages.DynamicField prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.openxc.BinaryMessages.DynamicFieldOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.internal_static_openxc_DynamicField_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.openxc.BinaryMessages.internal_static_openxc_DynamicField_fieldAccessorTable;
      }
      
      // Construct using com.openxc.BinaryMessages.DynamicField.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        type_ = com.openxc.BinaryMessages.DynamicField.Type.STRING;
        bitField0_ = (bitField0_ & ~0x00000001);
        stringValue_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        numericValue_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000004);
        booleanValue_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.openxc.BinaryMessages.DynamicField.getDescriptor();
      }
      
      public com.openxc.BinaryMessages.DynamicField getDefaultInstanceForType() {
        return com.openxc.BinaryMessages.DynamicField.getDefaultInstance();
      }
      
      public com.openxc.BinaryMessages.DynamicField build() {
        com.openxc.BinaryMessages.DynamicField result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private com.openxc.BinaryMessages.DynamicField buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        com.openxc.BinaryMessages.DynamicField result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public com.openxc.BinaryMessages.DynamicField buildPartial() {
        com.openxc.BinaryMessages.DynamicField result = new com.openxc.BinaryMessages.DynamicField(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.stringValue_ = stringValue_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.numericValue_ = numericValue_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.booleanValue_ = booleanValue_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.openxc.BinaryMessages.DynamicField) {
          return mergeFrom((com.openxc.BinaryMessages.DynamicField)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(com.openxc.BinaryMessages.DynamicField other) {
        if (other == com.openxc.BinaryMessages.DynamicField.getDefaultInstance()) return this;
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasStringValue()) {
          setStringValue(other.getStringValue());
        }
        if (other.hasNumericValue()) {
          setNumericValue(other.getNumericValue());
        }
        if (other.hasBooleanValue()) {
          setBooleanValue(other.getBooleanValue());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.openxc.BinaryMessages.DynamicField.Type value = com.openxc.BinaryMessages.DynamicField.Type.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                type_ = value;
              }
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              stringValue_ = input.readBytes();
              break;
            }
            case 25: {
              bitField0_ |= 0x00000004;
              numericValue_ = input.readDouble();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              booleanValue_ = input.readBool();
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // optional .openxc.DynamicField.Type type = 1;
      private com.openxc.BinaryMessages.DynamicField.Type type_ = com.openxc.BinaryMessages.DynamicField.Type.STRING;
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public com.openxc.BinaryMessages.DynamicField.Type getType() {
        return type_;
      }
      public Builder setType(com.openxc.BinaryMessages.DynamicField.Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        type_ = value;
        onChanged();
        return this;
      }
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = com.openxc.BinaryMessages.DynamicField.Type.STRING;
        onChanged();
        return this;
      }
      
      // optional string string_value = 2;
      private java.lang.Object stringValue_ = "";
      public boolean hasStringValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public String getStringValue() {
        java.lang.Object ref = stringValue_;
        if (!(ref instanceof String)) {
          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
          stringValue_ = s;
          return s;
        } else {
          return (String) ref;
        }
      }
      public Builder setStringValue(String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        stringValue_ = value;
        onChanged();
        return this;
      }
      public Builder clearStringValue() {
        bitField0_ = (bitField0_ & ~0x00000002);
        stringValue_ = getDefaultInstance().getStringValue();
        onChanged();
        return this;
      }
      void setStringValue(com.google.protobuf.ByteString value) {
        bitField0_ |= 0x00000002;
        stringValue_ = value;
        onChanged();
      }
      
      // optional double numeric_value = 3;
      private double numericValue_ ;
      public boolean hasNumericValue() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public double getNumericValue() {
        return numericValue_;
      }
      public Builder setNumericValue(double value) {
        bitField0_ |= 0x00000004;
        numericValue_ = value;
        onChanged();
        return this;
      }
      public Builder clearNumericValue() {
        bitField0_ = (bitField0_ & ~0x00000004);
        numericValue_ = 0D;
        onChanged();
        return this;
      }
      
      // optional bool boolean_value = 4;
      private boolean booleanValue_ ;
      public boolean hasBooleanValue() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      public boolean getBooleanValue() {
        return booleanValue_;
      }
      public Builder setBooleanValue(boolean value) {
        bitField0_ |= 0x00000008;
        booleanValue_ = value;
        onChanged();
        return this;
      }
      public Builder clearBooleanValue() {
        bitField0_ = (bitField0_ & ~0x00000008);
        booleanValue_ = false;
        onChanged();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:openxc.DynamicField)
    }
    
    static {
      defaultInstance = new DynamicField(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:openxc.DynamicField)
  }
  
  public interface SimpleMessageOrBuilder
      extends com.google.protobuf.MessageOrBuilder {
    
    // optional string name = 1;
    boolean hasName();
    String getName();
    
    // optional .openxc.DynamicField value = 2;
    boolean hasValue();
    com.openxc.BinaryMessages.DynamicField getValue();
    com.openxc.BinaryMessages.DynamicFieldOrBuilder getValueOrBuilder();
    
    // optional .openxc.DynamicField event = 3;
    boolean hasEvent();
    com.openxc.BinaryMessages.DynamicField getEvent();
    com.openxc.BinaryMessages.DynamicFieldOrBuilder getEventOrBuilder();
  }
  public static final class SimpleMessage extends
      com.google.protobuf.GeneratedMessage
      implements SimpleMessageOrBuilder {
    // Use SimpleMessage.newBuilder() to construct.
    private SimpleMessage(Builder builder) {
      super(builder);
    }
    private SimpleMessage(boolean noInit) {}
    
    private static final SimpleMessage defaultInstance;
    public static SimpleMessage getDefaultInstance() {
      return defaultInstance;
    }
    
    public SimpleMessage getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.openxc.BinaryMessages.internal_static_openxc_SimpleMessage_descriptor;
    }
    
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.openxc.BinaryMessages.internal_static_openxc_SimpleMessage_fieldAccessorTable;
    }
    
    private int bitField0_;
    // optional string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private java.lang.Object name_;
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    public String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
          name_ = s;
        }
        return s;
      }
    }
    private com.google.protobuf.ByteString getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    
    // optional .openxc.DynamicField value = 2;
    public static final int VALUE_FIELD_NUMBER = 2;
    private com.openxc.BinaryMessages.DynamicField value_;
    public boolean hasValue() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    public com.openxc.BinaryMessages.DynamicField getValue() {
      return value_;
    }
    public com.openxc.BinaryMessages.DynamicFieldOrBuilder getValueOrBuilder() {
      return value_;
    }
    
    // optional .openxc.DynamicField event = 3;
    public static final int EVENT_FIELD_NUMBER = 3;
    private com.openxc.BinaryMessages.DynamicField event_;
    public boolean hasEvent() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    public com.openxc.BinaryMessages.DynamicField getEvent() {
      return event_;
    }
    public com.openxc.BinaryMessages.DynamicFieldOrBuilder getEventOrBuilder() {
      return event_;
    }
    
    private void initFields() {
      name_ = "";
      value_ = com.openxc.BinaryMessages.DynamicField.getDefaultInstance();
      event_ = com.openxc.BinaryMessages.DynamicField.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;
      
      memoizedIsInitialized = 1;
      return true;
    }
    
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, value_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, event_);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, value_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, event_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }
    
    public static com.openxc.BinaryMessages.SimpleMessage parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.SimpleMessage parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.SimpleMessage parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static com.openxc.BinaryMessages.SimpleMessage parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.SimpleMessage parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.SimpleMessage parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static com.openxc.BinaryMessages.SimpleMessage parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.SimpleMessage parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static com.openxc.BinaryMessages.SimpleMessage parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static com.openxc.BinaryMessages.SimpleMessage parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.openxc.BinaryMessages.SimpleMessage prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }
    
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.openxc.BinaryMessages.SimpleMessageOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.openxc.BinaryMessages.internal_static_openxc_SimpleMessage_descriptor;
      }
      
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.openxc.BinaryMessages.internal_static_openxc_SimpleMessage_fieldAccessorTable;
      }
      
      // Construct using com.openxc.BinaryMessages.SimpleMessage.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      
      private Builder(BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getValueFieldBuilder();
          getEventFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }
      
      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        if (valueBuilder_ == null) {
          value_ = com.openxc.BinaryMessages.DynamicField.getDefaultInstance();
        } else {
          valueBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (eventBuilder_ == null) {
          event_ = com.openxc.BinaryMessages.DynamicField.getDefaultInstance();
        } else {
          eventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      
      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }
      
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.openxc.BinaryMessages.SimpleMessage.getDescriptor();
      }
      
      public com.openxc.BinaryMessages.SimpleMessage getDefaultInstanceForType() {
        return com.openxc.BinaryMessages.SimpleMessage.getDefaultInstance();
      }
      
      public com.openxc.BinaryMessages.SimpleMessage build() {
        com.openxc.BinaryMessages.SimpleMessage result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      
      private com.openxc.BinaryMessages.SimpleMessage buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        com.openxc.BinaryMessages.SimpleMessage result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return result;
      }
      
      public com.openxc.BinaryMessages.SimpleMessage buildPartial() {
        com.openxc.BinaryMessages.SimpleMessage result = new com.openxc.BinaryMessages.SimpleMessage(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (valueBuilder_ == null) {
          result.value_ = value_;
        } else {
          result.value_ = valueBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (eventBuilder_ == null) {
          result.event_ = event_;
        } else {
          result.event_ = eventBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }
      
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.openxc.BinaryMessages.SimpleMessage) {
          return mergeFrom((com.openxc.BinaryMessages.SimpleMessage)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(com.openxc.BinaryMessages.SimpleMessage other) {
        if (other == com.openxc.BinaryMessages.SimpleMessage.getDefaultInstance()) return this;
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasValue()) {
          mergeValue(other.getValue());
        }
        if (other.hasEvent()) {
          mergeEvent(other.getEvent());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      public final boolean isInitialized() {
        return true;
      }
      
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              onChanged();
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                onChanged();
                return this;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              name_ = input.readBytes();
              break;
            }
            case 18: {
              com.openxc.BinaryMessages.DynamicField.Builder subBuilder = com.openxc.BinaryMessages.DynamicField.newBuilder();
              if (hasValue()) {
                subBuilder.mergeFrom(getValue());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setValue(subBuilder.buildPartial());
              break;
            }
            case 26: {
              com.openxc.BinaryMessages.DynamicField.Builder subBuilder = com.openxc.BinaryMessages.DynamicField.newBuilder();
              if (hasEvent()) {
                subBuilder.mergeFrom(getEvent());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setEvent(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      private int bitField0_;
      
      // optional string name = 1;
      private java.lang.Object name_ = "";
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      public String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof String)) {
          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (String) ref;
        }
      }
      public Builder setName(String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      void setName(com.google.protobuf.ByteString value) {
        bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
      }
      
      // optional .openxc.DynamicField value = 2;
      private com.openxc.BinaryMessages.DynamicField value_ = com.openxc.BinaryMessages.DynamicField.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.DynamicField, com.openxc.BinaryMessages.DynamicField.Builder, com.openxc.BinaryMessages.DynamicFieldOrBuilder> valueBuilder_;
      public boolean hasValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      public com.openxc.BinaryMessages.DynamicField getValue() {
        if (valueBuilder_ == null) {
          return value_;
        } else {
          return valueBuilder_.getMessage();
        }
      }
      public Builder setValue(com.openxc.BinaryMessages.DynamicField value) {
        if (valueBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          value_ = value;
          onChanged();
        } else {
          valueBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      public Builder setValue(
          com.openxc.BinaryMessages.DynamicField.Builder builderForValue) {
        if (valueBuilder_ == null) {
          value_ = builderForValue.build();
          onChanged();
        } else {
          valueBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      public Builder mergeValue(com.openxc.BinaryMessages.DynamicField value) {
        if (valueBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              value_ != com.openxc.BinaryMessages.DynamicField.getDefaultInstance()) {
            value_ =
              com.openxc.BinaryMessages.DynamicField.newBuilder(value_).mergeFrom(value).buildPartial();
          } else {
            value_ = value;
          }
          onChanged();
        } else {
          valueBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      public Builder clearValue() {
        if (valueBuilder_ == null) {
          value_ = com.openxc.BinaryMessages.DynamicField.getDefaultInstance();
          onChanged();
        } else {
          valueBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      public com.openxc.BinaryMessages.DynamicField.Builder getValueBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getValueFieldBuilder().getBuilder();
      }
      public com.openxc.BinaryMessages.DynamicFieldOrBuilder getValueOrBuilder() {
        if (valueBuilder_ != null) {
          return valueBuilder_.getMessageOrBuilder();
        } else {
          return value_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.DynamicField, com.openxc.BinaryMessages.DynamicField.Builder, com.openxc.BinaryMessages.DynamicFieldOrBuilder> 
          getValueFieldBuilder() {
        if (valueBuilder_ == null) {
          valueBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.openxc.BinaryMessages.DynamicField, com.openxc.BinaryMessages.DynamicField.Builder, com.openxc.BinaryMessages.DynamicFieldOrBuilder>(
                  value_,
                  getParentForChildren(),
                  isClean());
          value_ = null;
        }
        return valueBuilder_;
      }
      
      // optional .openxc.DynamicField event = 3;
      private com.openxc.BinaryMessages.DynamicField event_ = com.openxc.BinaryMessages.DynamicField.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.DynamicField, com.openxc.BinaryMessages.DynamicField.Builder, com.openxc.BinaryMessages.DynamicFieldOrBuilder> eventBuilder_;
      public boolean hasEvent() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      public com.openxc.BinaryMessages.DynamicField getEvent() {
        if (eventBuilder_ == null) {
          return event_;
        } else {
          return eventBuilder_.getMessage();
        }
      }
      public Builder setEvent(com.openxc.BinaryMessages.DynamicField value) {
        if (eventBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          event_ = value;
          onChanged();
        } else {
          eventBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      public Builder setEvent(
          com.openxc.BinaryMessages.DynamicField.Builder builderForValue) {
        if (eventBuilder_ == null) {
          event_ = builderForValue.build();
          onChanged();
        } else {
          eventBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      public Builder mergeEvent(com.openxc.BinaryMessages.DynamicField value) {
        if (eventBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              event_ != com.openxc.BinaryMessages.DynamicField.getDefaultInstance()) {
            event_ =
              com.openxc.BinaryMessages.DynamicField.newBuilder(event_).mergeFrom(value).buildPartial();
          } else {
            event_ = value;
          }
          onChanged();
        } else {
          eventBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      public Builder clearEvent() {
        if (eventBuilder_ == null) {
          event_ = com.openxc.BinaryMessages.DynamicField.getDefaultInstance();
          onChanged();
        } else {
          eventBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      public com.openxc.BinaryMessages.DynamicField.Builder getEventBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getEventFieldBuilder().getBuilder();
      }
      public com.openxc.BinaryMessages.DynamicFieldOrBuilder getEventOrBuilder() {
        if (eventBuilder_ != null) {
          return eventBuilder_.getMessageOrBuilder();
        } else {
          return event_;
        }
      }
      private com.google.protobuf.SingleFieldBuilder<
          com.openxc.BinaryMessages.DynamicField, com.openxc.BinaryMessages.DynamicField.Builder, com.openxc.BinaryMessages.DynamicFieldOrBuilder> 
          getEventFieldBuilder() {
        if (eventBuilder_ == null) {
          eventBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.openxc.BinaryMessages.DynamicField, com.openxc.BinaryMessages.DynamicField.Builder, com.openxc.BinaryMessages.DynamicFieldOrBuilder>(
                  event_,
                  getParentForChildren(),
                  isClean());
          event_ = null;
        }
        return eventBuilder_;
      }
      
      // @@protoc_insertion_point(builder_scope:openxc.SimpleMessage)
    }
    
    static {
      defaultInstance = new SimpleMessage(true);
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:openxc.SimpleMessage)
  }
  
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_openxc_VehicleMessage_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_openxc_VehicleMessage_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_openxc_CanMessage_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_openxc_CanMessage_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_openxc_ControlCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_openxc_ControlCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_openxc_DiagnosticControlCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_openxc_DiagnosticControlCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_openxc_PassthroughModeControlCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_openxc_PassthroughModeControlCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_openxc_AcceptanceFilterBypassCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_openxc_AcceptanceFilterBypassCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_openxc_PayloadFormatCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_openxc_PayloadFormatCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_openxc_PredefinedObd2RequestsCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_openxc_PredefinedObd2RequestsCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_openxc_NetworkOperatorSettings_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_openxc_NetworkOperatorSettings_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_openxc_NetworkOperatorSettings_NetworkDescriptor_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_openxc_NetworkOperatorSettings_NetworkDescriptor_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_openxc_NetworkDataSettings_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_openxc_NetworkDataSettings_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_openxc_ServerConnectSettings_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_openxc_ServerConnectSettings_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_openxc_ModemConfigurationCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_openxc_ModemConfigurationCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_openxc_RTCConfigurationCommand_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_openxc_RTCConfigurationCommand_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_openxc_CommandResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_openxc_CommandResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_openxc_DiagnosticRequest_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_openxc_DiagnosticRequest_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_openxc_DiagnosticResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_openxc_DiagnosticResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_openxc_DynamicField_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_openxc_DynamicField_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_openxc_SimpleMessage_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_openxc_SimpleMessage_fieldAccessorTable;
  
  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n\014openxc.proto\022\006openxc\"\233\003\n\016VehicleMessag" +
      "e\022)\n\004type\030\001 \001(\0162\033.openxc.VehicleMessage." +
      "Type\022\'\n\013can_message\030\002 \001(\0132\022.openxc.CanMe" +
      "ssage\022-\n\016simple_message\030\003 \001(\0132\025.openxc.S" +
      "impleMessage\0227\n\023diagnostic_response\030\004 \001(" +
      "\0132\032.openxc.DiagnosticResponse\022/\n\017control" +
      "_command\030\005 \001(\0132\026.openxc.ControlCommand\0221" +
      "\n\020command_response\030\006 \001(\0132\027.openxc.Comman" +
      "dResponse\022\021\n\ttimestamp\030\007 \001(\004\"V\n\004Type\022\007\n\003" +
      "CAN\020\001\022\n\n\006SIMPLE\020\002\022\016\n\nDIAGNOSTIC\020\003\022\023\n\017CON",
      "TROL_COMMAND\020\004\022\024\n\020COMMAND_RESPONSE\020\005\"\224\001\n" +
      "\nCanMessage\022\013\n\003bus\030\001 \001(\005\022\n\n\002id\030\002 \001(\r\022\014\n\004" +
      "data\030\003 \001(\014\0224\n\014frame_format\030\004 \001(\0162\036.openx" +
      "c.CanMessage.FrameFormat\")\n\013FrameFormat\022" +
      "\014\n\010STANDARD\020\001\022\014\n\010EXTENDED\020\002\"\227\006\n\016ControlC" +
      "ommand\022)\n\004type\030\001 \001(\0162\033.openxc.ControlCom" +
      "mand.Type\022<\n\022diagnostic_request\030\002 \001(\0132 ." +
      "openxc.DiagnosticControlCommand\022G\n\030passt" +
      "hrough_mode_request\030\003 \001(\0132%.openxc.Passt" +
      "hroughModeControlCommand\022O\n acceptance_f",
      "ilter_bypass_command\030\004 \001(\0132%.openxc.Acce" +
      "ptanceFilterBypassCommand\022<\n\026payload_for" +
      "mat_command\030\005 \001(\0132\034.openxc.PayloadFormat" +
      "Command\022O\n predefined_obd2_requests_comm" +
      "and\030\006 \001(\0132%.openxc.PredefinedObd2Request" +
      "sCommand\022F\n\033modem_configuration_command\030" +
      "\007 \001(\0132!.openxc.ModemConfigurationCommand" +
      "\022B\n\031rtc_configuration_command\030\010 \001(\0132\037.op" +
      "enxc.RTCConfigurationCommand\"\346\001\n\004Type\022\013\n" +
      "\007VERSION\020\001\022\r\n\tDEVICE_ID\020\002\022\016\n\nDIAGNOSTIC\020",
      "\003\022\017\n\013PASSTHROUGH\020\004\022\034\n\030ACCEPTANCE_FILTER_" +
      "BYPASS\020\005\022\022\n\016PAYLOAD_FORMAT\020\006\022\034\n\030PREDEFIN" +
      "ED_OBD2_REQUESTS\020\007\022\027\n\023MODEM_CONFIGURATIO" +
      "N\020\010\022\025\n\021RTC_CONFIGURATION\020\t\022\023\n\017SD_MOUNT_S" +
      "TATUS\020\n\022\014\n\010PLATFORM\020\013\"\236\001\n\030DiagnosticCont" +
      "rolCommand\022*\n\007request\030\001 \001(\0132\031.openxc.Dia" +
      "gnosticRequest\0227\n\006action\030\002 \001(\0162\'.openxc." +
      "DiagnosticControlCommand.Action\"\035\n\006Actio" +
      "n\022\007\n\003ADD\020\001\022\n\n\006CANCEL\020\002\"=\n\035PassthroughMod" +
      "eControlCommand\022\013\n\003bus\030\001 \001(\005\022\017\n\007enabled\030",
      "\002 \001(\010\"<\n\035AcceptanceFilterBypassCommand\022\013" +
      "\n\003bus\030\001 \001(\005\022\016\n\006bypass\030\002 \001(\010\"\214\001\n\024PayloadF" +
      "ormatCommand\022:\n\006format\030\001 \001(\0162*.openxc.Pa" +
      "yloadFormatCommand.PayloadFormat\"8\n\rPayl" +
      "oadFormat\022\010\n\004JSON\020\001\022\014\n\010PROTOBUF\020\002\022\017\n\013MES" +
      "SAGEPACK\020\003\"0\n\035PredefinedObd2RequestsComm" +
      "and\022\017\n\007enabled\030\001 \001(\010\"\321\003\n\027NetworkOperator" +
      "Settings\022\030\n\020allowDataRoaming\030\001 \001(\010\022N\n\022op" +
      "eratorSelectMode\030\002 \001(\01622.openxc.NetworkO" +
      "peratorSettings.OperatorSelectMode\022L\n\021ne",
      "tworkDescriptor\030\003 \001(\01321.openxc.NetworkOp" +
      "eratorSettings.NetworkDescriptor\032\230\001\n\021Net" +
      "workDescriptor\022\014\n\004PLMN\030\001 \001(\r\022R\n\013networkT" +
      "ype\030\002 \001(\0162=.openxc.NetworkOperatorSettin" +
      "gs.NetworkDescriptor.NetworkType\"!\n\013Netw" +
      "orkType\022\007\n\003GSM\020\000\022\t\n\005UTRAN\020\002\"c\n\022OperatorS" +
      "electMode\022\r\n\tAUTOMATIC\020\000\022\n\n\006MANUAL\020\001\022\016\n\n" +
      "DEREGISTER\020\002\022\014\n\010SET_ONLY\020\003\022\024\n\020MANUAL_AUT" +
      "OMATIC\020\004\"\"\n\023NetworkDataSettings\022\013\n\003APN\030\001" +
      " \001(\t\"3\n\025ServerConnectSettings\022\014\n\004host\030\001 ",
      "\001(\t\022\014\n\004port\030\002 \001(\r\"\325\001\n\031ModemConfiguration" +
      "Command\022@\n\027networkOperatorSettings\030\001 \001(\013" +
      "2\037.openxc.NetworkOperatorSettings\0228\n\023net" +
      "workDataSettings\030\002 \001(\0132\033.openxc.NetworkD" +
      "ataSettings\022<\n\025serverConnectSettings\030\003 \001" +
      "(\0132\035.openxc.ServerConnectSettings\",\n\027RTC" +
      "ConfigurationCommand\022\021\n\tunix_time\030\001 \001(\r\"" +
      "]\n\017CommandResponse\022)\n\004type\030\001 \001(\0162\033.openx" +
      "c.ControlCommand.Type\022\017\n\007message\030\002 \001(\t\022\016" +
      "\n\006status\030\003 \001(\010\"\375\001\n\021DiagnosticRequest\022\013\n\003",
      "bus\030\001 \001(\005\022\022\n\nmessage_id\030\002 \001(\r\022\014\n\004mode\030\003 " +
      "\001(\r\022\013\n\003pid\030\004 \001(\r\022\017\n\007payload\030\005 \001(\014\022\032\n\022mul" +
      "tiple_responses\030\006 \001(\010\022\021\n\tfrequency\030\007 \001(\001" +
      "\022\014\n\004name\030\010 \001(\t\022;\n\014decoded_type\030\t \001(\0162%.o" +
      "penxc.DiagnosticRequest.DecodedType\"!\n\013D" +
      "ecodedType\022\010\n\004NONE\020\001\022\010\n\004OBD2\020\002\"\241\001\n\022Diagn" +
      "osticResponse\022\013\n\003bus\030\001 \001(\005\022\022\n\nmessage_id" +
      "\030\002 \001(\r\022\014\n\004mode\030\003 \001(\r\022\013\n\003pid\030\004 \001(\r\022\017\n\007suc" +
      "cess\030\005 \001(\010\022\036\n\026negative_response_code\030\006 \001" +
      "(\r\022\017\n\007payload\030\007 \001(\014\022\r\n\005value\030\010 \001(\001\"\242\001\n\014D",
      "ynamicField\022\'\n\004type\030\001 \001(\0162\031.openxc.Dynam" +
      "icField.Type\022\024\n\014string_value\030\002 \001(\t\022\025\n\rnu" +
      "meric_value\030\003 \001(\001\022\025\n\rboolean_value\030\004 \001(\010" +
      "\"%\n\004Type\022\n\n\006STRING\020\001\022\007\n\003NUM\020\002\022\010\n\004BOOL\020\003\"" +
      "g\n\rSimpleMessage\022\014\n\004name\030\001 \001(\t\022#\n\005value\030" +
      "\002 \001(\0132\024.openxc.DynamicField\022#\n\005event\030\003 \001" +
      "(\0132\024.openxc.DynamicFieldB\034\n\ncom.openxcB\016" +
      "BinaryMessages"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
      new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
        public com.google.protobuf.ExtensionRegistry assignDescriptors(
            com.google.protobuf.Descriptors.FileDescriptor root) {
          descriptor = root;
          internal_static_openxc_VehicleMessage_descriptor =
            getDescriptor().getMessageTypes().get(0);
          internal_static_openxc_VehicleMessage_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_openxc_VehicleMessage_descriptor,
              new java.lang.String[] { "Type", "CanMessage", "SimpleMessage", "DiagnosticResponse", "ControlCommand", "CommandResponse", "Timestamp", },
              com.openxc.BinaryMessages.VehicleMessage.class,
              com.openxc.BinaryMessages.VehicleMessage.Builder.class);
          internal_static_openxc_CanMessage_descriptor =
            getDescriptor().getMessageTypes().get(1);
          internal_static_openxc_CanMessage_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_openxc_CanMessage_descriptor,
              new java.lang.String[] { "Bus", "Id", "Data", "FrameFormat", },
              com.openxc.BinaryMessages.CanMessage.class,
              com.openxc.BinaryMessages.CanMessage.Builder.class);
          internal_static_openxc_ControlCommand_descriptor =
            getDescriptor().getMessageTypes().get(2);
          internal_static_openxc_ControlCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_openxc_ControlCommand_descriptor,
              new java.lang.String[] { "Type", "DiagnosticRequest", "PassthroughModeRequest", "AcceptanceFilterBypassCommand", "PayloadFormatCommand", "PredefinedObd2RequestsCommand", "ModemConfigurationCommand", "RtcConfigurationCommand", },
              com.openxc.BinaryMessages.ControlCommand.class,
              com.openxc.BinaryMessages.ControlCommand.Builder.class);
          internal_static_openxc_DiagnosticControlCommand_descriptor =
            getDescriptor().getMessageTypes().get(3);
          internal_static_openxc_DiagnosticControlCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_openxc_DiagnosticControlCommand_descriptor,
              new java.lang.String[] { "Request", "Action", },
              com.openxc.BinaryMessages.DiagnosticControlCommand.class,
              com.openxc.BinaryMessages.DiagnosticControlCommand.Builder.class);
          internal_static_openxc_PassthroughModeControlCommand_descriptor =
            getDescriptor().getMessageTypes().get(4);
          internal_static_openxc_PassthroughModeControlCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_openxc_PassthroughModeControlCommand_descriptor,
              new java.lang.String[] { "Bus", "Enabled", },
              com.openxc.BinaryMessages.PassthroughModeControlCommand.class,
              com.openxc.BinaryMessages.PassthroughModeControlCommand.Builder.class);
          internal_static_openxc_AcceptanceFilterBypassCommand_descriptor =
            getDescriptor().getMessageTypes().get(5);
          internal_static_openxc_AcceptanceFilterBypassCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_openxc_AcceptanceFilterBypassCommand_descriptor,
              new java.lang.String[] { "Bus", "Bypass", },
              com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.class,
              com.openxc.BinaryMessages.AcceptanceFilterBypassCommand.Builder.class);
          internal_static_openxc_PayloadFormatCommand_descriptor =
            getDescriptor().getMessageTypes().get(6);
          internal_static_openxc_PayloadFormatCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_openxc_PayloadFormatCommand_descriptor,
              new java.lang.String[] { "Format", },
              com.openxc.BinaryMessages.PayloadFormatCommand.class,
              com.openxc.BinaryMessages.PayloadFormatCommand.Builder.class);
          internal_static_openxc_PredefinedObd2RequestsCommand_descriptor =
            getDescriptor().getMessageTypes().get(7);
          internal_static_openxc_PredefinedObd2RequestsCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_openxc_PredefinedObd2RequestsCommand_descriptor,
              new java.lang.String[] { "Enabled", },
              com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.class,
              com.openxc.BinaryMessages.PredefinedObd2RequestsCommand.Builder.class);
          internal_static_openxc_NetworkOperatorSettings_descriptor =
            getDescriptor().getMessageTypes().get(8);
          internal_static_openxc_NetworkOperatorSettings_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_openxc_NetworkOperatorSettings_descriptor,
              new java.lang.String[] { "AllowDataRoaming", "OperatorSelectMode", "NetworkDescriptor", },
              com.openxc.BinaryMessages.NetworkOperatorSettings.class,
              com.openxc.BinaryMessages.NetworkOperatorSettings.Builder.class);
          internal_static_openxc_NetworkOperatorSettings_NetworkDescriptor_descriptor =
            internal_static_openxc_NetworkOperatorSettings_descriptor.getNestedTypes().get(0);
          internal_static_openxc_NetworkOperatorSettings_NetworkDescriptor_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_openxc_NetworkOperatorSettings_NetworkDescriptor_descriptor,
              new java.lang.String[] { "PLMN", "NetworkType", },
              com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.class,
              com.openxc.BinaryMessages.NetworkOperatorSettings.NetworkDescriptor.Builder.class);
          internal_static_openxc_NetworkDataSettings_descriptor =
            getDescriptor().getMessageTypes().get(9);
          internal_static_openxc_NetworkDataSettings_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_openxc_NetworkDataSettings_descriptor,
              new java.lang.String[] { "APN", },
              com.openxc.BinaryMessages.NetworkDataSettings.class,
              com.openxc.BinaryMessages.NetworkDataSettings.Builder.class);
          internal_static_openxc_ServerConnectSettings_descriptor =
            getDescriptor().getMessageTypes().get(10);
          internal_static_openxc_ServerConnectSettings_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_openxc_ServerConnectSettings_descriptor,
              new java.lang.String[] { "Host", "Port", },
              com.openxc.BinaryMessages.ServerConnectSettings.class,
              com.openxc.BinaryMessages.ServerConnectSettings.Builder.class);
          internal_static_openxc_ModemConfigurationCommand_descriptor =
            getDescriptor().getMessageTypes().get(11);
          internal_static_openxc_ModemConfigurationCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_openxc_ModemConfigurationCommand_descriptor,
              new java.lang.String[] { "NetworkOperatorSettings", "NetworkDataSettings", "ServerConnectSettings", },
              com.openxc.BinaryMessages.ModemConfigurationCommand.class,
              com.openxc.BinaryMessages.ModemConfigurationCommand.Builder.class);
          internal_static_openxc_RTCConfigurationCommand_descriptor =
            getDescriptor().getMessageTypes().get(12);
          internal_static_openxc_RTCConfigurationCommand_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_openxc_RTCConfigurationCommand_descriptor,
              new java.lang.String[] { "UnixTime", },
              com.openxc.BinaryMessages.RTCConfigurationCommand.class,
              com.openxc.BinaryMessages.RTCConfigurationCommand.Builder.class);
          internal_static_openxc_CommandResponse_descriptor =
            getDescriptor().getMessageTypes().get(13);
          internal_static_openxc_CommandResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_openxc_CommandResponse_descriptor,
              new java.lang.String[] { "Type", "Message", "Status", },
              com.openxc.BinaryMessages.CommandResponse.class,
              com.openxc.BinaryMessages.CommandResponse.Builder.class);
          internal_static_openxc_DiagnosticRequest_descriptor =
            getDescriptor().getMessageTypes().get(14);
          internal_static_openxc_DiagnosticRequest_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_openxc_DiagnosticRequest_descriptor,
              new java.lang.String[] { "Bus", "MessageId", "Mode", "Pid", "Payload", "MultipleResponses", "Frequency", "Name", "DecodedType", },
              com.openxc.BinaryMessages.DiagnosticRequest.class,
              com.openxc.BinaryMessages.DiagnosticRequest.Builder.class);
          internal_static_openxc_DiagnosticResponse_descriptor =
            getDescriptor().getMessageTypes().get(15);
          internal_static_openxc_DiagnosticResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_openxc_DiagnosticResponse_descriptor,
              new java.lang.String[] { "Bus", "MessageId", "Mode", "Pid", "Success", "NegativeResponseCode", "Payload", "Value", },
              com.openxc.BinaryMessages.DiagnosticResponse.class,
              com.openxc.BinaryMessages.DiagnosticResponse.Builder.class);
          internal_static_openxc_DynamicField_descriptor =
            getDescriptor().getMessageTypes().get(16);
          internal_static_openxc_DynamicField_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_openxc_DynamicField_descriptor,
              new java.lang.String[] { "Type", "StringValue", "NumericValue", "BooleanValue", },
              com.openxc.BinaryMessages.DynamicField.class,
              com.openxc.BinaryMessages.DynamicField.Builder.class);
          internal_static_openxc_SimpleMessage_descriptor =
            getDescriptor().getMessageTypes().get(17);
          internal_static_openxc_SimpleMessage_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_openxc_SimpleMessage_descriptor,
              new java.lang.String[] { "Name", "Value", "Event", },
              com.openxc.BinaryMessages.SimpleMessage.class,
              com.openxc.BinaryMessages.SimpleMessage.Builder.class);
          return null;
        }
      };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        }, assigner);
  }
  
  // @@protoc_insertion_point(outer_class_scope)
}