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",
              "cm90bxIfUE9HT1Byb3Rvcy5OZXR3b3JraW5nLkVudmVsb3BlcyKXEgoJU2ln",
              "bmF0dXJlEj8KBmZpZWxkMRgBIAMoCzIvLlBPR09Qcm90b3MuTmV0d29ya2lu",
              "Zy5FbnZlbG9wZXMuVW5rbm93bk1lc3NhZ2USHQoVdGltZXN0YW1wX3NpbmNl",
              "X3N0YXJ0GAIgASgEEg4KBmZpZWxkMxgDIAEoCRJMCgxsb2NhdGlvbl9maXgY",
              "BCADKAsyNi5QT0dPUHJvdG9zLk5ldHdvcmtpbmcuRW52ZWxvcGVzLlNpZ25h",
              "dHVyZS5Mb2NhdGlvbkZpeBJLCghncHNfaW5mbxgFIAMoCzI5LlBPR09Qcm90",
              "b3MuTmV0d29ya2luZy5FbnZlbG9wZXMuU2lnbmF0dXJlLkFuZHJvaWRHcHNJ",
              "bmZvEj8KBmZpZWxkNhgGIAMoCzIvLlBPR09Qcm90b3MuTmV0d29ya2luZy5F",
              "bnZlbG9wZXMuVW5rbm93bk1lc3NhZ2USSgoLc2Vuc29yX2luZm8YByADKAsy",
              "NS5QT0dPUHJvdG9zLk5ldHdvcmtpbmcuRW52ZWxvcGVzLlNpZ25hdHVyZS5T",
              "ZW5zb3JJbmZvEkoKC2RldmljZV9pbmZvGAggASgLMjUuUE9HT1Byb3Rvcy5O",
              "ZXR3b3JraW5nLkVudmVsb3Blcy5TaWduYXR1cmUuRGV2aWNlSW5mbxJSCg9h",
              "Y3Rpdml0eV9zdGF0dXMYCSABKAsyOS5QT0dPUHJvdG9zLk5ldHdvcmtpbmcu",
              "RW52ZWxvcGVzLlNpZ25hdHVyZS5BY3Rpdml0eVN0YXR1cxIWCg5sb2NhdGlv",
              "bl9oYXNoMRgKIAEoBRIPCgdmaWVsZDExGAsgASgIEg8KB2ZpZWxkMTIYDCAB",
              "KAgSDwoHZmllbGQxMxgNIAEoBRIPCgdmaWVsZDE0GA4gASgFEg8KB2ZpZWxk",
              "MTUYDyABKAkSDwoHZmllbGQxNhgQIAEoBRIPCgdmaWVsZDE3GBEgASgJEg8K",
              "B2ZpZWxkMTgYEiABKAkSDwoHZmllbGQxORgTIAEoCBIWCg5sb2NhdGlvbl9o",
              "YXNoMhgUIAEoBRIPCgdmaWVsZDIxGBUgASgIEhQKDHNlc3Npb25faGFzaBgW",
              "IAEoDBIRCgl0aW1lc3RhbXAYFyABKAQSFAoMcmVxdWVzdF9oYXNoGBggAygE",
              "EhEKCXVua25vd24yNRgZIAEoAxqIAgoLTG9jYXRpb25GaXgSEAoIcHJvdmlk",
              "ZXIYASABKAkSGgoSdGltZXN0YW1wX3NuYXBzaG90GAIgASgEEhAKCGFsdGl0",
              "dWRlGAQgASgCEhAKCGxhdGl0dWRlGA0gASgCEhEKCWxvbmdpdHVkZRgOIAEo",
              "AhINCgVzcGVlZBgSIAEoAhIOCgZjb3Vyc2UYFCABKAISGwoTaG9yaXpvbnRh",
              "bF9hY2N1cmFjeRgVIAEoAhIZChF2ZXJ0aWNhbF9hY2N1cmFjeRgWIAEoAhIX",
              "Cg9wcm92aWRlcl9zdGF0dXMYGiABKAQSDQoFZmxvb3IYGyABKA0SFQoNbG9j",
              "YXRpb25fdHlwZRgcIAEoBBqvAQoOQW5kcm9pZEdwc0luZm8SEwoLdGltZV90",
              "b19maXgYASABKAQSFgoOc2F0ZWxsaXRlc19wcm4YAiADKAUSDwoHYXppbXV0",
              "aBgDIAMoAhIRCgllbGV2YXRpb24YBCADKAISCwoDc25yGAUgAygCEhMKC2hh",
              "c19hbG1hbmFjGAYgAygIEhUKDWhhc19lcGhlbWVyaXMYByADKAgSEwoLdXNl",
              "ZF9pbl9maXgYCCADKAgazQMKClNlbnNvckluZm8SGgoSdGltZXN0YW1wX3Nu",
              "YXBzaG90GAEgASgEEh0KFWxpbmVhcl9hY2NlbGVyYXRpb25feBgDIAEoARId",
              "ChVsaW5lYXJfYWNjZWxlcmF0aW9uX3kYBCABKAESHQoVbGluZWFyX2FjY2Vs",
              "ZXJhdGlvbl96GAUgASgBEhgKEG1hZ25ldGljX2ZpZWxkX3gYBiABKAESGAoQ",
              "bWFnbmV0aWNfZmllbGRfeRgHIAEoARIYChBtYWduZXRpY19maWVsZF96GAgg",
              "ASgBEh8KF21hZ25ldGljX2ZpZWxkX2FjY3VyYWN5GAkgASgFEhYKDmF0dGl0",
              "dWRlX3BpdGNoGAogASgBEhQKDGF0dGl0dWRlX3lhdxgLIAEoARIVCg1hdHRp",
              "dHVkZV9yb2xsGAwgASgBEhcKD3JvdGF0aW9uX3JhdGVfeBgNIAEoARIXCg9y",
              "b3RhdGlvbl9yYXRlX3kYDiABKAESFwoPcm90YXRpb25fcmF0ZV96GA8gASgB",
              "EhEKCWdyYXZpdHlfeBgQIAEoARIRCglncmF2aXR5X3kYESABKAESEQoJZ3Jh",
              "dml0eV96GBIgASgBEg4KBnN0YXR1cxgTIAEoBRraAgoKRGV2aWNlSW5mbxIR",
              "CglkZXZpY2VfaWQYASABKAkSGgoSYW5kcm9pZF9ib2FyZF9uYW1lGAIgASgJ",
              "EhoKEmFuZHJvaWRfYm9vdGxvYWRlchgDIAEoCRIUCgxkZXZpY2VfYnJhbmQY",
              "BCABKAkSFAoMZGV2aWNlX21vZGVsGAUgASgJEh8KF2RldmljZV9tb2RlbF9p",
              "ZGVudGlmaWVyGAYgASgJEhkKEWRldmljZV9tb2RlbF9ib290GAcgASgJEh0K",
              "FWhhcmR3YXJlX21hbnVmYWN0dXJlchgIIAEoCRIWCg5oYXJkd2FyZV9tb2Rl",
              "bBgJIAEoCRIWCg5maXJtd2FyZV9icmFuZBgKIAEoCRIVCg1maXJtd2FyZV90",
              "YWdzGAwgASgJEhUKDWZpcm13YXJlX3R5cGUYDSABKAkSHAoUZmlybXdhcmVf",
              "ZmluZ2VycHJpbnQYDiABKAkauwEKDkFjdGl2aXR5U3RhdHVzEhUKDXN0YXJ0",
              "X3RpbWVfbXMYASABKAQSFgoOdW5rbm93bl9zdGF0dXMYAiABKAgSDwoHd2Fs",
              "a2luZxgDIAEoCBIPCgdydW5uaW5nGAQgASgIEhIKCnN0YXRpb25hcnkYBSAB",
              "KAgSEgoKYXV0b21vdGl2ZRgGIAEoCBIPCgd0aWx0aW5nGAcgASgIEg8KB2N5",
              "Y2xpbmcYCCABKAgSDgoGc3RhdHVzGAkgASgMIhAKDlVua25vd25NZXNzYWdl",
              "YgZwcm90bzM="));
        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[]{ "Field1", "TimestampSinceStart", "Field3", "LocationFix", "GpsInfo", "Field6", "SensorInfo", "DeviceInfo", "ActivityStatus", "LocationHash1", "Field11", "Field12", "Field13", "Field14", "Field15", "Field16", "Field17", "Field18", "Field19", "LocationHash2", "Field21", "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", "MagneticFieldAccuracy", "AttitudePitch", "AttitudeYaw", "AttitudeRoll", "RotationRateX", "RotationRateY", "RotationRateZ", "GravityX", "GravityY", "GravityZ", "Status" }, 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)}),
              new pbr::GeneratedClrTypeInfo(typeof(global::POGOProtos.Networking.Envelopes.UnknownMessage), global::POGOProtos.Networking.Envelopes.UnknownMessage.Parser, null, 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() {
        field1_ = other.field1_.Clone();
        timestampSinceStart_ = other.timestampSinceStart_;
        field3_ = other.field3_;
        locationFix_ = other.locationFix_.Clone();
        gpsInfo_ = other.gpsInfo_.Clone();
        field6_ = other.field6_.Clone();
        sensorInfo_ = other.sensorInfo_.Clone();
        DeviceInfo = other.deviceInfo_ != null ? other.DeviceInfo.Clone() : null;
        ActivityStatus = other.activityStatus_ != null ? other.ActivityStatus.Clone() : null;
        locationHash1_ = other.locationHash1_;
        field11_ = other.field11_;
        field12_ = other.field12_;
        field13_ = other.field13_;
        field14_ = other.field14_;
        field15_ = other.field15_;
        field16_ = other.field16_;
        field17_ = other.field17_;
        field18_ = other.field18_;
        field19_ = other.field19_;
        locationHash2_ = other.locationHash2_;
        field21_ = other.field21_;
        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 "field1" field.</summary>
      public const int Field1FieldNumber = 1;
      private static readonly pb::FieldCodec<global::POGOProtos.Networking.Envelopes.UnknownMessage> _repeated_field1_codec
          = pb::FieldCodec.ForMessage(10, global::POGOProtos.Networking.Envelopes.UnknownMessage.Parser);
      private readonly pbc::RepeatedField<global::POGOProtos.Networking.Envelopes.UnknownMessage> field1_ = new pbc::RepeatedField<global::POGOProtos.Networking.Envelopes.UnknownMessage>();
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public pbc::RepeatedField<global::POGOProtos.Networking.Envelopes.UnknownMessage> Field1 {
        get { return field1_; }
      }
  
      /// <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 "field3" field.</summary>
      public const int Field3FieldNumber = 3;
      private string field3_ = "";
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public string Field3 {
        get { return field3_; }
        set {
          field3_ = pb::ProtoPreconditions.CheckNotNull(value, "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 static readonly pb::FieldCodec<global::POGOProtos.Networking.Envelopes.Signature.Types.AndroidGpsInfo> _repeated_gpsInfo_codec
          = pb::FieldCodec.ForMessage(42, global::POGOProtos.Networking.Envelopes.Signature.Types.AndroidGpsInfo.Parser);
      private readonly pbc::RepeatedField<global::POGOProtos.Networking.Envelopes.Signature.Types.AndroidGpsInfo> gpsInfo_ = new pbc::RepeatedField<global::POGOProtos.Networking.Envelopes.Signature.Types.AndroidGpsInfo>();
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public pbc::RepeatedField<global::POGOProtos.Networking.Envelopes.Signature.Types.AndroidGpsInfo> GpsInfo {
        get { return gpsInfo_; }
      }
  
      /// <summary>Field number for the "field6" field.</summary>
      public const int Field6FieldNumber = 6;
      private static readonly pb::FieldCodec<global::POGOProtos.Networking.Envelopes.UnknownMessage> _repeated_field6_codec
          = pb::FieldCodec.ForMessage(50, global::POGOProtos.Networking.Envelopes.UnknownMessage.Parser);
      private readonly pbc::RepeatedField<global::POGOProtos.Networking.Envelopes.UnknownMessage> field6_ = new pbc::RepeatedField<global::POGOProtos.Networking.Envelopes.UnknownMessage>();
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public pbc::RepeatedField<global::POGOProtos.Networking.Envelopes.UnknownMessage> Field6 {
        get { return field6_; }
      }
  
      /// <summary>Field number for the "sensor_info" field.</summary>
      public const int SensorInfoFieldNumber = 7;
      private static readonly pb::FieldCodec<global::POGOProtos.Networking.Envelopes.Signature.Types.SensorInfo> _repeated_sensorInfo_codec
          = pb::FieldCodec.ForMessage(58, global::POGOProtos.Networking.Envelopes.Signature.Types.SensorInfo.Parser);
      private readonly pbc::RepeatedField<global::POGOProtos.Networking.Envelopes.Signature.Types.SensorInfo> sensorInfo_ = new pbc::RepeatedField<global::POGOProtos.Networking.Envelopes.Signature.Types.SensorInfo>();
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public pbc::RepeatedField<global::POGOProtos.Networking.Envelopes.Signature.Types.SensorInfo> SensorInfo {
        get { return sensorInfo_; }
      }
  
      /// <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 int locationHash1_;
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public int LocationHash1 {
        get { return locationHash1_; }
        set {
          locationHash1_ = value;
        }
      }
  
      /// <summary>Field number for the "field11" field.</summary>
      public const int Field11FieldNumber = 11;
      private bool field11_;
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public bool Field11 {
        get { return field11_; }
        set {
          field11_ = value;
        }
      }
  
      /// <summary>Field number for the "field12" field.</summary>
      public const int Field12FieldNumber = 12;
      private bool field12_;
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public bool Field12 {
        get { return field12_; }
        set {
          field12_ = value;
        }
      }
  
      /// <summary>Field number for the "field13" field.</summary>
      public const int Field13FieldNumber = 13;
      private int field13_;
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public int Field13 {
        get { return field13_; }
        set {
          field13_ = value;
        }
      }
  
      /// <summary>Field number for the "field14" field.</summary>
      public const int Field14FieldNumber = 14;
      private int field14_;
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public int Field14 {
        get { return field14_; }
        set {
          field14_ = value;
        }
      }
  
      /// <summary>Field number for the "field15" field.</summary>
      public const int Field15FieldNumber = 15;
      private string field15_ = "";
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public string Field15 {
        get { return field15_; }
        set {
          field15_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
        }
      }
  
      /// <summary>Field number for the "field16" field.</summary>
      public const int Field16FieldNumber = 16;
      private int field16_;
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public int Field16 {
        get { return field16_; }
        set {
          field16_ = value;
        }
      }
  
      /// <summary>Field number for the "field17" field.</summary>
      public const int Field17FieldNumber = 17;
      private string field17_ = "";
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public string Field17 {
        get { return field17_; }
        set {
          field17_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
        }
      }
  
      /// <summary>Field number for the "field18" field.</summary>
      public const int Field18FieldNumber = 18;
      private string field18_ = "";
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public string Field18 {
        get { return field18_; }
        set {
          field18_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
        }
      }
  
      /// <summary>Field number for the "field19" field.</summary>
      public const int Field19FieldNumber = 19;
      private bool field19_;
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public bool Field19 {
        get { return field19_; }
        set {
          field19_ = value;
        }
      }
  
      /// <summary>Field number for the "location_hash2" field.</summary>
      public const int LocationHash2FieldNumber = 20;
      private int locationHash2_;
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public int LocationHash2 {
        get { return locationHash2_; }
        set {
          locationHash2_ = value;
        }
      }
  
      /// <summary>Field number for the "field21" field.</summary>
      public const int Field21FieldNumber = 21;
      private bool field21_;
      [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
      public bool Field21 {
        get { return field21_; }
        set {
          field21_ = value;
        }
      }
  
      /// <summary>Field number for the "session_hash" field.</summary>
      public const int SessionHashFieldNumber = 22;
      private pb::ByteString sessionHash_ = pb::ByteString.Empty;
      /// <summary>
      ///  32 random 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_;
      [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(!field1_.Equals(other.field1_)) return false;
        if (TimestampSinceStart != other.TimestampSinceStart) return false;
        if (Field3 != other.Field3) return false;
        if(!locationFix_.Equals(other.locationFix_)) return false;
        if(!gpsInfo_.Equals(other.gpsInfo_)) return false;
        if(!field6_.Equals(other.field6_)) return false;
        if(!sensorInfo_.Equals(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 (Field11 != other.Field11) return false;
        if (Field12 != other.Field12) return false;
        if (Field13 != other.Field13) return false;
        if (Field14 != other.Field14) return false;
        if (Field15 != other.Field15) return false;
        if (Field16 != other.Field16) return false;
        if (Field17 != other.Field17) return false;
        if (Field18 != other.Field18) return false;
        if (Field19 != other.Field19) return false;
        if (LocationHash2 != other.LocationHash2) return false;
        if (Field21 != other.Field21) 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;
        hash ^= field1_.GetHashCode();
        if (TimestampSinceStart != 0UL) hash ^= TimestampSinceStart.GetHashCode();
        if (Field3.Length != 0) hash ^= Field3.GetHashCode();
        hash ^= locationFix_.GetHashCode();
        hash ^= gpsInfo_.GetHashCode();
        hash ^= field6_.GetHashCode();
        hash ^= sensorInfo_.GetHashCode();
        if (deviceInfo_ != null) hash ^= DeviceInfo.GetHashCode();
        if (activityStatus_ != null) hash ^= ActivityStatus.GetHashCode();
        if (LocationHash1 != 0) hash ^= LocationHash1.GetHashCode();
        if (Field11 != false) hash ^= Field11.GetHashCode();
        if (Field12 != false) hash ^= Field12.GetHashCode();
        if (Field13 != 0) hash ^= Field13.GetHashCode();
        if (Field14 != 0) hash ^= Field14.GetHashCode();
        if (Field15.Length != 0) hash ^= Field15.GetHashCode();
        if (Field16 != 0) hash ^= Field16.GetHashCode();
        if (Field17.Length != 0) hash ^= Field17.GetHashCode();
        if (Field18.Length != 0) hash ^= Field18.GetHashCode();
        if (Field19 != false) hash ^= Field19.GetHashCode();
        if (LocationHash2 != 0) hash ^= LocationHash2.GetHashCode();
        if (Field21 != false) hash ^= Field21.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) {
        field1_.WriteTo(output, _repeated_field1_codec);
        if (TimestampSinceStart != 0UL) {
          output.WriteRawTag(16);
          output.WriteUInt64(TimestampSinceStart);
        }
        if (Field3.Length != 0) {
          output.WriteRawTag(26);
          output.WriteString(Field3);
        }
        locationFix_.WriteTo(output, _repeated_locationFix_codec);
        gpsInfo_.WriteTo(output, _repeated_gpsInfo_codec);
        field6_.WriteTo(output, _repeated_field6_codec);
        sensorInfo_.WriteTo(output, _repeated_sensorInfo_codec);
        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.WriteInt32(LocationHash1);
        }
        if (Field11 != false) {
          output.WriteRawTag(88);
          output.WriteBool(Field11);
        }
        if (Field12 != false) {
          output.WriteRawTag(96);
          output.WriteBool(Field12);
        }
        if (Field13 != 0) {
          output.WriteRawTag(104);
          output.WriteInt32(Field13);
        }
        if (Field14 != 0) {
          output.WriteRawTag(112);
          output.WriteInt32(Field14);
        }
        if (Field15.Length != 0) {
          output.WriteRawTag(122);
          output.WriteString(Field15);
        }
        if (Field16 != 0) {
          output.WriteRawTag(128, 1);
          output.WriteInt32(Field16);
        }
        if (Field17.Length != 0) {
          output.WriteRawTag(138, 1);
          output.WriteString(Field17);
        }
        if (Field18.Length != 0) {
          output.WriteRawTag(146, 1);
          output.WriteString(Field18);
        }
        if (Field19 != false) {
          output.WriteRawTag(152, 1);
          output.WriteBool(Field19);
        }
        if (LocationHash2 != 0) {
          output.WriteRawTag(160, 1);
          output.WriteInt32(LocationHash2);
        }
        if (Field21 != false) {
          output.WriteRawTag(168, 1);
          output.WriteBool(Field21);
        }
        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;
        size += field1_.CalculateSize(_repeated_field1_codec);
        if (TimestampSinceStart != 0UL) {
          size += 1 + pb::CodedOutputStream.ComputeUInt64Size(TimestampSinceStart);
        }
        if (Field3.Length != 0) {
          size += 1 + pb::CodedOutputStream.ComputeStringSize(Field3);
        }
        size += locationFix_.CalculateSize(_repeated_locationFix_codec);
        size += gpsInfo_.CalculateSize(_repeated_gpsInfo_codec);
        size += field6_.CalculateSize(_repeated_field6_codec);
        size += sensorInfo_.CalculateSize(_repeated_sensorInfo_codec);
        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.ComputeInt32Size(LocationHash1);
        }
        if (Field11 != false) {
          size += 1 + 1;
        }
        if (Field12 != false) {
          size += 1 + 1;
        }
        if (Field13 != 0) {
          size += 1 + pb::CodedOutputStream.ComputeInt32Size(Field13);
        }
        if (Field14 != 0) {
          size += 1 + pb::CodedOutputStream.ComputeInt32Size(Field14);
        }
        if (Field15.Length != 0) {
          size += 1 + pb::CodedOutputStream.ComputeStringSize(Field15);
        }
        if (Field16 != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32Size(Field16);
        }
        if (Field17.Length != 0) {
          size += 2 + pb::CodedOutputStream.ComputeStringSize(Field17);
        }
        if (Field18.Length != 0) {
          size += 2 + pb::CodedOutputStream.ComputeStringSize(Field18);
        }
        if (Field19 != false) {
          size += 2 + 1;
        }
        if (LocationHash2 != 0) {
          size += 2 + pb::CodedOutputStream.ComputeInt32Size(LocationHash2);
        }
        if (Field21 != false) {
          size += 2 + 1;
        }
        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;
        }
        field1_.Add(other.field1_);
        if (other.TimestampSinceStart != 0UL) {
          TimestampSinceStart = other.TimestampSinceStart;
        }
        if (other.Field3.Length != 0) {
          Field3 = other.Field3;
        }
        locationFix_.Add(other.locationFix_);
        gpsInfo_.Add(other.gpsInfo_);
        field6_.Add(other.field6_);
        sensorInfo_.Add(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.Field11 != false) {
          Field11 = other.Field11;
        }
        if (other.Field12 != false) {
          Field12 = other.Field12;
        }
        if (other.Field13 != 0) {
          Field13 = other.Field13;
        }
        if (other.Field14 != 0) {
          Field14 = other.Field14;
        }
        if (other.Field15.Length != 0) {
          Field15 = other.Field15;
        }
        if (other.Field16 != 0) {
          Field16 = other.Field16;
        }
        if (other.Field17.Length != 0) {
          Field17 = other.Field17;
        }
        if (other.Field18.Length != 0) {
          Field18 = other.Field18;
        }
        if (other.Field19 != false) {
          Field19 = other.Field19;
        }
        if (other.LocationHash2 != 0) {
          LocationHash2 = other.LocationHash2;
        }
        if (other.Field21 != false) {
          Field21 = other.Field21;
        }
        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 10: {
              field1_.AddEntriesFrom(input, _repeated_field1_codec);
              break;
            }
            case 16: {
              TimestampSinceStart = input.ReadUInt64();
              break;
            }
            case 26: {
              Field3 = input.ReadString();
              break;
            }
            case 34: {
              locationFix_.AddEntriesFrom(input, _repeated_locationFix_codec);
              break;
            }
            case 42: {
              gpsInfo_.AddEntriesFrom(input, _repeated_gpsInfo_codec);
              break;
            }
            case 50: {
              field6_.AddEntriesFrom(input, _repeated_field6_codec);
              break;
            }
            case 58: {
              sensorInfo_.AddEntriesFrom(input, _repeated_sensorInfo_codec);
              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.ReadInt32();
              break;
            }
            case 88: {
              Field11 = input.ReadBool();
              break;
            }
            case 96: {
              Field12 = input.ReadBool();
              break;
            }
            case 104: {
              Field13 = input.ReadInt32();
              break;
            }
            case 112: {
              Field14 = input.ReadInt32();
              break;
            }
            case 122: {
              Field15 = input.ReadString();
              break;
            }
            case 128: {
              Field16 = input.ReadInt32();
              break;
            }
            case 138: {
              Field17 = input.ReadString();
              break;
            }
            case 146: {
              Field18 = input.ReadString();
              break;
            }
            case 152: {
              Field19 = input.ReadBool();
              break;
            }
            case 160: {
              LocationHash2 = input.ReadInt32();
              break;
            }
            case 168: {
              Field21 = input.ReadBool();
              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_;
            magneticFieldAccuracy_ = other.magneticFieldAccuracy_;
            attitudePitch_ = other.attitudePitch_;
            attitudeYaw_ = other.attitudeYaw_;
            attitudeRoll_ = other.attitudeRoll_;
            rotationRateX_ = other.rotationRateX_;
            rotationRateY_ = other.rotationRateY_;
            rotationRateZ_ = other.rotationRateZ_;
            gravityX_ = other.gravityX_;
            gravityY_ = other.gravityY_;
            gravityZ_ = other.gravityZ_;
            status_ = other.status_;
          }
  
          [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 "magnetic_field_accuracy" field.</summary>
          public const int MagneticFieldAccuracyFieldNumber = 9;
          private int magneticFieldAccuracy_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public int MagneticFieldAccuracy {
            get { return magneticFieldAccuracy_; }
            set {
              magneticFieldAccuracy_ = value;
            }
          }
  
          /// <summary>Field number for the "attitude_pitch" field.</summary>
          public const int AttitudePitchFieldNumber = 10;
          private double attitudePitch_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double AttitudePitch {
            get { return attitudePitch_; }
            set {
              attitudePitch_ = value;
            }
          }
  
          /// <summary>Field number for the "attitude_yaw" field.</summary>
          public const int AttitudeYawFieldNumber = 11;
          private double attitudeYaw_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double AttitudeYaw {
            get { return attitudeYaw_; }
            set {
              attitudeYaw_ = value;
            }
          }
  
          /// <summary>Field number for the "attitude_roll" field.</summary>
          public const int AttitudeRollFieldNumber = 12;
          private double attitudeRoll_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double AttitudeRoll {
            get { return attitudeRoll_; }
            set {
              attitudeRoll_ = value;
            }
          }
  
          /// <summary>Field number for the "rotation_rate_x" field.</summary>
          public const int RotationRateXFieldNumber = 13;
          private double rotationRateX_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double RotationRateX {
            get { return rotationRateX_; }
            set {
              rotationRateX_ = value;
            }
          }
  
          /// <summary>Field number for the "rotation_rate_y" field.</summary>
          public const int RotationRateYFieldNumber = 14;
          private double rotationRateY_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double RotationRateY {
            get { return rotationRateY_; }
            set {
              rotationRateY_ = value;
            }
          }
  
          /// <summary>Field number for the "rotation_rate_z" field.</summary>
          public const int RotationRateZFieldNumber = 15;
          private double rotationRateZ_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public double RotationRateZ {
            get { return rotationRateZ_; }
            set {
              rotationRateZ_ = 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 "status" field.</summary>
          public const int StatusFieldNumber = 19;
          private int status_;
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public int Status {
            get { return status_; }
            set {
              status_ = 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 (MagneticFieldAccuracy != other.MagneticFieldAccuracy) return false;
            if (AttitudePitch != other.AttitudePitch) return false;
            if (AttitudeYaw != other.AttitudeYaw) return false;
            if (AttitudeRoll != other.AttitudeRoll) return false;
            if (RotationRateX != other.RotationRateX) return false;
            if (RotationRateY != other.RotationRateY) return false;
            if (RotationRateZ != other.RotationRateZ) return false;
            if (GravityX != other.GravityX) return false;
            if (GravityY != other.GravityY) return false;
            if (GravityZ != other.GravityZ) return false;
            if (Status != other.Status) 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 (MagneticFieldAccuracy != 0) hash ^= MagneticFieldAccuracy.GetHashCode();
            if (AttitudePitch != 0D) hash ^= AttitudePitch.GetHashCode();
            if (AttitudeYaw != 0D) hash ^= AttitudeYaw.GetHashCode();
            if (AttitudeRoll != 0D) hash ^= AttitudeRoll.GetHashCode();
            if (RotationRateX != 0D) hash ^= RotationRateX.GetHashCode();
            if (RotationRateY != 0D) hash ^= RotationRateY.GetHashCode();
            if (RotationRateZ != 0D) hash ^= RotationRateZ.GetHashCode();
            if (GravityX != 0D) hash ^= GravityX.GetHashCode();
            if (GravityY != 0D) hash ^= GravityY.GetHashCode();
            if (GravityZ != 0D) hash ^= GravityZ.GetHashCode();
            if (Status != 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 (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 (MagneticFieldAccuracy != 0) {
              output.WriteRawTag(72);
              output.WriteInt32(MagneticFieldAccuracy);
            }
            if (AttitudePitch != 0D) {
              output.WriteRawTag(81);
              output.WriteDouble(AttitudePitch);
            }
            if (AttitudeYaw != 0D) {
              output.WriteRawTag(89);
              output.WriteDouble(AttitudeYaw);
            }
            if (AttitudeRoll != 0D) {
              output.WriteRawTag(97);
              output.WriteDouble(AttitudeRoll);
            }
            if (RotationRateX != 0D) {
              output.WriteRawTag(105);
              output.WriteDouble(RotationRateX);
            }
            if (RotationRateY != 0D) {
              output.WriteRawTag(113);
              output.WriteDouble(RotationRateY);
            }
            if (RotationRateZ != 0D) {
              output.WriteRawTag(121);
              output.WriteDouble(RotationRateZ);
            }
            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 (Status != 0) {
              output.WriteRawTag(152, 1);
              output.WriteInt32(Status);
            }
          }
  
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
          public int CalculateSize() {
            int size = 0;
            if (TimestampSnapshot != 0UL) {
              size += 1 + pb::CodedOutputStream.ComputeUInt64Size(TimestampSnapshot);
            }
            if (LinearAccelerationX != 0D) {
  
gt:             size += 1 + 8;