context: // Generated by the protocol buffer compiler.  DO NOT EDIT!
  // source: POGOProtos/Networking/Envelopes/Signature.proto
  #pragma warning disable 1591, 0612, 3021
  #region Designer generated code
  
  using pb = global::Google.Protobuf;
  using pbc = global::Google.Protobuf.Collections;
  using pbr = global::Google.Protobuf.Reflection;
  using scg = global::System.Collections.Generic;
  namespace POGOProtos.Networking.Envelopes {
  
    /// <summary>Holder for reflection information generated from POGOProtos/Networking/Envelopes/Signature.proto</summary>
    public static partial class SignatureReflection {
  
      #region Descriptor
      /// <summary>File descriptor for POGOProtos/Networking/Envelopes/Signature.proto</summary>
      public static pbr::FileDescriptor Descriptor {
        get { return descriptor; }
      }
      private static pbr::FileDescriptor descriptor;
  
      static SignatureReflection() {
        byte[] descriptorData = global::System.Convert.FromBase64String(
            string.Concat(
              "Ci9QT0dPUHJvdG9zL05ldHdvcmtpbmcvRW52ZWxvcGVzL1NpZ25hdHVyZS5w",
              "cm90bxIfUE9HT1Byb3Rvcy5OZXR3b3JraW5nLkVudmVsb3BlcyLSDwoJU2ln",
              "bmF0dXJlEh0KFXRpbWVzdGFtcF9zaW5jZV9zdGFydBgCIAEoBBJMCgxsb2Nh",
              "dGlvbl9maXgYBCADKAsyNi5QT0dPUHJvdG9zLk5ldHdvcmtpbmcuRW52ZWxv",
              "cGVzLlNpZ25hdHVyZS5Mb2NhdGlvbkZpeBJLCghncHNfaW5mbxgFIAEoCzI5",
              "LlBPR09Qcm90b3MuTmV0d29ya2luZy5FbnZlbG9wZXMuU2lnbmF0dXJlLkFu",
              "ZHJvaWRHcHNJbmZvEkoKC3NlbnNvcl9pbmZvGAcgASgLMjUuUE9HT1Byb3Rv",
              "cy5OZXR3b3JraW5nLkVudmVsb3Blcy5TaWduYXR1cmUuU2Vuc29ySW5mbxJK",
              "CgtkZXZpY2VfaW5mbxgIIAEoCzI1LlBPR09Qcm90b3MuTmV0d29ya2luZy5F",
              "bnZlbG9wZXMuU2lnbmF0dXJlLkRldmljZUluZm8SUgoPYWN0aXZpdHlfc3Rh",
              "dHVzGAkgASgLMjkuUE9HT1Byb3Rvcy5OZXR3b3JraW5nLkVudmVsb3Blcy5T",
              "aWduYXR1cmUuQWN0aXZpdHlTdGF0dXMSFgoObG9jYXRpb25faGFzaDEYCiAB",
              "KA0SFgoObG9jYXRpb25faGFzaDIYFCABKA0SFAoMc2Vzc2lvbl9oYXNoGBYg",
              "ASgMEhEKCXRpbWVzdGFtcBgXIAEoBBIUCgxyZXF1ZXN0X2hhc2gYGCADKAQS",
              "EQoJdW5rbm93bjI1GBkgASgDGogCCgtMb2NhdGlvbkZpeBIQCghwcm92aWRl",
              "chgBIAEoCRIaChJ0aW1lc3RhbXBfc25hcHNob3QYAiABKAQSEAoIYWx0aXR1",
              "ZGUYBCABKAISEAoIbGF0aXR1ZGUYDSABKAISEQoJbG9uZ2l0dWRlGA4gASgC",
              "Eg0KBXNwZWVkGBIgASgCEg4KBmNvdXJzZRgUIAEoAhIbChNob3Jpem9udGFs",
              "X2FjY3VyYWN5GBUgASgCEhkKEXZlcnRpY2FsX2FjY3VyYWN5GBYgASgCEhcK",
              "D3Byb3ZpZGVyX3N0YXR1cxgaIAEoBBINCgVmbG9vchgbIAEoDRIVCg1sb2Nh",
              "dGlvbl90eXBlGBwgASgEGq8BCg5BbmRyb2lkR3BzSW5mbxITCgt0aW1lX3Rv",
              "X2ZpeBgBIAEoBBIWCg5zYXRlbGxpdGVzX3BybhgCIAMoBRIPCgdhemltdXRo",
              "GAMgAygCEhEKCWVsZXZhdGlvbhgEIAMoAhILCgNzbnIYBSADKAISEwoLaGFz",
              "X2FsbWFuYWMYBiADKAgSFQoNaGFzX2VwaGVtZXJpcxgHIAMoCBITCgt1c2Vk",
              "X2luX2ZpeBgIIAMoCBrEAwoKU2Vuc29ySW5mbxIaChJ0aW1lc3RhbXBfc25h",
              "cHNob3QYASABKAQSHQoVbGluZWFyX2FjY2VsZXJhdGlvbl94GAMgASgBEh0K",
              "FWxpbmVhcl9hY2NlbGVyYXRpb25feRgEIAEoARIdChVsaW5lYXJfYWNjZWxl",
              "cmF0aW9uX3oYBSABKAESGAoQbWFnbmV0aWNfZmllbGRfeBgGIAEoARIYChBt",
              "YWduZXRpY19maWVsZF95GAcgASgBEhgKEG1hZ25ldGljX2ZpZWxkX3oYCCAB",
              "KAESGQoRcm90YXRpb25fdmVjdG9yX3gYCiABKAESGQoRcm90YXRpb25fdmVj",
              "dG9yX3kYCyABKAESGQoRcm90YXRpb25fdmVjdG9yX3oYDCABKAESFwoPZ3ly",
              "b3Njb3BlX3Jhd194GA0gASgBEhcKD2d5cm9zY29wZV9yYXdfeRgOIAEoARIX",
              "Cg9neXJvc2NvcGVfcmF3X3oYDyABKAESEQoJZ3Jhdml0eV94GBAgASgBEhEK",
              "CWdyYXZpdHlfeRgRIAEoARIRCglncmF2aXR5X3oYEiABKAESGgoSYWNjZWxl",
              "cm9tZXRlcl9heGVzGBMgASgEGtoCCgpEZXZpY2VJbmZvEhEKCWRldmljZV9p",
              "ZBgBIAEoCRIaChJhbmRyb2lkX2JvYXJkX25hbWUYAiABKAkSGgoSYW5kcm9p",
              "ZF9ib290bG9hZGVyGAMgASgJEhQKDGRldmljZV9icmFuZBgEIAEoCRIUCgxk",
              "ZXZpY2VfbW9kZWwYBSABKAkSHwoXZGV2aWNlX21vZGVsX2lkZW50aWZpZXIY",
              "BiABKAkSGQoRZGV2aWNlX21vZGVsX2Jvb3QYByABKAkSHQoVaGFyZHdhcmVf",
              "bWFudWZhY3R1cmVyGAggASgJEhYKDmhhcmR3YXJlX21vZGVsGAkgASgJEhYK",
              "DmZpcm13YXJlX2JyYW5kGAogASgJEhUKDWZpcm13YXJlX3RhZ3MYDCABKAkS",
              "FQoNZmlybXdhcmVfdHlwZRgNIAEoCRIcChRmaXJtd2FyZV9maW5nZXJwcmlu",
              "dBgOIAEoCRq7AQoOQWN0aXZpdHlTdGF0dXMSFQoNc3RhcnRfdGltZV9tcxgB",
              "IAEoBBIWCg51bmtub3duX3N0YXR1cxgCIAEoCBIPCgd3YWxraW5nGAMgASgI",
              "Eg8KB3J1bm5pbmcYBCABKAgSEgoKc3RhdGlvbmFyeRgFIAEoCBISCgphdXRv",
              "bW90aXZlGAYgASgIEg8KB3RpbHRpbmcYByABKAgSDwoHY3ljbGluZxgIIAEo",
              "CBIOCgZzdGF0dXMYCSABKAxiBnByb3RvMw=="));
        descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
            new pbr::FileDescriptor[] { },
            new pbr::GeneratedClrTypeInfo(null, new pbr::GeneratedClrTypeInfo[] {
              new pbr::GeneratedClrTypeInfo(typeof(global::POGOProtos.Networking.Envelopes.Signature), global::POGOProtos.Networking.Envelopes.Signature.Parser, new[]{ "TimestampSinceStart", "LocationFix", "GpsInfo", "SensorInfo", "DeviceInfo", "ActivityStatus", "LocationHash1", "LocationHash2", "SessionHash", "Timestamp", "RequestHash", "Unknown25" }, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::POGOProtos.Networking.Envelopes.Signature.Types.LocationFix), global::POGOProtos.Networking.Envelopes.Signature.Types.LocationFix.Parser, new[]{ "Provider", "TimestampSnapshot", "Altitude", "Latitude", "Longitude", "Speed", "Course", "HorizontalAccuracy", "VerticalAccuracy", "ProviderStatus", "Floor", "LocationType" }, null, null, null),
              new pbr::GeneratedClrTypeInfo(typeof(global::POGOProtos.Networking.Envelopes.Signature.Types.AndroidGpsInfo), global::POGOProtos.Networking.Envelopes.Signature.Types.AndroidGpsInfo.Parser, new[]{ "TimeToFix", "SatellitesPrn", "Azimuth", "Elevation", "Snr", "HasAlmanac", "HasEphemeris", "UsedInFix" }, null, null, null),
              new pbr::GeneratedClrTypeInfo(typeof(global::POGOProtos.Networking.Envelopes.Signature.Types.SensorInfo), global::POGOProtos.Networking.Envelopes.Signature.Types.SensorInfo.Parser, new[]{ "TimestampSnapshot", "LinearAccelerationX", "LinearAccelerationY", "LinearAccelerationZ", "MagneticFieldX", "MagneticFieldY", "MagneticFieldZ", "RotationVectorX", "RotationVectorY", "RotationVectorZ", "GyroscopeRawX", "GyroscopeRawY", "GyroscopeRawZ", "GravityX", "GravityY", "GravityZ", "AccelerometerAxes" }, null, null, null),
              new pbr::GeneratedClrTypeInfo(typeof(global::POGOProtos.Networking.Envelopes.Signature.Types.DeviceInfo), global::POGOProtos.Networking.Envelopes.Signature.Types.DeviceInfo.Parser, new[]{ "DeviceId", "AndroidBoardName", "AndroidBootloader", "DeviceBrand", "DeviceModel", "DeviceModelIdentifier", "DeviceModelBoot", "HardwareManufacturer", "HardwareModel", "FirmwareBrand", "FirmwareTags", "FirmwareType", "FirmwareFingerprint" }, null, null, null),
              new pbr::GeneratedClrTypeInfo(typeof(global::POGOProtos.Networking.Envelopes.Signature.Types.ActivityStatus), global::POGOProtos.Networking.Envelopes.Signature.Types.ActivityStatus.Parser, new[]{ "StartTimeMs", "UnknownStatus", "Walking", "Running", "Stationary", "Automotive", "Tilting", "Cycling", "Status" }, null, null, null)})
            }));
      }
      #endregion
  
    }
    #region Messages
    public sealed partial class Signature : pb::IMessage<Signature> {
      private static readonly pb::MessageParser<Signature> _parser = new pb::MessageParser<Signature>(() => new Signature());
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public static pb::MessageParser<Signature> Parser { get { return _parser; } }
  
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public static pbr::MessageDescriptor Descriptor {
        get { return global::POGOProtos.Networking.Envelopes.SignatureReflection.Descriptor.MessageTypes[0]; }
      }
  
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      pbr::MessageDescriptor pb::IMessage.Descriptor {
        get { return Descriptor; }
      }
  
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public Signature() {
        OnConstruction();
      }
  
      partial void OnConstruction();
  
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public Signature(Signature other) : this() {
        timestampSinceStart_ = other.timestampSinceStart_;
        locationFix_ = other.locationFix_.Clone();
        GpsInfo = other.gpsInfo_ != null ? other.GpsInfo.Clone() : null;
        SensorInfo = other.sensorInfo_ != null ? other.SensorInfo.Clone() : null;
        DeviceInfo = other.deviceInfo_ != null ? other.DeviceInfo.Clone() : null;
        ActivityStatus = other.activityStatus_ != null ? other.ActivityStatus.Clone() : null;
        locationHash1_ = other.locationHash1_;
        locationHash2_ = other.locationHash2_;
        sessionHash_ = other.sessionHash_;
        timestamp_ = other.timestamp_;
        requestHash_ = other.requestHash_.Clone();
        unknown25_ = other.unknown25_;
      }
  
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public Signature Clone() {
        return new Signature(this);
      }
  
      /// <summary>Field number for the "timestamp_since_start" field.</summary>
      public const int TimestampSinceStartFieldNumber = 2;
      private ulong timestampSinceStart_;
      /// <summary>
      ///  in ms
      /// </summary>
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public ulong TimestampSinceStart {
        get { return timestampSinceStart_; }
        set {
          timestampSinceStart_ = value;
        }
      }
  
      /// <summary>Field number for the "location_fix" field.</summary>
      public const int LocationFixFieldNumber = 4;
      private static readonly pb::FieldCodec<global::POGOProtos.Networking.Envelopes.Signature.Types.LocationFix> _repeated_locationFix_codec
          = pb::FieldCodec.ForMessage(34, global::POGOProtos.Networking.Envelopes.Signature.Types.LocationFix.Parser);
      private readonly pbc::RepeatedField<global::POGOProtos.Networking.Envelopes.Signature.Types.LocationFix> locationFix_ = new pbc::RepeatedField<global::POGOProtos.Networking.Envelopes.Signature.Types.LocationFix>();
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public pbc::RepeatedField<global::POGOProtos.Networking.Envelopes.Signature.Types.LocationFix> LocationFix {
        get { return locationFix_; }
      }
  
      /// <summary>Field number for the "gps_info" field.</summary>
      public const int GpsInfoFieldNumber = 5;
      private global::POGOProtos.Networking.Envelopes.Signature.Types.AndroidGpsInfo gpsInfo_;
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public global::POGOProtos.Networking.Envelopes.Signature.Types.AndroidGpsInfo GpsInfo {
        get { return gpsInfo_; }
        set {
          gpsInfo_ = value;
        }
      }
  
      /// <summary>Field number for the "sensor_info" field.</summary>
      public const int SensorInfoFieldNumber = 7;
      private global::POGOProtos.Networking.Envelopes.Signature.Types.SensorInfo sensorInfo_;
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public global::POGOProtos.Networking.Envelopes.Signature.Types.SensorInfo SensorInfo {
        get { return sensorInfo_; }
        set {
          sensorInfo_ = value;
        }
      }
  
      /// <summary>Field number for the "device_info" field.</summary>
      public const int DeviceInfoFieldNumber = 8;
      private global::POGOProtos.Networking.Envelopes.Signature.Types.DeviceInfo deviceInfo_;
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public global::POGOProtos.Networking.Envelopes.Signature.Types.DeviceInfo DeviceInfo {
        get { return deviceInfo_; }
        set {
          deviceInfo_ = value;
        }
      }
  
      /// <summary>Field number for the "activity_status" field.</summary>
      public const int ActivityStatusFieldNumber = 9;
      private global::POGOProtos.Networking.Envelopes.Signature.Types.ActivityStatus activityStatus_;
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public global::POGOProtos.Networking.Envelopes.Signature.Types.ActivityStatus ActivityStatus {
        get { return activityStatus_; }
        set {
          activityStatus_ = value;
        }
      }
  
      /// <summary>Field number for the "location_hash1" field.</summary>
      public const int LocationHash1FieldNumber = 10;
      private uint locationHash1_;
      /// <summary>
      ///  Location1 hashed signed based on the auth_token or auth_info - xxHash32
      /// </summary>
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public uint LocationHash1 {
        get { return locationHash1_; }
        set {
          locationHash1_ = value;
        }
      }
  
      /// <summary>Field number for the "location_hash2" field.</summary>
      public const int LocationHash2FieldNumber = 20;
      private uint locationHash2_;
      /// <summary>
      ///  Location2 hashed (unsigned) - xxHash32
      /// </summary>
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public uint LocationHash2 {
        get { return locationHash2_; }
        set {
          locationHash2_ = value;
        }
      }
  
      /// <summary>Field number for the "session_hash" field.</summary>
      public const int SessionHashFieldNumber = 22;
      private pb::ByteString sessionHash_ = pb::ByteString.Empty;
      /// <summary>
      ///  16 bytes, unique per session
      /// </summary>
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public pb::ByteString SessionHash {
        get { return sessionHash_; }
        set {
          sessionHash_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
        }
      }
  
      /// <summary>Field number for the "timestamp" field.</summary>
      public const int TimestampFieldNumber = 23;
      private ulong timestamp_;
      /// <summary>
      ///  epoch timestamp in ms
      /// </summary>
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public ulong Timestamp {
        get { return timestamp_; }
        set {
          timestamp_ = value;
        }
      }
  
      /// <summary>Field number for the "request_hash" field.</summary>
      public const int RequestHashFieldNumber = 24;
      private static readonly pb::FieldCodec<ulong> _repeated_requestHash_codec
          = pb::FieldCodec.ForUInt64(194);
      private readonly pbc::RepeatedField<ulong> requestHash_ = new pbc::RepeatedField<ulong>();
      /// <summary>
      ///  hashes of each request message in a hashArray signed based on the auth_token or auth_info - xxhash64
      /// </summary>
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public pbc::RepeatedField<ulong> RequestHash {
        get { return requestHash_; }
      }
  
      /// <summary>Field number for the "unknown25" field.</summary>
      public const int Unknown25FieldNumber = 25;
      private long unknown25_;
      /// <summary>
      ///  for 0.33 its static -8537042734809897855 or 0x898654dd2753a481, generated via xxHash64("\"b8fa9757195897aae92c53dbcf8a60fb3d86d745\"".ToByteArray(), 0x88533787)
      /// </summary>
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public long Unknown25 {
        get { return unknown25_; }
        set {
          unknown25_ = value;
        }
      }
  
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public override bool Equals(object other) {
        return Equals(other as Signature);
      }
  
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public bool Equals(Signature other) {
        if (ReferenceEquals(other, null)) {
          return false;
        }
        if (ReferenceEquals(other, this)) {
          return true;
        }
        if (TimestampSinceStart != other.TimestampSinceStart) return false;
        if(!locationFix_.Equals(other.locationFix_)) return false;
        if (!object.Equals(GpsInfo, other.GpsInfo)) return false;
        if (!object.Equals(SensorInfo, other.SensorInfo)) return false;
        if (!object.Equals(DeviceInfo, other.DeviceInfo)) return false;
        if (!object.Equals(ActivityStatus, other.ActivityStatus)) return false;
        if (LocationHash1 != other.LocationHash1) return false;
        if (LocationHash2 != other.LocationHash2) return false;
        if (SessionHash != other.SessionHash) return false;
        if (Timestamp != other.Timestamp) return false;
        if(!requestHash_.Equals(other.requestHash_)) return false;
        if (Unknown25 != other.Unknown25) return false;
        return true;
      }
  
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public override int GetHashCode() {
        int hash = 1;
        if (TimestampSinceStart != 0UL) hash ^= TimestampSinceStart.GetHashCode();
        hash ^= locationFix_.GetHashCode();
        if (gpsInfo_ != null) hash ^= GpsInfo.GetHashCode();
        if (sensorInfo_ != null) hash ^= SensorInfo.GetHashCode();
        if (deviceInfo_ != null) hash ^= DeviceInfo.GetHashCode();
        if (activityStatus_ != null) hash ^= ActivityStatus.GetHashCode();
        if (LocationHash1 != 0) hash ^= LocationHash1.GetHashCode();
        if (LocationHash2 != 0) hash ^= LocationHash2.GetHashCode();
        if (SessionHash.Length != 0) hash ^= SessionHash.GetHashCode();
        if (Timestamp != 0UL) hash ^= Timestamp.GetHashCode();
        hash ^= requestHash_.GetHashCode();
        if (Unknown25 != 0L) hash ^= Unknown25.GetHashCode();
        return hash;
      }
  
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public override string ToString() {
        return pb::JsonFormatter.ToDiagnosticString(this);
      }
  
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public void WriteTo(pb::CodedOutputStream output) {
        if (TimestampSinceStart != 0UL) {
          output.WriteRawTag(16);
          output.WriteUInt64(TimestampSinceStart);
        }
        locationFix_.WriteTo(output, _repeated_locationFix_codec);
        if (gpsInfo_ != null) {
          output.WriteRawTag(42);
          output.WriteMessage(GpsInfo);
        }
        if (sensorInfo_ != null) {
          output.WriteRawTag(58);
          output.WriteMessage(SensorInfo);
        }
        if (deviceInfo_ != null) {
          output.WriteRawTag(66);
          output.WriteMessage(DeviceInfo);
        }
        if (activityStatus_ != null) {
          output.WriteRawTag(74);
          output.WriteMessage(ActivityStatus);
        }
        if (LocationHash1 != 0) {
          output.WriteRawTag(80);
          output.WriteUInt32(LocationHash1);
        }
        if (LocationHash2 != 0) {
          output.WriteRawTag(160, 1);
          output.WriteUInt32(LocationHash2);
        }
        if (SessionHash.Length != 0) {
          output.WriteRawTag(178, 1);
          output.WriteBytes(SessionHash);
        }
        if (Timestamp != 0UL) {
          output.WriteRawTag(184, 1);
          output.WriteUInt64(Timestamp);
        }
        requestHash_.WriteTo(output, _repeated_requestHash_codec);
        if (Unknown25 != 0L) {
          output.WriteRawTag(200, 1);
          output.WriteInt64(Unknown25);
        }
      }
  
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public int CalculateSize() {
        int size = 0;
        if (TimestampSinceStart != 0UL) {
          size += 1 + pb::CodedOutputStream.ComputeUInt64Size(TimestampSinceStart);
        }
        size += locationFix_.CalculateSize(_repeated_locationFix_codec);
        if (gpsInfo_ != null) {
          size += 1 + pb::CodedOutputStream.ComputeMessageSize(GpsInfo);
        }
        if (sensorInfo_ != null) {
          size += 1 + pb::CodedOutputStream.ComputeMessageSize(SensorInfo);
        }
        if (deviceInfo_ != null) {
          size += 1 + pb::CodedOutputStream.ComputeMessageSize(DeviceInfo);
        }
        if (activityStatus_ != null) {
          size += 1 + pb::CodedOutputStream.ComputeMessageSize(ActivityStatus);
        }
        if (LocationHash1 != 0) {
          size += 1 + pb::CodedOutputStream.ComputeUInt32Size(LocationHash1);
        }
        if (LocationHash2 != 0) {
          size += 2 + pb::CodedOutputStream.ComputeUInt32Size(LocationHash2);
        }
        if (SessionHash.Length != 0) {
          size += 2 + pb::CodedOutputStream.ComputeBytesSize(SessionHash);
        }
        if (Timestamp != 0UL) {
          size += 2 + pb::CodedOutputStream.ComputeUInt64Size(Timestamp);
        }
        size += requestHash_.CalculateSize(_repeated_requestHash_codec);
        if (Unknown25 != 0L) {
          size += 2 + pb::CodedOutputStream.ComputeInt64Size(Unknown25);
        }
        return size;
      }
  
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public void MergeFrom(Signature other) {
        if (other == null) {
          return;
        }
        if (other.TimestampSinceStart != 0UL) {
          TimestampSinceStart = other.TimestampSinceStart;
        }
        locationFix_.Add(other.locationFix_);
        if (other.gpsInfo_ != null) {
          if (gpsInfo_ == null) {
            gpsInfo_ = new global::POGOProtos.Networking.Envelopes.Signature.Types.AndroidGpsInfo();
          }
          GpsInfo.MergeFrom(other.GpsInfo);
        }
        if (other.sensorInfo_ != null) {
          if (sensorInfo_ == null) {
            sensorInfo_ = new global::POGOProtos.Networking.Envelopes.Signature.Types.SensorInfo();
          }
          SensorInfo.MergeFrom(other.SensorInfo);
        }
        if (other.deviceInfo_ != null) {
          if (deviceInfo_ == null) {
            deviceInfo_ = new global::POGOProtos.Networking.Envelopes.Signature.Types.DeviceInfo();
          }
          DeviceInfo.MergeFrom(other.DeviceInfo);
        }
        if (other.activityStatus_ != null) {
          if (activityStatus_ == null) {
            activityStatus_ = new global::POGOProtos.Networking.Envelopes.Signature.Types.ActivityStatus();
          }
          ActivityStatus.MergeFrom(other.ActivityStatus);
        }
        if (other.LocationHash1 != 0) {
          LocationHash1 = other.LocationHash1;
        }
        if (other.LocationHash2 != 0) {
          LocationHash2 = other.LocationHash2;
        }
        if (other.SessionHash.Length != 0) {
          SessionHash = other.SessionHash;
        }
        if (other.Timestamp != 0UL) {
          Timestamp = other.Timestamp;
        }
        requestHash_.Add(other.requestHash_);
        if (other.Unknown25 != 0L) {
          Unknown25 = other.Unknown25;
        }
      }
  
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public void MergeFrom(pb::CodedInputStream input) {
        uint tag;
        while ((tag = input.ReadTag()) != 0) {
          switch(tag) {
            default:
              input.SkipLastField();
              break;
            case 16: {
              TimestampSinceStart = input.ReadUInt64();
              break;
            }
            case 34: {
              locationFix_.AddEntriesFrom(input, _repeated_locationFix_codec);
              break;
            }
            case 42: {
              if (gpsInfo_ == null) {
                gpsInfo_ = new global::POGOProtos.Networking.Envelopes.Signature.Types.AndroidGpsInfo();
              }
              input.ReadMessage(gpsInfo_);
              break;
            }
            case 58: {
              if (sensorInfo_ == null) {
                sensorInfo_ = new global::POGOProtos.Networking.Envelopes.Signature.Types.SensorInfo();
              }
              input.ReadMessage(sensorInfo_);
              break;
            }
            case 66: {
              if (deviceInfo_ == null) {
                deviceInfo_ = new global::POGOProtos.Networking.Envelopes.Signature.Types.DeviceInfo();
              }
              input.ReadMessage(deviceInfo_);
              break;
            }
            case 74: {
              if (activityStatus_ == null) {
                activityStatus_ = new global::POGOProtos.Networking.Envelopes.Signature.Types.ActivityStatus();
              }
              input.ReadMessage(activityStatus_);
              break;
            }
            case 80: {
              LocationHash1 = input.ReadUInt32();
              break;
            }
            case 160: {
              LocationHash2 = input.ReadUInt32();
              break;
            }
            case 178: {
              SessionHash = input.ReadBytes();
              break;
            }
            case 184: {
              Timestamp = input.ReadUInt64();
              break;
            }
            case 194:
            case 192: {
              requestHash_.AddEntriesFrom(input, _repeated_requestHash_codec);
              break;
            }
            case 200: {
              Unknown25 = input.ReadInt64();
              break;
            }
          }
        }
      }
  
      #region Nested types
      /// <summary>Container for nested types declared in the Signature message type.</summary>
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public static partial class Types {
        public sealed partial class LocationFix : pb::IMessage<LocationFix> {
          private static readonly pb::MessageParser<LocationFix> _parser = new pb::MessageParser<LocationFix>(() => new LocationFix());
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public static pb::MessageParser<LocationFix> Parser { get { return _parser; } }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public static pbr::MessageDescriptor Descriptor {
            get { return global::POGOProtos.Networking.Envelopes.Signature.Descriptor.NestedTypes[0]; }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          pbr::MessageDescriptor pb::IMessage.Descriptor {
            get { return Descriptor; }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public LocationFix() {
            OnConstruction();
          }
  
          partial void OnConstruction();
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public LocationFix(LocationFix other) : this() {
            provider_ = other.provider_;
            timestampSnapshot_ = other.timestampSnapshot_;
            altitude_ = other.altitude_;
            latitude_ = other.latitude_;
            longitude_ = other.longitude_;
            speed_ = other.speed_;
            course_ = other.course_;
            horizontalAccuracy_ = other.horizontalAccuracy_;
            verticalAccuracy_ = other.verticalAccuracy_;
            providerStatus_ = other.providerStatus_;
            floor_ = other.floor_;
            locationType_ = other.locationType_;
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public LocationFix Clone() {
            return new LocationFix(this);
          }
  
          /// <summary>Field number for the "provider" field.</summary>
          public const int ProviderFieldNumber = 1;
          private string provider_ = "";
          /// <summary>
          ///  "network", "gps", "fused", possibly others
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public string Provider {
            get { return provider_; }
            set {
              provider_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
            }
          }
  
          /// <summary>Field number for the "timestamp_snapshot" field.</summary>
          public const int TimestampSnapshotFieldNumber = 2;
          private ulong timestampSnapshot_;
          /// <summary>
          ///  in ms since start
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public ulong TimestampSnapshot {
            get { return timestampSnapshot_; }
            set {
              timestampSnapshot_ = value;
            }
          }
  
          /// <summary>Field number for the "altitude" field.</summary>
          public const int AltitudeFieldNumber = 4;
          private float altitude_;
          /// <summary>
          ///  Confirmed on android/ios
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public float Altitude {
            get { return altitude_; }
            set {
              altitude_ = value;
            }
          }
  
          /// <summary>Field number for the "latitude" field.</summary>
          public const int LatitudeFieldNumber = 13;
          private float latitude_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public float Latitude {
            get { return latitude_; }
            set {
              latitude_ = value;
            }
          }
  
          /// <summary>Field number for the "longitude" field.</summary>
          public const int LongitudeFieldNumber = 14;
          private float longitude_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public float Longitude {
            get { return longitude_; }
            set {
              longitude_ = value;
            }
          }
  
          /// <summary>Field number for the "speed" field.</summary>
          public const int SpeedFieldNumber = 18;
          private float speed_;
          /// <summary>
          ///  iOS only (-1 for no reading available, speed in m/s)
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public float Speed {
            get { return speed_; }
            set {
              speed_ = value;
            }
          }
  
          /// <summary>Field number for the "course" field.</summary>
          public const int CourseFieldNumber = 20;
          private float course_;
          /// <summary>
          ///  iOS only (range seems to be -1 for not reading, and 0 to 360 for reading) confirmed by @marcel
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public float Course {
            get { return course_; }
            set {
              course_ = value;
            }
          }
  
          /// <summary>Field number for the "horizontal_accuracy" field.</summary>
          public const int HorizontalAccuracyFieldNumber = 21;
          private float horizontalAccuracy_;
          /// <summary>
          ///  in meters, both on Android and iOS
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public float HorizontalAccuracy {
            get { return horizontalAccuracy_; }
            set {
              horizontalAccuracy_ = value;
            }
          }
  
          /// <summary>Field number for the "vertical_accuracy" field.</summary>
          public const int VerticalAccuracyFieldNumber = 22;
          private float verticalAccuracy_;
          /// <summary>
          ///  iOS only
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public float VerticalAccuracy {
            get { return verticalAccuracy_; }
            set {
              verticalAccuracy_ = value;
            }
          }
  
          /// <summary>Field number for the "provider_status" field.</summary>
          public const int ProviderStatusFieldNumber = 26;
          private ulong providerStatus_;
          /// <summary>
          ///  Usually 3 (possibly GPS status: 1 = no fix, 2 = acquiring/inaccurate, 3 = fix acquired)
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public ulong ProviderStatus {
            get { return providerStatus_; }
            set {
              providerStatus_ = value;
            }
          }
  
          /// <summary>Field number for the "floor" field.</summary>
          public const int FloorFieldNumber = 27;
          private uint floor_;
          /// <summary>
          ///  On iOS there are some LocationFixes with unk26=1 and everything else empty
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public uint Floor {
            get { return floor_; }
            set {
              floor_ = value;
            }
          }
  
          /// <summary>Field number for the "location_type" field.</summary>
          public const int LocationTypeFieldNumber = 28;
          private ulong locationType_;
          /// <summary>
          ///  Always 1 (if there is data at all)
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public ulong LocationType {
            get { return locationType_; }
            set {
              locationType_ = value;
            }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public override bool Equals(object other) {
            return Equals(other as LocationFix);
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public bool Equals(LocationFix other) {
            if (ReferenceEquals(other, null)) {
              return false;
            }
            if (ReferenceEquals(other, this)) {
              return true;
            }
            if (Provider != other.Provider) return false;
            if (TimestampSnapshot != other.TimestampSnapshot) return false;
            if (Altitude != other.Altitude) return false;
            if (Latitude != other.Latitude) return false;
            if (Longitude != other.Longitude) return false;
            if (Speed != other.Speed) return false;
            if (Course != other.Course) return false;
            if (HorizontalAccuracy != other.HorizontalAccuracy) return false;
            if (VerticalAccuracy != other.VerticalAccuracy) return false;
            if (ProviderStatus != other.ProviderStatus) return false;
            if (Floor != other.Floor) return false;
            if (LocationType != other.LocationType) return false;
            return true;
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public override int GetHashCode() {
            int hash = 1;
            if (Provider.Length != 0) hash ^= Provider.GetHashCode();
            if (TimestampSnapshot != 0UL) hash ^= TimestampSnapshot.GetHashCode();
            if (Altitude != 0F) hash ^= Altitude.GetHashCode();
            if (Latitude != 0F) hash ^= Latitude.GetHashCode();
            if (Longitude != 0F) hash ^= Longitude.GetHashCode();
            if (Speed != 0F) hash ^= Speed.GetHashCode();
            if (Course != 0F) hash ^= Course.GetHashCode();
            if (HorizontalAccuracy != 0F) hash ^= HorizontalAccuracy.GetHashCode();
            if (VerticalAccuracy != 0F) hash ^= VerticalAccuracy.GetHashCode();
            if (ProviderStatus != 0UL) hash ^= ProviderStatus.GetHashCode();
            if (Floor != 0) hash ^= Floor.GetHashCode();
            if (LocationType != 0UL) hash ^= LocationType.GetHashCode();
            return hash;
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public override string ToString() {
            return pb::JsonFormatter.ToDiagnosticString(this);
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public void WriteTo(pb::CodedOutputStream output) {
            if (Provider.Length != 0) {
              output.WriteRawTag(10);
              output.WriteString(Provider);
            }
            if (TimestampSnapshot != 0UL) {
              output.WriteRawTag(16);
              output.WriteUInt64(TimestampSnapshot);
            }
            if (Altitude != 0F) {
              output.WriteRawTag(37);
              output.WriteFloat(Altitude);
            }
            if (Latitude != 0F) {
              output.WriteRawTag(109);
              output.WriteFloat(Latitude);
            }
            if (Longitude != 0F) {
              output.WriteRawTag(117);
              output.WriteFloat(Longitude);
            }
            if (Speed != 0F) {
              output.WriteRawTag(149, 1);
              output.WriteFloat(Speed);
            }
            if (Course != 0F) {
              output.WriteRawTag(165, 1);
              output.WriteFloat(Course);
            }
            if (HorizontalAccuracy != 0F) {
              output.WriteRawTag(173, 1);
              output.WriteFloat(HorizontalAccuracy);
            }
            if (VerticalAccuracy != 0F) {
              output.WriteRawTag(181, 1);
              output.WriteFloat(VerticalAccuracy);
            }
            if (ProviderStatus != 0UL) {
              output.WriteRawTag(208, 1);
              output.WriteUInt64(ProviderStatus);
            }
            if (Floor != 0) {
              output.WriteRawTag(216, 1);
              output.WriteUInt32(Floor);
            }
            if (LocationType != 0UL) {
              output.WriteRawTag(224, 1);
              output.WriteUInt64(LocationType);
            }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public int CalculateSize() {
            int size = 0;
            if (Provider.Length != 0) {
              size += 1 + pb::CodedOutputStream.ComputeStringSize(Provider);
            }
            if (TimestampSnapshot != 0UL) {
              size += 1 + pb::CodedOutputStream.ComputeUInt64Size(TimestampSnapshot);
            }
            if (Altitude != 0F) {
              size += 1 + 4;
            }
            if (Latitude != 0F) {
              size += 1 + 4;
            }
            if (Longitude != 0F) {
              size += 1 + 4;
            }
            if (Speed != 0F) {
              size += 2 + 4;
            }
            if (Course != 0F) {
              size += 2 + 4;
            }
            if (HorizontalAccuracy != 0F) {
              size += 2 + 4;
            }
            if (VerticalAccuracy != 0F) {
              size += 2 + 4;
            }
            if (ProviderStatus != 0UL) {
              size += 2 + pb::CodedOutputStream.ComputeUInt64Size(ProviderStatus);
            }
            if (Floor != 0) {
              size += 2 + pb::CodedOutputStream.ComputeUInt32Size(Floor);
            }
            if (LocationType != 0UL) {
              size += 2 + pb::CodedOutputStream.ComputeUInt64Size(LocationType);
            }
            return size;
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public void MergeFrom(LocationFix other) {
            if (other == null) {
              return;
            }
            if (other.Provider.Length != 0) {
              Provider = other.Provider;
            }
            if (other.TimestampSnapshot != 0UL) {
              TimestampSnapshot = other.TimestampSnapshot;
            }
            if (other.Altitude != 0F) {
              Altitude = other.Altitude;
            }
            if (other.Latitude != 0F) {
              Latitude = other.Latitude;
            }
            if (other.Longitude != 0F) {
              Longitude = other.Longitude;
            }
            if (other.Speed != 0F) {
              Speed = other.Speed;
            }
            if (other.Course != 0F) {
              Course = other.Course;
            }
            if (other.HorizontalAccuracy != 0F) {
              HorizontalAccuracy = other.HorizontalAccuracy;
            }
            if (other.VerticalAccuracy != 0F) {
              VerticalAccuracy = other.VerticalAccuracy;
            }
            if (other.ProviderStatus != 0UL) {
              ProviderStatus = other.ProviderStatus;
            }
            if (other.Floor != 0) {
              Floor = other.Floor;
            }
            if (other.LocationType != 0UL) {
              LocationType = other.LocationType;
            }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public void MergeFrom(pb::CodedInputStream input) {
            uint tag;
            while ((tag = input.ReadTag()) != 0) {
              switch(tag) {
                default:
                  input.SkipLastField();
                  break;
                case 10: {
                  Provider = input.ReadString();
                  break;
                }
                case 16: {
                  TimestampSnapshot = input.ReadUInt64();
                  break;
                }
                case 37: {
                  Altitude = input.ReadFloat();
                  break;
                }
                case 109: {
                  Latitude = input.ReadFloat();
                  break;
                }
                case 117: {
                  Longitude = input.ReadFloat();
                  break;
                }
                case 149: {
                  Speed = input.ReadFloat();
                  break;
                }
                case 165: {
                  Course = input.ReadFloat();
                  break;
                }
                case 173: {
                  HorizontalAccuracy = input.ReadFloat();
                  break;
                }
                case 181: {
                  VerticalAccuracy = input.ReadFloat();
                  break;
                }
                case 208: {
                  ProviderStatus = input.ReadUInt64();
                  break;
                }
                case 216: {
                  Floor = input.ReadUInt32();
                  break;
                }
                case 224: {
                  LocationType = input.ReadUInt64();
                  break;
                }
              }
            }
          }
  
        }
  
        /// <summary>
        ///  don't really care about this since we're not using it
        /// </summary>
        public sealed partial class AndroidGpsInfo : pb::IMessage<AndroidGpsInfo> {
          private static readonly pb::MessageParser<AndroidGpsInfo> _parser = new pb::MessageParser<AndroidGpsInfo>(() => new AndroidGpsInfo());
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public static pb::MessageParser<AndroidGpsInfo> Parser { get { return _parser; } }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public static pbr::MessageDescriptor Descriptor {
            get { return global::POGOProtos.Networking.Envelopes.Signature.Descriptor.NestedTypes[1]; }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          pbr::MessageDescriptor pb::IMessage.Descriptor {
            get { return Descriptor; }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public AndroidGpsInfo() {
            OnConstruction();
          }
  
          partial void OnConstruction();
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public AndroidGpsInfo(AndroidGpsInfo other) : this() {
            timeToFix_ = other.timeToFix_;
            satellitesPrn_ = other.satellitesPrn_.Clone();
            azimuth_ = other.azimuth_.Clone();
            elevation_ = other.elevation_.Clone();
            snr_ = other.snr_.Clone();
            hasAlmanac_ = other.hasAlmanac_.Clone();
            hasEphemeris_ = other.hasEphemeris_.Clone();
            usedInFix_ = other.usedInFix_.Clone();
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public AndroidGpsInfo Clone() {
            return new AndroidGpsInfo(this);
          }
  
          /// <summary>Field number for the "time_to_fix" field.</summary>
          public const int TimeToFixFieldNumber = 1;
          private ulong timeToFix_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public ulong TimeToFix {
            get { return timeToFix_; }
            set {
              timeToFix_ = value;
            }
          }
  
          /// <summary>Field number for the "satellites_prn" field.</summary>
          public const int SatellitesPrnFieldNumber = 2;
          private static readonly pb::FieldCodec<int> _repeated_satellitesPrn_codec
              = pb::FieldCodec.ForInt32(18);
          private readonly pbc::RepeatedField<int> satellitesPrn_ = new pbc::RepeatedField<int>();
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public pbc::RepeatedField<int> SatellitesPrn {
            get { return satellitesPrn_; }
          }
  
          /// <summary>Field number for the "azimuth" field.</summary>
          public const int AzimuthFieldNumber = 3;
          private static readonly pb::FieldCodec<float> _repeated_azimuth_codec
              = pb::FieldCodec.ForFloat(26);
          private readonly pbc::RepeatedField<float> azimuth_ = new pbc::RepeatedField<float>();
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public pbc::RepeatedField<float> Azimuth {
            get { return azimuth_; }
          }
  
          /// <summary>Field number for the "elevation" field.</summary>
          public const int ElevationFieldNumber = 4;
          private static readonly pb::FieldCodec<float> _repeated_elevation_codec
              = pb::FieldCodec.ForFloat(34);
          private readonly pbc::RepeatedField<float> elevation_ = new pbc::RepeatedField<float>();
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public pbc::RepeatedField<float> Elevation {
            get { return elevation_; }
          }
  
          /// <summary>Field number for the "snr" field.</summary>
          public const int SnrFieldNumber = 5;
          private static readonly pb::FieldCodec<float> _repeated_snr_codec
              = pb::FieldCodec.ForFloat(42);
          private readonly pbc::RepeatedField<float> snr_ = new pbc::RepeatedField<float>();
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public pbc::RepeatedField<float> Snr {
            get { return snr_; }
          }
  
          /// <summary>Field number for the "has_almanac" field.</summary>
          public const int HasAlmanacFieldNumber = 6;
          private static readonly pb::FieldCodec<bool> _repeated_hasAlmanac_codec
              = pb::FieldCodec.ForBool(50);
          private readonly pbc::RepeatedField<bool> hasAlmanac_ = new pbc::RepeatedField<bool>();
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public pbc::RepeatedField<bool> HasAlmanac {
            get { return hasAlmanac_; }
          }
  
          /// <summary>Field number for the "has_ephemeris" field.</summary>
          public const int HasEphemerisFieldNumber = 7;
          private static readonly pb::FieldCodec<bool> _repeated_hasEphemeris_codec
              = pb::FieldCodec.ForBool(58);
          private readonly pbc::RepeatedField<bool> hasEphemeris_ = new pbc::RepeatedField<bool>();
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public pbc::RepeatedField<bool> HasEphemeris {
            get { return hasEphemeris_; }
          }
  
          /// <summary>Field number for the "used_in_fix" field.</summary>
          public const int UsedInFixFieldNumber = 8;
          private static readonly pb::FieldCodec<bool> _repeated_usedInFix_codec
              = pb::FieldCodec.ForBool(66);
          private readonly pbc::RepeatedField<bool> usedInFix_ = new pbc::RepeatedField<bool>();
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public pbc::RepeatedField<bool> UsedInFix {
            get { return usedInFix_; }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public override bool Equals(object other) {
            return Equals(other as AndroidGpsInfo);
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public bool Equals(AndroidGpsInfo other) {
            if (ReferenceEquals(other, null)) {
              return false;
            }
            if (ReferenceEquals(other, this)) {
              return true;
            }
            if (TimeToFix != other.TimeToFix) return false;
            if(!satellitesPrn_.Equals(other.satellitesPrn_)) return false;
            if(!azimuth_.Equals(other.azimuth_)) return false;
            if(!elevation_.Equals(other.elevation_)) return false;
            if(!snr_.Equals(other.snr_)) return false;
            if(!hasAlmanac_.Equals(other.hasAlmanac_)) return false;
            if(!hasEphemeris_.Equals(other.hasEphemeris_)) return false;
            if(!usedInFix_.Equals(other.usedInFix_)) return false;
            return true;
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public override int GetHashCode() {
            int hash = 1;
            if (TimeToFix != 0UL) hash ^= TimeToFix.GetHashCode();
            hash ^= satellitesPrn_.GetHashCode();
            hash ^= azimuth_.GetHashCode();
            hash ^= elevation_.GetHashCode();
            hash ^= snr_.GetHashCode();
            hash ^= hasAlmanac_.GetHashCode();
            hash ^= hasEphemeris_.GetHashCode();
            hash ^= usedInFix_.GetHashCode();
            return hash;
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public override string ToString() {
            return pb::JsonFormatter.ToDiagnosticString(this);
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public void WriteTo(pb::CodedOutputStream output) {
            if (TimeToFix != 0UL) {
              output.WriteRawTag(8);
              output.WriteUInt64(TimeToFix);
            }
            satellitesPrn_.WriteTo(output, _repeated_satellitesPrn_codec);
            azimuth_.WriteTo(output, _repeated_azimuth_codec);
            elevation_.WriteTo(output, _repeated_elevation_codec);
            snr_.WriteTo(output, _repeated_snr_codec);
            hasAlmanac_.WriteTo(output, _repeated_hasAlmanac_codec);
            hasEphemeris_.WriteTo(output, _repeated_hasEphemeris_codec);
            usedInFix_.WriteTo(output, _repeated_usedInFix_codec);
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public int CalculateSize() {
            int size = 0;
            if (TimeToFix != 0UL) {
              size += 1 + pb::CodedOutputStream.ComputeUInt64Size(TimeToFix);
            }
            size += satellitesPrn_.CalculateSize(_repeated_satellitesPrn_codec);
            size += azimuth_.CalculateSize(_repeated_azimuth_codec);
            size += elevation_.CalculateSize(_repeated_elevation_codec);
            size += snr_.CalculateSize(_repeated_snr_codec);
            size += hasAlmanac_.CalculateSize(_repeated_hasAlmanac_codec);
            size += hasEphemeris_.CalculateSize(_repeated_hasEphemeris_codec);
            size += usedInFix_.CalculateSize(_repeated_usedInFix_codec);
            return size;
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public void MergeFrom(AndroidGpsInfo other) {
            if (other == null) {
              return;
            }
            if (other.TimeToFix != 0UL) {
              TimeToFix = other.TimeToFix;
            }
            satellitesPrn_.Add(other.satellitesPrn_);
            azimuth_.Add(other.azimuth_);
            elevation_.Add(other.elevation_);
            snr_.Add(other.snr_);
            hasAlmanac_.Add(other.hasAlmanac_);
            hasEphemeris_.Add(other.hasEphemeris_);
            usedInFix_.Add(other.usedInFix_);
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public void MergeFrom(pb::CodedInputStream input) {
            uint tag;
            while ((tag = input.ReadTag()) != 0) {
              switch(tag) {
                default:
                  input.SkipLastField();
                  break;
                case 8: {
                  TimeToFix = input.ReadUInt64();
                  break;
                }
                case 18:
                case 16: {
                  satellitesPrn_.AddEntriesFrom(input, _repeated_satellitesPrn_codec);
                  break;
                }
                case 26:
                case 29: {
                  azimuth_.AddEntriesFrom(input, _repeated_azimuth_codec);
                  break;
                }
                case 34:
                case 37: {
                  elevation_.AddEntriesFrom(input, _repeated_elevation_codec);
                  break;
                }
                case 42:
                case 45: {
                  snr_.AddEntriesFrom(input, _repeated_snr_codec);
                  break;
                }
                case 50:
                case 48: {
                  hasAlmanac_.AddEntriesFrom(input, _repeated_hasAlmanac_codec);
                  break;
                }
                case 58:
                case 56: {
                  hasEphemeris_.AddEntriesFrom(input, _repeated_hasEphemeris_codec);
                  break;
                }
                case 66:
                case 64: {
                  usedInFix_.AddEntriesFrom(input, _repeated_usedInFix_codec);
                  break;
                }
              }
            }
          }
  
        }
  
        public sealed partial class SensorInfo : pb::IMessage<SensorInfo> {
          private static readonly pb::MessageParser<SensorInfo> _parser = new pb::MessageParser<SensorInfo>(() => new SensorInfo());
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public static pb::MessageParser<SensorInfo> Parser { get { return _parser; } }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public static pbr::MessageDescriptor Descriptor {
            get { return global::POGOProtos.Networking.Envelopes.Signature.Descriptor.NestedTypes[2]; }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          pbr::MessageDescriptor pb::IMessage.Descriptor {
            get { return Descriptor; }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public SensorInfo() {
            OnConstruction();
          }
  
          partial void OnConstruction();
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public SensorInfo(SensorInfo other) : this() {
            timestampSnapshot_ = other.timestampSnapshot_;
            linearAccelerationX_ = other.linearAccelerationX_;
            linearAccelerationY_ = other.linearAccelerationY_;
            linearAccelerationZ_ = other.linearAccelerationZ_;
            magneticFieldX_ = other.magneticFieldX_;
            magneticFieldY_ = other.magneticFieldY_;
            magneticFieldZ_ = other.magneticFieldZ_;
            rotationVectorX_ = other.rotationVectorX_;
            rotationVectorY_ = other.rotationVectorY_;
            rotationVectorZ_ = other.rotationVectorZ_;
            gyroscopeRawX_ = other.gyroscopeRawX_;
            gyroscopeRawY_ = other.gyroscopeRawY_;
            gyroscopeRawZ_ = other.gyroscopeRawZ_;
            gravityX_ = other.gravityX_;
            gravityY_ = other.gravityY_;
            gravityZ_ = other.gravityZ_;
            accelerometerAxes_ = other.accelerometerAxes_;
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public SensorInfo Clone() {
            return new SensorInfo(this);
          }
  
          /// <summary>Field number for the "timestamp_snapshot" field.</summary>
          public const int TimestampSnapshotFieldNumber = 1;
          private ulong timestampSnapshot_;
          /// <summary>
          ///  in ms since start
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public ulong TimestampSnapshot {
            get { return timestampSnapshot_; }
            set {
              timestampSnapshot_ = value;
            }
          }
  
          /// <summary>Field number for the "linear_acceleration_x" field.</summary>
          public const int LinearAccelerationXFieldNumber = 3;
          private double linearAccelerationX_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double LinearAccelerationX {
            get { return linearAccelerationX_; }
            set {
              linearAccelerationX_ = value;
            }
          }
  
          /// <summary>Field number for the "linear_acceleration_y" field.</summary>
          public const int LinearAccelerationYFieldNumber = 4;
          private double linearAccelerationY_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double LinearAccelerationY {
            get { return linearAccelerationY_; }
            set {
              linearAccelerationY_ = value;
            }
          }
  
          /// <summary>Field number for the "linear_acceleration_z" field.</summary>
          public const int LinearAccelerationZFieldNumber = 5;
          private double linearAccelerationZ_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double LinearAccelerationZ {
            get { return linearAccelerationZ_; }
            set {
              linearAccelerationZ_ = value;
            }
          }
  
          /// <summary>Field number for the "magnetic_field_x" field.</summary>
          public const int MagneticFieldXFieldNumber = 6;
          private double magneticFieldX_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double MagneticFieldX {
            get { return magneticFieldX_; }
            set {
              magneticFieldX_ = value;
            }
          }
  
          /// <summary>Field number for the "magnetic_field_y" field.</summary>
          public const int MagneticFieldYFieldNumber = 7;
          private double magneticFieldY_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double MagneticFieldY {
            get { return magneticFieldY_; }
            set {
              magneticFieldY_ = value;
            }
          }
  
          /// <summary>Field number for the "magnetic_field_z" field.</summary>
          public const int MagneticFieldZFieldNumber = 8;
          private double magneticFieldZ_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double MagneticFieldZ {
            get { return magneticFieldZ_; }
            set {
              magneticFieldZ_ = value;
            }
          }
  
          /// <summary>Field number for the "rotation_vector_x" field.</summary>
          public const int RotationVectorXFieldNumber = 10;
          private double rotationVectorX_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double RotationVectorX {
            get { return rotationVectorX_; }
            set {
              rotationVectorX_ = value;
            }
          }
  
          /// <summary>Field number for the "rotation_vector_y" field.</summary>
          public const int RotationVectorYFieldNumber = 11;
          private double rotationVectorY_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double RotationVectorY {
            get { return rotationVectorY_; }
            set {
              rotationVectorY_ = value;
            }
          }
  
          /// <summary>Field number for the "rotation_vector_z" field.</summary>
          public const int RotationVectorZFieldNumber = 12;
          private double rotationVectorZ_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double RotationVectorZ {
            get { return rotationVectorZ_; }
            set {
              rotationVectorZ_ = value;
            }
          }
  
          /// <summary>Field number for the "gyroscope_raw_x" field.</summary>
          public const int GyroscopeRawXFieldNumber = 13;
          private double gyroscopeRawX_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double GyroscopeRawX {
            get { return gyroscopeRawX_; }
            set {
              gyroscopeRawX_ = value;
            }
          }
  
          /// <summary>Field number for the "gyroscope_raw_y" field.</summary>
          public const int GyroscopeRawYFieldNumber = 14;
          private double gyroscopeRawY_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double GyroscopeRawY {
            get { return gyroscopeRawY_; }
            set {
              gyroscopeRawY_ = value;
            }
          }
  
          /// <summary>Field number for the "gyroscope_raw_z" field.</summary>
          public const int GyroscopeRawZFieldNumber = 15;
          private double gyroscopeRawZ_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double GyroscopeRawZ {
            get { return gyroscopeRawZ_; }
            set {
              gyroscopeRawZ_ = value;
            }
          }
  
          /// <summary>Field number for the "gravity_x" field.</summary>
          public const int GravityXFieldNumber = 16;
          private double gravityX_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double GravityX {
            get { return gravityX_; }
            set {
              gravityX_ = value;
            }
          }
  
          /// <summary>Field number for the "gravity_y" field.</summary>
          public const int GravityYFieldNumber = 17;
          private double gravityY_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double GravityY {
            get { return gravityY_; }
            set {
              gravityY_ = value;
            }
          }
  
          /// <summary>Field number for the "gravity_z" field.</summary>
          public const int GravityZFieldNumber = 18;
          private double gravityZ_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double GravityZ {
            get { return gravityZ_; }
            set {
              gravityZ_ = value;
            }
          }
  
          /// <summary>Field number for the "accelerometer_axes" field.</summary>
          public const int AccelerometerAxesFieldNumber = 19;
          private ulong accelerometerAxes_;
          /// <summary>
          ///  Always 3
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public ulong AccelerometerAxes {
            get { return accelerometerAxes_; }
            set {
              accelerometerAxes_ = value;
            }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public override bool Equals(object other) {
            return Equals(other as SensorInfo);
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public bool Equals(SensorInfo other) {
            if (ReferenceEquals(other, null)) {
              return false;
            }
            if (ReferenceEquals(other, this)) {
              return true;
            }
            if (TimestampSnapshot != other.TimestampSnapshot) return false;
            if (LinearAccelerationX != other.LinearAccelerationX) return false;
            if (LinearAccelerationY != other.LinearAccelerationY) return false;
            if (LinearAccelerationZ != other.LinearAccelerationZ) return false;
            if (MagneticFieldX != other.MagneticFieldX) return false;
            if (MagneticFieldY != other.MagneticFieldY) return false;
            if (MagneticFieldZ != other.MagneticFieldZ) return false;
            if (RotationVectorX != other.RotationVectorX) return false;
            if (RotationVectorY != other.RotationVectorY) return false;
            if (RotationVectorZ != other.RotationVectorZ) return false;
            if (GyroscopeRawX != other.GyroscopeRawX) return false;
            if (GyroscopeRawY != other.GyroscopeRawY) return false;
            if (GyroscopeRawZ != other.GyroscopeRawZ) return false;
            if (GravityX != other.GravityX) return false;
            if (GravityY != other.GravityY) return false;
            if (GravityZ != other.GravityZ) return false;
            if (AccelerometerAxes != other.AccelerometerAxes) return false;
            return true;
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public override int GetHashCode() {
            int hash = 1;
            if (TimestampSnapshot != 0UL) hash ^= TimestampSnapshot.GetHashCode();
            if (LinearAccelerationX != 0D) hash ^= LinearAccelerationX.GetHashCode();
            if (LinearAccelerationY != 0D) hash ^= LinearAccelerationY.GetHashCode();
            if (LinearAccelerationZ != 0D) hash ^= LinearAccelerationZ.GetHashCode();
            if (MagneticFieldX != 0D) hash ^= MagneticFieldX.GetHashCode();
            if (MagneticFieldY != 0D) hash ^= MagneticFieldY.GetHashCode();
            if (MagneticFieldZ != 0D) hash ^= MagneticFieldZ.GetHashCode();
            if (RotationVectorX != 0D) hash ^= RotationVectorX.GetHashCode();
            if (RotationVectorY != 0D) hash ^= RotationVectorY.GetHashCode();
            if (RotationVectorZ != 0D) hash ^= RotationVectorZ.GetHashCode();
            if (GyroscopeRawX != 0D) hash ^= GyroscopeRawX.GetHashCode();
            if (GyroscopeRawY != 0D) hash ^= GyroscopeRawY.GetHashCode();
            if (GyroscopeRawZ != 0D) hash ^= GyroscopeRawZ.GetHashCode();
            if (GravityX != 0D) hash ^= GravityX.GetHashCode();
            if (GravityY != 0D) hash ^= GravityY.GetHashCode();
            if (GravityZ != 0D) hash ^= GravityZ.GetHashCode();
            if (AccelerometerAxes != 0UL) hash ^= AccelerometerAxes.GetHashCode();
            return hash;
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public override string ToString() {
            return pb::JsonFormatter.ToDiagnosticString(this);
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public void WriteTo(pb::CodedOutputStream output) {
            if (TimestampSnapshot != 0UL) {
              output.WriteRawTag(8);
              output.WriteUInt64(TimestampSnapshot);
            }
            if (LinearAccelerationX != 0D) {
              output.WriteRawTag(25);
              output.WriteDouble(LinearAccelerationX);
            }
            if (LinearAccelerationY != 0D) {
              output.WriteRawTag(33);
              output.WriteDouble(LinearAccelerationY);
            }
            if (LinearAccelerationZ != 0D) {
              output.WriteRawTag(41);
              output.WriteDouble(LinearAccelerationZ);
            }
            if (MagneticFieldX != 0D) {
              output.WriteRawTag(49);
              output.WriteDouble(MagneticFieldX);
            }
            if (MagneticFieldY != 0D) {
              output.WriteRawTag(57);
              output.WriteDouble(MagneticFieldY);
            }
            if (MagneticFieldZ != 0D) {
              output.WriteRawTag(65);
              output.WriteDouble(MagneticFieldZ);
            }
            if (RotationVectorX != 0D) {
              output.WriteRawTag(81);
              output.WriteDouble(RotationVectorX);
            }
            if (RotationVectorY != 0D) {
              output.WriteRawTag(89);
              output.WriteDouble(RotationVectorY);
            }
            if (RotationVectorZ != 0D) {
              output.WriteRawTag(97);
              output.WriteDouble(RotationVectorZ);
            }
            if (GyroscopeRawX != 0D) {
              output.WriteRawTag(105);
              output.WriteDouble(GyroscopeRawX);
            }
            if (GyroscopeRawY != 0D) {
              output.WriteRawTag(113);
              output.WriteDouble(GyroscopeRawY);
            }
            if (GyroscopeRawZ != 0D) {
              output.WriteRawTag(121);
              output.WriteDouble(GyroscopeRawZ);
            }
            if (GravityX != 0D) {
              output.WriteRawTag(129, 1);
              output.WriteDouble(GravityX);
            }
            if (GravityY != 0D) {
              output.WriteRawTag(137, 1);
              output.WriteDouble(GravityY);
            }
            if (GravityZ != 0D) {
              output.WriteRawTag(145, 1);
              output.WriteDouble(GravityZ);
            }
            if (AccelerometerAxes != 0UL) {
              output.WriteRawTag(152, 1);
              output.WriteUInt64(AccelerometerAxes);
            }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public int CalculateSize() {
            int size = 0;
            if (TimestampSnapshot != 0UL) {
              size += 1 + pb::CodedOutputStream.ComputeUInt64Size(TimestampSnapshot);
            }
            if (LinearAccelerationX != 0D) {
              size += 1 + 8;
            }
            if (LinearAccelerationY != 0D) {
              size += 1 + 8;
            }
            if (LinearAccelerationZ != 0D) {
              size += 1 + 8;
            }
            if (MagneticFieldX != 0D) {
              size += 1 + 8;
            }
            if (MagneticFieldY != 0D) {
              size += 1 + 8;
            }
            if (MagneticFieldZ != 0D) {
              size += 1 + 8;
            }
            if (RotationVectorX != 0D) {
              size += 1 + 8;
            }
            if (RotationVectorY != 0D) {
              size += 1 + 8;
            }
            if (RotationVectorZ != 0D) {
              size += 1 + 8;
            }
            if (GyroscopeRawX != 0D) {
              size += 1 + 8;
            }
            if (GyroscopeRawY != 0D) {
              size += 1 + 8;
            }
            if (GyroscopeRawZ != 0D) {
              size += 1 + 8;
            }
            if (GravityX != 0D) {
              size += 2 + 8;
            }
            if (GravityY != 0D) {
              size += 2 + 8;
            }
            if (GravityZ != 0D) {
              size += 2 + 8;
            }
            if (AccelerometerAxes != 0UL) {
              size += 2 + pb::CodedOutputStream.ComputeUInt64Size(AccelerometerAxes);
            }
            return size;
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public void MergeFrom(SensorInfo other) {
            if (other == null) {
              return;
            }
            if (other.TimestampSnapshot != 0UL) {
              TimestampSnapshot = other.TimestampSnapshot;
            }
            if (other.LinearAccelerationX != 0D) {
              LinearAccelerationX = other.LinearAccelerationX;
            }
            if (other.LinearAccelerationY != 0D) {
              LinearAccelerationY = other.LinearAccelerationY;
            }
            if (other.LinearAccelerationZ != 0D) {
              LinearAccelerationZ = other.LinearAccelerationZ;
            }
            if (other.MagneticFieldX != 0D) {
              MagneticFieldX = other.MagneticFieldX;
            }
            if (other.MagneticFieldY != 0D) {
              MagneticFieldY = other.MagneticFieldY;
            }
            if (other.MagneticFieldZ != 0D) {
              MagneticFieldZ = other.MagneticFieldZ;
            }
            if (other.RotationVectorX != 0D) {
              RotationVectorX = other.RotationVectorX;
            }
            if (other.RotationVectorY != 0D) {
              RotationVectorY = other.RotationVectorY;
            }
            if (other.RotationVectorZ != 0D) {
              RotationVectorZ = other.RotationVectorZ;
            }
            if (other.GyroscopeRawX != 0D) {
              GyroscopeRawX = other.GyroscopeRawX;
            }
            if (other.GyroscopeRawY != 0D) {
              GyroscopeRawY = other.GyroscopeRawY;
            }
            if (other.GyroscopeRawZ != 0D) {
              GyroscopeRawZ = other.GyroscopeRawZ;
            }
            if (other.GravityX != 0D) {
              GravityX = other.GravityX;
            }
            if (other.GravityY != 0D) {
              GravityY = other.GravityY;
            }
            if (other.GravityZ != 0D) {
              GravityZ = other.GravityZ;
            }
            if (other.AccelerometerAxes != 0UL) {
              AccelerometerAxes = other.AccelerometerAxes;
            }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public void MergeFrom(pb::CodedInputStream input) {
            uint tag;
            while ((tag = input.ReadTag()) != 0) {
              switch(tag) {
                default:
                  input.SkipLastField();
                  break;
                case 8: {
                  TimestampSnapshot = input.ReadUInt64();
                  break;
                }
                case 25: {
                  LinearAccelerationX = input.ReadDouble();
                  break;
                }
                case 33: {
                  LinearAccelerationY = input.ReadDouble();
                  break;
                }
                case 41: {
                  LinearAccelerationZ = input.ReadDouble();
                  break;
                }
                case 49: {
                  MagneticFieldX = input.ReadDouble();
                  break;
                }
                case 57: {
                  MagneticFieldY = input.ReadDouble();
                  break;
                }
                case 65: {
                  MagneticFieldZ = input.ReadDouble();
                  break;
                }
                case 81: {
                  RotationVectorX = input.ReadDouble();
                  break;
                }
                case 89: {
                  RotationVectorY = input.ReadDouble();
                  break;
                }
                case 97: {
                  RotationVectorZ = input.ReadDouble();
                  break;
                }
                case 105: {
                  GyroscopeRawX = input.ReadDouble();
                  break;
                }
                case 113: {
                  GyroscopeRawY = input.ReadDouble();
                  break;
                }
                case 121: {
                  GyroscopeRawZ = input.ReadDouble();
                  break;
                }
                case 129: {
                  GravityX = input.ReadDouble();
                  break;
                }
                case 137: {
                  GravityY = input.ReadDouble();
                  break;
                }
                case 145: {
                  GravityZ = input.ReadDouble();
                  break;
                }
                case 152: {
                  AccelerometerAxes = input.ReadUInt64();
                  break;
                }
              }
            }
          }
  
        }
  
        public sealed partial class DeviceInfo : pb::IMessage<DeviceInfo> {
          private static readonly pb::MessageParser<DeviceInfo> _parser = new pb::MessageParser<DeviceInfo>(() => new DeviceInfo());
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public static pb::MessageParser<DeviceInfo> Parser { get { return _parser; } }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public static pbr::MessageDescriptor Descriptor {
            get { return global::POGOProtos.Networking.Envelopes.Signature.Descriptor.NestedTypes[3]; }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          pbr::MessageDescriptor pb::IMessage.Descriptor {
            get { return Descriptor; }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public DeviceInfo() {
            OnConstruction();
          }
  
          partial void OnConstruction();
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public DeviceInfo(DeviceInfo other) : this() {
            deviceId_ = other.deviceId_;
            androidBoardName_ = other.androidBoardName_;
            androidBootloader_ = other.androidBootloader_;
            deviceBrand_ = other.deviceBrand_;
            deviceModel_ = other.deviceModel_;
            deviceModelIdentifier_ = other.deviceModelIdentifier_;
            deviceModelBoot_ = other.deviceModelBoot_;
            hardwareManufacturer_ = other.hardwareManufacturer_;
            hardwareModel_ = other.hardwareModel_;
            firmwareBrand_ = other.firmwareBrand_;
            firmwareTags_ = other.firmwareTags_;
            firmwareType_ = other.firmwareType_;
            firmwareFingerprint_ = other.firmwareFingerprint_;
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public DeviceInfo Clone() {
            return new DeviceInfo(this);
          }
  
          /// <summary>Field number for the "device_id" field.</summary>
          public const int DeviceIdFieldNumber = 1;
          private string deviceId_ = "";
          /// <summary>
          ///  Hex string
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public string DeviceId {
            get { return deviceId_; }
            set {
              deviceId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
            }
          }
  
          /// <summary>Field number for the "android_board_name" field.</summary>
          public const int AndroidBoardNameFieldNumber = 2;
          private string androidBoardName_ = "";
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public string AndroidBoardName {
            get { return androidBoardName_; }
            set {
              androidBoardName_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
            }
          }
  
          /// <summary>Field number for the "android_bootloader" field.</summary>
          public const int AndroidBootloaderFieldNumber = 3;
          private string androidBootloader_ = "";
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public string AndroidBootloader {
            get { return androidBootloader_; }
            set {
              androidBootloader_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
            }
          }
  
          /// <summary>Field number for the "device_brand" field.</summary>
          public const int DeviceBrandFieldNumber = 4;
          private string deviceBrand_ = "";
          /// <summary>
          ///  On Android: product.brand
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public string DeviceBrand {
            get { return deviceBrand_; }
            set {
              deviceBrand_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
            }
          }
  
          /// <summary>Field number for the "device_model" field.</summary>
          public const int DeviceModelFieldNumber = 5;
          private string deviceModel_ = "";
          /// <summary>
          ///  On Android: product.device
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public string DeviceModel {
            get { return deviceModel_; }
            set {
              deviceModel_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
            }
          }
  
          /// <summary>Field number for the "device_model_identifier" field.</summary>
          public const int DeviceModelIdentifierFieldNumber = 6;
          private string deviceModelIdentifier_ = "";
          /// <summary>
          ///  Android only, build.display.id
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public string DeviceModelIdentifier {
            get { return deviceModelIdentifier_; }
            set {
              deviceModelIdentifier_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
            }
          }
  
          /// <summary>Field number for the "device_model_boot" field.</summary>
          public const int DeviceModelBootFieldNumber = 7;
          private string deviceModelBoot_ = "";
          /// <summary>
          ///  On Android: boot.hardware
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public string DeviceModelBoot {
            get { return deviceModelBoot_; }
            set {
              deviceModelBoot_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
            }
          }
  
          /// <summary>Field number for the "hardware_manufacturer" field.</summary>
          public const int HardwareManufacturerFieldNumber = 8;
          private string hardwareManufacturer_ = "";
          /// <summary>
          ///  On Android: product.manufacturer
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public string HardwareManufacturer {
            get { return hardwareManufacturer_; }
            set {
              hardwareManufacturer_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
            }
          }
  
          /// <summary>Field number for the "hardware_model" field.</summary>
          public const int HardwareModelFieldNumber = 9;
          private string hardwareModel_ = "";
          /// <summary>
          ///  On Android: product.model
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public string HardwareModel {
            get { return hardwareModel_; }
            set {
              hardwareModel_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
            }
          }
  
          /// <summary>Field number for the "firmware_brand" field.</summary>
          public const int FirmwareBrandFieldNumber = 10;
          private string firmwareBrand_ = "";
          /// <summary>
          ///  On Android: product.name, on iOS: "iPhone OS"
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public string FirmwareBrand {
            get { return firmwareBrand_; }
            set {
              firmwareBrand_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
            }
          }
  
          /// <summary>Field number for the "firmware_tags" field.</summary>
          public const int FirmwareTagsFieldNumber = 12;
          private string firmwareTags_ = "";
          /// <summary>
          ///  Android only, build.tags
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public string FirmwareTags {
            get { return firmwareTags_; }
            set {
              firmwareTags_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
            }
          }
  
          /// <summary>Field number for the "firmware_type" field.</summary>
          public const int FirmwareTypeFieldNumber = 13;
          private string firmwareType_ = "";
          /// <summary>
          ///  On Android: build.type, on iOS instead: iOS version
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public string FirmwareType {
            get { return firmwareType_; }
            set {
              firmwareType_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
            }
          }
  
          /// <summary>Field number for the "firmware_fingerprint" field.</summary>
          public const int FirmwareFingerprintFieldNumber = 14;
          private string firmwareFingerprint_ = "";
          /// <summary>
          ///  Android only, build.fingerprint
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public string FirmwareFingerprint {
            get { return firmwareFingerprint_; }
            set {
              firmwareFingerprint_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
            }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public override bool Equals(object other) {
            return Equals(other as DeviceInfo);
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public bool Equals(DeviceInfo other) {
            if (ReferenceEquals(other, null)) {
              return false;
            }
            if (ReferenceEquals(other, this)) {
              return true;
            }
            if (DeviceId != other.DeviceId) return false;
            if (AndroidBoardName != other.AndroidBoardName) return false;
            if (AndroidBootloader != other.AndroidBootloader) return false;
            if (DeviceBrand != other.DeviceBrand) return false;
            if (DeviceModel != other.DeviceModel) return false;
            if (DeviceModelIdentifier != other.DeviceModelIdentifier) return false;
            if (DeviceModelBoot != other.DeviceModelBoot) return false;
            if (HardwareManufacturer != other.HardwareManufacturer) return false;
            if (HardwareModel != other.HardwareModel) return false;
            if (FirmwareBrand != other.FirmwareBrand) return false;
            if (FirmwareTags != other.FirmwareTags) return false;
            if (FirmwareType != other.FirmwareType) return false;
            if (FirmwareFingerprint != other.FirmwareFingerprint) return false;
            return true;
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public override int GetHashCode() {
            int hash = 1;
            if (DeviceId.Length != 0) hash ^= DeviceId.GetHashCode();
            if (AndroidBoardName.Length != 0) hash ^= AndroidBoardName.GetHashCode();
            if (AndroidBootloader.Length != 0) hash ^= AndroidBootloader.GetHashCode();
            if (DeviceBrand.Length != 0) hash ^= DeviceBrand.GetHashCode();
            if (DeviceModel.Length != 0) hash ^= DeviceModel.GetHashCode();
            if (DeviceModelIdentifier.Length != 0) hash ^= DeviceModelIdentifier.GetHashCode();
            if (DeviceModelBoot.Length != 0) hash ^= DeviceModelBoot.GetHashCode();
            if (HardwareManufacturer.Length != 0) hash ^= HardwareManufacturer.GetHashCode();
            if (HardwareModel.Length != 0) hash ^= HardwareModel.GetHashCode();
            if (FirmwareBrand.Length != 0) hash ^= FirmwareBrand.GetHashCode();
            if (FirmwareTags.Length != 0) hash ^= FirmwareTags.GetHashCode();
            if (FirmwareType.Length != 0) hash ^= FirmwareType.GetHashCode();
            if (FirmwareFingerprint.Length != 0) hash ^= FirmwareFingerprint.GetHashCode();
            return hash;
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public override string ToString() {
            return pb::JsonFormatter.ToDiagnosticString(this);
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public void WriteTo(pb::CodedOutputStream output) {
            if (DeviceId.Length != 0) {
              output.WriteRawTag(10);
              output.WriteString(DeviceId);
            }
            if (AndroidBoardName.Length != 0) {
              output.WriteRawTag(18);
              output.WriteString(AndroidBoardName);
            }
            if (AndroidBootloader.Length != 0) {
              output.WriteRawTag(26);
              output.WriteString(AndroidBootloader);
            }
            if (DeviceBrand.Length != 0) {
              output.WriteRawTag(34);
              output.WriteString(DeviceBrand);
            }
            if (DeviceModel.Length != 0) {
              output.WriteRawTag(42);
              output.WriteString(DeviceModel);
            }
            if (DeviceModelIdentifier.Length != 0) {
              output.WriteRawTag(50);
              output.WriteString(DeviceModelIdentifier);
            }
            if (DeviceModelBoot.Length != 0) {
              output.WriteRawTag(58);
              output.WriteString(DeviceModelBoot);
            }
            if (HardwareManufacturer.Length != 0) {
              output.WriteRawTag(66);
              output.WriteString(HardwareManufacturer);
            }
            if (HardwareModel.Length != 0) {
              output.WriteRawTag(74);
              output.WriteString(HardwareModel);
            }
            if (FirmwareBrand.Length != 0) {
              output.WriteRawTag(82);
              output.WriteString(FirmwareBrand);
            }
            if (FirmwareTags.Length != 0) {
              output.WriteRawTag(98);
              output.WriteString(FirmwareTags);
            }
            if (FirmwareType.Length != 0) {
              output.WriteRawTag(106);
              output.WriteString(FirmwareType);
            }
            if (FirmwareFingerprint.Length != 0) {
              output.WriteRawTag(114);
              output.WriteString(FirmwareFingerprint);
            }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public int CalculateSize() {
            int size = 0;
            if (DeviceId.Length != 0) {
              size += 1 + pb::CodedOutputStream.ComputeStringSize(DeviceId);
            }
            if (AndroidBoardName.Length != 0) {
              size += 1 + pb::CodedOutputStream.ComputeStringSize(AndroidBoardName);
            }
            if (AndroidBootloader.Length != 0) {
              size += 1 + pb::CodedOutputStream.ComputeStringSize(AndroidBootloader);
            }
            if (DeviceBrand.Length != 0) {
              size += 1 + pb::CodedOutputStream.ComputeStringSize(DeviceBrand);
            }
            if (DeviceModel.Length != 0) {
              size += 1 + pb::CodedOutputStream.ComputeStringSize(DeviceModel);
            }
            if (DeviceModelIdentifier.Length != 0) {
              size += 1 + pb::CodedOutputStream.ComputeStringSize(DeviceModelIdentifier);
            }
            if (DeviceModelBoot.Length != 0) {
              size += 1 + pb::CodedOutputStream.ComputeStringSize(DeviceModelBoot);
            }
            if (HardwareManufacturer.Length != 0) {
              size += 1 + pb::CodedOutputStream.ComputeStringSize(HardwareManufacturer);
            }
            if (HardwareModel.Length != 0) {
              size += 1 + pb::CodedOutputStream.ComputeStringSize(HardwareModel);
            }
            if (FirmwareBrand.Length != 0) {
              size += 1 + pb::CodedOutputStream.ComputeStringSize(FirmwareBrand);
            }
            if (FirmwareTags.Length != 0) {
              size += 1 + pb::CodedOutputStream.ComputeStringSize(FirmwareTags);
            }
            if (FirmwareType.Length != 0) {
              size += 1 + pb::CodedOutputStream.ComputeStringSize(FirmwareType);
            }
            if (FirmwareFingerprint.Length != 0) {
              size += 1 + pb::CodedOutputStream.ComputeStringSize(FirmwareFingerprint);
            }
            return size;
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public void MergeFrom(DeviceInfo other) {
            if (other == null) {
              return;
            }
            if (other.DeviceId.Length != 0) {
              DeviceId = other.DeviceId;
            }
            if (other.AndroidBoardName.Length != 0) {
              AndroidBoardName = other.AndroidBoardName;
            }
            if (other.AndroidBootloader.Length != 0) {
              AndroidBootloader = other.AndroidBootloader;
            }
            if (other.DeviceBrand.Length != 0) {
              DeviceBrand = other.DeviceBrand;
            }
            if (other.DeviceModel.Length != 0) {
              DeviceModel = other.DeviceModel;
            }
            if (other.DeviceModelIdentifier.Length != 0) {
              DeviceModelIdentifier = other.DeviceModelIdentifier;
            }
            if (other.DeviceModelBoot.Length != 0) {
              DeviceModelBoot = other.DeviceModelBoot;
            }
            if (other.HardwareManufacturer.Length != 0) {
              HardwareManufacturer = other.HardwareManufacturer;
            }
            if (other.HardwareModel.Length != 0) {
              HardwareModel = other.HardwareModel;
            }
            if (other.FirmwareBrand.Length != 0) {
              FirmwareBrand = other.FirmwareBrand;
            }
            if (other.FirmwareTags.Length != 0) {
              FirmwareTags = other.FirmwareTags;
            }
            if (other.FirmwareType.Length != 0) {
              FirmwareType = other.FirmwareType;
            }
            if (other.FirmwareFingerprint.Length != 0) {
              FirmwareFingerprint = other.FirmwareFingerprint;
            }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public void MergeFrom(pb::CodedInputStream input) {
            uint tag;
            while ((tag = input.ReadTag()) != 0) {
              switch(tag) {
                default:
                  input.SkipLastField();
                  break;
                case 10: {
                  DeviceId = input.ReadString();
                  break;
                }
                case 18: {
                  AndroidBoardName = input.ReadString();
                  break;
                }
                case 26: {
                  AndroidBootloader = input.ReadString();
                  break;
                }
                case 34: {
                  DeviceBrand = input.ReadString();
                  break;
                }
                case 42: {
                  DeviceModel = input.ReadString();
                  break;
                }
                case 50: {
                  DeviceModelIdentifier = input.ReadString();
                  break;
                }
                case 58: {
                  DeviceModelBoot = input.ReadString();
                  break;
                }
                case 66: {
                  HardwareManufacturer = input.ReadString();
                  break;
                }
                case 74: {
                  HardwareModel = input.ReadString();
                  break;
                }
                case 82: {
                  FirmwareBrand = input.ReadString();
                  break;
                }
                case 98: {
                  FirmwareTags = input.ReadString();
                  break;
                }
                case 106: {
                  FirmwareType = input.ReadString();
                  break;
                }
                case 114: {
                  FirmwareFingerprint = input.ReadString();
                  break;
                }
              }
            }
          }
  
        }
  
        /// <summary>
        ///  Only used in iOS - Android just sends an empty version
        /// </summary>
        public sealed partial class ActivityStatus : pb::IMessage<ActivityStatus> {
          private static readonly pb::MessageParser<ActivityStatus> _parser = new pb::MessageParser<ActivityStatus>(() => new ActivityStatus());
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public static pb::MessageParser<ActivityStatus> Parser { get { return _parser; } }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public static pbr::MessageDescriptor Descriptor {
            get { return global::POGOProtos.Networking.Envelopes.Signature.Descriptor.NestedTypes[4]; }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          pbr::MessageDescriptor pb::IMessage.Descriptor {
            get { return Descriptor; }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public ActivityStatus() {
            OnConstruction();
          }
  
          partial void OnConstruction();
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public ActivityStatus(ActivityStatus other) : this() {
            startTimeMs_ = other.startTimeMs_;
            unknownStatus_ = other.unknownStatus_;
            walking_ = other.walking_;
            running_ = other.running_;
            stationary_ = other.stationary_;
            automotive_ = other.automotive_;
            tilting_ = other.tilting_;
            cycling_ = other.cycling_;
            status_ = other.status_;
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public ActivityStatus Clone() {
            return new ActivityStatus(this);
          }
  
          /// <summary>Field number for the "start_time_ms" field.</summary>
          public const int StartTimeMsFieldNumber = 1;
          private ulong startTimeMs_;
          /// <summary>
          ///  all of these had 1 as their value
          /// </summary>
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public ulong StartTimeMs {
            get { return startTimeMs_; }
            set {
              startTimeMs_ = value;
            }
          }
  
          /// <summary>Field number for the "unknown_status" field.</summary>
          public const int UnknownStatusFieldNumber = 2;
          private bool unknownStatus_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public bool UnknownStatus {
            get { return unknownStatus_; }
            set {
              unknownStatus_ = value;
            }
          }
  
          /// <summary>Field number for the "walking" field.</summary>
          public const int WalkingFieldNumber = 3;
          private bool walking_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public bool Walking {
            get { return walking_; }
            set {
              walking_ = value;
            }
          }
  
          /// <summary>Field number for the "running" field.</summary>
          public const int RunningFieldNumber = 4;
          private bool running_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public bool Running {
            get { return running_; }
            set {
              running_ = value;
            }
          }
  
          /// <summary>Field number for the "stationary" field.</summary>
          public const int StationaryFieldNumber = 5;
          private bool stationary_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public bool Stationary {
            get { return stationary_; }
            set {
              stationary_ = value;
            }
          }
  
          /// <summary>Field number for the "automotive" field.</summary>
          public const int AutomotiveFieldNumber = 6;
          private bool automotive_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public bool Automotive {
            get { return automotive_; }
            set {
              automotive_ = value;
            }
          }
  
          /// <summary>Field number for the "tilting" field.</summary>
          public const int TiltingFieldNumber = 7;
          private bool tilting_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public bool Tilting {
            get { return tilting_; }
            set {
              tilting_ = value;
            }
          }
  
          /// <summary>Field number for the "cycling" field.</summary>
          public const int CyclingFieldNumber = 8;
          private bool cycling_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public bool Cycling {
            get { return cycling_; }
            set {
              cycling_ = value;
            }
          }
  
          /// <summary>Field number for the "status" field.</summary>
          public const int StatusFieldNumber = 9;
          private pb::ByteString status_ = pb::ByteString.Empty;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public pb::ByteString Status {
            get { return status_; }
            set {
              status_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
            }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public override bool Equals(object other) {
            return Equals(other as ActivityStatus);
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public bool Equals(ActivityStatus other) {
            if (ReferenceEquals(other, null)) {
              return false;
            }
            if (ReferenceEquals(other, this)) {
              return true;
            }
            if (StartTimeMs != other.StartTimeMs) return false;
            if (UnknownStatus != other.UnknownStatus) return false;
            if (Walking != other.Walking) return false;
            if (Running != other.Running) return false;
            if (Stationary != other.Stationary) return false;
            if (Automotive != other.Automotive) return false;
            if (Tilting != other.Tilting) return false;
            if (Cycling != other.Cycling) return false;
            if (Status != other.Status) return false;
            return true;
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public override int GetHashCode() {
            int hash = 1;
            if (StartTimeMs != 0UL) hash ^= StartTimeMs.GetHashCode();
            if (UnknownStatus != false) hash ^= UnknownStatus.GetHashCode();
            if (Walking != false) hash ^= Walking.GetHashCode();
            if (Running != false) hash ^= Running.GetHashCode();
            if (Stationary != false) hash ^= Stationary.GetHashCode();
            if (Automotive != false) hash ^= Automotive.GetHashCode();
            if (Tilting != false) hash ^= Tilting.GetHashCode();
            if (Cycling != false) hash ^= Cycling.GetHashCode();
            if (Status.Length != 0) hash ^= Status.GetHashCode();
            return hash;
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public override string ToString() {
            return pb::JsonFormatter.ToDiagnosticString(this);
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public void WriteTo(pb::CodedOutputStream output) {
            if (StartTimeMs != 0UL) {
              output.WriteRawTag(8);
              output.WriteUInt64(StartTimeMs);
            }
            if (UnknownStatus != false) {
              output.WriteRawTag(16);
              output.WriteBool(UnknownStatus);
            }
            if (Walking != false) {
              output.WriteRawTag(24);
              output.WriteBool(Walking);
            }
            if (Running != false) {
              output.WriteRawTag(32);
              output.WriteBool(Running);
            }
            if (Stationary != false) {
              output.WriteRawTag(40);
              output.WriteBool(Stationary);
            }
            if (Automotive != false) {
              output.WriteRawTag(48);
              output.WriteBool(Automotive);
            }
            if (Tilting != false) {
              output.WriteRawTag(56);
              output.WriteBool(Tilting);
            }
            if (Cycling != false) {
              output.WriteRawTag(64);
              output.WriteBool(Cycling);
            }
            if (Status.Length != 0) {
              output.WriteRawTag(74);
              output.WriteBytes(Status);
            }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public int CalculateSize() {
            int size = 0;
            if (StartTimeMs != 0UL) {
              size += 1 + pb::CodedOutputStream.ComputeUInt64Size(StartTimeMs);
            }
            if (UnknownStatus != false) {
              size += 1 + 1;
            }
            if (Walking != false) {
              size += 1 + 1;
            }
            if (Running != false) {
  
gt:             size += 1 + 1;