// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: om0_command.proto
package com.fs.watch.protobuf;
public final class Om0Command {
  private Om0Command() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  /**
   * Protobuf enum {@code Mc30Powermode}
   */
  public enum Mc30Powermode
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>HIGH = 0;</code>
     */
    HIGH(0),
    /**
     * <code>MID = 1;</code>
     */
    MID(1),
    /**
     * <code>LOW = 2;</code>
     */
    LOW(2),
    ;

    /**
     * <code>HIGH = 0;</code>
     */
    public static final int HIGH_VALUE = 0;
    /**
     * <code>MID = 1;</code>
     */
    public static final int MID_VALUE = 1;
    /**
     * <code>LOW = 2;</code>
     */
    public static final int LOW_VALUE = 2;


    public final int getNumber() {
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @Deprecated
    public static Mc30Powermode valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static Mc30Powermode forNumber(int value) {
      switch (value) {
        case 0: return HIGH;
        case 1: return MID;
        case 2: return LOW;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<Mc30Powermode>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        Mc30Powermode> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<Mc30Powermode>() {
            public Mc30Powermode findValueByNumber(int number) {
              return Mc30Powermode.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return Om0Command.getDescriptor().getEnumTypes().get(0);
    }

    private static final Mc30Powermode[] VALUES = values();

    public static Mc30Powermode valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private Mc30Powermode(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:Mc30Powermode)
  }

  /**
   * Protobuf enum {@code GPSTYPE}
   */
  public enum GPSTYPE
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>NULL = 0;</code>
     */
    NULL(0),
    /**
     * <code>TYPE_BTS = 1;</code>
     */
    TYPE_BTS(1),
    /**
     * <code>TYPE_WIFI = 2;</code>
     */
    TYPE_WIFI(2),
    /**
     * <code>TYPE_GPS = 3;</code>
     */
    TYPE_GPS(3),
    ;

    /**
     * <code>NULL = 0;</code>
     */
    public static final int NULL_VALUE = 0;
    /**
     * <code>TYPE_BTS = 1;</code>
     */
    public static final int TYPE_BTS_VALUE = 1;
    /**
     * <code>TYPE_WIFI = 2;</code>
     */
    public static final int TYPE_WIFI_VALUE = 2;
    /**
     * <code>TYPE_GPS = 3;</code>
     */
    public static final int TYPE_GPS_VALUE = 3;


    public final int getNumber() {
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @Deprecated
    public static GPSTYPE valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static GPSTYPE forNumber(int value) {
      switch (value) {
        case 0: return NULL;
        case 1: return TYPE_BTS;
        case 2: return TYPE_WIFI;
        case 3: return TYPE_GPS;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<GPSTYPE>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        GPSTYPE> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<GPSTYPE>() {
            public GPSTYPE findValueByNumber(int number) {
              return GPSTYPE.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return Om0Command.getDescriptor().getEnumTypes().get(1);
    }

    private static final GPSTYPE[] VALUES = values();

    public static GPSTYPE valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private GPSTYPE(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:GPSTYPE)
  }

  public interface OM0TrackConfOrBuilder extends
      // @@protoc_insertion_point(interface_extends:OM0TrackConf)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required fixed32 hash = 1;</code>
     * @return Whether the hash field is set.
     */
    boolean hasHash();
    /**
     * <code>required fixed32 hash = 1;</code>
     * @return The hash.
     */
    int getHash();

    /**
     * <code>required bool auto_run = 2;</code>
     * @return Whether the autoRun field is set.
     */
    boolean hasAutoRun();
    /**
     * <code>required bool auto_run = 2;</code>
     * @return The autoRun.
     */
    boolean getAutoRun();

    /**
     * <code>required fixed32 interval = 3 [default = 30];</code>
     * @return Whether the interval field is set.
     */
    boolean hasInterval();
    /**
     * <code>required fixed32 interval = 3 [default = 30];</code>
     * @return The interval.
     */
    int getInterval();

    /**
     * <code>optional string model = 4;</code>
     * @return Whether the model field is set.
     */
    boolean hasModel();
    /**
     * <code>optional string model = 4;</code>
     * @return The model.
     */
    String getModel();
    /**
     * <code>optional string model = 4;</code>
     * @return The bytes for model.
     */
    com.google.protobuf.ByteString
        getModelBytes();

    /**
     * <code>optional string version = 5;</code>
     * @return Whether the version field is set.
     */
    boolean hasVersion();
    /**
     * <code>optional string version = 5;</code>
     * @return The version.
     */
    String getVersion();
    /**
     * <code>optional string version = 5;</code>
     * @return The bytes for version.
     */
    com.google.protobuf.ByteString
        getVersionBytes();

    /**
     * <code>optional bool force_upgrade = 6;</code>
     * @return Whether the forceUpgrade field is set.
     */
    boolean hasForceUpgrade();
    /**
     * <code>optional bool force_upgrade = 6;</code>
     * @return The forceUpgrade.
     */
    boolean getForceUpgrade();

    /**
     * <code>optional .Mc30Powermode mc30_power_mode = 7;</code>
     * @return Whether the mc30PowerMode field is set.
     */
    boolean hasMc30PowerMode();
    /**
     * <code>optional .Mc30Powermode mc30_power_mode = 7;</code>
     * @return The mc30PowerMode.
     */
    Mc30Powermode getMc30PowerMode();

    /**
     * <code>optional bool gps_auto_check = 8;</code>
     * @return Whether the gpsAutoCheck field is set.
     */
    boolean hasGpsAutoCheck();
    /**
     * <code>optional bool gps_auto_check = 8;</code>
     * @return The gpsAutoCheck.
     */
    boolean getGpsAutoCheck();

    /**
     * <code>optional fixed32 gps_interval_time = 9;</code>
     * @return Whether the gpsIntervalTime field is set.
     */
    boolean hasGpsIntervalTime();
    /**
     * <code>optional fixed32 gps_interval_time = 9;</code>
     * @return The gpsIntervalTime.
     */
    int getGpsIntervalTime();
  }
  /**
   * Protobuf type {@code OM0TrackConf}
   */
  public  static final class OM0TrackConf extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:OM0TrackConf)
      OM0TrackConfOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use OM0TrackConf.newBuilder() to construct.
    private OM0TrackConf(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private OM0TrackConf() {
      interval_ = 30;
      model_ = "";
      version_ = "";
      mc30PowerMode_ = 0;
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new OM0TrackConf();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private OM0TrackConf(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 13: {
              bitField0_ |= 0x00000001;
              hash_ = input.readFixed32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              autoRun_ = input.readBool();
              break;
            }
            case 29: {
              bitField0_ |= 0x00000004;
              interval_ = input.readFixed32();
              break;
            }
            case 34: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000008;
              model_ = bs;
              break;
            }
            case 42: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000010;
              version_ = bs;
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              forceUpgrade_ = input.readBool();
              break;
            }
            case 56: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              Mc30Powermode value = Mc30Powermode.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(7, rawValue);
              } else {
                bitField0_ |= 0x00000040;
                mc30PowerMode_ = rawValue;
              }
              break;
            }
            case 64: {
              bitField0_ |= 0x00000080;
              gpsAutoCheck_ = input.readBool();
              break;
            }
            case 77: {
              bitField0_ |= 0x00000100;
              gpsIntervalTime_ = input.readFixed32();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return Om0Command.internal_static_OM0TrackConf_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return Om0Command.internal_static_OM0TrackConf_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              OM0TrackConf.class, Builder.class);
    }

    private int bitField0_;
    public static final int HASH_FIELD_NUMBER = 1;
    private int hash_;
    /**
     * <code>required fixed32 hash = 1;</code>
     * @return Whether the hash field is set.
     */
    public boolean hasHash() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required fixed32 hash = 1;</code>
     * @return The hash.
     */
    public int getHash() {
      return hash_;
    }

    public static final int AUTO_RUN_FIELD_NUMBER = 2;
    private boolean autoRun_;
    /**
     * <code>required bool auto_run = 2;</code>
     * @return Whether the autoRun field is set.
     */
    public boolean hasAutoRun() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>required bool auto_run = 2;</code>
     * @return The autoRun.
     */
    public boolean getAutoRun() {
      return autoRun_;
    }

    public static final int INTERVAL_FIELD_NUMBER = 3;
    private int interval_;
    /**
     * <code>required fixed32 interval = 3 [default = 30];</code>
     * @return Whether the interval field is set.
     */
    public boolean hasInterval() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>required fixed32 interval = 3 [default = 30];</code>
     * @return The interval.
     */
    public int getInterval() {
      return interval_;
    }

    public static final int MODEL_FIELD_NUMBER = 4;
    private volatile Object model_;
    /**
     * <code>optional string model = 4;</code>
     * @return Whether the model field is set.
     */
    public boolean hasModel() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional string model = 4;</code>
     * @return The model.
     */
    public String getModel() {
      Object ref = model_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          model_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string model = 4;</code>
     * @return The bytes for model.
     */
    public com.google.protobuf.ByteString
        getModelBytes() {
      Object ref = model_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        model_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VERSION_FIELD_NUMBER = 5;
    private volatile Object version_;
    /**
     * <code>optional string version = 5;</code>
     * @return Whether the version field is set.
     */
    public boolean hasVersion() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional string version = 5;</code>
     * @return The version.
     */
    public String getVersion() {
      Object ref = version_;
      if (ref instanceof String) {
        return (String) ref;
      } else {
        com.google.protobuf.ByteString bs =
            (com.google.protobuf.ByteString) ref;
        String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          version_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string version = 5;</code>
     * @return The bytes for version.
     */
    public com.google.protobuf.ByteString
        getVersionBytes() {
      Object ref = version_;
      if (ref instanceof String) {
        com.google.protobuf.ByteString b =
            com.google.protobuf.ByteString.copyFromUtf8(
                (String) ref);
        version_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int FORCE_UPGRADE_FIELD_NUMBER = 6;
    private boolean forceUpgrade_;
    /**
     * <code>optional bool force_upgrade = 6;</code>
     * @return Whether the forceUpgrade field is set.
     */
    public boolean hasForceUpgrade() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional bool force_upgrade = 6;</code>
     * @return The forceUpgrade.
     */
    public boolean getForceUpgrade() {
      return forceUpgrade_;
    }

    public static final int MC30_POWER_MODE_FIELD_NUMBER = 7;
    private int mc30PowerMode_;
    /**
     * <code>optional .Mc30Powermode mc30_power_mode = 7;</code>
     * @return Whether the mc30PowerMode field is set.
     */
    public boolean hasMc30PowerMode() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>optional .Mc30Powermode mc30_power_mode = 7;</code>
     * @return The mc30PowerMode.
     */
    public Mc30Powermode getMc30PowerMode() {
      @SuppressWarnings("deprecation")
      Mc30Powermode result = Mc30Powermode.valueOf(mc30PowerMode_);
      return result == null ? Mc30Powermode.HIGH : result;
    }

    public static final int GPS_AUTO_CHECK_FIELD_NUMBER = 8;
    private boolean gpsAutoCheck_;
    /**
     * <code>optional bool gps_auto_check = 8;</code>
     * @return Whether the gpsAutoCheck field is set.
     */
    public boolean hasGpsAutoCheck() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <code>optional bool gps_auto_check = 8;</code>
     * @return The gpsAutoCheck.
     */
    public boolean getGpsAutoCheck() {
      return gpsAutoCheck_;
    }

    public static final int GPS_INTERVAL_TIME_FIELD_NUMBER = 9;
    private int gpsIntervalTime_;
    /**
     * <code>optional fixed32 gps_interval_time = 9;</code>
     * @return Whether the gpsIntervalTime field is set.
     */
    public boolean hasGpsIntervalTime() {
      return ((bitField0_ & 0x00000100) != 0);
    }
    /**
     * <code>optional fixed32 gps_interval_time = 9;</code>
     * @return The gpsIntervalTime.
     */
    public int getGpsIntervalTime() {
      return gpsIntervalTime_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasHash()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasAutoRun()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasInterval()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeFixed32(1, hash_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeBool(2, autoRun_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeFixed32(3, interval_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, model_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, version_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        output.writeBool(6, forceUpgrade_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        output.writeEnum(7, mc30PowerMode_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        output.writeBool(8, gpsAutoCheck_);
      }
      if (((bitField0_ & 0x00000100) != 0)) {
        output.writeFixed32(9, gpsIntervalTime_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(1, hash_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, autoRun_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(3, interval_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, model_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, version_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, forceUpgrade_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(7, mc30PowerMode_);
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(8, gpsAutoCheck_);
      }
      if (((bitField0_ & 0x00000100) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(9, gpsIntervalTime_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof OM0TrackConf)) {
        return super.equals(obj);
      }
      OM0TrackConf other = (OM0TrackConf) obj;

      if (hasHash() != other.hasHash()) return false;
      if (hasHash()) {
        if (getHash()
            != other.getHash()) return false;
      }
      if (hasAutoRun() != other.hasAutoRun()) return false;
      if (hasAutoRun()) {
        if (getAutoRun()
            != other.getAutoRun()) return false;
      }
      if (hasInterval() != other.hasInterval()) return false;
      if (hasInterval()) {
        if (getInterval()
            != other.getInterval()) return false;
      }
      if (hasModel() != other.hasModel()) return false;
      if (hasModel()) {
        if (!getModel()
            .equals(other.getModel())) return false;
      }
      if (hasVersion() != other.hasVersion()) return false;
      if (hasVersion()) {
        if (!getVersion()
            .equals(other.getVersion())) return false;
      }
      if (hasForceUpgrade() != other.hasForceUpgrade()) return false;
      if (hasForceUpgrade()) {
        if (getForceUpgrade()
            != other.getForceUpgrade()) return false;
      }
      if (hasMc30PowerMode() != other.hasMc30PowerMode()) return false;
      if (hasMc30PowerMode()) {
        if (mc30PowerMode_ != other.mc30PowerMode_) return false;
      }
      if (hasGpsAutoCheck() != other.hasGpsAutoCheck()) return false;
      if (hasGpsAutoCheck()) {
        if (getGpsAutoCheck()
            != other.getGpsAutoCheck()) return false;
      }
      if (hasGpsIntervalTime() != other.hasGpsIntervalTime()) return false;
      if (hasGpsIntervalTime()) {
        if (getGpsIntervalTime()
            != other.getGpsIntervalTime()) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasHash()) {
        hash = (37 * hash) + HASH_FIELD_NUMBER;
        hash = (53 * hash) + getHash();
      }
      if (hasAutoRun()) {
        hash = (37 * hash) + AUTO_RUN_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getAutoRun());
      }
      if (hasInterval()) {
        hash = (37 * hash) + INTERVAL_FIELD_NUMBER;
        hash = (53 * hash) + getInterval();
      }
      if (hasModel()) {
        hash = (37 * hash) + MODEL_FIELD_NUMBER;
        hash = (53 * hash) + getModel().hashCode();
      }
      if (hasVersion()) {
        hash = (37 * hash) + VERSION_FIELD_NUMBER;
        hash = (53 * hash) + getVersion().hashCode();
      }
      if (hasForceUpgrade()) {
        hash = (37 * hash) + FORCE_UPGRADE_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getForceUpgrade());
      }
      if (hasMc30PowerMode()) {
        hash = (37 * hash) + MC30_POWER_MODE_FIELD_NUMBER;
        hash = (53 * hash) + mc30PowerMode_;
      }
      if (hasGpsAutoCheck()) {
        hash = (37 * hash) + GPS_AUTO_CHECK_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getGpsAutoCheck());
      }
      if (hasGpsIntervalTime()) {
        hash = (37 * hash) + GPS_INTERVAL_TIME_FIELD_NUMBER;
        hash = (53 * hash) + getGpsIntervalTime();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static OM0TrackConf parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static OM0TrackConf parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static OM0TrackConf parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static OM0TrackConf parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static OM0TrackConf parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static OM0TrackConf parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static OM0TrackConf parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static OM0TrackConf parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static OM0TrackConf parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static OM0TrackConf parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static OM0TrackConf parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static OM0TrackConf parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(OM0TrackConf prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code OM0TrackConf}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:OM0TrackConf)
        OM0TrackConfOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Om0Command.internal_static_OM0TrackConf_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Om0Command.internal_static_OM0TrackConf_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OM0TrackConf.class, Builder.class);
      }

      // Construct using Om0Command.OM0TrackConf.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        hash_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        autoRun_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        interval_ = 30;
        bitField0_ = (bitField0_ & ~0x00000004);
        model_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        version_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        forceUpgrade_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        mc30PowerMode_ = 0;
        bitField0_ = (bitField0_ & ~0x00000040);
        gpsAutoCheck_ = false;
        bitField0_ = (bitField0_ & ~0x00000080);
        gpsIntervalTime_ = 0;
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return Om0Command.internal_static_OM0TrackConf_descriptor;
      }

      @Override
      public OM0TrackConf getDefaultInstanceForType() {
        return OM0TrackConf.getDefaultInstance();
      }

      @Override
      public OM0TrackConf build() {
        OM0TrackConf result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public OM0TrackConf buildPartial() {
        OM0TrackConf result = new OM0TrackConf(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.hash_ = hash_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.autoRun_ = autoRun_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          to_bitField0_ |= 0x00000004;
        }
        result.interval_ = interval_;
        if (((from_bitField0_ & 0x00000008) != 0)) {
          to_bitField0_ |= 0x00000008;
        }
        result.model_ = model_;
        if (((from_bitField0_ & 0x00000010) != 0)) {
          to_bitField0_ |= 0x00000010;
        }
        result.version_ = version_;
        if (((from_bitField0_ & 0x00000020) != 0)) {
          result.forceUpgrade_ = forceUpgrade_;
          to_bitField0_ |= 0x00000020;
        }
        if (((from_bitField0_ & 0x00000040) != 0)) {
          to_bitField0_ |= 0x00000040;
        }
        result.mc30PowerMode_ = mc30PowerMode_;
        if (((from_bitField0_ & 0x00000080) != 0)) {
          result.gpsAutoCheck_ = gpsAutoCheck_;
          to_bitField0_ |= 0x00000080;
        }
        if (((from_bitField0_ & 0x00000100) != 0)) {
          result.gpsIntervalTime_ = gpsIntervalTime_;
          to_bitField0_ |= 0x00000100;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof OM0TrackConf) {
          return mergeFrom((OM0TrackConf)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(OM0TrackConf other) {
        if (other == OM0TrackConf.getDefaultInstance()) return this;
        if (other.hasHash()) {
          setHash(other.getHash());
        }
        if (other.hasAutoRun()) {
          setAutoRun(other.getAutoRun());
        }
        if (other.hasInterval()) {
          setInterval(other.getInterval());
        }
        if (other.hasModel()) {
          bitField0_ |= 0x00000008;
          model_ = other.model_;
          onChanged();
        }
        if (other.hasVersion()) {
          bitField0_ |= 0x00000010;
          version_ = other.version_;
          onChanged();
        }
        if (other.hasForceUpgrade()) {
          setForceUpgrade(other.getForceUpgrade());
        }
        if (other.hasMc30PowerMode()) {
          setMc30PowerMode(other.getMc30PowerMode());
        }
        if (other.hasGpsAutoCheck()) {
          setGpsAutoCheck(other.getGpsAutoCheck());
        }
        if (other.hasGpsIntervalTime()) {
          setGpsIntervalTime(other.getGpsIntervalTime());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (!hasHash()) {
          return false;
        }
        if (!hasAutoRun()) {
          return false;
        }
        if (!hasInterval()) {
          return false;
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        OM0TrackConf parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (OM0TrackConf) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int hash_ ;
      /**
       * <code>required fixed32 hash = 1;</code>
       * @return Whether the hash field is set.
       */
      public boolean hasHash() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required fixed32 hash = 1;</code>
       * @return The hash.
       */
      public int getHash() {
        return hash_;
      }
      /**
       * <code>required fixed32 hash = 1;</code>
       * @param value The hash to set.
       * @return This builder for chaining.
       */
      public Builder setHash(int value) {
        bitField0_ |= 0x00000001;
        hash_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 hash = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearHash() {
        bitField0_ = (bitField0_ & ~0x00000001);
        hash_ = 0;
        onChanged();
        return this;
      }

      private boolean autoRun_ ;
      /**
       * <code>required bool auto_run = 2;</code>
       * @return Whether the autoRun field is set.
       */
      public boolean hasAutoRun() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>required bool auto_run = 2;</code>
       * @return The autoRun.
       */
      public boolean getAutoRun() {
        return autoRun_;
      }
      /**
       * <code>required bool auto_run = 2;</code>
       * @param value The autoRun to set.
       * @return This builder for chaining.
       */
      public Builder setAutoRun(boolean value) {
        bitField0_ |= 0x00000002;
        autoRun_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bool auto_run = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearAutoRun() {
        bitField0_ = (bitField0_ & ~0x00000002);
        autoRun_ = false;
        onChanged();
        return this;
      }

      private int interval_ = 30;
      /**
       * <code>required fixed32 interval = 3 [default = 30];</code>
       * @return Whether the interval field is set.
       */
      public boolean hasInterval() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>required fixed32 interval = 3 [default = 30];</code>
       * @return The interval.
       */
      public int getInterval() {
        return interval_;
      }
      /**
       * <code>required fixed32 interval = 3 [default = 30];</code>
       * @param value The interval to set.
       * @return This builder for chaining.
       */
      public Builder setInterval(int value) {
        bitField0_ |= 0x00000004;
        interval_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 interval = 3 [default = 30];</code>
       * @return This builder for chaining.
       */
      public Builder clearInterval() {
        bitField0_ = (bitField0_ & ~0x00000004);
        interval_ = 30;
        onChanged();
        return this;
      }

      private Object model_ = "";
      /**
       * <code>optional string model = 4;</code>
       * @return Whether the model field is set.
       */
      public boolean hasModel() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional string model = 4;</code>
       * @return The model.
       */
      public String getModel() {
        Object ref = model_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            model_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string model = 4;</code>
       * @return The bytes for model.
       */
      public com.google.protobuf.ByteString
          getModelBytes() {
        Object ref = model_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          model_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string model = 4;</code>
       * @param value The model to set.
       * @return This builder for chaining.
       */
      public Builder setModel(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        model_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string model = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearModel() {
        bitField0_ = (bitField0_ & ~0x00000008);
        model_ = getDefaultInstance().getModel();
        onChanged();
        return this;
      }
      /**
       * <code>optional string model = 4;</code>
       * @param value The bytes for model to set.
       * @return This builder for chaining.
       */
      public Builder setModelBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        model_ = value;
        onChanged();
        return this;
      }

      private Object version_ = "";
      /**
       * <code>optional string version = 5;</code>
       * @return Whether the version field is set.
       */
      public boolean hasVersion() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>optional string version = 5;</code>
       * @return The version.
       */
      public String getVersion() {
        Object ref = version_;
        if (!(ref instanceof String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            version_ = s;
          }
          return s;
        } else {
          return (String) ref;
        }
      }
      /**
       * <code>optional string version = 5;</code>
       * @return The bytes for version.
       */
      public com.google.protobuf.ByteString
          getVersionBytes() {
        Object ref = version_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b =
              com.google.protobuf.ByteString.copyFromUtf8(
                  (String) ref);
          version_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string version = 5;</code>
       * @param value The version to set.
       * @return This builder for chaining.
       */
      public Builder setVersion(
          String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        version_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string version = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearVersion() {
        bitField0_ = (bitField0_ & ~0x00000010);
        version_ = getDefaultInstance().getVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string version = 5;</code>
       * @param value The bytes for version to set.
       * @return This builder for chaining.
       */
      public Builder setVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        version_ = value;
        onChanged();
        return this;
      }

      private boolean forceUpgrade_ ;
      /**
       * <code>optional bool force_upgrade = 6;</code>
       * @return Whether the forceUpgrade field is set.
       */
      public boolean hasForceUpgrade() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>optional bool force_upgrade = 6;</code>
       * @return The forceUpgrade.
       */
      public boolean getForceUpgrade() {
        return forceUpgrade_;
      }
      /**
       * <code>optional bool force_upgrade = 6;</code>
       * @param value The forceUpgrade to set.
       * @return This builder for chaining.
       */
      public Builder setForceUpgrade(boolean value) {
        bitField0_ |= 0x00000020;
        forceUpgrade_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool force_upgrade = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearForceUpgrade() {
        bitField0_ = (bitField0_ & ~0x00000020);
        forceUpgrade_ = false;
        onChanged();
        return this;
      }

      private int mc30PowerMode_ = 0;
      /**
       * <code>optional .Mc30Powermode mc30_power_mode = 7;</code>
       * @return Whether the mc30PowerMode field is set.
       */
      public boolean hasMc30PowerMode() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <code>optional .Mc30Powermode mc30_power_mode = 7;</code>
       * @return The mc30PowerMode.
       */
      public Mc30Powermode getMc30PowerMode() {
        @SuppressWarnings("deprecation")
        Mc30Powermode result = Mc30Powermode.valueOf(mc30PowerMode_);
        return result == null ? Mc30Powermode.HIGH : result;
      }
      /**
       * <code>optional .Mc30Powermode mc30_power_mode = 7;</code>
       * @param value The mc30PowerMode to set.
       * @return This builder for chaining.
       */
      public Builder setMc30PowerMode(Mc30Powermode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000040;
        mc30PowerMode_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .Mc30Powermode mc30_power_mode = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearMc30PowerMode() {
        bitField0_ = (bitField0_ & ~0x00000040);
        mc30PowerMode_ = 0;
        onChanged();
        return this;
      }

      private boolean gpsAutoCheck_ ;
      /**
       * <code>optional bool gps_auto_check = 8;</code>
       * @return Whether the gpsAutoCheck field is set.
       */
      public boolean hasGpsAutoCheck() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <code>optional bool gps_auto_check = 8;</code>
       * @return The gpsAutoCheck.
       */
      public boolean getGpsAutoCheck() {
        return gpsAutoCheck_;
      }
      /**
       * <code>optional bool gps_auto_check = 8;</code>
       * @param value The gpsAutoCheck to set.
       * @return This builder for chaining.
       */
      public Builder setGpsAutoCheck(boolean value) {
        bitField0_ |= 0x00000080;
        gpsAutoCheck_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool gps_auto_check = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearGpsAutoCheck() {
        bitField0_ = (bitField0_ & ~0x00000080);
        gpsAutoCheck_ = false;
        onChanged();
        return this;
      }

      private int gpsIntervalTime_ ;
      /**
       * <code>optional fixed32 gps_interval_time = 9;</code>
       * @return Whether the gpsIntervalTime field is set.
       */
      public boolean hasGpsIntervalTime() {
        return ((bitField0_ & 0x00000100) != 0);
      }
      /**
       * <code>optional fixed32 gps_interval_time = 9;</code>
       * @return The gpsIntervalTime.
       */
      public int getGpsIntervalTime() {
        return gpsIntervalTime_;
      }
      /**
       * <code>optional fixed32 gps_interval_time = 9;</code>
       * @param value The gpsIntervalTime to set.
       * @return This builder for chaining.
       */
      public Builder setGpsIntervalTime(int value) {
        bitField0_ |= 0x00000100;
        gpsIntervalTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed32 gps_interval_time = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearGpsIntervalTime() {
        bitField0_ = (bitField0_ & ~0x00000100);
        gpsIntervalTime_ = 0;
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:OM0TrackConf)
    }

    // @@protoc_insertion_point(class_scope:OM0TrackConf)
    private static final OM0TrackConf DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new OM0TrackConf();
    }

    public static OM0TrackConf getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<OM0TrackConf>
        PARSER = new com.google.protobuf.AbstractParser<OM0TrackConf>() {
      @Override
      public OM0TrackConf parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new OM0TrackConf(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<OM0TrackConf> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<OM0TrackConf> getParserForType() {
      return PARSER;
    }

    @Override
    public OM0TrackConf getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface OM0SleepDataOrBuilder extends
      // @@protoc_insertion_point(interface_extends:OM0SleepData)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required fixed32 score = 1;</code>
     * @return Whether the score field is set.
     */
    boolean hasScore();
    /**
     * <code>required fixed32 score = 1;</code>
     * @return The score.
     */
    int getScore();

    /**
     * <pre>
     * minutes
     * </pre>
     *
     * <code>required fixed32 duration = 2;</code>
     * @return Whether the duration field is set.
     */
    boolean hasDuration();
    /**
     * <pre>
     * minutes
     * </pre>
     *
     * <code>required fixed32 duration = 2;</code>
     * @return The duration.
     */
    int getDuration();

    /**
     * <pre>
     * minutes
     * </pre>
     *
     * <code>required fixed32 deepsleep = 3;</code>
     * @return Whether the deepsleep field is set.
     */
    boolean hasDeepsleep();
    /**
     * <pre>
     * minutes
     * </pre>
     *
     * <code>required fixed32 deepsleep = 3;</code>
     * @return The deepsleep.
     */
    int getDeepsleep();

    /**
     * <pre>
     * minutes
     * </pre>
     *
     * <code>required fixed32 somnolence = 4;</code>
     * @return Whether the somnolence field is set.
     */
    boolean hasSomnolence();
    /**
     * <pre>
     * minutes
     * </pre>
     *
     * <code>required fixed32 somnolence = 4;</code>
     * @return The somnolence.
     */
    int getSomnolence();

    /**
     * <pre>
     * minutes
     * </pre>
     *
     * <code>required fixed32 wakefulness = 5;</code>
     * @return Whether the wakefulness field is set.
     */
    boolean hasWakefulness();
    /**
     * <pre>
     * minutes
     * </pre>
     *
     * <code>required fixed32 wakefulness = 5;</code>
     * @return The wakefulness.
     */
    int getWakefulness();

    /**
     * <pre>
     * date of sleep data
     * </pre>
     *
     * <code>required .RtTime date = 6;</code>
     * @return Whether the date field is set.
     */
    boolean hasDate();
    /**
     * <pre>
     * date of sleep data
     * </pre>
     *
     * <code>required .RtTime date = 6;</code>
     * @return The date.
     */
    RealtimeData.RtTime getDate();
    /**
     * <pre>
     * date of sleep data
     * </pre>
     *
     * <code>required .RtTime date = 6;</code>
     */
    RealtimeData.RtTimeOrBuilder getDateOrBuilder();
  }
  /**
   * Protobuf type {@code OM0SleepData}
   */
  public  static final class OM0SleepData extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:OM0SleepData)
      OM0SleepDataOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use OM0SleepData.newBuilder() to construct.
    private OM0SleepData(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private OM0SleepData() {
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new OM0SleepData();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private OM0SleepData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 13: {
              bitField0_ |= 0x00000001;
              score_ = input.readFixed32();
              break;
            }
            case 21: {
              bitField0_ |= 0x00000002;
              duration_ = input.readFixed32();
              break;
            }
            case 29: {
              bitField0_ |= 0x00000004;
              deepsleep_ = input.readFixed32();
              break;
            }
            case 37: {
              bitField0_ |= 0x00000008;
              somnolence_ = input.readFixed32();
              break;
            }
            case 45: {
              bitField0_ |= 0x00000010;
              wakefulness_ = input.readFixed32();
              break;
            }
            case 50: {
              RealtimeData.RtTime.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) != 0)) {
                subBuilder = date_.toBuilder();
              }
              date_ = input.readMessage(RealtimeData.RtTime.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(date_);
                date_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return Om0Command.internal_static_OM0SleepData_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return Om0Command.internal_static_OM0SleepData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              OM0SleepData.class, Builder.class);
    }

    private int bitField0_;
    public static final int SCORE_FIELD_NUMBER = 1;
    private int score_;
    /**
     * <code>required fixed32 score = 1;</code>
     * @return Whether the score field is set.
     */
    public boolean hasScore() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required fixed32 score = 1;</code>
     * @return The score.
     */
    public int getScore() {
      return score_;
    }

    public static final int DURATION_FIELD_NUMBER = 2;
    private int duration_;
    /**
     * <pre>
     * minutes
     * </pre>
     *
     * <code>required fixed32 duration = 2;</code>
     * @return Whether the duration field is set.
     */
    public boolean hasDuration() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <pre>
     * minutes
     * </pre>
     *
     * <code>required fixed32 duration = 2;</code>
     * @return The duration.
     */
    public int getDuration() {
      return duration_;
    }

    public static final int DEEPSLEEP_FIELD_NUMBER = 3;
    private int deepsleep_;
    /**
     * <pre>
     * minutes
     * </pre>
     *
     * <code>required fixed32 deepsleep = 3;</code>
     * @return Whether the deepsleep field is set.
     */
    public boolean hasDeepsleep() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <pre>
     * minutes
     * </pre>
     *
     * <code>required fixed32 deepsleep = 3;</code>
     * @return The deepsleep.
     */
    public int getDeepsleep() {
      return deepsleep_;
    }

    public static final int SOMNOLENCE_FIELD_NUMBER = 4;
    private int somnolence_;
    /**
     * <pre>
     * minutes
     * </pre>
     *
     * <code>required fixed32 somnolence = 4;</code>
     * @return Whether the somnolence field is set.
     */
    public boolean hasSomnolence() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <pre>
     * minutes
     * </pre>
     *
     * <code>required fixed32 somnolence = 4;</code>
     * @return The somnolence.
     */
    public int getSomnolence() {
      return somnolence_;
    }

    public static final int WAKEFULNESS_FIELD_NUMBER = 5;
    private int wakefulness_;
    /**
     * <pre>
     * minutes
     * </pre>
     *
     * <code>required fixed32 wakefulness = 5;</code>
     * @return Whether the wakefulness field is set.
     */
    public boolean hasWakefulness() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <pre>
     * minutes
     * </pre>
     *
     * <code>required fixed32 wakefulness = 5;</code>
     * @return The wakefulness.
     */
    public int getWakefulness() {
      return wakefulness_;
    }

    public static final int DATE_FIELD_NUMBER = 6;
    private RealtimeData.RtTime date_;
    /**
     * <pre>
     * date of sleep data
     * </pre>
     *
     * <code>required .RtTime date = 6;</code>
     * @return Whether the date field is set.
     */
    public boolean hasDate() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <pre>
     * date of sleep data
     * </pre>
     *
     * <code>required .RtTime date = 6;</code>
     * @return The date.
     */
    public RealtimeData.RtTime getDate() {
      return date_ == null ? RealtimeData.RtTime.getDefaultInstance() : date_;
    }
    /**
     * <pre>
     * date of sleep data
     * </pre>
     *
     * <code>required .RtTime date = 6;</code>
     */
    public RealtimeData.RtTimeOrBuilder getDateOrBuilder() {
      return date_ == null ? RealtimeData.RtTime.getDefaultInstance() : date_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasScore()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasDuration()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasDeepsleep()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasSomnolence()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasWakefulness()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasDate()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!getDate().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeFixed32(1, score_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeFixed32(2, duration_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeFixed32(3, deepsleep_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeFixed32(4, somnolence_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        output.writeFixed32(5, wakefulness_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        output.writeMessage(6, getDate());
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(1, score_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(2, duration_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(3, deepsleep_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(4, somnolence_);
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(5, wakefulness_);
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, getDate());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof OM0SleepData)) {
        return super.equals(obj);
      }
      OM0SleepData other = (OM0SleepData) obj;

      if (hasScore() != other.hasScore()) return false;
      if (hasScore()) {
        if (getScore()
            != other.getScore()) return false;
      }
      if (hasDuration() != other.hasDuration()) return false;
      if (hasDuration()) {
        if (getDuration()
            != other.getDuration()) return false;
      }
      if (hasDeepsleep() != other.hasDeepsleep()) return false;
      if (hasDeepsleep()) {
        if (getDeepsleep()
            != other.getDeepsleep()) return false;
      }
      if (hasSomnolence() != other.hasSomnolence()) return false;
      if (hasSomnolence()) {
        if (getSomnolence()
            != other.getSomnolence()) return false;
      }
      if (hasWakefulness() != other.hasWakefulness()) return false;
      if (hasWakefulness()) {
        if (getWakefulness()
            != other.getWakefulness()) return false;
      }
      if (hasDate() != other.hasDate()) return false;
      if (hasDate()) {
        if (!getDate()
            .equals(other.getDate())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasScore()) {
        hash = (37 * hash) + SCORE_FIELD_NUMBER;
        hash = (53 * hash) + getScore();
      }
      if (hasDuration()) {
        hash = (37 * hash) + DURATION_FIELD_NUMBER;
        hash = (53 * hash) + getDuration();
      }
      if (hasDeepsleep()) {
        hash = (37 * hash) + DEEPSLEEP_FIELD_NUMBER;
        hash = (53 * hash) + getDeepsleep();
      }
      if (hasSomnolence()) {
        hash = (37 * hash) + SOMNOLENCE_FIELD_NUMBER;
        hash = (53 * hash) + getSomnolence();
      }
      if (hasWakefulness()) {
        hash = (37 * hash) + WAKEFULNESS_FIELD_NUMBER;
        hash = (53 * hash) + getWakefulness();
      }
      if (hasDate()) {
        hash = (37 * hash) + DATE_FIELD_NUMBER;
        hash = (53 * hash) + getDate().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static OM0SleepData parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static OM0SleepData parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static OM0SleepData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static OM0SleepData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static OM0SleepData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static OM0SleepData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static OM0SleepData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static OM0SleepData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static OM0SleepData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static OM0SleepData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static OM0SleepData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static OM0SleepData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(OM0SleepData prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code OM0SleepData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:OM0SleepData)
        OM0SleepDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Om0Command.internal_static_OM0SleepData_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Om0Command.internal_static_OM0SleepData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OM0SleepData.class, Builder.class);
      }

      // Construct using Om0Command.OM0SleepData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getDateFieldBuilder();
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        score_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        duration_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        deepsleep_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        somnolence_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        wakefulness_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        if (dateBuilder_ == null) {
          date_ = null;
        } else {
          dateBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return Om0Command.internal_static_OM0SleepData_descriptor;
      }

      @Override
      public OM0SleepData getDefaultInstanceForType() {
        return OM0SleepData.getDefaultInstance();
      }

      @Override
      public OM0SleepData build() {
        OM0SleepData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public OM0SleepData buildPartial() {
        OM0SleepData result = new OM0SleepData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.score_ = score_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.duration_ = duration_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.deepsleep_ = deepsleep_;
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.somnolence_ = somnolence_;
          to_bitField0_ |= 0x00000008;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          result.wakefulness_ = wakefulness_;
          to_bitField0_ |= 0x00000010;
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          if (dateBuilder_ == null) {
            result.date_ = date_;
          } else {
            result.date_ = dateBuilder_.build();
          }
          to_bitField0_ |= 0x00000020;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof OM0SleepData) {
          return mergeFrom((OM0SleepData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(OM0SleepData other) {
        if (other == OM0SleepData.getDefaultInstance()) return this;
        if (other.hasScore()) {
          setScore(other.getScore());
        }
        if (other.hasDuration()) {
          setDuration(other.getDuration());
        }
        if (other.hasDeepsleep()) {
          setDeepsleep(other.getDeepsleep());
        }
        if (other.hasSomnolence()) {
          setSomnolence(other.getSomnolence());
        }
        if (other.hasWakefulness()) {
          setWakefulness(other.getWakefulness());
        }
        if (other.hasDate()) {
          mergeDate(other.getDate());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (!hasScore()) {
          return false;
        }
        if (!hasDuration()) {
          return false;
        }
        if (!hasDeepsleep()) {
          return false;
        }
        if (!hasSomnolence()) {
          return false;
        }
        if (!hasWakefulness()) {
          return false;
        }
        if (!hasDate()) {
          return false;
        }
        if (!getDate().isInitialized()) {
          return false;
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        OM0SleepData parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (OM0SleepData) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int score_ ;
      /**
       * <code>required fixed32 score = 1;</code>
       * @return Whether the score field is set.
       */
      public boolean hasScore() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required fixed32 score = 1;</code>
       * @return The score.
       */
      public int getScore() {
        return score_;
      }
      /**
       * <code>required fixed32 score = 1;</code>
       * @param value The score to set.
       * @return This builder for chaining.
       */
      public Builder setScore(int value) {
        bitField0_ |= 0x00000001;
        score_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required fixed32 score = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearScore() {
        bitField0_ = (bitField0_ & ~0x00000001);
        score_ = 0;
        onChanged();
        return this;
      }

      private int duration_ ;
      /**
       * <pre>
       * minutes
       * </pre>
       *
       * <code>required fixed32 duration = 2;</code>
       * @return Whether the duration field is set.
       */
      public boolean hasDuration() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <pre>
       * minutes
       * </pre>
       *
       * <code>required fixed32 duration = 2;</code>
       * @return The duration.
       */
      public int getDuration() {
        return duration_;
      }
      /**
       * <pre>
       * minutes
       * </pre>
       *
       * <code>required fixed32 duration = 2;</code>
       * @param value The duration to set.
       * @return This builder for chaining.
       */
      public Builder setDuration(int value) {
        bitField0_ |= 0x00000002;
        duration_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * minutes
       * </pre>
       *
       * <code>required fixed32 duration = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearDuration() {
        bitField0_ = (bitField0_ & ~0x00000002);
        duration_ = 0;
        onChanged();
        return this;
      }

      private int deepsleep_ ;
      /**
       * <pre>
       * minutes
       * </pre>
       *
       * <code>required fixed32 deepsleep = 3;</code>
       * @return Whether the deepsleep field is set.
       */
      public boolean hasDeepsleep() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <pre>
       * minutes
       * </pre>
       *
       * <code>required fixed32 deepsleep = 3;</code>
       * @return The deepsleep.
       */
      public int getDeepsleep() {
        return deepsleep_;
      }
      /**
       * <pre>
       * minutes
       * </pre>
       *
       * <code>required fixed32 deepsleep = 3;</code>
       * @param value The deepsleep to set.
       * @return This builder for chaining.
       */
      public Builder setDeepsleep(int value) {
        bitField0_ |= 0x00000004;
        deepsleep_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * minutes
       * </pre>
       *
       * <code>required fixed32 deepsleep = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearDeepsleep() {
        bitField0_ = (bitField0_ & ~0x00000004);
        deepsleep_ = 0;
        onChanged();
        return this;
      }

      private int somnolence_ ;
      /**
       * <pre>
       * minutes
       * </pre>
       *
       * <code>required fixed32 somnolence = 4;</code>
       * @return Whether the somnolence field is set.
       */
      public boolean hasSomnolence() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <pre>
       * minutes
       * </pre>
       *
       * <code>required fixed32 somnolence = 4;</code>
       * @return The somnolence.
       */
      public int getSomnolence() {
        return somnolence_;
      }
      /**
       * <pre>
       * minutes
       * </pre>
       *
       * <code>required fixed32 somnolence = 4;</code>
       * @param value The somnolence to set.
       * @return This builder for chaining.
       */
      public Builder setSomnolence(int value) {
        bitField0_ |= 0x00000008;
        somnolence_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * minutes
       * </pre>
       *
       * <code>required fixed32 somnolence = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearSomnolence() {
        bitField0_ = (bitField0_ & ~0x00000008);
        somnolence_ = 0;
        onChanged();
        return this;
      }

      private int wakefulness_ ;
      /**
       * <pre>
       * minutes
       * </pre>
       *
       * <code>required fixed32 wakefulness = 5;</code>
       * @return Whether the wakefulness field is set.
       */
      public boolean hasWakefulness() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <pre>
       * minutes
       * </pre>
       *
       * <code>required fixed32 wakefulness = 5;</code>
       * @return The wakefulness.
       */
      public int getWakefulness() {
        return wakefulness_;
      }
      /**
       * <pre>
       * minutes
       * </pre>
       *
       * <code>required fixed32 wakefulness = 5;</code>
       * @param value The wakefulness to set.
       * @return This builder for chaining.
       */
      public Builder setWakefulness(int value) {
        bitField0_ |= 0x00000010;
        wakefulness_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * minutes
       * </pre>
       *
       * <code>required fixed32 wakefulness = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearWakefulness() {
        bitField0_ = (bitField0_ & ~0x00000010);
        wakefulness_ = 0;
        onChanged();
        return this;
      }

      private RealtimeData.RtTime date_;
      private com.google.protobuf.SingleFieldBuilderV3<
          RealtimeData.RtTime, RealtimeData.RtTime.Builder, RealtimeData.RtTimeOrBuilder> dateBuilder_;
      /**
       * <pre>
       * date of sleep data
       * </pre>
       *
       * <code>required .RtTime date = 6;</code>
       * @return Whether the date field is set.
       */
      public boolean hasDate() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <pre>
       * date of sleep data
       * </pre>
       *
       * <code>required .RtTime date = 6;</code>
       * @return The date.
       */
      public RealtimeData.RtTime getDate() {
        if (dateBuilder_ == null) {
          return date_ == null ? RealtimeData.RtTime.getDefaultInstance() : date_;
        } else {
          return dateBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * date of sleep data
       * </pre>
       *
       * <code>required .RtTime date = 6;</code>
       */
      public Builder setDate(RealtimeData.RtTime value) {
        if (dateBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          date_ = value;
          onChanged();
        } else {
          dateBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <pre>
       * date of sleep data
       * </pre>
       *
       * <code>required .RtTime date = 6;</code>
       */
      public Builder setDate(
          RealtimeData.RtTime.Builder builderForValue) {
        if (dateBuilder_ == null) {
          date_ = builderForValue.build();
          onChanged();
        } else {
          dateBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <pre>
       * date of sleep data
       * </pre>
       *
       * <code>required .RtTime date = 6;</code>
       */
      public Builder mergeDate(RealtimeData.RtTime value) {
        if (dateBuilder_ == null) {
          if (((bitField0_ & 0x00000020) != 0) &&
              date_ != null &&
              date_ != RealtimeData.RtTime.getDefaultInstance()) {
            date_ =
              RealtimeData.RtTime.newBuilder(date_).mergeFrom(value).buildPartial();
          } else {
            date_ = value;
          }
          onChanged();
        } else {
          dateBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <pre>
       * date of sleep data
       * </pre>
       *
       * <code>required .RtTime date = 6;</code>
       */
      public Builder clearDate() {
        if (dateBuilder_ == null) {
          date_ = null;
          onChanged();
        } else {
          dateBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       * <pre>
       * date of sleep data
       * </pre>
       *
       * <code>required .RtTime date = 6;</code>
       */
      public RealtimeData.RtTime.Builder getDateBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getDateFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * date of sleep data
       * </pre>
       *
       * <code>required .RtTime date = 6;</code>
       */
      public RealtimeData.RtTimeOrBuilder getDateOrBuilder() {
        if (dateBuilder_ != null) {
          return dateBuilder_.getMessageOrBuilder();
        } else {
          return date_ == null ?
              RealtimeData.RtTime.getDefaultInstance() : date_;
        }
      }
      /**
       * <pre>
       * date of sleep data
       * </pre>
       *
       * <code>required .RtTime date = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          RealtimeData.RtTime, RealtimeData.RtTime.Builder, RealtimeData.RtTimeOrBuilder>
          getDateFieldBuilder() {
        if (dateBuilder_ == null) {
          dateBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              RealtimeData.RtTime, RealtimeData.RtTime.Builder, RealtimeData.RtTimeOrBuilder>(
                  getDate(),
                  getParentForChildren(),
                  isClean());
          date_ = null;
        }
        return dateBuilder_;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:OM0SleepData)
    }

    // @@protoc_insertion_point(class_scope:OM0SleepData)
    private static final OM0SleepData DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new OM0SleepData();
    }

    public static OM0SleepData getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<OM0SleepData>
        PARSER = new com.google.protobuf.AbstractParser<OM0SleepData>() {
      @Override
      public OM0SleepData parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new OM0SleepData(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<OM0SleepData> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<OM0SleepData> getParserForType() {
      return PARSER;
    }

    @Override
    public OM0SleepData getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface OM0CommandOrBuilder extends
      // @@protoc_insertion_point(interface_extends:OM0Command)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional .OM0TrackConf track_conf = 1;</code>
     * @return Whether the trackConf field is set.
     */
    boolean hasTrackConf();
    /**
     * <code>optional .OM0TrackConf track_conf = 1;</code>
     * @return The trackConf.
     */
    OM0TrackConf getTrackConf();
    /**
     * <code>optional .OM0TrackConf track_conf = 1;</code>
     */
    OM0TrackConfOrBuilder getTrackConfOrBuilder();

    /**
     * <code>optional .OM0SleepData sleep_data = 2;</code>
     * @return Whether the sleepData field is set.
     */
    boolean hasSleepData();
    /**
     * <code>optional .OM0SleepData sleep_data = 2;</code>
     * @return The sleepData.
     */
    OM0SleepData getSleepData();
    /**
     * <code>optional .OM0SleepData sleep_data = 2;</code>
     */
    OM0SleepDataOrBuilder getSleepDataOrBuilder();
  }
  /**
   * Protobuf type {@code OM0Command}
   */
  public  static final class OM0Command extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:OM0Command)
      OM0CommandOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use OM0Command.newBuilder() to construct.
    private OM0Command(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private OM0Command() {
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new OM0Command();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private OM0Command(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              OM0TrackConf.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) != 0)) {
                subBuilder = trackConf_.toBuilder();
              }
              trackConf_ = input.readMessage(OM0TrackConf.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(trackConf_);
                trackConf_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              OM0SleepData.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) != 0)) {
                subBuilder = sleepData_.toBuilder();
              }
              sleepData_ = input.readMessage(OM0SleepData.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(sleepData_);
                sleepData_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return Om0Command.internal_static_OM0Command_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return Om0Command.internal_static_OM0Command_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              OM0Command.class, Builder.class);
    }

    private int bitField0_;
    public static final int TRACK_CONF_FIELD_NUMBER = 1;
    private OM0TrackConf trackConf_;
    /**
     * <code>optional .OM0TrackConf track_conf = 1;</code>
     * @return Whether the trackConf field is set.
     */
    public boolean hasTrackConf() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional .OM0TrackConf track_conf = 1;</code>
     * @return The trackConf.
     */
    public OM0TrackConf getTrackConf() {
      return trackConf_ == null ? OM0TrackConf.getDefaultInstance() : trackConf_;
    }
    /**
     * <code>optional .OM0TrackConf track_conf = 1;</code>
     */
    public OM0TrackConfOrBuilder getTrackConfOrBuilder() {
      return trackConf_ == null ? OM0TrackConf.getDefaultInstance() : trackConf_;
    }

    public static final int SLEEP_DATA_FIELD_NUMBER = 2;
    private OM0SleepData sleepData_;
    /**
     * <code>optional .OM0SleepData sleep_data = 2;</code>
     * @return Whether the sleepData field is set.
     */
    public boolean hasSleepData() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .OM0SleepData sleep_data = 2;</code>
     * @return The sleepData.
     */
    public OM0SleepData getSleepData() {
      return sleepData_ == null ? OM0SleepData.getDefaultInstance() : sleepData_;
    }
    /**
     * <code>optional .OM0SleepData sleep_data = 2;</code>
     */
    public OM0SleepDataOrBuilder getSleepDataOrBuilder() {
      return sleepData_ == null ? OM0SleepData.getDefaultInstance() : sleepData_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (hasTrackConf()) {
        if (!getTrackConf().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasSleepData()) {
        if (!getSleepData().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeMessage(1, getTrackConf());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeMessage(2, getSleepData());
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getTrackConf());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getSleepData());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof OM0Command)) {
        return super.equals(obj);
      }
      OM0Command other = (OM0Command) obj;

      if (hasTrackConf() != other.hasTrackConf()) return false;
      if (hasTrackConf()) {
        if (!getTrackConf()
            .equals(other.getTrackConf())) return false;
      }
      if (hasSleepData() != other.hasSleepData()) return false;
      if (hasSleepData()) {
        if (!getSleepData()
            .equals(other.getSleepData())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasTrackConf()) {
        hash = (37 * hash) + TRACK_CONF_FIELD_NUMBER;
        hash = (53 * hash) + getTrackConf().hashCode();
      }
      if (hasSleepData()) {
        hash = (37 * hash) + SLEEP_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getSleepData().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static OM0Command parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static OM0Command parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static OM0Command parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static OM0Command parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static OM0Command parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static OM0Command parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static OM0Command parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static OM0Command parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static OM0Command parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static OM0Command parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static OM0Command parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static OM0Command parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(OM0Command prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code OM0Command}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:OM0Command)
        OM0CommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Om0Command.internal_static_OM0Command_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Om0Command.internal_static_OM0Command_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OM0Command.class, Builder.class);
      }

      // Construct using Om0Command.OM0Command.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getTrackConfFieldBuilder();
          getSleepDataFieldBuilder();
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        if (trackConfBuilder_ == null) {
          trackConf_ = null;
        } else {
          trackConfBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (sleepDataBuilder_ == null) {
          sleepData_ = null;
        } else {
          sleepDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return Om0Command.internal_static_OM0Command_descriptor;
      }

      @Override
      public OM0Command getDefaultInstanceForType() {
        return OM0Command.getDefaultInstance();
      }

      @Override
      public OM0Command build() {
        OM0Command result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public OM0Command buildPartial() {
        OM0Command result = new OM0Command(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          if (trackConfBuilder_ == null) {
            result.trackConf_ = trackConf_;
          } else {
            result.trackConf_ = trackConfBuilder_.build();
          }
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          if (sleepDataBuilder_ == null) {
            result.sleepData_ = sleepData_;
          } else {
            result.sleepData_ = sleepDataBuilder_.build();
          }
          to_bitField0_ |= 0x00000002;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof OM0Command) {
          return mergeFrom((OM0Command)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(OM0Command other) {
        if (other == OM0Command.getDefaultInstance()) return this;
        if (other.hasTrackConf()) {
          mergeTrackConf(other.getTrackConf());
        }
        if (other.hasSleepData()) {
          mergeSleepData(other.getSleepData());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (hasTrackConf()) {
          if (!getTrackConf().isInitialized()) {
            return false;
          }
        }
        if (hasSleepData()) {
          if (!getSleepData().isInitialized()) {
            return false;
          }
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        OM0Command parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (OM0Command) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private OM0TrackConf trackConf_;
      private com.google.protobuf.SingleFieldBuilderV3<
          OM0TrackConf, OM0TrackConf.Builder, OM0TrackConfOrBuilder> trackConfBuilder_;
      /**
       * <code>optional .OM0TrackConf track_conf = 1;</code>
       * @return Whether the trackConf field is set.
       */
      public boolean hasTrackConf() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional .OM0TrackConf track_conf = 1;</code>
       * @return The trackConf.
       */
      public OM0TrackConf getTrackConf() {
        if (trackConfBuilder_ == null) {
          return trackConf_ == null ? OM0TrackConf.getDefaultInstance() : trackConf_;
        } else {
          return trackConfBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .OM0TrackConf track_conf = 1;</code>
       */
      public Builder setTrackConf(OM0TrackConf value) {
        if (trackConfBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          trackConf_ = value;
          onChanged();
        } else {
          trackConfBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .OM0TrackConf track_conf = 1;</code>
       */
      public Builder setTrackConf(
          OM0TrackConf.Builder builderForValue) {
        if (trackConfBuilder_ == null) {
          trackConf_ = builderForValue.build();
          onChanged();
        } else {
          trackConfBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .OM0TrackConf track_conf = 1;</code>
       */
      public Builder mergeTrackConf(OM0TrackConf value) {
        if (trackConfBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0) &&
              trackConf_ != null &&
              trackConf_ != OM0TrackConf.getDefaultInstance()) {
            trackConf_ =
              OM0TrackConf.newBuilder(trackConf_).mergeFrom(value).buildPartial();
          } else {
            trackConf_ = value;
          }
          onChanged();
        } else {
          trackConfBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .OM0TrackConf track_conf = 1;</code>
       */
      public Builder clearTrackConf() {
        if (trackConfBuilder_ == null) {
          trackConf_ = null;
          onChanged();
        } else {
          trackConfBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .OM0TrackConf track_conf = 1;</code>
       */
      public OM0TrackConf.Builder getTrackConfBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getTrackConfFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .OM0TrackConf track_conf = 1;</code>
       */
      public OM0TrackConfOrBuilder getTrackConfOrBuilder() {
        if (trackConfBuilder_ != null) {
          return trackConfBuilder_.getMessageOrBuilder();
        } else {
          return trackConf_ == null ?
              OM0TrackConf.getDefaultInstance() : trackConf_;
        }
      }
      /**
       * <code>optional .OM0TrackConf track_conf = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          OM0TrackConf, OM0TrackConf.Builder, OM0TrackConfOrBuilder>
          getTrackConfFieldBuilder() {
        if (trackConfBuilder_ == null) {
          trackConfBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              OM0TrackConf, OM0TrackConf.Builder, OM0TrackConfOrBuilder>(
                  getTrackConf(),
                  getParentForChildren(),
                  isClean());
          trackConf_ = null;
        }
        return trackConfBuilder_;
      }

      private OM0SleepData sleepData_;
      private com.google.protobuf.SingleFieldBuilderV3<
          OM0SleepData, OM0SleepData.Builder, OM0SleepDataOrBuilder> sleepDataBuilder_;
      /**
       * <code>optional .OM0SleepData sleep_data = 2;</code>
       * @return Whether the sleepData field is set.
       */
      public boolean hasSleepData() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .OM0SleepData sleep_data = 2;</code>
       * @return The sleepData.
       */
      public OM0SleepData getSleepData() {
        if (sleepDataBuilder_ == null) {
          return sleepData_ == null ? OM0SleepData.getDefaultInstance() : sleepData_;
        } else {
          return sleepDataBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .OM0SleepData sleep_data = 2;</code>
       */
      public Builder setSleepData(OM0SleepData value) {
        if (sleepDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          sleepData_ = value;
          onChanged();
        } else {
          sleepDataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .OM0SleepData sleep_data = 2;</code>
       */
      public Builder setSleepData(
          OM0SleepData.Builder builderForValue) {
        if (sleepDataBuilder_ == null) {
          sleepData_ = builderForValue.build();
          onChanged();
        } else {
          sleepDataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .OM0SleepData sleep_data = 2;</code>
       */
      public Builder mergeSleepData(OM0SleepData value) {
        if (sleepDataBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0) &&
              sleepData_ != null &&
              sleepData_ != OM0SleepData.getDefaultInstance()) {
            sleepData_ =
              OM0SleepData.newBuilder(sleepData_).mergeFrom(value).buildPartial();
          } else {
            sleepData_ = value;
          }
          onChanged();
        } else {
          sleepDataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .OM0SleepData sleep_data = 2;</code>
       */
      public Builder clearSleepData() {
        if (sleepDataBuilder_ == null) {
          sleepData_ = null;
          onChanged();
        } else {
          sleepDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .OM0SleepData sleep_data = 2;</code>
       */
      public OM0SleepData.Builder getSleepDataBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getSleepDataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .OM0SleepData sleep_data = 2;</code>
       */
      public OM0SleepDataOrBuilder getSleepDataOrBuilder() {
        if (sleepDataBuilder_ != null) {
          return sleepDataBuilder_.getMessageOrBuilder();
        } else {
          return sleepData_ == null ?
              OM0SleepData.getDefaultInstance() : sleepData_;
        }
      }
      /**
       * <code>optional .OM0SleepData sleep_data = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          OM0SleepData, OM0SleepData.Builder, OM0SleepDataOrBuilder>
          getSleepDataFieldBuilder() {
        if (sleepDataBuilder_ == null) {
          sleepDataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              OM0SleepData, OM0SleepData.Builder, OM0SleepDataOrBuilder>(
                  getSleepData(),
                  getParentForChildren(),
                  isClean());
          sleepData_ = null;
        }
        return sleepDataBuilder_;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:OM0Command)
    }

    // @@protoc_insertion_point(class_scope:OM0Command)
    private static final OM0Command DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new OM0Command();
    }

    public static OM0Command getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<OM0Command>
        PARSER = new com.google.protobuf.AbstractParser<OM0Command>() {
      @Override
      public OM0Command parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new OM0Command(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<OM0Command> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<OM0Command> getParserForType() {
      return PARSER;
    }

    @Override
    public OM0Command getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface OM0TrackDataOrBuilder extends
      // @@protoc_insertion_point(interface_extends:OM0TrackData)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required .DateTime time = 1;</code>
     * @return Whether the time field is set.
     */
    boolean hasTime();
    /**
     * <code>required .DateTime time = 1;</code>
     * @return The time.
     */
    RealtimeData.DateTime getTime();
    /**
     * <code>required .DateTime time = 1;</code>
     */
    RealtimeData.DateTimeOrBuilder getTimeOrBuilder();

    /**
     * <code>optional .RtGNSS gnss = 2;</code>
     * @return Whether the gnss field is set.
     */
    boolean hasGnss();
    /**
     * <code>optional .RtGNSS gnss = 2;</code>
     * @return The gnss.
     */
    RealtimeData.RtGNSS getGnss();
    /**
     * <code>optional .RtGNSS gnss = 2;</code>
     */
    RealtimeData.RtGNSSOrBuilder getGnssOrBuilder();

    /**
     * <code>optional fixed32 hr = 3;</code>
     * @return Whether the hr field is set.
     */
    boolean hasHr();
    /**
     * <code>optional fixed32 hr = 3;</code>
     * @return The hr.
     */
    int getHr();

    /**
     * <code>optional .GPSTYPE gps_type = 4;</code>
     * @return Whether the gpsType field is set.
     */
    boolean hasGpsType();
    /**
     * <code>optional .GPSTYPE gps_type = 4;</code>
     * @return The gpsType.
     */
    GPSTYPE getGpsType();
  }
  /**
   * Protobuf type {@code OM0TrackData}
   */
  public  static final class OM0TrackData extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:OM0TrackData)
      OM0TrackDataOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use OM0TrackData.newBuilder() to construct.
    private OM0TrackData(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private OM0TrackData() {
      gpsType_ = 0;
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new OM0TrackData();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private OM0TrackData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              RealtimeData.DateTime.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) != 0)) {
                subBuilder = time_.toBuilder();
              }
              time_ = input.readMessage(RealtimeData.DateTime.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(time_);
                time_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              RealtimeData.RtGNSS.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) != 0)) {
                subBuilder = gnss_.toBuilder();
              }
              gnss_ = input.readMessage(RealtimeData.RtGNSS.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(gnss_);
                gnss_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 29: {
              bitField0_ |= 0x00000004;
              hr_ = input.readFixed32();
              break;
            }
            case 32: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              GPSTYPE value = GPSTYPE.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(4, rawValue);
              } else {
                bitField0_ |= 0x00000008;
                gpsType_ = rawValue;
              }
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return Om0Command.internal_static_OM0TrackData_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return Om0Command.internal_static_OM0TrackData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              OM0TrackData.class, Builder.class);
    }

    private int bitField0_;
    public static final int TIME_FIELD_NUMBER = 1;
    private RealtimeData.DateTime time_;
    /**
     * <code>required .DateTime time = 1;</code>
     * @return Whether the time field is set.
     */
    public boolean hasTime() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required .DateTime time = 1;</code>
     * @return The time.
     */
    public RealtimeData.DateTime getTime() {
      return time_ == null ? RealtimeData.DateTime.getDefaultInstance() : time_;
    }
    /**
     * <code>required .DateTime time = 1;</code>
     */
    public RealtimeData.DateTimeOrBuilder getTimeOrBuilder() {
      return time_ == null ? RealtimeData.DateTime.getDefaultInstance() : time_;
    }

    public static final int GNSS_FIELD_NUMBER = 2;
    private RealtimeData.RtGNSS gnss_;
    /**
     * <code>optional .RtGNSS gnss = 2;</code>
     * @return Whether the gnss field is set.
     */
    public boolean hasGnss() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional .RtGNSS gnss = 2;</code>
     * @return The gnss.
     */
    public RealtimeData.RtGNSS getGnss() {
      return gnss_ == null ? RealtimeData.RtGNSS.getDefaultInstance() : gnss_;
    }
    /**
     * <code>optional .RtGNSS gnss = 2;</code>
     */
    public RealtimeData.RtGNSSOrBuilder getGnssOrBuilder() {
      return gnss_ == null ? RealtimeData.RtGNSS.getDefaultInstance() : gnss_;
    }

    public static final int HR_FIELD_NUMBER = 3;
    private int hr_;
    /**
     * <code>optional fixed32 hr = 3;</code>
     * @return Whether the hr field is set.
     */
    public boolean hasHr() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional fixed32 hr = 3;</code>
     * @return The hr.
     */
    public int getHr() {
      return hr_;
    }

    public static final int GPS_TYPE_FIELD_NUMBER = 4;
    private int gpsType_;
    /**
     * <code>optional .GPSTYPE gps_type = 4;</code>
     * @return Whether the gpsType field is set.
     */
    public boolean hasGpsType() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional .GPSTYPE gps_type = 4;</code>
     * @return The gpsType.
     */
    public GPSTYPE getGpsType() {
      @SuppressWarnings("deprecation")
      GPSTYPE result = GPSTYPE.valueOf(gpsType_);
      return result == null ? GPSTYPE.NULL : result;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasTime()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!getTime().isInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (hasGnss()) {
        if (!getGnss().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeMessage(1, getTime());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeMessage(2, getGnss());
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeFixed32(3, hr_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeEnum(4, gpsType_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getTime());
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getGnss());
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(3, hr_);
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(4, gpsType_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof OM0TrackData)) {
        return super.equals(obj);
      }
      OM0TrackData other = (OM0TrackData) obj;

      if (hasTime() != other.hasTime()) return false;
      if (hasTime()) {
        if (!getTime()
            .equals(other.getTime())) return false;
      }
      if (hasGnss() != other.hasGnss()) return false;
      if (hasGnss()) {
        if (!getGnss()
            .equals(other.getGnss())) return false;
      }
      if (hasHr() != other.hasHr()) return false;
      if (hasHr()) {
        if (getHr()
            != other.getHr()) return false;
      }
      if (hasGpsType() != other.hasGpsType()) return false;
      if (hasGpsType()) {
        if (gpsType_ != other.gpsType_) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasTime()) {
        hash = (37 * hash) + TIME_FIELD_NUMBER;
        hash = (53 * hash) + getTime().hashCode();
      }
      if (hasGnss()) {
        hash = (37 * hash) + GNSS_FIELD_NUMBER;
        hash = (53 * hash) + getGnss().hashCode();
      }
      if (hasHr()) {
        hash = (37 * hash) + HR_FIELD_NUMBER;
        hash = (53 * hash) + getHr();
      }
      if (hasGpsType()) {
        hash = (37 * hash) + GPS_TYPE_FIELD_NUMBER;
        hash = (53 * hash) + gpsType_;
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static OM0TrackData parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static OM0TrackData parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static OM0TrackData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static OM0TrackData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static OM0TrackData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static OM0TrackData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static OM0TrackData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static OM0TrackData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static OM0TrackData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static OM0TrackData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static OM0TrackData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static OM0TrackData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(OM0TrackData prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code OM0TrackData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:OM0TrackData)
        OM0TrackDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Om0Command.internal_static_OM0TrackData_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Om0Command.internal_static_OM0TrackData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OM0TrackData.class, Builder.class);
      }

      // Construct using Om0Command.OM0TrackData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getTimeFieldBuilder();
          getGnssFieldBuilder();
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        if (timeBuilder_ == null) {
          time_ = null;
        } else {
          timeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (gnssBuilder_ == null) {
          gnss_ = null;
        } else {
          gnssBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        hr_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        gpsType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return Om0Command.internal_static_OM0TrackData_descriptor;
      }

      @Override
      public OM0TrackData getDefaultInstanceForType() {
        return OM0TrackData.getDefaultInstance();
      }

      @Override
      public OM0TrackData build() {
        OM0TrackData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public OM0TrackData buildPartial() {
        OM0TrackData result = new OM0TrackData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          if (timeBuilder_ == null) {
            result.time_ = time_;
          } else {
            result.time_ = timeBuilder_.build();
          }
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          if (gnssBuilder_ == null) {
            result.gnss_ = gnss_;
          } else {
            result.gnss_ = gnssBuilder_.build();
          }
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.hr_ = hr_;
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          to_bitField0_ |= 0x00000008;
        }
        result.gpsType_ = gpsType_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof OM0TrackData) {
          return mergeFrom((OM0TrackData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(OM0TrackData other) {
        if (other == OM0TrackData.getDefaultInstance()) return this;
        if (other.hasTime()) {
          mergeTime(other.getTime());
        }
        if (other.hasGnss()) {
          mergeGnss(other.getGnss());
        }
        if (other.hasHr()) {
          setHr(other.getHr());
        }
        if (other.hasGpsType()) {
          setGpsType(other.getGpsType());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (!hasTime()) {
          return false;
        }
        if (!getTime().isInitialized()) {
          return false;
        }
        if (hasGnss()) {
          if (!getGnss().isInitialized()) {
            return false;
          }
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        OM0TrackData parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (OM0TrackData) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private RealtimeData.DateTime time_;
      private com.google.protobuf.SingleFieldBuilderV3<
          RealtimeData.DateTime, RealtimeData.DateTime.Builder, RealtimeData.DateTimeOrBuilder> timeBuilder_;
      /**
       * <code>required .DateTime time = 1;</code>
       * @return Whether the time field is set.
       */
      public boolean hasTime() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required .DateTime time = 1;</code>
       * @return The time.
       */
      public RealtimeData.DateTime getTime() {
        if (timeBuilder_ == null) {
          return time_ == null ? RealtimeData.DateTime.getDefaultInstance() : time_;
        } else {
          return timeBuilder_.getMessage();
        }
      }
      /**
       * <code>required .DateTime time = 1;</code>
       */
      public Builder setTime(RealtimeData.DateTime value) {
        if (timeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          time_ = value;
          onChanged();
        } else {
          timeBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .DateTime time = 1;</code>
       */
      public Builder setTime(
          RealtimeData.DateTime.Builder builderForValue) {
        if (timeBuilder_ == null) {
          time_ = builderForValue.build();
          onChanged();
        } else {
          timeBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .DateTime time = 1;</code>
       */
      public Builder mergeTime(RealtimeData.DateTime value) {
        if (timeBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0) &&
              time_ != null &&
              time_ != RealtimeData.DateTime.getDefaultInstance()) {
            time_ =
              RealtimeData.DateTime.newBuilder(time_).mergeFrom(value).buildPartial();
          } else {
            time_ = value;
          }
          onChanged();
        } else {
          timeBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>required .DateTime time = 1;</code>
       */
      public Builder clearTime() {
        if (timeBuilder_ == null) {
          time_ = null;
          onChanged();
        } else {
          timeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>required .DateTime time = 1;</code>
       */
      public RealtimeData.DateTime.Builder getTimeBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getTimeFieldBuilder().getBuilder();
      }
      /**
       * <code>required .DateTime time = 1;</code>
       */
      public RealtimeData.DateTimeOrBuilder getTimeOrBuilder() {
        if (timeBuilder_ != null) {
          return timeBuilder_.getMessageOrBuilder();
        } else {
          return time_ == null ?
              RealtimeData.DateTime.getDefaultInstance() : time_;
        }
      }
      /**
       * <code>required .DateTime time = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          RealtimeData.DateTime, RealtimeData.DateTime.Builder, RealtimeData.DateTimeOrBuilder>
          getTimeFieldBuilder() {
        if (timeBuilder_ == null) {
          timeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              RealtimeData.DateTime, RealtimeData.DateTime.Builder, RealtimeData.DateTimeOrBuilder>(
                  getTime(),
                  getParentForChildren(),
                  isClean());
          time_ = null;
        }
        return timeBuilder_;
      }

      private RealtimeData.RtGNSS gnss_;
      private com.google.protobuf.SingleFieldBuilderV3<
          RealtimeData.RtGNSS, RealtimeData.RtGNSS.Builder, RealtimeData.RtGNSSOrBuilder> gnssBuilder_;
      /**
       * <code>optional .RtGNSS gnss = 2;</code>
       * @return Whether the gnss field is set.
       */
      public boolean hasGnss() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional .RtGNSS gnss = 2;</code>
       * @return The gnss.
       */
      public RealtimeData.RtGNSS getGnss() {
        if (gnssBuilder_ == null) {
          return gnss_ == null ? RealtimeData.RtGNSS.getDefaultInstance() : gnss_;
        } else {
          return gnssBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .RtGNSS gnss = 2;</code>
       */
      public Builder setGnss(RealtimeData.RtGNSS value) {
        if (gnssBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          gnss_ = value;
          onChanged();
        } else {
          gnssBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .RtGNSS gnss = 2;</code>
       */
      public Builder setGnss(
          RealtimeData.RtGNSS.Builder builderForValue) {
        if (gnssBuilder_ == null) {
          gnss_ = builderForValue.build();
          onChanged();
        } else {
          gnssBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .RtGNSS gnss = 2;</code>
       */
      public Builder mergeGnss(RealtimeData.RtGNSS value) {
        if (gnssBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0) &&
              gnss_ != null &&
              gnss_ != RealtimeData.RtGNSS.getDefaultInstance()) {
            gnss_ =
              RealtimeData.RtGNSS.newBuilder(gnss_).mergeFrom(value).buildPartial();
          } else {
            gnss_ = value;
          }
          onChanged();
        } else {
          gnssBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .RtGNSS gnss = 2;</code>
       */
      public Builder clearGnss() {
        if (gnssBuilder_ == null) {
          gnss_ = null;
          onChanged();
        } else {
          gnssBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .RtGNSS gnss = 2;</code>
       */
      public RealtimeData.RtGNSS.Builder getGnssBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getGnssFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .RtGNSS gnss = 2;</code>
       */
      public RealtimeData.RtGNSSOrBuilder getGnssOrBuilder() {
        if (gnssBuilder_ != null) {
          return gnssBuilder_.getMessageOrBuilder();
        } else {
          return gnss_ == null ?
              RealtimeData.RtGNSS.getDefaultInstance() : gnss_;
        }
      }
      /**
       * <code>optional .RtGNSS gnss = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          RealtimeData.RtGNSS, RealtimeData.RtGNSS.Builder, RealtimeData.RtGNSSOrBuilder>
          getGnssFieldBuilder() {
        if (gnssBuilder_ == null) {
          gnssBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              RealtimeData.RtGNSS, RealtimeData.RtGNSS.Builder, RealtimeData.RtGNSSOrBuilder>(
                  getGnss(),
                  getParentForChildren(),
                  isClean());
          gnss_ = null;
        }
        return gnssBuilder_;
      }

      private int hr_ ;
      /**
       * <code>optional fixed32 hr = 3;</code>
       * @return Whether the hr field is set.
       */
      public boolean hasHr() {
        return ((bitField0_ & 0x00000004) != 0);
      }
      /**
       * <code>optional fixed32 hr = 3;</code>
       * @return The hr.
       */
      public int getHr() {
        return hr_;
      }
      /**
       * <code>optional fixed32 hr = 3;</code>
       * @param value The hr to set.
       * @return This builder for chaining.
       */
      public Builder setHr(int value) {
        bitField0_ |= 0x00000004;
        hr_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed32 hr = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearHr() {
        bitField0_ = (bitField0_ & ~0x00000004);
        hr_ = 0;
        onChanged();
        return this;
      }

      private int gpsType_ = 0;
      /**
       * <code>optional .GPSTYPE gps_type = 4;</code>
       * @return Whether the gpsType field is set.
       */
      public boolean hasGpsType() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional .GPSTYPE gps_type = 4;</code>
       * @return The gpsType.
       */
      public GPSTYPE getGpsType() {
        @SuppressWarnings("deprecation")
        GPSTYPE result = GPSTYPE.valueOf(gpsType_);
        return result == null ? GPSTYPE.NULL : result;
      }
      /**
       * <code>optional .GPSTYPE gps_type = 4;</code>
       * @param value The gpsType to set.
       * @return This builder for chaining.
       */
      public Builder setGpsType(GPSTYPE value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        gpsType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .GPSTYPE gps_type = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearGpsType() {
        bitField0_ = (bitField0_ & ~0x00000008);
        gpsType_ = 0;
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:OM0TrackData)
    }

    // @@protoc_insertion_point(class_scope:OM0TrackData)
    private static final OM0TrackData DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new OM0TrackData();
    }

    public static OM0TrackData getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<OM0TrackData>
        PARSER = new com.google.protobuf.AbstractParser<OM0TrackData>() {
      @Override
      public OM0TrackData parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new OM0TrackData(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<OM0TrackData> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<OM0TrackData> getParserForType() {
      return PARSER;
    }

    @Override
    public OM0TrackData getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface OM0ResponseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:OM0Response)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required bool ret = 1;</code>
     * @return Whether the ret field is set.
     */
    boolean hasRet();
    /**
     * <code>required bool ret = 1;</code>
     * @return The ret.
     */
    boolean getRet();
  }
  /**
   * Protobuf type {@code OM0Response}
   */
  public  static final class OM0Response extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:OM0Response)
      OM0ResponseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use OM0Response.newBuilder() to construct.
    private OM0Response(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private OM0Response() {
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new OM0Response();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private OM0Response(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 8: {
              bitField0_ |= 0x00000001;
              ret_ = input.readBool();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return Om0Command.internal_static_OM0Response_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return Om0Command.internal_static_OM0Response_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              OM0Response.class, Builder.class);
    }

    private int bitField0_;
    public static final int RET_FIELD_NUMBER = 1;
    private boolean ret_;
    /**
     * <code>required bool ret = 1;</code>
     * @return Whether the ret field is set.
     */
    public boolean hasRet() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>required bool ret = 1;</code>
     * @return The ret.
     */
    public boolean getRet() {
      return ret_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasRet()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeBool(1, ret_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, ret_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof OM0Response)) {
        return super.equals(obj);
      }
      OM0Response other = (OM0Response) obj;

      if (hasRet() != other.hasRet()) return false;
      if (hasRet()) {
        if (getRet()
            != other.getRet()) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRet()) {
        hash = (37 * hash) + RET_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getRet());
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static OM0Response parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static OM0Response parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static OM0Response parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static OM0Response parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static OM0Response parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static OM0Response parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static OM0Response parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static OM0Response parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static OM0Response parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static OM0Response parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static OM0Response parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static OM0Response parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(OM0Response prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code OM0Response}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:OM0Response)
        OM0ResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Om0Command.internal_static_OM0Response_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Om0Command.internal_static_OM0Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OM0Response.class, Builder.class);
      }

      // Construct using Om0Command.OM0Response.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        ret_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return Om0Command.internal_static_OM0Response_descriptor;
      }

      @Override
      public OM0Response getDefaultInstanceForType() {
        return OM0Response.getDefaultInstance();
      }

      @Override
      public OM0Response build() {
        OM0Response result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public OM0Response buildPartial() {
        OM0Response result = new OM0Response(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.ret_ = ret_;
          to_bitField0_ |= 0x00000001;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof OM0Response) {
          return mergeFrom((OM0Response)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(OM0Response other) {
        if (other == OM0Response.getDefaultInstance()) return this;
        if (other.hasRet()) {
          setRet(other.getRet());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        if (!hasRet()) {
          return false;
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        OM0Response parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (OM0Response) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private boolean ret_ ;
      /**
       * <code>required bool ret = 1;</code>
       * @return Whether the ret field is set.
       */
      public boolean hasRet() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>required bool ret = 1;</code>
       * @return The ret.
       */
      public boolean getRet() {
        return ret_;
      }
      /**
       * <code>required bool ret = 1;</code>
       * @param value The ret to set.
       * @return This builder for chaining.
       */
      public Builder setRet(boolean value) {
        bitField0_ |= 0x00000001;
        ret_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required bool ret = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearRet() {
        bitField0_ = (bitField0_ & ~0x00000001);
        ret_ = false;
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:OM0Response)
    }

    // @@protoc_insertion_point(class_scope:OM0Response)
    private static final OM0Response DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new OM0Response();
    }

    public static OM0Response getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<OM0Response>
        PARSER = new com.google.protobuf.AbstractParser<OM0Response>() {
      @Override
      public OM0Response parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new OM0Response(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<OM0Response> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<OM0Response> getParserForType() {
      return PARSER;
    }

    @Override
    public OM0Response getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface OM0ReportOrBuilder extends
      // @@protoc_insertion_point(interface_extends:OM0Report)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional bool sos_signal = 1;</code>
     * @return Whether the sosSignal field is set.
     */
    boolean hasSosSignal();
    /**
     * <code>optional bool sos_signal = 1;</code>
     * @return The sosSignal.
     */
    boolean getSosSignal();

    /**
     * <code>optional bool wake_up = 2;</code>
     * @return Whether the wakeUp field is set.
     */
    boolean hasWakeUp();
    /**
     * <code>optional bool wake_up = 2;</code>
     * @return The wakeUp.
     */
    boolean getWakeUp();

    /**
     * <code>repeated .OM0TrackData track_data = 3;</code>
     */
    java.util.List<OM0TrackData>
        getTrackDataList();
    /**
     * <code>repeated .OM0TrackData track_data = 3;</code>
     */
    OM0TrackData getTrackData(int index);
    /**
     * <code>repeated .OM0TrackData track_data = 3;</code>
     */
    int getTrackDataCount();
    /**
     * <code>repeated .OM0TrackData track_data = 3;</code>
     */
    java.util.List<? extends OM0TrackDataOrBuilder>
        getTrackDataOrBuilderList();
    /**
     * <code>repeated .OM0TrackData track_data = 3;</code>
     */
    OM0TrackDataOrBuilder getTrackDataOrBuilder(
        int index);

    /**
     * <code>optional .RtBattery battery = 4;</code>
     * @return Whether the battery field is set.
     */
    boolean hasBattery();
    /**
     * <code>optional .RtBattery battery = 4;</code>
     * @return The battery.
     */
    RealtimeData.RtBattery getBattery();
    /**
     * <code>optional .RtBattery battery = 4;</code>
     */
    RealtimeData.RtBatteryOrBuilder getBatteryOrBuilder();

    /**
     * <code>optional .RtHealth health = 5;</code>
     * @return Whether the health field is set.
     */
    boolean hasHealth();
    /**
     * <code>optional .RtHealth health = 5;</code>
     * @return The health.
     */
    RealtimeData.RtHealth getHealth();
    /**
     * <code>optional .RtHealth health = 5;</code>
     */
    RealtimeData.RtHealthOrBuilder getHealthOrBuilder();

    /**
     * <code>optional .DateTime date_time = 6;</code>
     * @return Whether the dateTime field is set.
     */
    boolean hasDateTime();
    /**
     * <code>optional .DateTime date_time = 6;</code>
     * @return The dateTime.
     */
    RealtimeData.DateTime getDateTime();
    /**
     * <code>optional .DateTime date_time = 6;</code>
     */
    RealtimeData.DateTimeOrBuilder getDateTimeOrBuilder();

    /**
     * <code>optional fixed32 rssi = 7;</code>
     * @return Whether the rssi field is set.
     */
    boolean hasRssi();
    /**
     * <code>optional fixed32 rssi = 7;</code>
     * @return The rssi.
     */
    int getRssi();

    /**
     * <code>optional .OM0SleepData sleep_data = 8;</code>
     * @return Whether the sleepData field is set.
     */
    boolean hasSleepData();
    /**
     * <code>optional .OM0SleepData sleep_data = 8;</code>
     * @return The sleepData.
     */
    OM0SleepData getSleepData();
    /**
     * <code>optional .OM0SleepData sleep_data = 8;</code>
     */
    OM0SleepDataOrBuilder getSleepDataOrBuilder();

    /**
     * <code>optional fixed32 sport_type = 9;</code>
     * @return Whether the sportType field is set.
     */
    boolean hasSportType();
    /**
     * <code>optional fixed32 sport_type = 9;</code>
     * @return The sportType.
     */
    int getSportType();
  }
  /**
   * Protobuf type {@code OM0Report}
   */
  public  static final class OM0Report extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:OM0Report)
      OM0ReportOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use OM0Report.newBuilder() to construct.
    private OM0Report(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private OM0Report() {
      trackData_ = java.util.Collections.emptyList();
    }

    @Override
    @SuppressWarnings({"unused"})
    protected Object newInstance(
        UnusedPrivateParameter unused) {
      return new OM0Report();
    }

    @Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private OM0Report(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 8: {
              bitField0_ |= 0x00000001;
              sosSignal_ = input.readBool();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              wakeUp_ = input.readBool();
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
                trackData_ = new java.util.ArrayList<OM0TrackData>();
                mutable_bitField0_ |= 0x00000004;
              }
              trackData_.add(
                  input.readMessage(OM0TrackData.PARSER, extensionRegistry));
              break;
            }
            case 34: {
              RealtimeData.RtBattery.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) != 0)) {
                subBuilder = battery_.toBuilder();
              }
              battery_ = input.readMessage(RealtimeData.RtBattery.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(battery_);
                battery_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 42: {
              RealtimeData.RtHealth.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) != 0)) {
                subBuilder = health_.toBuilder();
              }
              health_ = input.readMessage(RealtimeData.RtHealth.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(health_);
                health_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 50: {
              RealtimeData.DateTime.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) != 0)) {
                subBuilder = dateTime_.toBuilder();
              }
              dateTime_ = input.readMessage(RealtimeData.DateTime.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(dateTime_);
                dateTime_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 61: {
              bitField0_ |= 0x00000020;
              rssi_ = input.readFixed32();
              break;
            }
            case 66: {
              OM0SleepData.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) != 0)) {
                subBuilder = sleepData_.toBuilder();
              }
              sleepData_ = input.readMessage(OM0SleepData.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(sleepData_);
                sleepData_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
            case 77: {
              bitField0_ |= 0x00000080;
              sportType_ = input.readFixed32();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) != 0)) {
          trackData_ = java.util.Collections.unmodifiableList(trackData_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return Om0Command.internal_static_OM0Report_descriptor;
    }

    @Override
    protected FieldAccessorTable
        internalGetFieldAccessorTable() {
      return Om0Command.internal_static_OM0Report_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              OM0Report.class, Builder.class);
    }

    private int bitField0_;
    public static final int SOS_SIGNAL_FIELD_NUMBER = 1;
    private boolean sosSignal_;
    /**
     * <code>optional bool sos_signal = 1;</code>
     * @return Whether the sosSignal field is set.
     */
    public boolean hasSosSignal() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * <code>optional bool sos_signal = 1;</code>
     * @return The sosSignal.
     */
    public boolean getSosSignal() {
      return sosSignal_;
    }

    public static final int WAKE_UP_FIELD_NUMBER = 2;
    private boolean wakeUp_;
    /**
     * <code>optional bool wake_up = 2;</code>
     * @return Whether the wakeUp field is set.
     */
    public boolean hasWakeUp() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * <code>optional bool wake_up = 2;</code>
     * @return The wakeUp.
     */
    public boolean getWakeUp() {
      return wakeUp_;
    }

    public static final int TRACK_DATA_FIELD_NUMBER = 3;
    private java.util.List<OM0TrackData> trackData_;
    /**
     * <code>repeated .OM0TrackData track_data = 3;</code>
     */
    public java.util.List<OM0TrackData> getTrackDataList() {
      return trackData_;
    }
    /**
     * <code>repeated .OM0TrackData track_data = 3;</code>
     */
    public java.util.List<? extends OM0TrackDataOrBuilder>
        getTrackDataOrBuilderList() {
      return trackData_;
    }
    /**
     * <code>repeated .OM0TrackData track_data = 3;</code>
     */
    public int getTrackDataCount() {
      return trackData_.size();
    }
    /**
     * <code>repeated .OM0TrackData track_data = 3;</code>
     */
    public OM0TrackData getTrackData(int index) {
      return trackData_.get(index);
    }
    /**
     * <code>repeated .OM0TrackData track_data = 3;</code>
     */
    public OM0TrackDataOrBuilder getTrackDataOrBuilder(
        int index) {
      return trackData_.get(index);
    }

    public static final int BATTERY_FIELD_NUMBER = 4;
    private RealtimeData.RtBattery battery_;
    /**
     * <code>optional .RtBattery battery = 4;</code>
     * @return Whether the battery field is set.
     */
    public boolean hasBattery() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * <code>optional .RtBattery battery = 4;</code>
     * @return The battery.
     */
    public RealtimeData.RtBattery getBattery() {
      return battery_ == null ? RealtimeData.RtBattery.getDefaultInstance() : battery_;
    }
    /**
     * <code>optional .RtBattery battery = 4;</code>
     */
    public RealtimeData.RtBatteryOrBuilder getBatteryOrBuilder() {
      return battery_ == null ? RealtimeData.RtBattery.getDefaultInstance() : battery_;
    }

    public static final int HEALTH_FIELD_NUMBER = 5;
    private RealtimeData.RtHealth health_;
    /**
     * <code>optional .RtHealth health = 5;</code>
     * @return Whether the health field is set.
     */
    public boolean hasHealth() {
      return ((bitField0_ & 0x00000008) != 0);
    }
    /**
     * <code>optional .RtHealth health = 5;</code>
     * @return The health.
     */
    public RealtimeData.RtHealth getHealth() {
      return health_ == null ? RealtimeData.RtHealth.getDefaultInstance() : health_;
    }
    /**
     * <code>optional .RtHealth health = 5;</code>
     */
    public RealtimeData.RtHealthOrBuilder getHealthOrBuilder() {
      return health_ == null ? RealtimeData.RtHealth.getDefaultInstance() : health_;
    }

    public static final int DATE_TIME_FIELD_NUMBER = 6;
    private RealtimeData.DateTime dateTime_;
    /**
     * <code>optional .DateTime date_time = 6;</code>
     * @return Whether the dateTime field is set.
     */
    public boolean hasDateTime() {
      return ((bitField0_ & 0x00000010) != 0);
    }
    /**
     * <code>optional .DateTime date_time = 6;</code>
     * @return The dateTime.
     */
    public RealtimeData.DateTime getDateTime() {
      return dateTime_ == null ? RealtimeData.DateTime.getDefaultInstance() : dateTime_;
    }
    /**
     * <code>optional .DateTime date_time = 6;</code>
     */
    public RealtimeData.DateTimeOrBuilder getDateTimeOrBuilder() {
      return dateTime_ == null ? RealtimeData.DateTime.getDefaultInstance() : dateTime_;
    }

    public static final int RSSI_FIELD_NUMBER = 7;
    private int rssi_;
    /**
     * <code>optional fixed32 rssi = 7;</code>
     * @return Whether the rssi field is set.
     */
    public boolean hasRssi() {
      return ((bitField0_ & 0x00000020) != 0);
    }
    /**
     * <code>optional fixed32 rssi = 7;</code>
     * @return The rssi.
     */
    public int getRssi() {
      return rssi_;
    }

    public static final int SLEEP_DATA_FIELD_NUMBER = 8;
    private OM0SleepData sleepData_;
    /**
     * <code>optional .OM0SleepData sleep_data = 8;</code>
     * @return Whether the sleepData field is set.
     */
    public boolean hasSleepData() {
      return ((bitField0_ & 0x00000040) != 0);
    }
    /**
     * <code>optional .OM0SleepData sleep_data = 8;</code>
     * @return The sleepData.
     */
    public OM0SleepData getSleepData() {
      return sleepData_ == null ? OM0SleepData.getDefaultInstance() : sleepData_;
    }
    /**
     * <code>optional .OM0SleepData sleep_data = 8;</code>
     */
    public OM0SleepDataOrBuilder getSleepDataOrBuilder() {
      return sleepData_ == null ? OM0SleepData.getDefaultInstance() : sleepData_;
    }

    public static final int SPORT_TYPE_FIELD_NUMBER = 9;
    private int sportType_;
    /**
     * <code>optional fixed32 sport_type = 9;</code>
     * @return Whether the sportType field is set.
     */
    public boolean hasSportType() {
      return ((bitField0_ & 0x00000080) != 0);
    }
    /**
     * <code>optional fixed32 sport_type = 9;</code>
     * @return The sportType.
     */
    public int getSportType() {
      return sportType_;
    }

    private byte memoizedIsInitialized = -1;
    @Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      for (int i = 0; i < getTrackDataCount(); i++) {
        if (!getTrackData(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasBattery()) {
        if (!getBattery().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasHealth()) {
        if (!getHealth().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasDateTime()) {
        if (!getDateTime().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasSleepData()) {
        if (!getSleepData().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    @Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeBool(1, sosSignal_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeBool(2, wakeUp_);
      }
      for (int i = 0; i < trackData_.size(); i++) {
        output.writeMessage(3, trackData_.get(i));
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeMessage(4, getBattery());
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        output.writeMessage(5, getHealth());
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        output.writeMessage(6, getDateTime());
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        output.writeFixed32(7, rssi_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        output.writeMessage(8, getSleepData());
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        output.writeFixed32(9, sportType_);
      }
      unknownFields.writeTo(output);
    }

    @Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, sosSignal_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, wakeUp_);
      }
      for (int i = 0; i < trackData_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, trackData_.get(i));
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getBattery());
      }
      if (((bitField0_ & 0x00000008) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, getHealth());
      }
      if (((bitField0_ & 0x00000010) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, getDateTime());
      }
      if (((bitField0_ & 0x00000020) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(7, rssi_);
      }
      if (((bitField0_ & 0x00000040) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, getSleepData());
      }
      if (((bitField0_ & 0x00000080) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(9, sportType_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @Override
    public boolean equals(final Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof OM0Report)) {
        return super.equals(obj);
      }
      OM0Report other = (OM0Report) obj;

      if (hasSosSignal() != other.hasSosSignal()) return false;
      if (hasSosSignal()) {
        if (getSosSignal()
            != other.getSosSignal()) return false;
      }
      if (hasWakeUp() != other.hasWakeUp()) return false;
      if (hasWakeUp()) {
        if (getWakeUp()
            != other.getWakeUp()) return false;
      }
      if (!getTrackDataList()
          .equals(other.getTrackDataList())) return false;
      if (hasBattery() != other.hasBattery()) return false;
      if (hasBattery()) {
        if (!getBattery()
            .equals(other.getBattery())) return false;
      }
      if (hasHealth() != other.hasHealth()) return false;
      if (hasHealth()) {
        if (!getHealth()
            .equals(other.getHealth())) return false;
      }
      if (hasDateTime() != other.hasDateTime()) return false;
      if (hasDateTime()) {
        if (!getDateTime()
            .equals(other.getDateTime())) return false;
      }
      if (hasRssi() != other.hasRssi()) return false;
      if (hasRssi()) {
        if (getRssi()
            != other.getRssi()) return false;
      }
      if (hasSleepData() != other.hasSleepData()) return false;
      if (hasSleepData()) {
        if (!getSleepData()
            .equals(other.getSleepData())) return false;
      }
      if (hasSportType() != other.hasSportType()) return false;
      if (hasSportType()) {
        if (getSportType()
            != other.getSportType()) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasSosSignal()) {
        hash = (37 * hash) + SOS_SIGNAL_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getSosSignal());
      }
      if (hasWakeUp()) {
        hash = (37 * hash) + WAKE_UP_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getWakeUp());
      }
      if (getTrackDataCount() > 0) {
        hash = (37 * hash) + TRACK_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getTrackDataList().hashCode();
      }
      if (hasBattery()) {
        hash = (37 * hash) + BATTERY_FIELD_NUMBER;
        hash = (53 * hash) + getBattery().hashCode();
      }
      if (hasHealth()) {
        hash = (37 * hash) + HEALTH_FIELD_NUMBER;
        hash = (53 * hash) + getHealth().hashCode();
      }
      if (hasDateTime()) {
        hash = (37 * hash) + DATE_TIME_FIELD_NUMBER;
        hash = (53 * hash) + getDateTime().hashCode();
      }
      if (hasRssi()) {
        hash = (37 * hash) + RSSI_FIELD_NUMBER;
        hash = (53 * hash) + getRssi();
      }
      if (hasSleepData()) {
        hash = (37 * hash) + SLEEP_DATA_FIELD_NUMBER;
        hash = (53 * hash) + getSleepData().hashCode();
      }
      if (hasSportType()) {
        hash = (37 * hash) + SPORT_TYPE_FIELD_NUMBER;
        hash = (53 * hash) + getSportType();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static OM0Report parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static OM0Report parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static OM0Report parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static OM0Report parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static OM0Report parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static OM0Report parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static OM0Report parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static OM0Report parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static OM0Report parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static OM0Report parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static OM0Report parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static OM0Report parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(OM0Report prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @Override
    protected Builder newBuilderForType(
        BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code OM0Report}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:OM0Report)
        OM0ReportOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return Om0Command.internal_static_OM0Report_descriptor;
      }

      @Override
      protected FieldAccessorTable
          internalGetFieldAccessorTable() {
        return Om0Command.internal_static_OM0Report_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                OM0Report.class, Builder.class);
      }

      // Construct using Om0Command.OM0Report.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getTrackDataFieldBuilder();
          getBatteryFieldBuilder();
          getHealthFieldBuilder();
          getDateTimeFieldBuilder();
          getSleepDataFieldBuilder();
        }
      }
      @Override
      public Builder clear() {
        super.clear();
        sosSignal_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        wakeUp_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (trackDataBuilder_ == null) {
          trackData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          trackDataBuilder_.clear();
        }
        if (batteryBuilder_ == null) {
          battery_ = null;
        } else {
          batteryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        if (healthBuilder_ == null) {
          health_ = null;
        } else {
          healthBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        if (dateTimeBuilder_ == null) {
          dateTime_ = null;
        } else {
          dateTimeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        rssi_ = 0;
        bitField0_ = (bitField0_ & ~0x00000040);
        if (sleepDataBuilder_ == null) {
          sleepData_ = null;
        } else {
          sleepDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        sportType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }

      @Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return Om0Command.internal_static_OM0Report_descriptor;
      }

      @Override
      public OM0Report getDefaultInstanceForType() {
        return OM0Report.getDefaultInstance();
      }

      @Override
      public OM0Report build() {
        OM0Report result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @Override
      public OM0Report buildPartial() {
        OM0Report result = new OM0Report(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.sosSignal_ = sosSignal_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.wakeUp_ = wakeUp_;
          to_bitField0_ |= 0x00000002;
        }
        if (trackDataBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0)) {
            trackData_ = java.util.Collections.unmodifiableList(trackData_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.trackData_ = trackData_;
        } else {
          result.trackData_ = trackDataBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          if (batteryBuilder_ == null) {
            result.battery_ = battery_;
          } else {
            result.battery_ = batteryBuilder_.build();
          }
          to_bitField0_ |= 0x00000004;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          if (healthBuilder_ == null) {
            result.health_ = health_;
          } else {
            result.health_ = healthBuilder_.build();
          }
          to_bitField0_ |= 0x00000008;
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          if (dateTimeBuilder_ == null) {
            result.dateTime_ = dateTime_;
          } else {
            result.dateTime_ = dateTimeBuilder_.build();
          }
          to_bitField0_ |= 0x00000010;
        }
        if (((from_bitField0_ & 0x00000040) != 0)) {
          result.rssi_ = rssi_;
          to_bitField0_ |= 0x00000020;
        }
        if (((from_bitField0_ & 0x00000080) != 0)) {
          if (sleepDataBuilder_ == null) {
            result.sleepData_ = sleepData_;
          } else {
            result.sleepData_ = sleepDataBuilder_.build();
          }
          to_bitField0_ |= 0x00000040;
        }
        if (((from_bitField0_ & 0x00000100) != 0)) {
          result.sportType_ = sportType_;
          to_bitField0_ |= 0x00000080;
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @Override
      public Builder clone() {
        return super.clone();
      }
      @Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.setField(field, value);
      }
      @Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          Object value) {
        return super.addRepeatedField(field, value);
      }
      @Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof OM0Report) {
          return mergeFrom((OM0Report)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(OM0Report other) {
        if (other == OM0Report.getDefaultInstance()) return this;
        if (other.hasSosSignal()) {
          setSosSignal(other.getSosSignal());
        }
        if (other.hasWakeUp()) {
          setWakeUp(other.getWakeUp());
        }
        if (trackDataBuilder_ == null) {
          if (!other.trackData_.isEmpty()) {
            if (trackData_.isEmpty()) {
              trackData_ = other.trackData_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureTrackDataIsMutable();
              trackData_.addAll(other.trackData_);
            }
            onChanged();
          }
        } else {
          if (!other.trackData_.isEmpty()) {
            if (trackDataBuilder_.isEmpty()) {
              trackDataBuilder_.dispose();
              trackDataBuilder_ = null;
              trackData_ = other.trackData_;
              bitField0_ = (bitField0_ & ~0x00000004);
              trackDataBuilder_ =
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getTrackDataFieldBuilder() : null;
            } else {
              trackDataBuilder_.addAllMessages(other.trackData_);
            }
          }
        }
        if (other.hasBattery()) {
          mergeBattery(other.getBattery());
        }
        if (other.hasHealth()) {
          mergeHealth(other.getHealth());
        }
        if (other.hasDateTime()) {
          mergeDateTime(other.getDateTime());
        }
        if (other.hasRssi()) {
          setRssi(other.getRssi());
        }
        if (other.hasSleepData()) {
          mergeSleepData(other.getSleepData());
        }
        if (other.hasSportType()) {
          setSportType(other.getSportType());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @Override
      public final boolean isInitialized() {
        for (int i = 0; i < getTrackDataCount(); i++) {
          if (!getTrackData(i).isInitialized()) {
            return false;
          }
        }
        if (hasBattery()) {
          if (!getBattery().isInitialized()) {
            return false;
          }
        }
        if (hasHealth()) {
          if (!getHealth().isInitialized()) {
            return false;
          }
        }
        if (hasDateTime()) {
          if (!getDateTime().isInitialized()) {
            return false;
          }
        }
        if (hasSleepData()) {
          if (!getSleepData().isInitialized()) {
            return false;
          }
        }
        return true;
      }

      @Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        OM0Report parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (OM0Report) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private boolean sosSignal_ ;
      /**
       * <code>optional bool sos_signal = 1;</code>
       * @return Whether the sosSignal field is set.
       */
      public boolean hasSosSignal() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <code>optional bool sos_signal = 1;</code>
       * @return The sosSignal.
       */
      public boolean getSosSignal() {
        return sosSignal_;
      }
      /**
       * <code>optional bool sos_signal = 1;</code>
       * @param value The sosSignal to set.
       * @return This builder for chaining.
       */
      public Builder setSosSignal(boolean value) {
        bitField0_ |= 0x00000001;
        sosSignal_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool sos_signal = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearSosSignal() {
        bitField0_ = (bitField0_ & ~0x00000001);
        sosSignal_ = false;
        onChanged();
        return this;
      }

      private boolean wakeUp_ ;
      /**
       * <code>optional bool wake_up = 2;</code>
       * @return Whether the wakeUp field is set.
       */
      public boolean hasWakeUp() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <code>optional bool wake_up = 2;</code>
       * @return The wakeUp.
       */
      public boolean getWakeUp() {
        return wakeUp_;
      }
      /**
       * <code>optional bool wake_up = 2;</code>
       * @param value The wakeUp to set.
       * @return This builder for chaining.
       */
      public Builder setWakeUp(boolean value) {
        bitField0_ |= 0x00000002;
        wakeUp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool wake_up = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearWakeUp() {
        bitField0_ = (bitField0_ & ~0x00000002);
        wakeUp_ = false;
        onChanged();
        return this;
      }

      private java.util.List<OM0TrackData> trackData_ =
        java.util.Collections.emptyList();
      private void ensureTrackDataIsMutable() {
        if (!((bitField0_ & 0x00000004) != 0)) {
          trackData_ = new java.util.ArrayList<OM0TrackData>(trackData_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          OM0TrackData, OM0TrackData.Builder, OM0TrackDataOrBuilder> trackDataBuilder_;

      /**
       * <code>repeated .OM0TrackData track_data = 3;</code>
       */
      public java.util.List<OM0TrackData> getTrackDataList() {
        if (trackDataBuilder_ == null) {
          return java.util.Collections.unmodifiableList(trackData_);
        } else {
          return trackDataBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .OM0TrackData track_data = 3;</code>
       */
      public int getTrackDataCount() {
        if (trackDataBuilder_ == null) {
          return trackData_.size();
        } else {
          return trackDataBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .OM0TrackData track_data = 3;</code>
       */
      public OM0TrackData getTrackData(int index) {
        if (trackDataBuilder_ == null) {
          return trackData_.get(index);
        } else {
          return trackDataBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .OM0TrackData track_data = 3;</code>
       */
      public Builder setTrackData(
          int index, OM0TrackData value) {
        if (trackDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTrackDataIsMutable();
          trackData_.set(index, value);
          onChanged();
        } else {
          trackDataBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .OM0TrackData track_data = 3;</code>
       */
      public Builder setTrackData(
          int index, OM0TrackData.Builder builderForValue) {
        if (trackDataBuilder_ == null) {
          ensureTrackDataIsMutable();
          trackData_.set(index, builderForValue.build());
          onChanged();
        } else {
          trackDataBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .OM0TrackData track_data = 3;</code>
       */
      public Builder addTrackData(OM0TrackData value) {
        if (trackDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTrackDataIsMutable();
          trackData_.add(value);
          onChanged();
        } else {
          trackDataBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .OM0TrackData track_data = 3;</code>
       */
      public Builder addTrackData(
          int index, OM0TrackData value) {
        if (trackDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTrackDataIsMutable();
          trackData_.add(index, value);
          onChanged();
        } else {
          trackDataBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .OM0TrackData track_data = 3;</code>
       */
      public Builder addTrackData(
          OM0TrackData.Builder builderForValue) {
        if (trackDataBuilder_ == null) {
          ensureTrackDataIsMutable();
          trackData_.add(builderForValue.build());
          onChanged();
        } else {
          trackDataBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .OM0TrackData track_data = 3;</code>
       */
      public Builder addTrackData(
          int index, OM0TrackData.Builder builderForValue) {
        if (trackDataBuilder_ == null) {
          ensureTrackDataIsMutable();
          trackData_.add(index, builderForValue.build());
          onChanged();
        } else {
          trackDataBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .OM0TrackData track_data = 3;</code>
       */
      public Builder addAllTrackData(
          Iterable<? extends OM0TrackData> values) {
        if (trackDataBuilder_ == null) {
          ensureTrackDataIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, trackData_);
          onChanged();
        } else {
          trackDataBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .OM0TrackData track_data = 3;</code>
       */
      public Builder clearTrackData() {
        if (trackDataBuilder_ == null) {
          trackData_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          trackDataBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .OM0TrackData track_data = 3;</code>
       */
      public Builder removeTrackData(int index) {
        if (trackDataBuilder_ == null) {
          ensureTrackDataIsMutable();
          trackData_.remove(index);
          onChanged();
        } else {
          trackDataBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .OM0TrackData track_data = 3;</code>
       */
      public OM0TrackData.Builder getTrackDataBuilder(
          int index) {
        return getTrackDataFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .OM0TrackData track_data = 3;</code>
       */
      public OM0TrackDataOrBuilder getTrackDataOrBuilder(
          int index) {
        if (trackDataBuilder_ == null) {
          return trackData_.get(index);  } else {
          return trackDataBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .OM0TrackData track_data = 3;</code>
       */
      public java.util.List<? extends OM0TrackDataOrBuilder>
           getTrackDataOrBuilderList() {
        if (trackDataBuilder_ != null) {
          return trackDataBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(trackData_);
        }
      }
      /**
       * <code>repeated .OM0TrackData track_data = 3;</code>
       */
      public OM0TrackData.Builder addTrackDataBuilder() {
        return getTrackDataFieldBuilder().addBuilder(
            OM0TrackData.getDefaultInstance());
      }
      /**
       * <code>repeated .OM0TrackData track_data = 3;</code>
       */
      public OM0TrackData.Builder addTrackDataBuilder(
          int index) {
        return getTrackDataFieldBuilder().addBuilder(
            index, OM0TrackData.getDefaultInstance());
      }
      /**
       * <code>repeated .OM0TrackData track_data = 3;</code>
       */
      public java.util.List<OM0TrackData.Builder>
           getTrackDataBuilderList() {
        return getTrackDataFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          OM0TrackData, OM0TrackData.Builder, OM0TrackDataOrBuilder>
          getTrackDataFieldBuilder() {
        if (trackDataBuilder_ == null) {
          trackDataBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              OM0TrackData, OM0TrackData.Builder, OM0TrackDataOrBuilder>(
                  trackData_,
                  ((bitField0_ & 0x00000004) != 0),
                  getParentForChildren(),
                  isClean());
          trackData_ = null;
        }
        return trackDataBuilder_;
      }

      private RealtimeData.RtBattery battery_;
      private com.google.protobuf.SingleFieldBuilderV3<
          RealtimeData.RtBattery, RealtimeData.RtBattery.Builder, RealtimeData.RtBatteryOrBuilder> batteryBuilder_;
      /**
       * <code>optional .RtBattery battery = 4;</code>
       * @return Whether the battery field is set.
       */
      public boolean hasBattery() {
        return ((bitField0_ & 0x00000008) != 0);
      }
      /**
       * <code>optional .RtBattery battery = 4;</code>
       * @return The battery.
       */
      public RealtimeData.RtBattery getBattery() {
        if (batteryBuilder_ == null) {
          return battery_ == null ? RealtimeData.RtBattery.getDefaultInstance() : battery_;
        } else {
          return batteryBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .RtBattery battery = 4;</code>
       */
      public Builder setBattery(RealtimeData.RtBattery value) {
        if (batteryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          battery_ = value;
          onChanged();
        } else {
          batteryBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .RtBattery battery = 4;</code>
       */
      public Builder setBattery(
          RealtimeData.RtBattery.Builder builderForValue) {
        if (batteryBuilder_ == null) {
          battery_ = builderForValue.build();
          onChanged();
        } else {
          batteryBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .RtBattery battery = 4;</code>
       */
      public Builder mergeBattery(RealtimeData.RtBattery value) {
        if (batteryBuilder_ == null) {
          if (((bitField0_ & 0x00000008) != 0) &&
              battery_ != null &&
              battery_ != RealtimeData.RtBattery.getDefaultInstance()) {
            battery_ =
              RealtimeData.RtBattery.newBuilder(battery_).mergeFrom(value).buildPartial();
          } else {
            battery_ = value;
          }
          onChanged();
        } else {
          batteryBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .RtBattery battery = 4;</code>
       */
      public Builder clearBattery() {
        if (batteryBuilder_ == null) {
          battery_ = null;
          onChanged();
        } else {
          batteryBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       * <code>optional .RtBattery battery = 4;</code>
       */
      public RealtimeData.RtBattery.Builder getBatteryBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getBatteryFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .RtBattery battery = 4;</code>
       */
      public RealtimeData.RtBatteryOrBuilder getBatteryOrBuilder() {
        if (batteryBuilder_ != null) {
          return batteryBuilder_.getMessageOrBuilder();
        } else {
          return battery_ == null ?
              RealtimeData.RtBattery.getDefaultInstance() : battery_;
        }
      }
      /**
       * <code>optional .RtBattery battery = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          RealtimeData.RtBattery, RealtimeData.RtBattery.Builder, RealtimeData.RtBatteryOrBuilder>
          getBatteryFieldBuilder() {
        if (batteryBuilder_ == null) {
          batteryBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              RealtimeData.RtBattery, RealtimeData.RtBattery.Builder, RealtimeData.RtBatteryOrBuilder>(
                  getBattery(),
                  getParentForChildren(),
                  isClean());
          battery_ = null;
        }
        return batteryBuilder_;
      }

      private RealtimeData.RtHealth health_;
      private com.google.protobuf.SingleFieldBuilderV3<
          RealtimeData.RtHealth, RealtimeData.RtHealth.Builder, RealtimeData.RtHealthOrBuilder> healthBuilder_;
      /**
       * <code>optional .RtHealth health = 5;</code>
       * @return Whether the health field is set.
       */
      public boolean hasHealth() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <code>optional .RtHealth health = 5;</code>
       * @return The health.
       */
      public RealtimeData.RtHealth getHealth() {
        if (healthBuilder_ == null) {
          return health_ == null ? RealtimeData.RtHealth.getDefaultInstance() : health_;
        } else {
          return healthBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .RtHealth health = 5;</code>
       */
      public Builder setHealth(RealtimeData.RtHealth value) {
        if (healthBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          health_ = value;
          onChanged();
        } else {
          healthBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .RtHealth health = 5;</code>
       */
      public Builder setHealth(
          RealtimeData.RtHealth.Builder builderForValue) {
        if (healthBuilder_ == null) {
          health_ = builderForValue.build();
          onChanged();
        } else {
          healthBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .RtHealth health = 5;</code>
       */
      public Builder mergeHealth(RealtimeData.RtHealth value) {
        if (healthBuilder_ == null) {
          if (((bitField0_ & 0x00000010) != 0) &&
              health_ != null &&
              health_ != RealtimeData.RtHealth.getDefaultInstance()) {
            health_ =
              RealtimeData.RtHealth.newBuilder(health_).mergeFrom(value).buildPartial();
          } else {
            health_ = value;
          }
          onChanged();
        } else {
          healthBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .RtHealth health = 5;</code>
       */
      public Builder clearHealth() {
        if (healthBuilder_ == null) {
          health_ = null;
          onChanged();
        } else {
          healthBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       * <code>optional .RtHealth health = 5;</code>
       */
      public RealtimeData.RtHealth.Builder getHealthBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getHealthFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .RtHealth health = 5;</code>
       */
      public RealtimeData.RtHealthOrBuilder getHealthOrBuilder() {
        if (healthBuilder_ != null) {
          return healthBuilder_.getMessageOrBuilder();
        } else {
          return health_ == null ?
              RealtimeData.RtHealth.getDefaultInstance() : health_;
        }
      }
      /**
       * <code>optional .RtHealth health = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          RealtimeData.RtHealth, RealtimeData.RtHealth.Builder, RealtimeData.RtHealthOrBuilder>
          getHealthFieldBuilder() {
        if (healthBuilder_ == null) {
          healthBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              RealtimeData.RtHealth, RealtimeData.RtHealth.Builder, RealtimeData.RtHealthOrBuilder>(
                  getHealth(),
                  getParentForChildren(),
                  isClean());
          health_ = null;
        }
        return healthBuilder_;
      }

      private RealtimeData.DateTime dateTime_;
      private com.google.protobuf.SingleFieldBuilderV3<
          RealtimeData.DateTime, RealtimeData.DateTime.Builder, RealtimeData.DateTimeOrBuilder> dateTimeBuilder_;
      /**
       * <code>optional .DateTime date_time = 6;</code>
       * @return Whether the dateTime field is set.
       */
      public boolean hasDateTime() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <code>optional .DateTime date_time = 6;</code>
       * @return The dateTime.
       */
      public RealtimeData.DateTime getDateTime() {
        if (dateTimeBuilder_ == null) {
          return dateTime_ == null ? RealtimeData.DateTime.getDefaultInstance() : dateTime_;
        } else {
          return dateTimeBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .DateTime date_time = 6;</code>
       */
      public Builder setDateTime(RealtimeData.DateTime value) {
        if (dateTimeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          dateTime_ = value;
          onChanged();
        } else {
          dateTimeBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .DateTime date_time = 6;</code>
       */
      public Builder setDateTime(
          RealtimeData.DateTime.Builder builderForValue) {
        if (dateTimeBuilder_ == null) {
          dateTime_ = builderForValue.build();
          onChanged();
        } else {
          dateTimeBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .DateTime date_time = 6;</code>
       */
      public Builder mergeDateTime(RealtimeData.DateTime value) {
        if (dateTimeBuilder_ == null) {
          if (((bitField0_ & 0x00000020) != 0) &&
              dateTime_ != null &&
              dateTime_ != RealtimeData.DateTime.getDefaultInstance()) {
            dateTime_ =
              RealtimeData.DateTime.newBuilder(dateTime_).mergeFrom(value).buildPartial();
          } else {
            dateTime_ = value;
          }
          onChanged();
        } else {
          dateTimeBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .DateTime date_time = 6;</code>
       */
      public Builder clearDateTime() {
        if (dateTimeBuilder_ == null) {
          dateTime_ = null;
          onChanged();
        } else {
          dateTimeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       * <code>optional .DateTime date_time = 6;</code>
       */
      public RealtimeData.DateTime.Builder getDateTimeBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getDateTimeFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .DateTime date_time = 6;</code>
       */
      public RealtimeData.DateTimeOrBuilder getDateTimeOrBuilder() {
        if (dateTimeBuilder_ != null) {
          return dateTimeBuilder_.getMessageOrBuilder();
        } else {
          return dateTime_ == null ?
              RealtimeData.DateTime.getDefaultInstance() : dateTime_;
        }
      }
      /**
       * <code>optional .DateTime date_time = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          RealtimeData.DateTime, RealtimeData.DateTime.Builder, RealtimeData.DateTimeOrBuilder>
          getDateTimeFieldBuilder() {
        if (dateTimeBuilder_ == null) {
          dateTimeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              RealtimeData.DateTime, RealtimeData.DateTime.Builder, RealtimeData.DateTimeOrBuilder>(
                  getDateTime(),
                  getParentForChildren(),
                  isClean());
          dateTime_ = null;
        }
        return dateTimeBuilder_;
      }

      private int rssi_ ;
      /**
       * <code>optional fixed32 rssi = 7;</code>
       * @return Whether the rssi field is set.
       */
      public boolean hasRssi() {
        return ((bitField0_ & 0x00000040) != 0);
      }
      /**
       * <code>optional fixed32 rssi = 7;</code>
       * @return The rssi.
       */
      public int getRssi() {
        return rssi_;
      }
      /**
       * <code>optional fixed32 rssi = 7;</code>
       * @param value The rssi to set.
       * @return This builder for chaining.
       */
      public Builder setRssi(int value) {
        bitField0_ |= 0x00000040;
        rssi_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed32 rssi = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearRssi() {
        bitField0_ = (bitField0_ & ~0x00000040);
        rssi_ = 0;
        onChanged();
        return this;
      }

      private OM0SleepData sleepData_;
      private com.google.protobuf.SingleFieldBuilderV3<
          OM0SleepData, OM0SleepData.Builder, OM0SleepDataOrBuilder> sleepDataBuilder_;
      /**
       * <code>optional .OM0SleepData sleep_data = 8;</code>
       * @return Whether the sleepData field is set.
       */
      public boolean hasSleepData() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <code>optional .OM0SleepData sleep_data = 8;</code>
       * @return The sleepData.
       */
      public OM0SleepData getSleepData() {
        if (sleepDataBuilder_ == null) {
          return sleepData_ == null ? OM0SleepData.getDefaultInstance() : sleepData_;
        } else {
          return sleepDataBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .OM0SleepData sleep_data = 8;</code>
       */
      public Builder setSleepData(OM0SleepData value) {
        if (sleepDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          sleepData_ = value;
          onChanged();
        } else {
          sleepDataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .OM0SleepData sleep_data = 8;</code>
       */
      public Builder setSleepData(
          OM0SleepData.Builder builderForValue) {
        if (sleepDataBuilder_ == null) {
          sleepData_ = builderForValue.build();
          onChanged();
        } else {
          sleepDataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .OM0SleepData sleep_data = 8;</code>
       */
      public Builder mergeSleepData(OM0SleepData value) {
        if (sleepDataBuilder_ == null) {
          if (((bitField0_ & 0x00000080) != 0) &&
              sleepData_ != null &&
              sleepData_ != OM0SleepData.getDefaultInstance()) {
            sleepData_ =
              OM0SleepData.newBuilder(sleepData_).mergeFrom(value).buildPartial();
          } else {
            sleepData_ = value;
          }
          onChanged();
        } else {
          sleepDataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .OM0SleepData sleep_data = 8;</code>
       */
      public Builder clearSleepData() {
        if (sleepDataBuilder_ == null) {
          sleepData_ = null;
          onChanged();
        } else {
          sleepDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       * <code>optional .OM0SleepData sleep_data = 8;</code>
       */
      public OM0SleepData.Builder getSleepDataBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getSleepDataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .OM0SleepData sleep_data = 8;</code>
       */
      public OM0SleepDataOrBuilder getSleepDataOrBuilder() {
        if (sleepDataBuilder_ != null) {
          return sleepDataBuilder_.getMessageOrBuilder();
        } else {
          return sleepData_ == null ?
              OM0SleepData.getDefaultInstance() : sleepData_;
        }
      }
      /**
       * <code>optional .OM0SleepData sleep_data = 8;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          OM0SleepData, OM0SleepData.Builder, OM0SleepDataOrBuilder>
          getSleepDataFieldBuilder() {
        if (sleepDataBuilder_ == null) {
          sleepDataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              OM0SleepData, OM0SleepData.Builder, OM0SleepDataOrBuilder>(
                  getSleepData(),
                  getParentForChildren(),
                  isClean());
          sleepData_ = null;
        }
        return sleepDataBuilder_;
      }

      private int sportType_ ;
      /**
       * <code>optional fixed32 sport_type = 9;</code>
       * @return Whether the sportType field is set.
       */
      public boolean hasSportType() {
        return ((bitField0_ & 0x00000100) != 0);
      }
      /**
       * <code>optional fixed32 sport_type = 9;</code>
       * @return The sportType.
       */
      public int getSportType() {
        return sportType_;
      }
      /**
       * <code>optional fixed32 sport_type = 9;</code>
       * @param value The sportType to set.
       * @return This builder for chaining.
       */
      public Builder setSportType(int value) {
        bitField0_ |= 0x00000100;
        sportType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed32 sport_type = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearSportType() {
        bitField0_ = (bitField0_ & ~0x00000100);
        sportType_ = 0;
        onChanged();
        return this;
      }
      @Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:OM0Report)
    }

    // @@protoc_insertion_point(class_scope:OM0Report)
    private static final OM0Report DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new OM0Report();
    }

    public static OM0Report getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @Deprecated public static final com.google.protobuf.Parser<OM0Report>
        PARSER = new com.google.protobuf.AbstractParser<OM0Report>() {
      @Override
      public OM0Report parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new OM0Report(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<OM0Report> parser() {
      return PARSER;
    }

    @Override
    public com.google.protobuf.Parser<OM0Report> getParserForType() {
      return PARSER;
    }

    @Override
    public OM0Report getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_OM0TrackConf_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_OM0TrackConf_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_OM0SleepData_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_OM0SleepData_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_OM0Command_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_OM0Command_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_OM0TrackData_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_OM0TrackData_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_OM0Response_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_OM0Response_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_OM0Report_descriptor;
  private static final
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_OM0Report_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    String[] descriptorData = {
      "\n\021om0_command.proto\032\023realtime_data.proto" +
      "\"\327\001\n\014OM0TrackConf\022\014\n\004hash\030\001 \002(\007\022\020\n\010auto_" +
      "run\030\002 \002(\010\022\024\n\010interval\030\003 \002(\007:\00230\022\r\n\005model" +
      "\030\004 \001(\t\022\017\n\007version\030\005 \001(\t\022\025\n\rforce_upgrade" +
      "\030\006 \001(\010\022\'\n\017mc30_power_mode\030\007 \001(\0162\016.Mc30Po" +
      "wermode\022\026\n\016gps_auto_check\030\010 \001(\010\022\031\n\021gps_i" +
      "nterval_time\030\t \001(\007\"\202\001\n\014OM0SleepData\022\r\n\005s" +
      "core\030\001 \002(\007\022\020\n\010duration\030\002 \002(\007\022\021\n\tdeepslee" +
      "p\030\003 \002(\007\022\022\n\nsomnolence\030\004 \002(\007\022\023\n\013wakefulne" +
      "ss\030\005 \002(\007\022\025\n\004date\030\006 \002(\0132\007.RtTime\"R\n\nOM0Co" +
      "mmand\022!\n\ntrack_conf\030\001 \001(\0132\r.OM0TrackConf" +
      "\022!\n\nsleep_data\030\002 \001(\0132\r.OM0SleepData\"f\n\014O" +
      "M0TrackData\022\027\n\004time\030\001 \002(\0132\t.DateTime\022\025\n\004" +
      "gnss\030\002 \001(\0132\007.RtGNSS\022\n\n\002hr\030\003 \001(\007\022\032\n\010gps_t" +
      "ype\030\004 \001(\0162\010.GPSTYPE\"\032\n\013OM0Response\022\013\n\003re" +
      "t\030\001 \002(\010\"\356\001\n\tOM0Report\022\022\n\nsos_signal\030\001 \001(" +
      "\010\022\017\n\007wake_up\030\002 \001(\010\022!\n\ntrack_data\030\003 \003(\0132\r" +
      ".OM0TrackData\022\033\n\007battery\030\004 \001(\0132\n.RtBatte" +
      "ry\022\031\n\006health\030\005 \001(\0132\t.RtHealth\022\034\n\tdate_ti" +
      "me\030\006 \001(\0132\t.DateTime\022\014\n\004rssi\030\007 \001(\007\022!\n\nsle" +
      "ep_data\030\010 \001(\0132\r.OM0SleepData\022\022\n\nsport_ty" +
      "pe\030\t \001(\007*+\n\rMc30Powermode\022\010\n\004HIGH\020\000\022\007\n\003M" +
      "ID\020\001\022\007\n\003LOW\020\002*>\n\007GPSTYPE\022\010\n\004NULL\020\000\022\014\n\010TY" +
      "PE_BTS\020\001\022\r\n\tTYPE_WIFI\020\002\022\014\n\010TYPE_GPS\020\003B\tZ" +
      "\007./iwown"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
          RealtimeData.getDescriptor(),
        });
    internal_static_OM0TrackConf_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_OM0TrackConf_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_OM0TrackConf_descriptor,
        new String[] { "Hash", "AutoRun", "Interval", "Model", "Version", "ForceUpgrade", "Mc30PowerMode", "GpsAutoCheck", "GpsIntervalTime", });
    internal_static_OM0SleepData_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_OM0SleepData_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_OM0SleepData_descriptor,
        new String[] { "Score", "Duration", "Deepsleep", "Somnolence", "Wakefulness", "Date", });
    internal_static_OM0Command_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_OM0Command_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_OM0Command_descriptor,
        new String[] { "TrackConf", "SleepData", });
    internal_static_OM0TrackData_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_OM0TrackData_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_OM0TrackData_descriptor,
        new String[] { "Time", "Gnss", "Hr", "GpsType", });
    internal_static_OM0Response_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_OM0Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_OM0Response_descriptor,
        new String[] { "Ret", });
    internal_static_OM0Report_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_OM0Report_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_OM0Report_descriptor,
        new String[] { "SosSignal", "WakeUp", "TrackData", "Battery", "Health", "DateTime", "Rssi", "SleepData", "SportType", });
    RealtimeData.getDescriptor();
  }

  // @@protoc_insertion_point(outer_class_scope)
}
