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

package com.spotify.connectstate;

public final class Connect {
  private Connect() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  /**
   * Protobuf enum {@code connectstate.SendCommandResult}
   */
  public enum SendCommandResult
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>UNKNOWN_SEND_COMMAND_RESULT = 0;</code>
     */
    UNKNOWN_SEND_COMMAND_RESULT(0),
    /**
     * <code>SUCCESS = 1;</code>
     */
    SUCCESS(1),
    /**
     * <code>DEVICE_NOT_FOUND = 2;</code>
     */
    DEVICE_NOT_FOUND(2),
    /**
     * <code>CONTEXT_PLAYER_ERROR = 3;</code>
     */
    CONTEXT_PLAYER_ERROR(3),
    /**
     * <code>DEVICE_DISAPPEARED = 4;</code>
     */
    DEVICE_DISAPPEARED(4),
    /**
     * <code>UPSTREAM_ERROR = 5;</code>
     */
    UPSTREAM_ERROR(5),
    /**
     * <code>DEVICE_DOES_NOT_SUPPORT_COMMAND = 6;</code>
     */
    DEVICE_DOES_NOT_SUPPORT_COMMAND(6),
    /**
     * <code>RATE_LIMITED = 7;</code>
     */
    RATE_LIMITED(7),
    UNRECOGNIZED(-1),
    ;

    /**
     * <code>UNKNOWN_SEND_COMMAND_RESULT = 0;</code>
     */
    public static final int UNKNOWN_SEND_COMMAND_RESULT_VALUE = 0;
    /**
     * <code>SUCCESS = 1;</code>
     */
    public static final int SUCCESS_VALUE = 1;
    /**
     * <code>DEVICE_NOT_FOUND = 2;</code>
     */
    public static final int DEVICE_NOT_FOUND_VALUE = 2;
    /**
     * <code>CONTEXT_PLAYER_ERROR = 3;</code>
     */
    public static final int CONTEXT_PLAYER_ERROR_VALUE = 3;
    /**
     * <code>DEVICE_DISAPPEARED = 4;</code>
     */
    public static final int DEVICE_DISAPPEARED_VALUE = 4;
    /**
     * <code>UPSTREAM_ERROR = 5;</code>
     */
    public static final int UPSTREAM_ERROR_VALUE = 5;
    /**
     * <code>DEVICE_DOES_NOT_SUPPORT_COMMAND = 6;</code>
     */
    public static final int DEVICE_DOES_NOT_SUPPORT_COMMAND_VALUE = 6;
    /**
     * <code>RATE_LIMITED = 7;</code>
     */
    public static final int RATE_LIMITED_VALUE = 7;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

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

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static SendCommandResult forNumber(int value) {
      switch (value) {
        case 0: return UNKNOWN_SEND_COMMAND_RESULT;
        case 1: return SUCCESS;
        case 2: return DEVICE_NOT_FOUND;
        case 3: return CONTEXT_PLAYER_ERROR;
        case 4: return DEVICE_DISAPPEARED;
        case 5: return UPSTREAM_ERROR;
        case 6: return DEVICE_DOES_NOT_SUPPORT_COMMAND;
        case 7: return RATE_LIMITED;
        default: return null;
      }
    }

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

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

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

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

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:connectstate.SendCommandResult)
  }

  /**
   * Protobuf enum {@code connectstate.PutStateReason}
   */
  public enum PutStateReason
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>UNKNOWN_PUT_STATE_REASON = 0;</code>
     */
    UNKNOWN_PUT_STATE_REASON(0),
    /**
     * <code>SPIRC_HELLO = 1;</code>
     */
    SPIRC_HELLO(1),
    /**
     * <code>SPIRC_NOTIFY = 2;</code>
     */
    SPIRC_NOTIFY(2),
    /**
     * <code>NEW_DEVICE = 3;</code>
     */
    NEW_DEVICE(3),
    /**
     * <code>PLAYER_STATE_CHANGED = 4;</code>
     */
    PLAYER_STATE_CHANGED(4),
    /**
     * <code>VOLUME_CHANGED = 5;</code>
     */
    VOLUME_CHANGED(5),
    /**
     * <code>PICKER_OPENED = 6;</code>
     */
    PICKER_OPENED(6),
    /**
     * <code>BECAME_INACTIVE = 7;</code>
     */
    BECAME_INACTIVE(7),
    UNRECOGNIZED(-1),
    ;

    /**
     * <code>UNKNOWN_PUT_STATE_REASON = 0;</code>
     */
    public static final int UNKNOWN_PUT_STATE_REASON_VALUE = 0;
    /**
     * <code>SPIRC_HELLO = 1;</code>
     */
    public static final int SPIRC_HELLO_VALUE = 1;
    /**
     * <code>SPIRC_NOTIFY = 2;</code>
     */
    public static final int SPIRC_NOTIFY_VALUE = 2;
    /**
     * <code>NEW_DEVICE = 3;</code>
     */
    public static final int NEW_DEVICE_VALUE = 3;
    /**
     * <code>PLAYER_STATE_CHANGED = 4;</code>
     */
    public static final int PLAYER_STATE_CHANGED_VALUE = 4;
    /**
     * <code>VOLUME_CHANGED = 5;</code>
     */
    public static final int VOLUME_CHANGED_VALUE = 5;
    /**
     * <code>PICKER_OPENED = 6;</code>
     */
    public static final int PICKER_OPENED_VALUE = 6;
    /**
     * <code>BECAME_INACTIVE = 7;</code>
     */
    public static final int BECAME_INACTIVE_VALUE = 7;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

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

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static PutStateReason forNumber(int value) {
      switch (value) {
        case 0: return UNKNOWN_PUT_STATE_REASON;
        case 1: return SPIRC_HELLO;
        case 2: return SPIRC_NOTIFY;
        case 3: return NEW_DEVICE;
        case 4: return PLAYER_STATE_CHANGED;
        case 5: return VOLUME_CHANGED;
        case 6: return PICKER_OPENED;
        case 7: return BECAME_INACTIVE;
        default: return null;
      }
    }

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

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

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

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

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:connectstate.PutStateReason)
  }

  /**
   * Protobuf enum {@code connectstate.MemberType}
   */
  public enum MemberType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>SPIRC_V2 = 0;</code>
     */
    SPIRC_V2(0),
    /**
     * <code>SPIRC_V3 = 1;</code>
     */
    SPIRC_V3(1),
    /**
     * <code>CONNECT_STATE = 2;</code>
     */
    CONNECT_STATE(2),
    UNRECOGNIZED(-1),
    ;

    /**
     * <code>SPIRC_V2 = 0;</code>
     */
    public static final int SPIRC_V2_VALUE = 0;
    /**
     * <code>SPIRC_V3 = 1;</code>
     */
    public static final int SPIRC_V3_VALUE = 1;
    /**
     * <code>CONNECT_STATE = 2;</code>
     */
    public static final int CONNECT_STATE_VALUE = 2;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

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

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

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

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.spotify.connectstate.Connect.getDescriptor().getEnumTypes().get(2);
    }

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

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

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:connectstate.MemberType)
  }

  /**
   * Protobuf enum {@code connectstate.ClusterUpdateReason}
   */
  public enum ClusterUpdateReason
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>UNKNOWN_CLUSTER_UPDATE_REASON = 0;</code>
     */
    UNKNOWN_CLUSTER_UPDATE_REASON(0),
    /**
     * <code>DEVICES_DISAPPEARED = 1;</code>
     */
    DEVICES_DISAPPEARED(1),
    /**
     * <code>DEVICE_STATE_CHANGED = 2;</code>
     */
    DEVICE_STATE_CHANGED(2),
    /**
     * <code>NEW_DEVICE_APPEARED = 3;</code>
     */
    NEW_DEVICE_APPEARED(3),
    UNRECOGNIZED(-1),
    ;

    /**
     * <code>UNKNOWN_CLUSTER_UPDATE_REASON = 0;</code>
     */
    public static final int UNKNOWN_CLUSTER_UPDATE_REASON_VALUE = 0;
    /**
     * <code>DEVICES_DISAPPEARED = 1;</code>
     */
    public static final int DEVICES_DISAPPEARED_VALUE = 1;
    /**
     * <code>DEVICE_STATE_CHANGED = 2;</code>
     */
    public static final int DEVICE_STATE_CHANGED_VALUE = 2;
    /**
     * <code>NEW_DEVICE_APPEARED = 3;</code>
     */
    public static final int NEW_DEVICE_APPEARED_VALUE = 3;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

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

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static ClusterUpdateReason forNumber(int value) {
      switch (value) {
        case 0: return UNKNOWN_CLUSTER_UPDATE_REASON;
        case 1: return DEVICES_DISAPPEARED;
        case 2: return DEVICE_STATE_CHANGED;
        case 3: return NEW_DEVICE_APPEARED;
        default: return null;
      }
    }

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

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.spotify.connectstate.Connect.getDescriptor().getEnumTypes().get(3);
    }

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

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

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:connectstate.ClusterUpdateReason)
  }

  /**
   * Protobuf enum {@code connectstate.DeviceType}
   */
  public enum DeviceType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>UNKNOWN = 0;</code>
     */
    UNKNOWN(0),
    /**
     * <code>COMPUTER = 1;</code>
     */
    COMPUTER(1),
    /**
     * <code>TABLET = 2;</code>
     */
    TABLET(2),
    /**
     * <code>SMARTPHONE = 3;</code>
     */
    SMARTPHONE(3),
    /**
     * <code>SPEAKER = 4;</code>
     */
    SPEAKER(4),
    /**
     * <code>TV = 5;</code>
     */
    TV(5),
    /**
     * <code>AVR = 6;</code>
     */
    AVR(6),
    /**
     * <code>STB = 7;</code>
     */
    STB(7),
    /**
     * <code>AUDIO_DONGLE = 8;</code>
     */
    AUDIO_DONGLE(8),
    /**
     * <code>GAME_CONSOLE = 9;</code>
     */
    GAME_CONSOLE(9),
    /**
     * <code>CAST_VIDEO = 10;</code>
     */
    CAST_VIDEO(10),
    /**
     * <code>CAST_AUDIO = 11;</code>
     */
    CAST_AUDIO(11),
    /**
     * <code>AUTOMOBILE = 12;</code>
     */
    AUTOMOBILE(12),
    /**
     * <code>SMARTWATCH = 13;</code>
     */
    SMARTWATCH(13),
    /**
     * <code>CHROMEBOOK = 14;</code>
     */
    CHROMEBOOK(14),
    /**
     * <code>UNKNOWN_SPOTIFY = 100;</code>
     */
    UNKNOWN_SPOTIFY(100),
    /**
     * <code>CAR_THING = 101;</code>
     */
    CAR_THING(101),
    /**
     * <code>OBSERVER = 102;</code>
     */
    OBSERVER(102),
    /**
     * <code>HOME_THING = 103;</code>
     */
    HOME_THING(103),
    UNRECOGNIZED(-1),
    ;

    /**
     * <code>UNKNOWN = 0;</code>
     */
    public static final int UNKNOWN_VALUE = 0;
    /**
     * <code>COMPUTER = 1;</code>
     */
    public static final int COMPUTER_VALUE = 1;
    /**
     * <code>TABLET = 2;</code>
     */
    public static final int TABLET_VALUE = 2;
    /**
     * <code>SMARTPHONE = 3;</code>
     */
    public static final int SMARTPHONE_VALUE = 3;
    /**
     * <code>SPEAKER = 4;</code>
     */
    public static final int SPEAKER_VALUE = 4;
    /**
     * <code>TV = 5;</code>
     */
    public static final int TV_VALUE = 5;
    /**
     * <code>AVR = 6;</code>
     */
    public static final int AVR_VALUE = 6;
    /**
     * <code>STB = 7;</code>
     */
    public static final int STB_VALUE = 7;
    /**
     * <code>AUDIO_DONGLE = 8;</code>
     */
    public static final int AUDIO_DONGLE_VALUE = 8;
    /**
     * <code>GAME_CONSOLE = 9;</code>
     */
    public static final int GAME_CONSOLE_VALUE = 9;
    /**
     * <code>CAST_VIDEO = 10;</code>
     */
    public static final int CAST_VIDEO_VALUE = 10;
    /**
     * <code>CAST_AUDIO = 11;</code>
     */
    public static final int CAST_AUDIO_VALUE = 11;
    /**
     * <code>AUTOMOBILE = 12;</code>
     */
    public static final int AUTOMOBILE_VALUE = 12;
    /**
     * <code>SMARTWATCH = 13;</code>
     */
    public static final int SMARTWATCH_VALUE = 13;
    /**
     * <code>CHROMEBOOK = 14;</code>
     */
    public static final int CHROMEBOOK_VALUE = 14;
    /**
     * <code>UNKNOWN_SPOTIFY = 100;</code>
     */
    public static final int UNKNOWN_SPOTIFY_VALUE = 100;
    /**
     * <code>CAR_THING = 101;</code>
     */
    public static final int CAR_THING_VALUE = 101;
    /**
     * <code>OBSERVER = 102;</code>
     */
    public static final int OBSERVER_VALUE = 102;
    /**
     * <code>HOME_THING = 103;</code>
     */
    public static final int HOME_THING_VALUE = 103;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

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

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static DeviceType forNumber(int value) {
      switch (value) {
        case 0: return UNKNOWN;
        case 1: return COMPUTER;
        case 2: return TABLET;
        case 3: return SMARTPHONE;
        case 4: return SPEAKER;
        case 5: return TV;
        case 6: return AVR;
        case 7: return STB;
        case 8: return AUDIO_DONGLE;
        case 9: return GAME_CONSOLE;
        case 10: return CAST_VIDEO;
        case 11: return CAST_AUDIO;
        case 12: return AUTOMOBILE;
        case 13: return SMARTWATCH;
        case 14: return CHROMEBOOK;
        case 100: return UNKNOWN_SPOTIFY;
        case 101: return CAR_THING;
        case 102: return OBSERVER;
        case 103: return HOME_THING;
        default: return null;
      }
    }

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

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.spotify.connectstate.Connect.getDescriptor().getEnumTypes().get(4);
    }

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

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

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:connectstate.DeviceType)
  }

  public interface ClusterUpdateOrBuilder extends
      // @@protoc_insertion_point(interface_extends:connectstate.ClusterUpdate)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.connectstate.Cluster cluster = 1;</code>
     * @return Whether the cluster field is set.
     */
    boolean hasCluster();
    /**
     * <code>.connectstate.Cluster cluster = 1;</code>
     * @return The cluster.
     */
    com.spotify.connectstate.Connect.Cluster getCluster();
    /**
     * <code>.connectstate.Cluster cluster = 1;</code>
     */
    com.spotify.connectstate.Connect.ClusterOrBuilder getClusterOrBuilder();

    /**
     * <code>.connectstate.ClusterUpdateReason update_reason = 2;</code>
     * @return The enum numeric value on the wire for updateReason.
     */
    int getUpdateReasonValue();
    /**
     * <code>.connectstate.ClusterUpdateReason update_reason = 2;</code>
     * @return The updateReason.
     */
    com.spotify.connectstate.Connect.ClusterUpdateReason getUpdateReason();

    /**
     * <code>string ack_id = 3;</code>
     * @return The ackId.
     */
    java.lang.String getAckId();
    /**
     * <code>string ack_id = 3;</code>
     * @return The bytes for ackId.
     */
    com.google.protobuf.ByteString
        getAckIdBytes();

    /**
     * <code>repeated string devices_that_changed = 4;</code>
     * @return A list containing the devicesThatChanged.
     */
    java.util.List<java.lang.String>
        getDevicesThatChangedList();
    /**
     * <code>repeated string devices_that_changed = 4;</code>
     * @return The count of devicesThatChanged.
     */
    int getDevicesThatChangedCount();
    /**
     * <code>repeated string devices_that_changed = 4;</code>
     * @param index The index of the element to return.
     * @return The devicesThatChanged at the given index.
     */
    java.lang.String getDevicesThatChanged(int index);
    /**
     * <code>repeated string devices_that_changed = 4;</code>
     * @param index The index of the value to return.
     * @return The bytes of the devicesThatChanged at the given index.
     */
    com.google.protobuf.ByteString
        getDevicesThatChangedBytes(int index);
  }
  /**
   * Protobuf type {@code connectstate.ClusterUpdate}
   */
  public  static final class ClusterUpdate extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:connectstate.ClusterUpdate)
      ClusterUpdateOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ClusterUpdate.newBuilder() to construct.
    private ClusterUpdate(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ClusterUpdate() {
      updateReason_ = 0;
      ackId_ = "";
      devicesThatChanged_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ClusterUpdate();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_ClusterUpdate_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_ClusterUpdate_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.connectstate.Connect.ClusterUpdate.class, com.spotify.connectstate.Connect.ClusterUpdate.Builder.class);
    }

    public static final int CLUSTER_FIELD_NUMBER = 1;
    private com.spotify.connectstate.Connect.Cluster cluster_;
    /**
     * <code>.connectstate.Cluster cluster = 1;</code>
     * @return Whether the cluster field is set.
     */
    public boolean hasCluster() {
      return cluster_ != null;
    }
    /**
     * <code>.connectstate.Cluster cluster = 1;</code>
     * @return The cluster.
     */
    public com.spotify.connectstate.Connect.Cluster getCluster() {
      return cluster_ == null ? com.spotify.connectstate.Connect.Cluster.getDefaultInstance() : cluster_;
    }
    /**
     * <code>.connectstate.Cluster cluster = 1;</code>
     */
    public com.spotify.connectstate.Connect.ClusterOrBuilder getClusterOrBuilder() {
      return getCluster();
    }

    public static final int UPDATE_REASON_FIELD_NUMBER = 2;
    private int updateReason_;
    /**
     * <code>.connectstate.ClusterUpdateReason update_reason = 2;</code>
     * @return The enum numeric value on the wire for updateReason.
     */
    public int getUpdateReasonValue() {
      return updateReason_;
    }
    /**
     * <code>.connectstate.ClusterUpdateReason update_reason = 2;</code>
     * @return The updateReason.
     */
    public com.spotify.connectstate.Connect.ClusterUpdateReason getUpdateReason() {
      @SuppressWarnings("deprecation")
      com.spotify.connectstate.Connect.ClusterUpdateReason result = com.spotify.connectstate.Connect.ClusterUpdateReason.valueOf(updateReason_);
      return result == null ? com.spotify.connectstate.Connect.ClusterUpdateReason.UNRECOGNIZED : result;
    }

    public static final int ACK_ID_FIELD_NUMBER = 3;
    private volatile java.lang.Object ackId_;
    /**
     * <code>string ack_id = 3;</code>
     * @return The ackId.
     */
    public java.lang.String getAckId() {
      java.lang.Object ref = ackId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        ackId_ = s;
        return s;
      }
    }
    /**
     * <code>string ack_id = 3;</code>
     * @return The bytes for ackId.
     */
    public com.google.protobuf.ByteString
        getAckIdBytes() {
      java.lang.Object ref = ackId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        ackId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DEVICES_THAT_CHANGED_FIELD_NUMBER = 4;
    private com.google.protobuf.LazyStringList devicesThatChanged_;
    /**
     * <code>repeated string devices_that_changed = 4;</code>
     * @return A list containing the devicesThatChanged.
     */
    public com.google.protobuf.ProtocolStringList
        getDevicesThatChangedList() {
      return devicesThatChanged_;
    }
    /**
     * <code>repeated string devices_that_changed = 4;</code>
     * @return The count of devicesThatChanged.
     */
    public int getDevicesThatChangedCount() {
      return devicesThatChanged_.size();
    }
    /**
     * <code>repeated string devices_that_changed = 4;</code>
     * @param index The index of the element to return.
     * @return The devicesThatChanged at the given index.
     */
    public java.lang.String getDevicesThatChanged(int index) {
      return devicesThatChanged_.get(index);
    }
    /**
     * <code>repeated string devices_that_changed = 4;</code>
     * @param index The index of the value to return.
     * @return The bytes of the devicesThatChanged at the given index.
     */
    public com.google.protobuf.ByteString
        getDevicesThatChangedBytes(int index) {
      return devicesThatChanged_.getByteString(index);
    }

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

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.connectstate.Connect.ClusterUpdate prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code connectstate.ClusterUpdate}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:connectstate.ClusterUpdate)
        com.spotify.connectstate.Connect.ClusterUpdateOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_ClusterUpdate_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_ClusterUpdate_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.connectstate.Connect.ClusterUpdate.class, com.spotify.connectstate.Connect.ClusterUpdate.Builder.class);
      }

      // Construct using com.spotify.connectstate.Connect.ClusterUpdate.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (clusterBuilder_ == null) {
          cluster_ = null;
        } else {
          cluster_ = null;
          clusterBuilder_ = null;
        }
        updateReason_ = 0;

        ackId_ = "";

        devicesThatChanged_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_ClusterUpdate_descriptor;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.ClusterUpdate getDefaultInstanceForType() {
        return com.spotify.connectstate.Connect.ClusterUpdate.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.ClusterUpdate build() {
        com.spotify.connectstate.Connect.ClusterUpdate result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.ClusterUpdate buildPartial() {
        com.spotify.connectstate.Connect.ClusterUpdate result = new com.spotify.connectstate.Connect.ClusterUpdate(this);
        int from_bitField0_ = bitField0_;
        if (clusterBuilder_ == null) {
          result.cluster_ = cluster_;
        } else {
          result.cluster_ = clusterBuilder_.build();
        }
        result.updateReason_ = updateReason_;
        result.ackId_ = ackId_;
        if (((bitField0_ & 0x00000001) != 0)) {
          devicesThatChanged_ = devicesThatChanged_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.devicesThatChanged_ = devicesThatChanged_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private com.spotify.connectstate.Connect.Cluster cluster_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Connect.Cluster, com.spotify.connectstate.Connect.Cluster.Builder, com.spotify.connectstate.Connect.ClusterOrBuilder> clusterBuilder_;
      /**
       * <code>.connectstate.Cluster cluster = 1;</code>
       * @return Whether the cluster field is set.
       */
      public boolean hasCluster() {
        return clusterBuilder_ != null || cluster_ != null;
      }
      /**
       * <code>.connectstate.Cluster cluster = 1;</code>
       * @return The cluster.
       */
      public com.spotify.connectstate.Connect.Cluster getCluster() {
        if (clusterBuilder_ == null) {
          return cluster_ == null ? com.spotify.connectstate.Connect.Cluster.getDefaultInstance() : cluster_;
        } else {
          return clusterBuilder_.getMessage();
        }
      }
      /**
       * <code>.connectstate.Cluster cluster = 1;</code>
       */
      public Builder setCluster(com.spotify.connectstate.Connect.Cluster value) {
        if (clusterBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          cluster_ = value;
          onChanged();
        } else {
          clusterBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.Cluster cluster = 1;</code>
       */
      public Builder setCluster(
          com.spotify.connectstate.Connect.Cluster.Builder builderForValue) {
        if (clusterBuilder_ == null) {
          cluster_ = builderForValue.build();
          onChanged();
        } else {
          clusterBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.connectstate.Cluster cluster = 1;</code>
       */
      public Builder mergeCluster(com.spotify.connectstate.Connect.Cluster value) {
        if (clusterBuilder_ == null) {
          if (cluster_ != null) {
            cluster_ =
              com.spotify.connectstate.Connect.Cluster.newBuilder(cluster_).mergeFrom(value).buildPartial();
          } else {
            cluster_ = value;
          }
          onChanged();
        } else {
          clusterBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.Cluster cluster = 1;</code>
       */
      public Builder clearCluster() {
        if (clusterBuilder_ == null) {
          cluster_ = null;
          onChanged();
        } else {
          cluster_ = null;
          clusterBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.connectstate.Cluster cluster = 1;</code>
       */
      public com.spotify.connectstate.Connect.Cluster.Builder getClusterBuilder() {
        
        onChanged();
        return getClusterFieldBuilder().getBuilder();
      }
      /**
       * <code>.connectstate.Cluster cluster = 1;</code>
       */
      public com.spotify.connectstate.Connect.ClusterOrBuilder getClusterOrBuilder() {
        if (clusterBuilder_ != null) {
          return clusterBuilder_.getMessageOrBuilder();
        } else {
          return cluster_ == null ?
              com.spotify.connectstate.Connect.Cluster.getDefaultInstance() : cluster_;
        }
      }
      /**
       * <code>.connectstate.Cluster cluster = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Connect.Cluster, com.spotify.connectstate.Connect.Cluster.Builder, com.spotify.connectstate.Connect.ClusterOrBuilder> 
          getClusterFieldBuilder() {
        if (clusterBuilder_ == null) {
          clusterBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.connectstate.Connect.Cluster, com.spotify.connectstate.Connect.Cluster.Builder, com.spotify.connectstate.Connect.ClusterOrBuilder>(
                  getCluster(),
                  getParentForChildren(),
                  isClean());
          cluster_ = null;
        }
        return clusterBuilder_;
      }

      private int updateReason_ = 0;
      /**
       * <code>.connectstate.ClusterUpdateReason update_reason = 2;</code>
       * @return The enum numeric value on the wire for updateReason.
       */
      public int getUpdateReasonValue() {
        return updateReason_;
      }
      /**
       * <code>.connectstate.ClusterUpdateReason update_reason = 2;</code>
       * @param value The enum numeric value on the wire for updateReason to set.
       * @return This builder for chaining.
       */
      public Builder setUpdateReasonValue(int value) {
        updateReason_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.connectstate.ClusterUpdateReason update_reason = 2;</code>
       * @return The updateReason.
       */
      public com.spotify.connectstate.Connect.ClusterUpdateReason getUpdateReason() {
        @SuppressWarnings("deprecation")
        com.spotify.connectstate.Connect.ClusterUpdateReason result = com.spotify.connectstate.Connect.ClusterUpdateReason.valueOf(updateReason_);
        return result == null ? com.spotify.connectstate.Connect.ClusterUpdateReason.UNRECOGNIZED : result;
      }
      /**
       * <code>.connectstate.ClusterUpdateReason update_reason = 2;</code>
       * @param value The updateReason to set.
       * @return This builder for chaining.
       */
      public Builder setUpdateReason(com.spotify.connectstate.Connect.ClusterUpdateReason value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        updateReason_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.connectstate.ClusterUpdateReason update_reason = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearUpdateReason() {
        
        updateReason_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object ackId_ = "";
      /**
       * <code>string ack_id = 3;</code>
       * @return The ackId.
       */
      public java.lang.String getAckId() {
        java.lang.Object ref = ackId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          ackId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string ack_id = 3;</code>
       * @return The bytes for ackId.
       */
      public com.google.protobuf.ByteString
          getAckIdBytes() {
        java.lang.Object ref = ackId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          ackId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string ack_id = 3;</code>
       * @param value The ackId to set.
       * @return This builder for chaining.
       */
      public Builder setAckId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        ackId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string ack_id = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearAckId() {
        
        ackId_ = getDefaultInstance().getAckId();
        onChanged();
        return this;
      }
      /**
       * <code>string ack_id = 3;</code>
       * @param value The bytes for ackId to set.
       * @return This builder for chaining.
       */
      public Builder setAckIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        ackId_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList devicesThatChanged_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureDevicesThatChangedIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          devicesThatChanged_ = new com.google.protobuf.LazyStringArrayList(devicesThatChanged_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <code>repeated string devices_that_changed = 4;</code>
       * @return A list containing the devicesThatChanged.
       */
      public com.google.protobuf.ProtocolStringList
          getDevicesThatChangedList() {
        return devicesThatChanged_.getUnmodifiableView();
      }
      /**
       * <code>repeated string devices_that_changed = 4;</code>
       * @return The count of devicesThatChanged.
       */
      public int getDevicesThatChangedCount() {
        return devicesThatChanged_.size();
      }
      /**
       * <code>repeated string devices_that_changed = 4;</code>
       * @param index The index of the element to return.
       * @return The devicesThatChanged at the given index.
       */
      public java.lang.String getDevicesThatChanged(int index) {
        return devicesThatChanged_.get(index);
      }
      /**
       * <code>repeated string devices_that_changed = 4;</code>
       * @param index The index of the value to return.
       * @return The bytes of the devicesThatChanged at the given index.
       */
      public com.google.protobuf.ByteString
          getDevicesThatChangedBytes(int index) {
        return devicesThatChanged_.getByteString(index);
      }
      /**
       * <code>repeated string devices_that_changed = 4;</code>
       * @param index The index to set the value at.
       * @param value The devicesThatChanged to set.
       * @return This builder for chaining.
       */
      public Builder setDevicesThatChanged(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDevicesThatChangedIsMutable();
        devicesThatChanged_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string devices_that_changed = 4;</code>
       * @param value The devicesThatChanged to add.
       * @return This builder for chaining.
       */
      public Builder addDevicesThatChanged(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDevicesThatChangedIsMutable();
        devicesThatChanged_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string devices_that_changed = 4;</code>
       * @param values The devicesThatChanged to add.
       * @return This builder for chaining.
       */
      public Builder addAllDevicesThatChanged(
          java.lang.Iterable<java.lang.String> values) {
        ensureDevicesThatChangedIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, devicesThatChanged_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string devices_that_changed = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearDevicesThatChanged() {
        devicesThatChanged_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string devices_that_changed = 4;</code>
       * @param value The bytes of the devicesThatChanged to add.
       * @return This builder for chaining.
       */
      public Builder addDevicesThatChangedBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureDevicesThatChangedIsMutable();
        devicesThatChanged_.add(value);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:connectstate.ClusterUpdate)
    }

    // @@protoc_insertion_point(class_scope:connectstate.ClusterUpdate)
    private static final com.spotify.connectstate.Connect.ClusterUpdate DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.connectstate.Connect.ClusterUpdate();
    }

    public static com.spotify.connectstate.Connect.ClusterUpdate getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ClusterUpdate>
        PARSER = new com.google.protobuf.AbstractParser<ClusterUpdate>() {
      @java.lang.Override
      public ClusterUpdate parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.connectstate.Connect.ClusterUpdate getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DeviceOrBuilder extends
      // @@protoc_insertion_point(interface_extends:connectstate.Device)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.connectstate.DeviceInfo device_info = 1;</code>
     * @return Whether the deviceInfo field is set.
     */
    boolean hasDeviceInfo();
    /**
     * <code>.connectstate.DeviceInfo device_info = 1;</code>
     * @return The deviceInfo.
     */
    com.spotify.connectstate.Connect.DeviceInfo getDeviceInfo();
    /**
     * <code>.connectstate.DeviceInfo device_info = 1;</code>
     */
    com.spotify.connectstate.Connect.DeviceInfoOrBuilder getDeviceInfoOrBuilder();

    /**
     * <code>.connectstate.PlayerState player_state = 2;</code>
     * @return Whether the playerState field is set.
     */
    boolean hasPlayerState();
    /**
     * <code>.connectstate.PlayerState player_state = 2;</code>
     * @return The playerState.
     */
    com.spotify.connectstate.Player.PlayerState getPlayerState();
    /**
     * <code>.connectstate.PlayerState player_state = 2;</code>
     */
    com.spotify.connectstate.Player.PlayerStateOrBuilder getPlayerStateOrBuilder();

    /**
     * <code>.connectstate.PrivateDeviceInfo private_device_info = 3;</code>
     * @return Whether the privateDeviceInfo field is set.
     */
    boolean hasPrivateDeviceInfo();
    /**
     * <code>.connectstate.PrivateDeviceInfo private_device_info = 3;</code>
     * @return The privateDeviceInfo.
     */
    com.spotify.connectstate.Connect.PrivateDeviceInfo getPrivateDeviceInfo();
    /**
     * <code>.connectstate.PrivateDeviceInfo private_device_info = 3;</code>
     */
    com.spotify.connectstate.Connect.PrivateDeviceInfoOrBuilder getPrivateDeviceInfoOrBuilder();
  }
  /**
   * Protobuf type {@code connectstate.Device}
   */
  public  static final class Device extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:connectstate.Device)
      DeviceOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Device.newBuilder() to construct.
    private Device(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Device() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new Device();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_Device_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_Device_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.connectstate.Connect.Device.class, com.spotify.connectstate.Connect.Device.Builder.class);
    }

    public static final int DEVICE_INFO_FIELD_NUMBER = 1;
    private com.spotify.connectstate.Connect.DeviceInfo deviceInfo_;
    /**
     * <code>.connectstate.DeviceInfo device_info = 1;</code>
     * @return Whether the deviceInfo field is set.
     */
    public boolean hasDeviceInfo() {
      return deviceInfo_ != null;
    }
    /**
     * <code>.connectstate.DeviceInfo device_info = 1;</code>
     * @return The deviceInfo.
     */
    public com.spotify.connectstate.Connect.DeviceInfo getDeviceInfo() {
      return deviceInfo_ == null ? com.spotify.connectstate.Connect.DeviceInfo.getDefaultInstance() : deviceInfo_;
    }
    /**
     * <code>.connectstate.DeviceInfo device_info = 1;</code>
     */
    public com.spotify.connectstate.Connect.DeviceInfoOrBuilder getDeviceInfoOrBuilder() {
      return getDeviceInfo();
    }

    public static final int PLAYER_STATE_FIELD_NUMBER = 2;
    private com.spotify.connectstate.Player.PlayerState playerState_;
    /**
     * <code>.connectstate.PlayerState player_state = 2;</code>
     * @return Whether the playerState field is set.
     */
    public boolean hasPlayerState() {
      return playerState_ != null;
    }
    /**
     * <code>.connectstate.PlayerState player_state = 2;</code>
     * @return The playerState.
     */
    public com.spotify.connectstate.Player.PlayerState getPlayerState() {
      return playerState_ == null ? com.spotify.connectstate.Player.PlayerState.getDefaultInstance() : playerState_;
    }
    /**
     * <code>.connectstate.PlayerState player_state = 2;</code>
     */
    public com.spotify.connectstate.Player.PlayerStateOrBuilder getPlayerStateOrBuilder() {
      return getPlayerState();
    }

    public static final int PRIVATE_DEVICE_INFO_FIELD_NUMBER = 3;
    private com.spotify.connectstate.Connect.PrivateDeviceInfo privateDeviceInfo_;
    /**
     * <code>.connectstate.PrivateDeviceInfo private_device_info = 3;</code>
     * @return Whether the privateDeviceInfo field is set.
     */
    public boolean hasPrivateDeviceInfo() {
      return privateDeviceInfo_ != null;
    }
    /**
     * <code>.connectstate.PrivateDeviceInfo private_device_info = 3;</code>
     * @return The privateDeviceInfo.
     */
    public com.spotify.connectstate.Connect.PrivateDeviceInfo getPrivateDeviceInfo() {
      return privateDeviceInfo_ == null ? com.spotify.connectstate.Connect.PrivateDeviceInfo.getDefaultInstance() : privateDeviceInfo_;
    }
    /**
     * <code>.connectstate.PrivateDeviceInfo private_device_info = 3;</code>
     */
    public com.spotify.connectstate.Connect.PrivateDeviceInfoOrBuilder getPrivateDeviceInfoOrBuilder() {
      return getPrivateDeviceInfo();
    }

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

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.connectstate.Connect.Device prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code connectstate.Device}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:connectstate.Device)
        com.spotify.connectstate.Connect.DeviceOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_Device_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_Device_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.connectstate.Connect.Device.class, com.spotify.connectstate.Connect.Device.Builder.class);
      }

      // Construct using com.spotify.connectstate.Connect.Device.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (deviceInfoBuilder_ == null) {
          deviceInfo_ = null;
        } else {
          deviceInfo_ = null;
          deviceInfoBuilder_ = null;
        }
        if (playerStateBuilder_ == null) {
          playerState_ = null;
        } else {
          playerState_ = null;
          playerStateBuilder_ = null;
        }
        if (privateDeviceInfoBuilder_ == null) {
          privateDeviceInfo_ = null;
        } else {
          privateDeviceInfo_ = null;
          privateDeviceInfoBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_Device_descriptor;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.Device getDefaultInstanceForType() {
        return com.spotify.connectstate.Connect.Device.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.Device build() {
        com.spotify.connectstate.Connect.Device result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.Device buildPartial() {
        com.spotify.connectstate.Connect.Device result = new com.spotify.connectstate.Connect.Device(this);
        if (deviceInfoBuilder_ == null) {
          result.deviceInfo_ = deviceInfo_;
        } else {
          result.deviceInfo_ = deviceInfoBuilder_.build();
        }
        if (playerStateBuilder_ == null) {
          result.playerState_ = playerState_;
        } else {
          result.playerState_ = playerStateBuilder_.build();
        }
        if (privateDeviceInfoBuilder_ == null) {
          result.privateDeviceInfo_ = privateDeviceInfo_;
        } else {
          result.privateDeviceInfo_ = privateDeviceInfoBuilder_.build();
        }
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }

      private com.spotify.connectstate.Connect.DeviceInfo deviceInfo_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Connect.DeviceInfo, com.spotify.connectstate.Connect.DeviceInfo.Builder, com.spotify.connectstate.Connect.DeviceInfoOrBuilder> deviceInfoBuilder_;
      /**
       * <code>.connectstate.DeviceInfo device_info = 1;</code>
       * @return Whether the deviceInfo field is set.
       */
      public boolean hasDeviceInfo() {
        return deviceInfoBuilder_ != null || deviceInfo_ != null;
      }
      /**
       * <code>.connectstate.DeviceInfo device_info = 1;</code>
       * @return The deviceInfo.
       */
      public com.spotify.connectstate.Connect.DeviceInfo getDeviceInfo() {
        if (deviceInfoBuilder_ == null) {
          return deviceInfo_ == null ? com.spotify.connectstate.Connect.DeviceInfo.getDefaultInstance() : deviceInfo_;
        } else {
          return deviceInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>.connectstate.DeviceInfo device_info = 1;</code>
       */
      public Builder setDeviceInfo(com.spotify.connectstate.Connect.DeviceInfo value) {
        if (deviceInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          deviceInfo_ = value;
          onChanged();
        } else {
          deviceInfoBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.DeviceInfo device_info = 1;</code>
       */
      public Builder setDeviceInfo(
          com.spotify.connectstate.Connect.DeviceInfo.Builder builderForValue) {
        if (deviceInfoBuilder_ == null) {
          deviceInfo_ = builderForValue.build();
          onChanged();
        } else {
          deviceInfoBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.connectstate.DeviceInfo device_info = 1;</code>
       */
      public Builder mergeDeviceInfo(com.spotify.connectstate.Connect.DeviceInfo value) {
        if (deviceInfoBuilder_ == null) {
          if (deviceInfo_ != null) {
            deviceInfo_ =
              com.spotify.connectstate.Connect.DeviceInfo.newBuilder(deviceInfo_).mergeFrom(value).buildPartial();
          } else {
            deviceInfo_ = value;
          }
          onChanged();
        } else {
          deviceInfoBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.DeviceInfo device_info = 1;</code>
       */
      public Builder clearDeviceInfo() {
        if (deviceInfoBuilder_ == null) {
          deviceInfo_ = null;
          onChanged();
        } else {
          deviceInfo_ = null;
          deviceInfoBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.connectstate.DeviceInfo device_info = 1;</code>
       */
      public com.spotify.connectstate.Connect.DeviceInfo.Builder getDeviceInfoBuilder() {
        
        onChanged();
        return getDeviceInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>.connectstate.DeviceInfo device_info = 1;</code>
       */
      public com.spotify.connectstate.Connect.DeviceInfoOrBuilder getDeviceInfoOrBuilder() {
        if (deviceInfoBuilder_ != null) {
          return deviceInfoBuilder_.getMessageOrBuilder();
        } else {
          return deviceInfo_ == null ?
              com.spotify.connectstate.Connect.DeviceInfo.getDefaultInstance() : deviceInfo_;
        }
      }
      /**
       * <code>.connectstate.DeviceInfo device_info = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Connect.DeviceInfo, com.spotify.connectstate.Connect.DeviceInfo.Builder, com.spotify.connectstate.Connect.DeviceInfoOrBuilder> 
          getDeviceInfoFieldBuilder() {
        if (deviceInfoBuilder_ == null) {
          deviceInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.connectstate.Connect.DeviceInfo, com.spotify.connectstate.Connect.DeviceInfo.Builder, com.spotify.connectstate.Connect.DeviceInfoOrBuilder>(
                  getDeviceInfo(),
                  getParentForChildren(),
                  isClean());
          deviceInfo_ = null;
        }
        return deviceInfoBuilder_;
      }

      private com.spotify.connectstate.Player.PlayerState playerState_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Player.PlayerState, com.spotify.connectstate.Player.PlayerState.Builder, com.spotify.connectstate.Player.PlayerStateOrBuilder> playerStateBuilder_;
      /**
       * <code>.connectstate.PlayerState player_state = 2;</code>
       * @return Whether the playerState field is set.
       */
      public boolean hasPlayerState() {
        return playerStateBuilder_ != null || playerState_ != null;
      }
      /**
       * <code>.connectstate.PlayerState player_state = 2;</code>
       * @return The playerState.
       */
      public com.spotify.connectstate.Player.PlayerState getPlayerState() {
        if (playerStateBuilder_ == null) {
          return playerState_ == null ? com.spotify.connectstate.Player.PlayerState.getDefaultInstance() : playerState_;
        } else {
          return playerStateBuilder_.getMessage();
        }
      }
      /**
       * <code>.connectstate.PlayerState player_state = 2;</code>
       */
      public Builder setPlayerState(com.spotify.connectstate.Player.PlayerState value) {
        if (playerStateBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          playerState_ = value;
          onChanged();
        } else {
          playerStateBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.PlayerState player_state = 2;</code>
       */
      public Builder setPlayerState(
          com.spotify.connectstate.Player.PlayerState.Builder builderForValue) {
        if (playerStateBuilder_ == null) {
          playerState_ = builderForValue.build();
          onChanged();
        } else {
          playerStateBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.connectstate.PlayerState player_state = 2;</code>
       */
      public Builder mergePlayerState(com.spotify.connectstate.Player.PlayerState value) {
        if (playerStateBuilder_ == null) {
          if (playerState_ != null) {
            playerState_ =
              com.spotify.connectstate.Player.PlayerState.newBuilder(playerState_).mergeFrom(value).buildPartial();
          } else {
            playerState_ = value;
          }
          onChanged();
        } else {
          playerStateBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.PlayerState player_state = 2;</code>
       */
      public Builder clearPlayerState() {
        if (playerStateBuilder_ == null) {
          playerState_ = null;
          onChanged();
        } else {
          playerState_ = null;
          playerStateBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.connectstate.PlayerState player_state = 2;</code>
       */
      public com.spotify.connectstate.Player.PlayerState.Builder getPlayerStateBuilder() {
        
        onChanged();
        return getPlayerStateFieldBuilder().getBuilder();
      }
      /**
       * <code>.connectstate.PlayerState player_state = 2;</code>
       */
      public com.spotify.connectstate.Player.PlayerStateOrBuilder getPlayerStateOrBuilder() {
        if (playerStateBuilder_ != null) {
          return playerStateBuilder_.getMessageOrBuilder();
        } else {
          return playerState_ == null ?
              com.spotify.connectstate.Player.PlayerState.getDefaultInstance() : playerState_;
        }
      }
      /**
       * <code>.connectstate.PlayerState player_state = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Player.PlayerState, com.spotify.connectstate.Player.PlayerState.Builder, com.spotify.connectstate.Player.PlayerStateOrBuilder> 
          getPlayerStateFieldBuilder() {
        if (playerStateBuilder_ == null) {
          playerStateBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.connectstate.Player.PlayerState, com.spotify.connectstate.Player.PlayerState.Builder, com.spotify.connectstate.Player.PlayerStateOrBuilder>(
                  getPlayerState(),
                  getParentForChildren(),
                  isClean());
          playerState_ = null;
        }
        return playerStateBuilder_;
      }

      private com.spotify.connectstate.Connect.PrivateDeviceInfo privateDeviceInfo_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Connect.PrivateDeviceInfo, com.spotify.connectstate.Connect.PrivateDeviceInfo.Builder, com.spotify.connectstate.Connect.PrivateDeviceInfoOrBuilder> privateDeviceInfoBuilder_;
      /**
       * <code>.connectstate.PrivateDeviceInfo private_device_info = 3;</code>
       * @return Whether the privateDeviceInfo field is set.
       */
      public boolean hasPrivateDeviceInfo() {
        return privateDeviceInfoBuilder_ != null || privateDeviceInfo_ != null;
      }
      /**
       * <code>.connectstate.PrivateDeviceInfo private_device_info = 3;</code>
       * @return The privateDeviceInfo.
       */
      public com.spotify.connectstate.Connect.PrivateDeviceInfo getPrivateDeviceInfo() {
        if (privateDeviceInfoBuilder_ == null) {
          return privateDeviceInfo_ == null ? com.spotify.connectstate.Connect.PrivateDeviceInfo.getDefaultInstance() : privateDeviceInfo_;
        } else {
          return privateDeviceInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>.connectstate.PrivateDeviceInfo private_device_info = 3;</code>
       */
      public Builder setPrivateDeviceInfo(com.spotify.connectstate.Connect.PrivateDeviceInfo value) {
        if (privateDeviceInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          privateDeviceInfo_ = value;
          onChanged();
        } else {
          privateDeviceInfoBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.PrivateDeviceInfo private_device_info = 3;</code>
       */
      public Builder setPrivateDeviceInfo(
          com.spotify.connectstate.Connect.PrivateDeviceInfo.Builder builderForValue) {
        if (privateDeviceInfoBuilder_ == null) {
          privateDeviceInfo_ = builderForValue.build();
          onChanged();
        } else {
          privateDeviceInfoBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.connectstate.PrivateDeviceInfo private_device_info = 3;</code>
       */
      public Builder mergePrivateDeviceInfo(com.spotify.connectstate.Connect.PrivateDeviceInfo value) {
        if (privateDeviceInfoBuilder_ == null) {
          if (privateDeviceInfo_ != null) {
            privateDeviceInfo_ =
              com.spotify.connectstate.Connect.PrivateDeviceInfo.newBuilder(privateDeviceInfo_).mergeFrom(value).buildPartial();
          } else {
            privateDeviceInfo_ = value;
          }
          onChanged();
        } else {
          privateDeviceInfoBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.PrivateDeviceInfo private_device_info = 3;</code>
       */
      public Builder clearPrivateDeviceInfo() {
        if (privateDeviceInfoBuilder_ == null) {
          privateDeviceInfo_ = null;
          onChanged();
        } else {
          privateDeviceInfo_ = null;
          privateDeviceInfoBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.connectstate.PrivateDeviceInfo private_device_info = 3;</code>
       */
      public com.spotify.connectstate.Connect.PrivateDeviceInfo.Builder getPrivateDeviceInfoBuilder() {
        
        onChanged();
        return getPrivateDeviceInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>.connectstate.PrivateDeviceInfo private_device_info = 3;</code>
       */
      public com.spotify.connectstate.Connect.PrivateDeviceInfoOrBuilder getPrivateDeviceInfoOrBuilder() {
        if (privateDeviceInfoBuilder_ != null) {
          return privateDeviceInfoBuilder_.getMessageOrBuilder();
        } else {
          return privateDeviceInfo_ == null ?
              com.spotify.connectstate.Connect.PrivateDeviceInfo.getDefaultInstance() : privateDeviceInfo_;
        }
      }
      /**
       * <code>.connectstate.PrivateDeviceInfo private_device_info = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Connect.PrivateDeviceInfo, com.spotify.connectstate.Connect.PrivateDeviceInfo.Builder, com.spotify.connectstate.Connect.PrivateDeviceInfoOrBuilder> 
          getPrivateDeviceInfoFieldBuilder() {
        if (privateDeviceInfoBuilder_ == null) {
          privateDeviceInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.connectstate.Connect.PrivateDeviceInfo, com.spotify.connectstate.Connect.PrivateDeviceInfo.Builder, com.spotify.connectstate.Connect.PrivateDeviceInfoOrBuilder>(
                  getPrivateDeviceInfo(),
                  getParentForChildren(),
                  isClean());
          privateDeviceInfo_ = null;
        }
        return privateDeviceInfoBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:connectstate.Device)
    }

    // @@protoc_insertion_point(class_scope:connectstate.Device)
    private static final com.spotify.connectstate.Connect.Device DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.connectstate.Connect.Device();
    }

    public static com.spotify.connectstate.Connect.Device getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Device>
        PARSER = new com.google.protobuf.AbstractParser<Device>() {
      @java.lang.Override
      public Device parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.connectstate.Connect.Device getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ClusterOrBuilder extends
      // @@protoc_insertion_point(interface_extends:connectstate.Cluster)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>int64 timestamp = 1;</code>
     * @return The timestamp.
     */
    long getTimestamp();

    /**
     * <code>string active_device_id = 2;</code>
     * @return The activeDeviceId.
     */
    java.lang.String getActiveDeviceId();
    /**
     * <code>string active_device_id = 2;</code>
     * @return The bytes for activeDeviceId.
     */
    com.google.protobuf.ByteString
        getActiveDeviceIdBytes();

    /**
     * <code>.connectstate.PlayerState player_state = 3;</code>
     * @return Whether the playerState field is set.
     */
    boolean hasPlayerState();
    /**
     * <code>.connectstate.PlayerState player_state = 3;</code>
     * @return The playerState.
     */
    com.spotify.connectstate.Player.PlayerState getPlayerState();
    /**
     * <code>.connectstate.PlayerState player_state = 3;</code>
     */
    com.spotify.connectstate.Player.PlayerStateOrBuilder getPlayerStateOrBuilder();

    /**
     * <code>map&lt;string, .connectstate.DeviceInfo&gt; device = 4;</code>
     */
    int getDeviceCount();
    /**
     * <code>map&lt;string, .connectstate.DeviceInfo&gt; device = 4;</code>
     */
    boolean containsDevice(
        java.lang.String key);
    /**
     * Use {@link #getDeviceMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.String, com.spotify.connectstate.Connect.DeviceInfo>
    getDevice();
    /**
     * <code>map&lt;string, .connectstate.DeviceInfo&gt; device = 4;</code>
     */
    java.util.Map<java.lang.String, com.spotify.connectstate.Connect.DeviceInfo>
    getDeviceMap();
    /**
     * <code>map&lt;string, .connectstate.DeviceInfo&gt; device = 4;</code>
     */

    com.spotify.connectstate.Connect.DeviceInfo getDeviceOrDefault(
        java.lang.String key,
        com.spotify.connectstate.Connect.DeviceInfo defaultValue);
    /**
     * <code>map&lt;string, .connectstate.DeviceInfo&gt; device = 4;</code>
     */

    com.spotify.connectstate.Connect.DeviceInfo getDeviceOrThrow(
        java.lang.String key);

    /**
     * <code>bytes transfer_data = 5;</code>
     * @return The transferData.
     */
    com.google.protobuf.ByteString getTransferData();
  }
  /**
   * Protobuf type {@code connectstate.Cluster}
   */
  public  static final class Cluster extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:connectstate.Cluster)
      ClusterOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Cluster.newBuilder() to construct.
    private Cluster(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Cluster() {
      activeDeviceId_ = "";
      transferData_ = com.google.protobuf.ByteString.EMPTY;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new Cluster();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_Cluster_descriptor;
    }

    @SuppressWarnings({"rawtypes"})
    @java.lang.Override
    protected com.google.protobuf.MapField internalGetMapField(
        int number) {
      switch (number) {
        case 4:
          return internalGetDevice();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_Cluster_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.connectstate.Connect.Cluster.class, com.spotify.connectstate.Connect.Cluster.Builder.class);
    }

    public static final int TIMESTAMP_FIELD_NUMBER = 1;
    private long timestamp_;
    /**
     * <code>int64 timestamp = 1;</code>
     * @return The timestamp.
     */
    public long getTimestamp() {
      return timestamp_;
    }

    public static final int ACTIVE_DEVICE_ID_FIELD_NUMBER = 2;
    private volatile java.lang.Object activeDeviceId_;
    /**
     * <code>string active_device_id = 2;</code>
     * @return The activeDeviceId.
     */
    public java.lang.String getActiveDeviceId() {
      java.lang.Object ref = activeDeviceId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        activeDeviceId_ = s;
        return s;
      }
    }
    /**
     * <code>string active_device_id = 2;</code>
     * @return The bytes for activeDeviceId.
     */
    public com.google.protobuf.ByteString
        getActiveDeviceIdBytes() {
      java.lang.Object ref = activeDeviceId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        activeDeviceId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PLAYER_STATE_FIELD_NUMBER = 3;
    private com.spotify.connectstate.Player.PlayerState playerState_;
    /**
     * <code>.connectstate.PlayerState player_state = 3;</code>
     * @return Whether the playerState field is set.
     */
    public boolean hasPlayerState() {
      return playerState_ != null;
    }
    /**
     * <code>.connectstate.PlayerState player_state = 3;</code>
     * @return The playerState.
     */
    public com.spotify.connectstate.Player.PlayerState getPlayerState() {
      return playerState_ == null ? com.spotify.connectstate.Player.PlayerState.getDefaultInstance() : playerState_;
    }
    /**
     * <code>.connectstate.PlayerState player_state = 3;</code>
     */
    public com.spotify.connectstate.Player.PlayerStateOrBuilder getPlayerStateOrBuilder() {
      return getPlayerState();
    }

    public static final int DEVICE_FIELD_NUMBER = 4;
    private static final class DeviceDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.String, com.spotify.connectstate.Connect.DeviceInfo> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.String, com.spotify.connectstate.Connect.DeviceInfo>newDefaultInstance(
                  com.spotify.connectstate.Connect.internal_static_connectstate_Cluster_DeviceEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "",
                  com.google.protobuf.WireFormat.FieldType.MESSAGE,
                  com.spotify.connectstate.Connect.DeviceInfo.getDefaultInstance());
    }
    private com.google.protobuf.MapField<
        java.lang.String, com.spotify.connectstate.Connect.DeviceInfo> device_;
    private com.google.protobuf.MapField<java.lang.String, com.spotify.connectstate.Connect.DeviceInfo>
    internalGetDevice() {
      if (device_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            DeviceDefaultEntryHolder.defaultEntry);
      }
      return device_;
    }

    public int getDeviceCount() {
      return internalGetDevice().getMap().size();
    }
    /**
     * <code>map&lt;string, .connectstate.DeviceInfo&gt; device = 4;</code>
     */

    public boolean containsDevice(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      return internalGetDevice().getMap().containsKey(key);
    }
    /**
     * Use {@link #getDeviceMap()} instead.
     */
    @java.lang.Deprecated
    public java.util.Map<java.lang.String, com.spotify.connectstate.Connect.DeviceInfo> getDevice() {
      return getDeviceMap();
    }
    /**
     * <code>map&lt;string, .connectstate.DeviceInfo&gt; device = 4;</code>
     */

    public java.util.Map<java.lang.String, com.spotify.connectstate.Connect.DeviceInfo> getDeviceMap() {
      return internalGetDevice().getMap();
    }
    /**
     * <code>map&lt;string, .connectstate.DeviceInfo&gt; device = 4;</code>
     */

    public com.spotify.connectstate.Connect.DeviceInfo getDeviceOrDefault(
        java.lang.String key,
        com.spotify.connectstate.Connect.DeviceInfo defaultValue) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, com.spotify.connectstate.Connect.DeviceInfo> map =
          internalGetDevice().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <code>map&lt;string, .connectstate.DeviceInfo&gt; device = 4;</code>
     */

    public com.spotify.connectstate.Connect.DeviceInfo getDeviceOrThrow(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, com.spotify.connectstate.Connect.DeviceInfo> map =
          internalGetDevice().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

    public static final int TRANSFER_DATA_FIELD_NUMBER = 5;
    private com.google.protobuf.ByteString transferData_;
    /**
     * <code>bytes transfer_data = 5;</code>
     * @return The transferData.
     */
    public com.google.protobuf.ByteString getTransferData() {
      return transferData_;
    }

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

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.connectstate.Connect.Cluster prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code connectstate.Cluster}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:connectstate.Cluster)
        com.spotify.connectstate.Connect.ClusterOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_Cluster_descriptor;
      }

      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMapField(
          int number) {
        switch (number) {
          case 4:
            return internalGetDevice();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMutableMapField(
          int number) {
        switch (number) {
          case 4:
            return internalGetMutableDevice();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_Cluster_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.connectstate.Connect.Cluster.class, com.spotify.connectstate.Connect.Cluster.Builder.class);
      }

      // Construct using com.spotify.connectstate.Connect.Cluster.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        timestamp_ = 0L;

        activeDeviceId_ = "";

        if (playerStateBuilder_ == null) {
          playerState_ = null;
        } else {
          playerState_ = null;
          playerStateBuilder_ = null;
        }
        internalGetMutableDevice().clear();
        transferData_ = com.google.protobuf.ByteString.EMPTY;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_Cluster_descriptor;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.Cluster getDefaultInstanceForType() {
        return com.spotify.connectstate.Connect.Cluster.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.Cluster build() {
        com.spotify.connectstate.Connect.Cluster result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.Cluster buildPartial() {
        com.spotify.connectstate.Connect.Cluster result = new com.spotify.connectstate.Connect.Cluster(this);
        int from_bitField0_ = bitField0_;
        result.timestamp_ = timestamp_;
        result.activeDeviceId_ = activeDeviceId_;
        if (playerStateBuilder_ == null) {
          result.playerState_ = playerState_;
        } else {
          result.playerState_ = playerStateBuilder_.build();
        }
        result.device_ = internalGetDevice();
        result.device_.makeImmutable();
        result.transferData_ = transferData_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private long timestamp_ ;
      /**
       * <code>int64 timestamp = 1;</code>
       * @return The timestamp.
       */
      public long getTimestamp() {
        return timestamp_;
      }
      /**
       * <code>int64 timestamp = 1;</code>
       * @param value The timestamp to set.
       * @return This builder for chaining.
       */
      public Builder setTimestamp(long value) {
        
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int64 timestamp = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearTimestamp() {
        
        timestamp_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object activeDeviceId_ = "";
      /**
       * <code>string active_device_id = 2;</code>
       * @return The activeDeviceId.
       */
      public java.lang.String getActiveDeviceId() {
        java.lang.Object ref = activeDeviceId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          activeDeviceId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string active_device_id = 2;</code>
       * @return The bytes for activeDeviceId.
       */
      public com.google.protobuf.ByteString
          getActiveDeviceIdBytes() {
        java.lang.Object ref = activeDeviceId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          activeDeviceId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string active_device_id = 2;</code>
       * @param value The activeDeviceId to set.
       * @return This builder for chaining.
       */
      public Builder setActiveDeviceId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        activeDeviceId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string active_device_id = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearActiveDeviceId() {
        
        activeDeviceId_ = getDefaultInstance().getActiveDeviceId();
        onChanged();
        return this;
      }
      /**
       * <code>string active_device_id = 2;</code>
       * @param value The bytes for activeDeviceId to set.
       * @return This builder for chaining.
       */
      public Builder setActiveDeviceIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        activeDeviceId_ = value;
        onChanged();
        return this;
      }

      private com.spotify.connectstate.Player.PlayerState playerState_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Player.PlayerState, com.spotify.connectstate.Player.PlayerState.Builder, com.spotify.connectstate.Player.PlayerStateOrBuilder> playerStateBuilder_;
      /**
       * <code>.connectstate.PlayerState player_state = 3;</code>
       * @return Whether the playerState field is set.
       */
      public boolean hasPlayerState() {
        return playerStateBuilder_ != null || playerState_ != null;
      }
      /**
       * <code>.connectstate.PlayerState player_state = 3;</code>
       * @return The playerState.
       */
      public com.spotify.connectstate.Player.PlayerState getPlayerState() {
        if (playerStateBuilder_ == null) {
          return playerState_ == null ? com.spotify.connectstate.Player.PlayerState.getDefaultInstance() : playerState_;
        } else {
          return playerStateBuilder_.getMessage();
        }
      }
      /**
       * <code>.connectstate.PlayerState player_state = 3;</code>
       */
      public Builder setPlayerState(com.spotify.connectstate.Player.PlayerState value) {
        if (playerStateBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          playerState_ = value;
          onChanged();
        } else {
          playerStateBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.PlayerState player_state = 3;</code>
       */
      public Builder setPlayerState(
          com.spotify.connectstate.Player.PlayerState.Builder builderForValue) {
        if (playerStateBuilder_ == null) {
          playerState_ = builderForValue.build();
          onChanged();
        } else {
          playerStateBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.connectstate.PlayerState player_state = 3;</code>
       */
      public Builder mergePlayerState(com.spotify.connectstate.Player.PlayerState value) {
        if (playerStateBuilder_ == null) {
          if (playerState_ != null) {
            playerState_ =
              com.spotify.connectstate.Player.PlayerState.newBuilder(playerState_).mergeFrom(value).buildPartial();
          } else {
            playerState_ = value;
          }
          onChanged();
        } else {
          playerStateBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.PlayerState player_state = 3;</code>
       */
      public Builder clearPlayerState() {
        if (playerStateBuilder_ == null) {
          playerState_ = null;
          onChanged();
        } else {
          playerState_ = null;
          playerStateBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.connectstate.PlayerState player_state = 3;</code>
       */
      public com.spotify.connectstate.Player.PlayerState.Builder getPlayerStateBuilder() {
        
        onChanged();
        return getPlayerStateFieldBuilder().getBuilder();
      }
      /**
       * <code>.connectstate.PlayerState player_state = 3;</code>
       */
      public com.spotify.connectstate.Player.PlayerStateOrBuilder getPlayerStateOrBuilder() {
        if (playerStateBuilder_ != null) {
          return playerStateBuilder_.getMessageOrBuilder();
        } else {
          return playerState_ == null ?
              com.spotify.connectstate.Player.PlayerState.getDefaultInstance() : playerState_;
        }
      }
      /**
       * <code>.connectstate.PlayerState player_state = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Player.PlayerState, com.spotify.connectstate.Player.PlayerState.Builder, com.spotify.connectstate.Player.PlayerStateOrBuilder> 
          getPlayerStateFieldBuilder() {
        if (playerStateBuilder_ == null) {
          playerStateBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.connectstate.Player.PlayerState, com.spotify.connectstate.Player.PlayerState.Builder, com.spotify.connectstate.Player.PlayerStateOrBuilder>(
                  getPlayerState(),
                  getParentForChildren(),
                  isClean());
          playerState_ = null;
        }
        return playerStateBuilder_;
      }

      private com.google.protobuf.MapField<
          java.lang.String, com.spotify.connectstate.Connect.DeviceInfo> device_;
      private com.google.protobuf.MapField<java.lang.String, com.spotify.connectstate.Connect.DeviceInfo>
      internalGetDevice() {
        if (device_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              DeviceDefaultEntryHolder.defaultEntry);
        }
        return device_;
      }
      private com.google.protobuf.MapField<java.lang.String, com.spotify.connectstate.Connect.DeviceInfo>
      internalGetMutableDevice() {
        onChanged();;
        if (device_ == null) {
          device_ = com.google.protobuf.MapField.newMapField(
              DeviceDefaultEntryHolder.defaultEntry);
        }
        if (!device_.isMutable()) {
          device_ = device_.copy();
        }
        return device_;
      }

      public int getDeviceCount() {
        return internalGetDevice().getMap().size();
      }
      /**
       * <code>map&lt;string, .connectstate.DeviceInfo&gt; device = 4;</code>
       */

      public boolean containsDevice(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        return internalGetDevice().getMap().containsKey(key);
      }
      /**
       * Use {@link #getDeviceMap()} instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, com.spotify.connectstate.Connect.DeviceInfo> getDevice() {
        return getDeviceMap();
      }
      /**
       * <code>map&lt;string, .connectstate.DeviceInfo&gt; device = 4;</code>
       */

      public java.util.Map<java.lang.String, com.spotify.connectstate.Connect.DeviceInfo> getDeviceMap() {
        return internalGetDevice().getMap();
      }
      /**
       * <code>map&lt;string, .connectstate.DeviceInfo&gt; device = 4;</code>
       */

      public com.spotify.connectstate.Connect.DeviceInfo getDeviceOrDefault(
          java.lang.String key,
          com.spotify.connectstate.Connect.DeviceInfo defaultValue) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, com.spotify.connectstate.Connect.DeviceInfo> map =
            internalGetDevice().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <code>map&lt;string, .connectstate.DeviceInfo&gt; device = 4;</code>
       */

      public com.spotify.connectstate.Connect.DeviceInfo getDeviceOrThrow(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, com.spotify.connectstate.Connect.DeviceInfo> map =
            internalGetDevice().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearDevice() {
        internalGetMutableDevice().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <code>map&lt;string, .connectstate.DeviceInfo&gt; device = 4;</code>
       */

      public Builder removeDevice(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableDevice().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, com.spotify.connectstate.Connect.DeviceInfo>
      getMutableDevice() {
        return internalGetMutableDevice().getMutableMap();
      }
      /**
       * <code>map&lt;string, .connectstate.DeviceInfo&gt; device = 4;</code>
       */
      public Builder putDevice(
          java.lang.String key,
          com.spotify.connectstate.Connect.DeviceInfo value) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        if (value == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableDevice().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <code>map&lt;string, .connectstate.DeviceInfo&gt; device = 4;</code>
       */

      public Builder putAllDevice(
          java.util.Map<java.lang.String, com.spotify.connectstate.Connect.DeviceInfo> values) {
        internalGetMutableDevice().getMutableMap()
            .putAll(values);
        return this;
      }

      private com.google.protobuf.ByteString transferData_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>bytes transfer_data = 5;</code>
       * @return The transferData.
       */
      public com.google.protobuf.ByteString getTransferData() {
        return transferData_;
      }
      /**
       * <code>bytes transfer_data = 5;</code>
       * @param value The transferData to set.
       * @return This builder for chaining.
       */
      public Builder setTransferData(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        transferData_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bytes transfer_data = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearTransferData() {
        
        transferData_ = getDefaultInstance().getTransferData();
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:connectstate.Cluster)
    }

    // @@protoc_insertion_point(class_scope:connectstate.Cluster)
    private static final com.spotify.connectstate.Connect.Cluster DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.connectstate.Connect.Cluster();
    }

    public static com.spotify.connectstate.Connect.Cluster getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Cluster>
        PARSER = new com.google.protobuf.AbstractParser<Cluster>() {
      @java.lang.Override
      public Cluster parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.connectstate.Connect.Cluster getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface PutStateRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:connectstate.PutStateRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string callback_url = 1;</code>
     * @return The callbackUrl.
     */
    java.lang.String getCallbackUrl();
    /**
     * <code>string callback_url = 1;</code>
     * @return The bytes for callbackUrl.
     */
    com.google.protobuf.ByteString
        getCallbackUrlBytes();

    /**
     * <code>.connectstate.Device device = 2;</code>
     * @return Whether the device field is set.
     */
    boolean hasDevice();
    /**
     * <code>.connectstate.Device device = 2;</code>
     * @return The device.
     */
    com.spotify.connectstate.Connect.Device getDevice();
    /**
     * <code>.connectstate.Device device = 2;</code>
     */
    com.spotify.connectstate.Connect.DeviceOrBuilder getDeviceOrBuilder();

    /**
     * <code>.connectstate.MemberType member_type = 3;</code>
     * @return The enum numeric value on the wire for memberType.
     */
    int getMemberTypeValue();
    /**
     * <code>.connectstate.MemberType member_type = 3;</code>
     * @return The memberType.
     */
    com.spotify.connectstate.Connect.MemberType getMemberType();

    /**
     * <code>bool is_active = 4;</code>
     * @return The isActive.
     */
    boolean getIsActive();

    /**
     * <code>.connectstate.PutStateReason put_state_reason = 5;</code>
     * @return The enum numeric value on the wire for putStateReason.
     */
    int getPutStateReasonValue();
    /**
     * <code>.connectstate.PutStateReason put_state_reason = 5;</code>
     * @return The putStateReason.
     */
    com.spotify.connectstate.Connect.PutStateReason getPutStateReason();

    /**
     * <code>uint32 message_id = 6;</code>
     * @return The messageId.
     */
    int getMessageId();

    /**
     * <code>string last_command_sent_by_device_id = 7;</code>
     * @return The lastCommandSentByDeviceId.
     */
    java.lang.String getLastCommandSentByDeviceId();
    /**
     * <code>string last_command_sent_by_device_id = 7;</code>
     * @return The bytes for lastCommandSentByDeviceId.
     */
    com.google.protobuf.ByteString
        getLastCommandSentByDeviceIdBytes();

    /**
     * <code>uint32 last_command_message_id = 8;</code>
     * @return The lastCommandMessageId.
     */
    int getLastCommandMessageId();

    /**
     * <code>uint64 started_playing_at = 9;</code>
     * @return The startedPlayingAt.
     */
    long getStartedPlayingAt();

    /**
     * <code>uint64 has_been_playing_for_ms = 11;</code>
     * @return The hasBeenPlayingForMs.
     */
    long getHasBeenPlayingForMs();

    /**
     * <code>uint64 client_side_timestamp = 12;</code>
     * @return The clientSideTimestamp.
     */
    long getClientSideTimestamp();

    /**
     * <code>bool only_write_player_state = 13;</code>
     * @return The onlyWritePlayerState.
     */
    boolean getOnlyWritePlayerState();
  }
  /**
   * Protobuf type {@code connectstate.PutStateRequest}
   */
  public  static final class PutStateRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:connectstate.PutStateRequest)
      PutStateRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use PutStateRequest.newBuilder() to construct.
    private PutStateRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private PutStateRequest() {
      callbackUrl_ = "";
      memberType_ = 0;
      putStateReason_ = 0;
      lastCommandSentByDeviceId_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new PutStateRequest();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_PutStateRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_PutStateRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.connectstate.Connect.PutStateRequest.class, com.spotify.connectstate.Connect.PutStateRequest.Builder.class);
    }

    public static final int CALLBACK_URL_FIELD_NUMBER = 1;
    private volatile java.lang.Object callbackUrl_;
    /**
     * <code>string callback_url = 1;</code>
     * @return The callbackUrl.
     */
    public java.lang.String getCallbackUrl() {
      java.lang.Object ref = callbackUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        callbackUrl_ = s;
        return s;
      }
    }
    /**
     * <code>string callback_url = 1;</code>
     * @return The bytes for callbackUrl.
     */
    public com.google.protobuf.ByteString
        getCallbackUrlBytes() {
      java.lang.Object ref = callbackUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        callbackUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DEVICE_FIELD_NUMBER = 2;
    private com.spotify.connectstate.Connect.Device device_;
    /**
     * <code>.connectstate.Device device = 2;</code>
     * @return Whether the device field is set.
     */
    public boolean hasDevice() {
      return device_ != null;
    }
    /**
     * <code>.connectstate.Device device = 2;</code>
     * @return The device.
     */
    public com.spotify.connectstate.Connect.Device getDevice() {
      return device_ == null ? com.spotify.connectstate.Connect.Device.getDefaultInstance() : device_;
    }
    /**
     * <code>.connectstate.Device device = 2;</code>
     */
    public com.spotify.connectstate.Connect.DeviceOrBuilder getDeviceOrBuilder() {
      return getDevice();
    }

    public static final int MEMBER_TYPE_FIELD_NUMBER = 3;
    private int memberType_;
    /**
     * <code>.connectstate.MemberType member_type = 3;</code>
     * @return The enum numeric value on the wire for memberType.
     */
    public int getMemberTypeValue() {
      return memberType_;
    }
    /**
     * <code>.connectstate.MemberType member_type = 3;</code>
     * @return The memberType.
     */
    public com.spotify.connectstate.Connect.MemberType getMemberType() {
      @SuppressWarnings("deprecation")
      com.spotify.connectstate.Connect.MemberType result = com.spotify.connectstate.Connect.MemberType.valueOf(memberType_);
      return result == null ? com.spotify.connectstate.Connect.MemberType.UNRECOGNIZED : result;
    }

    public static final int IS_ACTIVE_FIELD_NUMBER = 4;
    private boolean isActive_;
    /**
     * <code>bool is_active = 4;</code>
     * @return The isActive.
     */
    public boolean getIsActive() {
      return isActive_;
    }

    public static final int PUT_STATE_REASON_FIELD_NUMBER = 5;
    private int putStateReason_;
    /**
     * <code>.connectstate.PutStateReason put_state_reason = 5;</code>
     * @return The enum numeric value on the wire for putStateReason.
     */
    public int getPutStateReasonValue() {
      return putStateReason_;
    }
    /**
     * <code>.connectstate.PutStateReason put_state_reason = 5;</code>
     * @return The putStateReason.
     */
    public com.spotify.connectstate.Connect.PutStateReason getPutStateReason() {
      @SuppressWarnings("deprecation")
      com.spotify.connectstate.Connect.PutStateReason result = com.spotify.connectstate.Connect.PutStateReason.valueOf(putStateReason_);
      return result == null ? com.spotify.connectstate.Connect.PutStateReason.UNRECOGNIZED : result;
    }

    public static final int MESSAGE_ID_FIELD_NUMBER = 6;
    private int messageId_;
    /**
     * <code>uint32 message_id = 6;</code>
     * @return The messageId.
     */
    public int getMessageId() {
      return messageId_;
    }

    public static final int LAST_COMMAND_SENT_BY_DEVICE_ID_FIELD_NUMBER = 7;
    private volatile java.lang.Object lastCommandSentByDeviceId_;
    /**
     * <code>string last_command_sent_by_device_id = 7;</code>
     * @return The lastCommandSentByDeviceId.
     */
    public java.lang.String getLastCommandSentByDeviceId() {
      java.lang.Object ref = lastCommandSentByDeviceId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        lastCommandSentByDeviceId_ = s;
        return s;
      }
    }
    /**
     * <code>string last_command_sent_by_device_id = 7;</code>
     * @return The bytes for lastCommandSentByDeviceId.
     */
    public com.google.protobuf.ByteString
        getLastCommandSentByDeviceIdBytes() {
      java.lang.Object ref = lastCommandSentByDeviceId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        lastCommandSentByDeviceId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int LAST_COMMAND_MESSAGE_ID_FIELD_NUMBER = 8;
    private int lastCommandMessageId_;
    /**
     * <code>uint32 last_command_message_id = 8;</code>
     * @return The lastCommandMessageId.
     */
    public int getLastCommandMessageId() {
      return lastCommandMessageId_;
    }

    public static final int STARTED_PLAYING_AT_FIELD_NUMBER = 9;
    private long startedPlayingAt_;
    /**
     * <code>uint64 started_playing_at = 9;</code>
     * @return The startedPlayingAt.
     */
    public long getStartedPlayingAt() {
      return startedPlayingAt_;
    }

    public static final int HAS_BEEN_PLAYING_FOR_MS_FIELD_NUMBER = 11;
    private long hasBeenPlayingForMs_;
    /**
     * <code>uint64 has_been_playing_for_ms = 11;</code>
     * @return The hasBeenPlayingForMs.
     */
    public long getHasBeenPlayingForMs() {
      return hasBeenPlayingForMs_;
    }

    public static final int CLIENT_SIDE_TIMESTAMP_FIELD_NUMBER = 12;
    private long clientSideTimestamp_;
    /**
     * <code>uint64 client_side_timestamp = 12;</code>
     * @return The clientSideTimestamp.
     */
    public long getClientSideTimestamp() {
      return clientSideTimestamp_;
    }

    public static final int ONLY_WRITE_PLAYER_STATE_FIELD_NUMBER = 13;
    private boolean onlyWritePlayerState_;
    /**
     * <code>bool only_write_player_state = 13;</code>
     * @return The onlyWritePlayerState.
     */
    public boolean getOnlyWritePlayerState() {
      return onlyWritePlayerState_;
    }

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

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.connectstate.Connect.PutStateRequest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code connectstate.PutStateRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:connectstate.PutStateRequest)
        com.spotify.connectstate.Connect.PutStateRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_PutStateRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_PutStateRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.connectstate.Connect.PutStateRequest.class, com.spotify.connectstate.Connect.PutStateRequest.Builder.class);
      }

      // Construct using com.spotify.connectstate.Connect.PutStateRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        callbackUrl_ = "";

        if (deviceBuilder_ == null) {
          device_ = null;
        } else {
          device_ = null;
          deviceBuilder_ = null;
        }
        memberType_ = 0;

        isActive_ = false;

        putStateReason_ = 0;

        messageId_ = 0;

        lastCommandSentByDeviceId_ = "";

        lastCommandMessageId_ = 0;

        startedPlayingAt_ = 0L;

        hasBeenPlayingForMs_ = 0L;

        clientSideTimestamp_ = 0L;

        onlyWritePlayerState_ = false;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_PutStateRequest_descriptor;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.PutStateRequest getDefaultInstanceForType() {
        return com.spotify.connectstate.Connect.PutStateRequest.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.PutStateRequest build() {
        com.spotify.connectstate.Connect.PutStateRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.PutStateRequest buildPartial() {
        com.spotify.connectstate.Connect.PutStateRequest result = new com.spotify.connectstate.Connect.PutStateRequest(this);
        result.callbackUrl_ = callbackUrl_;
        if (deviceBuilder_ == null) {
          result.device_ = device_;
        } else {
          result.device_ = deviceBuilder_.build();
        }
        result.memberType_ = memberType_;
        result.isActive_ = isActive_;
        result.putStateReason_ = putStateReason_;
        result.messageId_ = messageId_;
        result.lastCommandSentByDeviceId_ = lastCommandSentByDeviceId_;
        result.lastCommandMessageId_ = lastCommandMessageId_;
        result.startedPlayingAt_ = startedPlayingAt_;
        result.hasBeenPlayingForMs_ = hasBeenPlayingForMs_;
        result.clientSideTimestamp_ = clientSideTimestamp_;
        result.onlyWritePlayerState_ = onlyWritePlayerState_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }

      private java.lang.Object callbackUrl_ = "";
      /**
       * <code>string callback_url = 1;</code>
       * @return The callbackUrl.
       */
      public java.lang.String getCallbackUrl() {
        java.lang.Object ref = callbackUrl_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          callbackUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string callback_url = 1;</code>
       * @return The bytes for callbackUrl.
       */
      public com.google.protobuf.ByteString
          getCallbackUrlBytes() {
        java.lang.Object ref = callbackUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          callbackUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string callback_url = 1;</code>
       * @param value The callbackUrl to set.
       * @return This builder for chaining.
       */
      public Builder setCallbackUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        callbackUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string callback_url = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearCallbackUrl() {
        
        callbackUrl_ = getDefaultInstance().getCallbackUrl();
        onChanged();
        return this;
      }
      /**
       * <code>string callback_url = 1;</code>
       * @param value The bytes for callbackUrl to set.
       * @return This builder for chaining.
       */
      public Builder setCallbackUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        callbackUrl_ = value;
        onChanged();
        return this;
      }

      private com.spotify.connectstate.Connect.Device device_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Connect.Device, com.spotify.connectstate.Connect.Device.Builder, com.spotify.connectstate.Connect.DeviceOrBuilder> deviceBuilder_;
      /**
       * <code>.connectstate.Device device = 2;</code>
       * @return Whether the device field is set.
       */
      public boolean hasDevice() {
        return deviceBuilder_ != null || device_ != null;
      }
      /**
       * <code>.connectstate.Device device = 2;</code>
       * @return The device.
       */
      public com.spotify.connectstate.Connect.Device getDevice() {
        if (deviceBuilder_ == null) {
          return device_ == null ? com.spotify.connectstate.Connect.Device.getDefaultInstance() : device_;
        } else {
          return deviceBuilder_.getMessage();
        }
      }
      /**
       * <code>.connectstate.Device device = 2;</code>
       */
      public Builder setDevice(com.spotify.connectstate.Connect.Device value) {
        if (deviceBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          device_ = value;
          onChanged();
        } else {
          deviceBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.Device device = 2;</code>
       */
      public Builder setDevice(
          com.spotify.connectstate.Connect.Device.Builder builderForValue) {
        if (deviceBuilder_ == null) {
          device_ = builderForValue.build();
          onChanged();
        } else {
          deviceBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.connectstate.Device device = 2;</code>
       */
      public Builder mergeDevice(com.spotify.connectstate.Connect.Device value) {
        if (deviceBuilder_ == null) {
          if (device_ != null) {
            device_ =
              com.spotify.connectstate.Connect.Device.newBuilder(device_).mergeFrom(value).buildPartial();
          } else {
            device_ = value;
          }
          onChanged();
        } else {
          deviceBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.Device device = 2;</code>
       */
      public Builder clearDevice() {
        if (deviceBuilder_ == null) {
          device_ = null;
          onChanged();
        } else {
          device_ = null;
          deviceBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.connectstate.Device device = 2;</code>
       */
      public com.spotify.connectstate.Connect.Device.Builder getDeviceBuilder() {
        
        onChanged();
        return getDeviceFieldBuilder().getBuilder();
      }
      /**
       * <code>.connectstate.Device device = 2;</code>
       */
      public com.spotify.connectstate.Connect.DeviceOrBuilder getDeviceOrBuilder() {
        if (deviceBuilder_ != null) {
          return deviceBuilder_.getMessageOrBuilder();
        } else {
          return device_ == null ?
              com.spotify.connectstate.Connect.Device.getDefaultInstance() : device_;
        }
      }
      /**
       * <code>.connectstate.Device device = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Connect.Device, com.spotify.connectstate.Connect.Device.Builder, com.spotify.connectstate.Connect.DeviceOrBuilder> 
          getDeviceFieldBuilder() {
        if (deviceBuilder_ == null) {
          deviceBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.connectstate.Connect.Device, com.spotify.connectstate.Connect.Device.Builder, com.spotify.connectstate.Connect.DeviceOrBuilder>(
                  getDevice(),
                  getParentForChildren(),
                  isClean());
          device_ = null;
        }
        return deviceBuilder_;
      }

      private int memberType_ = 0;
      /**
       * <code>.connectstate.MemberType member_type = 3;</code>
       * @return The enum numeric value on the wire for memberType.
       */
      public int getMemberTypeValue() {
        return memberType_;
      }
      /**
       * <code>.connectstate.MemberType member_type = 3;</code>
       * @param value The enum numeric value on the wire for memberType to set.
       * @return This builder for chaining.
       */
      public Builder setMemberTypeValue(int value) {
        memberType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.connectstate.MemberType member_type = 3;</code>
       * @return The memberType.
       */
      public com.spotify.connectstate.Connect.MemberType getMemberType() {
        @SuppressWarnings("deprecation")
        com.spotify.connectstate.Connect.MemberType result = com.spotify.connectstate.Connect.MemberType.valueOf(memberType_);
        return result == null ? com.spotify.connectstate.Connect.MemberType.UNRECOGNIZED : result;
      }
      /**
       * <code>.connectstate.MemberType member_type = 3;</code>
       * @param value The memberType to set.
       * @return This builder for chaining.
       */
      public Builder setMemberType(com.spotify.connectstate.Connect.MemberType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        memberType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.connectstate.MemberType member_type = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearMemberType() {
        
        memberType_ = 0;
        onChanged();
        return this;
      }

      private boolean isActive_ ;
      /**
       * <code>bool is_active = 4;</code>
       * @return The isActive.
       */
      public boolean getIsActive() {
        return isActive_;
      }
      /**
       * <code>bool is_active = 4;</code>
       * @param value The isActive to set.
       * @return This builder for chaining.
       */
      public Builder setIsActive(boolean value) {
        
        isActive_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool is_active = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearIsActive() {
        
        isActive_ = false;
        onChanged();
        return this;
      }

      private int putStateReason_ = 0;
      /**
       * <code>.connectstate.PutStateReason put_state_reason = 5;</code>
       * @return The enum numeric value on the wire for putStateReason.
       */
      public int getPutStateReasonValue() {
        return putStateReason_;
      }
      /**
       * <code>.connectstate.PutStateReason put_state_reason = 5;</code>
       * @param value The enum numeric value on the wire for putStateReason to set.
       * @return This builder for chaining.
       */
      public Builder setPutStateReasonValue(int value) {
        putStateReason_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.connectstate.PutStateReason put_state_reason = 5;</code>
       * @return The putStateReason.
       */
      public com.spotify.connectstate.Connect.PutStateReason getPutStateReason() {
        @SuppressWarnings("deprecation")
        com.spotify.connectstate.Connect.PutStateReason result = com.spotify.connectstate.Connect.PutStateReason.valueOf(putStateReason_);
        return result == null ? com.spotify.connectstate.Connect.PutStateReason.UNRECOGNIZED : result;
      }
      /**
       * <code>.connectstate.PutStateReason put_state_reason = 5;</code>
       * @param value The putStateReason to set.
       * @return This builder for chaining.
       */
      public Builder setPutStateReason(com.spotify.connectstate.Connect.PutStateReason value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        putStateReason_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.connectstate.PutStateReason put_state_reason = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearPutStateReason() {
        
        putStateReason_ = 0;
        onChanged();
        return this;
      }

      private int messageId_ ;
      /**
       * <code>uint32 message_id = 6;</code>
       * @return The messageId.
       */
      public int getMessageId() {
        return messageId_;
      }
      /**
       * <code>uint32 message_id = 6;</code>
       * @param value The messageId to set.
       * @return This builder for chaining.
       */
      public Builder setMessageId(int value) {
        
        messageId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint32 message_id = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearMessageId() {
        
        messageId_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object lastCommandSentByDeviceId_ = "";
      /**
       * <code>string last_command_sent_by_device_id = 7;</code>
       * @return The lastCommandSentByDeviceId.
       */
      public java.lang.String getLastCommandSentByDeviceId() {
        java.lang.Object ref = lastCommandSentByDeviceId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          lastCommandSentByDeviceId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string last_command_sent_by_device_id = 7;</code>
       * @return The bytes for lastCommandSentByDeviceId.
       */
      public com.google.protobuf.ByteString
          getLastCommandSentByDeviceIdBytes() {
        java.lang.Object ref = lastCommandSentByDeviceId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          lastCommandSentByDeviceId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string last_command_sent_by_device_id = 7;</code>
       * @param value The lastCommandSentByDeviceId to set.
       * @return This builder for chaining.
       */
      public Builder setLastCommandSentByDeviceId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        lastCommandSentByDeviceId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string last_command_sent_by_device_id = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearLastCommandSentByDeviceId() {
        
        lastCommandSentByDeviceId_ = getDefaultInstance().getLastCommandSentByDeviceId();
        onChanged();
        return this;
      }
      /**
       * <code>string last_command_sent_by_device_id = 7;</code>
       * @param value The bytes for lastCommandSentByDeviceId to set.
       * @return This builder for chaining.
       */
      public Builder setLastCommandSentByDeviceIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        lastCommandSentByDeviceId_ = value;
        onChanged();
        return this;
      }

      private int lastCommandMessageId_ ;
      /**
       * <code>uint32 last_command_message_id = 8;</code>
       * @return The lastCommandMessageId.
       */
      public int getLastCommandMessageId() {
        return lastCommandMessageId_;
      }
      /**
       * <code>uint32 last_command_message_id = 8;</code>
       * @param value The lastCommandMessageId to set.
       * @return This builder for chaining.
       */
      public Builder setLastCommandMessageId(int value) {
        
        lastCommandMessageId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint32 last_command_message_id = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearLastCommandMessageId() {
        
        lastCommandMessageId_ = 0;
        onChanged();
        return this;
      }

      private long startedPlayingAt_ ;
      /**
       * <code>uint64 started_playing_at = 9;</code>
       * @return The startedPlayingAt.
       */
      public long getStartedPlayingAt() {
        return startedPlayingAt_;
      }
      /**
       * <code>uint64 started_playing_at = 9;</code>
       * @param value The startedPlayingAt to set.
       * @return This builder for chaining.
       */
      public Builder setStartedPlayingAt(long value) {
        
        startedPlayingAt_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint64 started_playing_at = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearStartedPlayingAt() {
        
        startedPlayingAt_ = 0L;
        onChanged();
        return this;
      }

      private long hasBeenPlayingForMs_ ;
      /**
       * <code>uint64 has_been_playing_for_ms = 11;</code>
       * @return The hasBeenPlayingForMs.
       */
      public long getHasBeenPlayingForMs() {
        return hasBeenPlayingForMs_;
      }
      /**
       * <code>uint64 has_been_playing_for_ms = 11;</code>
       * @param value The hasBeenPlayingForMs to set.
       * @return This builder for chaining.
       */
      public Builder setHasBeenPlayingForMs(long value) {
        
        hasBeenPlayingForMs_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint64 has_been_playing_for_ms = 11;</code>
       * @return This builder for chaining.
       */
      public Builder clearHasBeenPlayingForMs() {
        
        hasBeenPlayingForMs_ = 0L;
        onChanged();
        return this;
      }

      private long clientSideTimestamp_ ;
      /**
       * <code>uint64 client_side_timestamp = 12;</code>
       * @return The clientSideTimestamp.
       */
      public long getClientSideTimestamp() {
        return clientSideTimestamp_;
      }
      /**
       * <code>uint64 client_side_timestamp = 12;</code>
       * @param value The clientSideTimestamp to set.
       * @return This builder for chaining.
       */
      public Builder setClientSideTimestamp(long value) {
        
        clientSideTimestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint64 client_side_timestamp = 12;</code>
       * @return This builder for chaining.
       */
      public Builder clearClientSideTimestamp() {
        
        clientSideTimestamp_ = 0L;
        onChanged();
        return this;
      }

      private boolean onlyWritePlayerState_ ;
      /**
       * <code>bool only_write_player_state = 13;</code>
       * @return The onlyWritePlayerState.
       */
      public boolean getOnlyWritePlayerState() {
        return onlyWritePlayerState_;
      }
      /**
       * <code>bool only_write_player_state = 13;</code>
       * @param value The onlyWritePlayerState to set.
       * @return This builder for chaining.
       */
      public Builder setOnlyWritePlayerState(boolean value) {
        
        onlyWritePlayerState_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool only_write_player_state = 13;</code>
       * @return This builder for chaining.
       */
      public Builder clearOnlyWritePlayerState() {
        
        onlyWritePlayerState_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:connectstate.PutStateRequest)
    }

    // @@protoc_insertion_point(class_scope:connectstate.PutStateRequest)
    private static final com.spotify.connectstate.Connect.PutStateRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.connectstate.Connect.PutStateRequest();
    }

    public static com.spotify.connectstate.Connect.PutStateRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<PutStateRequest>
        PARSER = new com.google.protobuf.AbstractParser<PutStateRequest>() {
      @java.lang.Override
      public PutStateRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.connectstate.Connect.PutStateRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface PrivateDeviceInfoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:connectstate.PrivateDeviceInfo)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string platform = 1;</code>
     * @return The platform.
     */
    java.lang.String getPlatform();
    /**
     * <code>string platform = 1;</code>
     * @return The bytes for platform.
     */
    com.google.protobuf.ByteString
        getPlatformBytes();
  }
  /**
   * Protobuf type {@code connectstate.PrivateDeviceInfo}
   */
  public  static final class PrivateDeviceInfo extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:connectstate.PrivateDeviceInfo)
      PrivateDeviceInfoOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use PrivateDeviceInfo.newBuilder() to construct.
    private PrivateDeviceInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private PrivateDeviceInfo() {
      platform_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new PrivateDeviceInfo();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_PrivateDeviceInfo_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_PrivateDeviceInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.connectstate.Connect.PrivateDeviceInfo.class, com.spotify.connectstate.Connect.PrivateDeviceInfo.Builder.class);
    }

    public static final int PLATFORM_FIELD_NUMBER = 1;
    private volatile java.lang.Object platform_;
    /**
     * <code>string platform = 1;</code>
     * @return The platform.
     */
    public java.lang.String getPlatform() {
      java.lang.Object ref = platform_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        platform_ = s;
        return s;
      }
    }
    /**
     * <code>string platform = 1;</code>
     * @return The bytes for platform.
     */
    public com.google.protobuf.ByteString
        getPlatformBytes() {
      java.lang.Object ref = platform_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        platform_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.connectstate.Connect.PrivateDeviceInfo prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code connectstate.PrivateDeviceInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:connectstate.PrivateDeviceInfo)
        com.spotify.connectstate.Connect.PrivateDeviceInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_PrivateDeviceInfo_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_PrivateDeviceInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.connectstate.Connect.PrivateDeviceInfo.class, com.spotify.connectstate.Connect.PrivateDeviceInfo.Builder.class);
      }

      // Construct using com.spotify.connectstate.Connect.PrivateDeviceInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        platform_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_PrivateDeviceInfo_descriptor;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.PrivateDeviceInfo getDefaultInstanceForType() {
        return com.spotify.connectstate.Connect.PrivateDeviceInfo.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.PrivateDeviceInfo build() {
        com.spotify.connectstate.Connect.PrivateDeviceInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.PrivateDeviceInfo buildPartial() {
        com.spotify.connectstate.Connect.PrivateDeviceInfo result = new com.spotify.connectstate.Connect.PrivateDeviceInfo(this);
        result.platform_ = platform_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }

      private java.lang.Object platform_ = "";
      /**
       * <code>string platform = 1;</code>
       * @return The platform.
       */
      public java.lang.String getPlatform() {
        java.lang.Object ref = platform_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          platform_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string platform = 1;</code>
       * @return The bytes for platform.
       */
      public com.google.protobuf.ByteString
          getPlatformBytes() {
        java.lang.Object ref = platform_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          platform_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string platform = 1;</code>
       * @param value The platform to set.
       * @return This builder for chaining.
       */
      public Builder setPlatform(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        platform_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string platform = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearPlatform() {
        
        platform_ = getDefaultInstance().getPlatform();
        onChanged();
        return this;
      }
      /**
       * <code>string platform = 1;</code>
       * @param value The bytes for platform to set.
       * @return This builder for chaining.
       */
      public Builder setPlatformBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        platform_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:connectstate.PrivateDeviceInfo)
    }

    // @@protoc_insertion_point(class_scope:connectstate.PrivateDeviceInfo)
    private static final com.spotify.connectstate.Connect.PrivateDeviceInfo DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.connectstate.Connect.PrivateDeviceInfo();
    }

    public static com.spotify.connectstate.Connect.PrivateDeviceInfo getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<PrivateDeviceInfo>
        PARSER = new com.google.protobuf.AbstractParser<PrivateDeviceInfo>() {
      @java.lang.Override
      public PrivateDeviceInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.connectstate.Connect.PrivateDeviceInfo getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SubscribeRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:connectstate.SubscribeRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string callback_url = 1;</code>
     * @return The callbackUrl.
     */
    java.lang.String getCallbackUrl();
    /**
     * <code>string callback_url = 1;</code>
     * @return The bytes for callbackUrl.
     */
    com.google.protobuf.ByteString
        getCallbackUrlBytes();
  }
  /**
   * Protobuf type {@code connectstate.SubscribeRequest}
   */
  public  static final class SubscribeRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:connectstate.SubscribeRequest)
      SubscribeRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SubscribeRequest.newBuilder() to construct.
    private SubscribeRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SubscribeRequest() {
      callbackUrl_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new SubscribeRequest();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_SubscribeRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_SubscribeRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.connectstate.Connect.SubscribeRequest.class, com.spotify.connectstate.Connect.SubscribeRequest.Builder.class);
    }

    public static final int CALLBACK_URL_FIELD_NUMBER = 1;
    private volatile java.lang.Object callbackUrl_;
    /**
     * <code>string callback_url = 1;</code>
     * @return The callbackUrl.
     */
    public java.lang.String getCallbackUrl() {
      java.lang.Object ref = callbackUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        callbackUrl_ = s;
        return s;
      }
    }
    /**
     * <code>string callback_url = 1;</code>
     * @return The bytes for callbackUrl.
     */
    public com.google.protobuf.ByteString
        getCallbackUrlBytes() {
      java.lang.Object ref = callbackUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        callbackUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.connectstate.Connect.SubscribeRequest prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code connectstate.SubscribeRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:connectstate.SubscribeRequest)
        com.spotify.connectstate.Connect.SubscribeRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_SubscribeRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_SubscribeRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.connectstate.Connect.SubscribeRequest.class, com.spotify.connectstate.Connect.SubscribeRequest.Builder.class);
      }

      // Construct using com.spotify.connectstate.Connect.SubscribeRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        callbackUrl_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_SubscribeRequest_descriptor;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.SubscribeRequest getDefaultInstanceForType() {
        return com.spotify.connectstate.Connect.SubscribeRequest.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.SubscribeRequest build() {
        com.spotify.connectstate.Connect.SubscribeRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.SubscribeRequest buildPartial() {
        com.spotify.connectstate.Connect.SubscribeRequest result = new com.spotify.connectstate.Connect.SubscribeRequest(this);
        result.callbackUrl_ = callbackUrl_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }

      private java.lang.Object callbackUrl_ = "";
      /**
       * <code>string callback_url = 1;</code>
       * @return The callbackUrl.
       */
      public java.lang.String getCallbackUrl() {
        java.lang.Object ref = callbackUrl_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          callbackUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string callback_url = 1;</code>
       * @return The bytes for callbackUrl.
       */
      public com.google.protobuf.ByteString
          getCallbackUrlBytes() {
        java.lang.Object ref = callbackUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          callbackUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string callback_url = 1;</code>
       * @param value The callbackUrl to set.
       * @return This builder for chaining.
       */
      public Builder setCallbackUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        callbackUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string callback_url = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearCallbackUrl() {
        
        callbackUrl_ = getDefaultInstance().getCallbackUrl();
        onChanged();
        return this;
      }
      /**
       * <code>string callback_url = 1;</code>
       * @param value The bytes for callbackUrl to set.
       * @return This builder for chaining.
       */
      public Builder setCallbackUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        callbackUrl_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:connectstate.SubscribeRequest)
    }

    // @@protoc_insertion_point(class_scope:connectstate.SubscribeRequest)
    private static final com.spotify.connectstate.Connect.SubscribeRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.connectstate.Connect.SubscribeRequest();
    }

    public static com.spotify.connectstate.Connect.SubscribeRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<SubscribeRequest>
        PARSER = new com.google.protobuf.AbstractParser<SubscribeRequest>() {
      @java.lang.Override
      public SubscribeRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.connectstate.Connect.SubscribeRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DeviceInfoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:connectstate.DeviceInfo)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>bool can_play = 1;</code>
     * @return The canPlay.
     */
    boolean getCanPlay();

    /**
     * <code>uint32 volume = 2;</code>
     * @return The volume.
     */
    int getVolume();

    /**
     * <code>string name = 3;</code>
     * @return The name.
     */
    java.lang.String getName();
    /**
     * <code>string name = 3;</code>
     * @return The bytes for name.
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <code>.connectstate.Capabilities capabilities = 4;</code>
     * @return Whether the capabilities field is set.
     */
    boolean hasCapabilities();
    /**
     * <code>.connectstate.Capabilities capabilities = 4;</code>
     * @return The capabilities.
     */
    com.spotify.connectstate.Connect.Capabilities getCapabilities();
    /**
     * <code>.connectstate.Capabilities capabilities = 4;</code>
     */
    com.spotify.connectstate.Connect.CapabilitiesOrBuilder getCapabilitiesOrBuilder();

    /**
     * <code>string device_software_version = 6;</code>
     * @return The deviceSoftwareVersion.
     */
    java.lang.String getDeviceSoftwareVersion();
    /**
     * <code>string device_software_version = 6;</code>
     * @return The bytes for deviceSoftwareVersion.
     */
    com.google.protobuf.ByteString
        getDeviceSoftwareVersionBytes();

    /**
     * <code>.connectstate.DeviceType device_type = 7;</code>
     * @return The enum numeric value on the wire for deviceType.
     */
    int getDeviceTypeValue();
    /**
     * <code>.connectstate.DeviceType device_type = 7;</code>
     * @return The deviceType.
     */
    com.spotify.connectstate.Connect.DeviceType getDeviceType();

    /**
     * <code>string spirc_version = 9;</code>
     * @return The spircVersion.
     */
    java.lang.String getSpircVersion();
    /**
     * <code>string spirc_version = 9;</code>
     * @return The bytes for spircVersion.
     */
    com.google.protobuf.ByteString
        getSpircVersionBytes();

    /**
     * <code>string device_id = 10;</code>
     * @return The deviceId.
     */
    java.lang.String getDeviceId();
    /**
     * <code>string device_id = 10;</code>
     * @return The bytes for deviceId.
     */
    com.google.protobuf.ByteString
        getDeviceIdBytes();

    /**
     * <code>bool is_private_session = 11;</code>
     * @return The isPrivateSession.
     */
    boolean getIsPrivateSession();

    /**
     * <code>bool is_social_connect = 12;</code>
     * @return The isSocialConnect.
     */
    boolean getIsSocialConnect();

    /**
     * <code>string client_id = 13;</code>
     * @return The clientId.
     */
    java.lang.String getClientId();
    /**
     * <code>string client_id = 13;</code>
     * @return The bytes for clientId.
     */
    com.google.protobuf.ByteString
        getClientIdBytes();

    /**
     * <code>string brand = 14;</code>
     * @return The brand.
     */
    java.lang.String getBrand();
    /**
     * <code>string brand = 14;</code>
     * @return The bytes for brand.
     */
    com.google.protobuf.ByteString
        getBrandBytes();

    /**
     * <code>string model = 15;</code>
     * @return The model.
     */
    java.lang.String getModel();
    /**
     * <code>string model = 15;</code>
     * @return The bytes for model.
     */
    com.google.protobuf.ByteString
        getModelBytes();

    /**
     * <code>map&lt;string, string&gt; metadata_map = 16;</code>
     */
    int getMetadataMapCount();
    /**
     * <code>map&lt;string, string&gt; metadata_map = 16;</code>
     */
    boolean containsMetadataMap(
        java.lang.String key);
    /**
     * Use {@link #getMetadataMapMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.String, java.lang.String>
    getMetadataMap();
    /**
     * <code>map&lt;string, string&gt; metadata_map = 16;</code>
     */
    java.util.Map<java.lang.String, java.lang.String>
    getMetadataMapMap();
    /**
     * <code>map&lt;string, string&gt; metadata_map = 16;</code>
     */

    java.lang.String getMetadataMapOrDefault(
        java.lang.String key,
        java.lang.String defaultValue);
    /**
     * <code>map&lt;string, string&gt; metadata_map = 16;</code>
     */

    java.lang.String getMetadataMapOrThrow(
        java.lang.String key);
  }
  /**
   * Protobuf type {@code connectstate.DeviceInfo}
   */
  public  static final class DeviceInfo extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:connectstate.DeviceInfo)
      DeviceInfoOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use DeviceInfo.newBuilder() to construct.
    private DeviceInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private DeviceInfo() {
      name_ = "";
      deviceSoftwareVersion_ = "";
      deviceType_ = 0;
      spircVersion_ = "";
      deviceId_ = "";
      clientId_ = "";
      brand_ = "";
      model_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new DeviceInfo();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_DeviceInfo_descriptor;
    }

    @SuppressWarnings({"rawtypes"})
    @java.lang.Override
    protected com.google.protobuf.MapField internalGetMapField(
        int number) {
      switch (number) {
        case 16:
          return internalGetMetadataMap();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_DeviceInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.connectstate.Connect.DeviceInfo.class, com.spotify.connectstate.Connect.DeviceInfo.Builder.class);
    }

    public static final int CAN_PLAY_FIELD_NUMBER = 1;
    private boolean canPlay_;
    /**
     * <code>bool can_play = 1;</code>
     * @return The canPlay.
     */
    public boolean getCanPlay() {
      return canPlay_;
    }

    public static final int VOLUME_FIELD_NUMBER = 2;
    private int volume_;
    /**
     * <code>uint32 volume = 2;</code>
     * @return The volume.
     */
    public int getVolume() {
      return volume_;
    }

    public static final int NAME_FIELD_NUMBER = 3;
    private volatile java.lang.Object name_;
    /**
     * <code>string name = 3;</code>
     * @return The name.
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      }
    }
    /**
     * <code>string name = 3;</code>
     * @return The bytes for name.
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CAPABILITIES_FIELD_NUMBER = 4;
    private com.spotify.connectstate.Connect.Capabilities capabilities_;
    /**
     * <code>.connectstate.Capabilities capabilities = 4;</code>
     * @return Whether the capabilities field is set.
     */
    public boolean hasCapabilities() {
      return capabilities_ != null;
    }
    /**
     * <code>.connectstate.Capabilities capabilities = 4;</code>
     * @return The capabilities.
     */
    public com.spotify.connectstate.Connect.Capabilities getCapabilities() {
      return capabilities_ == null ? com.spotify.connectstate.Connect.Capabilities.getDefaultInstance() : capabilities_;
    }
    /**
     * <code>.connectstate.Capabilities capabilities = 4;</code>
     */
    public com.spotify.connectstate.Connect.CapabilitiesOrBuilder getCapabilitiesOrBuilder() {
      return getCapabilities();
    }

    public static final int DEVICE_SOFTWARE_VERSION_FIELD_NUMBER = 6;
    private volatile java.lang.Object deviceSoftwareVersion_;
    /**
     * <code>string device_software_version = 6;</code>
     * @return The deviceSoftwareVersion.
     */
    public java.lang.String getDeviceSoftwareVersion() {
      java.lang.Object ref = deviceSoftwareVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        deviceSoftwareVersion_ = s;
        return s;
      }
    }
    /**
     * <code>string device_software_version = 6;</code>
     * @return The bytes for deviceSoftwareVersion.
     */
    public com.google.protobuf.ByteString
        getDeviceSoftwareVersionBytes() {
      java.lang.Object ref = deviceSoftwareVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        deviceSoftwareVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DEVICE_TYPE_FIELD_NUMBER = 7;
    private int deviceType_;
    /**
     * <code>.connectstate.DeviceType device_type = 7;</code>
     * @return The enum numeric value on the wire for deviceType.
     */
    public int getDeviceTypeValue() {
      return deviceType_;
    }
    /**
     * <code>.connectstate.DeviceType device_type = 7;</code>
     * @return The deviceType.
     */
    public com.spotify.connectstate.Connect.DeviceType getDeviceType() {
      @SuppressWarnings("deprecation")
      com.spotify.connectstate.Connect.DeviceType result = com.spotify.connectstate.Connect.DeviceType.valueOf(deviceType_);
      return result == null ? com.spotify.connectstate.Connect.DeviceType.UNRECOGNIZED : result;
    }

    public static final int SPIRC_VERSION_FIELD_NUMBER = 9;
    private volatile java.lang.Object spircVersion_;
    /**
     * <code>string spirc_version = 9;</code>
     * @return The spircVersion.
     */
    public java.lang.String getSpircVersion() {
      java.lang.Object ref = spircVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        spircVersion_ = s;
        return s;
      }
    }
    /**
     * <code>string spirc_version = 9;</code>
     * @return The bytes for spircVersion.
     */
    public com.google.protobuf.ByteString
        getSpircVersionBytes() {
      java.lang.Object ref = spircVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        spircVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DEVICE_ID_FIELD_NUMBER = 10;
    private volatile java.lang.Object deviceId_;
    /**
     * <code>string device_id = 10;</code>
     * @return The deviceId.
     */
    public java.lang.String getDeviceId() {
      java.lang.Object ref = deviceId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        deviceId_ = s;
        return s;
      }
    }
    /**
     * <code>string device_id = 10;</code>
     * @return The bytes for deviceId.
     */
    public com.google.protobuf.ByteString
        getDeviceIdBytes() {
      java.lang.Object ref = deviceId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        deviceId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int IS_PRIVATE_SESSION_FIELD_NUMBER = 11;
    private boolean isPrivateSession_;
    /**
     * <code>bool is_private_session = 11;</code>
     * @return The isPrivateSession.
     */
    public boolean getIsPrivateSession() {
      return isPrivateSession_;
    }

    public static final int IS_SOCIAL_CONNECT_FIELD_NUMBER = 12;
    private boolean isSocialConnect_;
    /**
     * <code>bool is_social_connect = 12;</code>
     * @return The isSocialConnect.
     */
    public boolean getIsSocialConnect() {
      return isSocialConnect_;
    }

    public static final int CLIENT_ID_FIELD_NUMBER = 13;
    private volatile java.lang.Object clientId_;
    /**
     * <code>string client_id = 13;</code>
     * @return The clientId.
     */
    public java.lang.String getClientId() {
      java.lang.Object ref = clientId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        clientId_ = s;
        return s;
      }
    }
    /**
     * <code>string client_id = 13;</code>
     * @return The bytes for clientId.
     */
    public com.google.protobuf.ByteString
        getClientIdBytes() {
      java.lang.Object ref = clientId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        clientId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int BRAND_FIELD_NUMBER = 14;
    private volatile java.lang.Object brand_;
    /**
     * <code>string brand = 14;</code>
     * @return The brand.
     */
    public java.lang.String getBrand() {
      java.lang.Object ref = brand_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        brand_ = s;
        return s;
      }
    }
    /**
     * <code>string brand = 14;</code>
     * @return The bytes for brand.
     */
    public com.google.protobuf.ByteString
        getBrandBytes() {
      java.lang.Object ref = brand_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        brand_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MODEL_FIELD_NUMBER = 15;
    private volatile java.lang.Object model_;
    /**
     * <code>string model = 15;</code>
     * @return The model.
     */
    public java.lang.String getModel() {
      java.lang.Object ref = model_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        model_ = s;
        return s;
      }
    }
    /**
     * <code>string model = 15;</code>
     * @return The bytes for model.
     */
    public com.google.protobuf.ByteString
        getModelBytes() {
      java.lang.Object ref = model_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        model_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int METADATA_MAP_FIELD_NUMBER = 16;
    private static final class MetadataMapDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.String, java.lang.String> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.String, java.lang.String>newDefaultInstance(
                  com.spotify.connectstate.Connect.internal_static_connectstate_DeviceInfo_MetadataMapEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "",
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "");
    }
    private com.google.protobuf.MapField<
        java.lang.String, java.lang.String> metadataMap_;
    private com.google.protobuf.MapField<java.lang.String, java.lang.String>
    internalGetMetadataMap() {
      if (metadataMap_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            MetadataMapDefaultEntryHolder.defaultEntry);
      }
      return metadataMap_;
    }

    public int getMetadataMapCount() {
      return internalGetMetadataMap().getMap().size();
    }
    /**
     * <code>map&lt;string, string&gt; metadata_map = 16;</code>
     */

    public boolean containsMetadataMap(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      return internalGetMetadataMap().getMap().containsKey(key);
    }
    /**
     * Use {@link #getMetadataMapMap()} instead.
     */
    @java.lang.Deprecated
    public java.util.Map<java.lang.String, java.lang.String> getMetadataMap() {
      return getMetadataMapMap();
    }
    /**
     * <code>map&lt;string, string&gt; metadata_map = 16;</code>
     */

    public java.util.Map<java.lang.String, java.lang.String> getMetadataMapMap() {
      return internalGetMetadataMap().getMap();
    }
    /**
     * <code>map&lt;string, string&gt; metadata_map = 16;</code>
     */

    public java.lang.String getMetadataMapOrDefault(
        java.lang.String key,
        java.lang.String defaultValue) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, java.lang.String> map =
          internalGetMetadataMap().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <code>map&lt;string, string&gt; metadata_map = 16;</code>
     */

    public java.lang.String getMetadataMapOrThrow(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, java.lang.String> map =
          internalGetMetadataMap().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

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

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.connectstate.Connect.DeviceInfo prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code connectstate.DeviceInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:connectstate.DeviceInfo)
        com.spotify.connectstate.Connect.DeviceInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_DeviceInfo_descriptor;
      }

      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMapField(
          int number) {
        switch (number) {
          case 16:
            return internalGetMetadataMap();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMutableMapField(
          int number) {
        switch (number) {
          case 16:
            return internalGetMutableMetadataMap();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_DeviceInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.connectstate.Connect.DeviceInfo.class, com.spotify.connectstate.Connect.DeviceInfo.Builder.class);
      }

      // Construct using com.spotify.connectstate.Connect.DeviceInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        canPlay_ = false;

        volume_ = 0;

        name_ = "";

        if (capabilitiesBuilder_ == null) {
          capabilities_ = null;
        } else {
          capabilities_ = null;
          capabilitiesBuilder_ = null;
        }
        deviceSoftwareVersion_ = "";

        deviceType_ = 0;

        spircVersion_ = "";

        deviceId_ = "";

        isPrivateSession_ = false;

        isSocialConnect_ = false;

        clientId_ = "";

        brand_ = "";

        model_ = "";

        internalGetMutableMetadataMap().clear();
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_DeviceInfo_descriptor;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.DeviceInfo getDefaultInstanceForType() {
        return com.spotify.connectstate.Connect.DeviceInfo.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.DeviceInfo build() {
        com.spotify.connectstate.Connect.DeviceInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.DeviceInfo buildPartial() {
        com.spotify.connectstate.Connect.DeviceInfo result = new com.spotify.connectstate.Connect.DeviceInfo(this);
        int from_bitField0_ = bitField0_;
        result.canPlay_ = canPlay_;
        result.volume_ = volume_;
        result.name_ = name_;
        if (capabilitiesBuilder_ == null) {
          result.capabilities_ = capabilities_;
        } else {
          result.capabilities_ = capabilitiesBuilder_.build();
        }
        result.deviceSoftwareVersion_ = deviceSoftwareVersion_;
        result.deviceType_ = deviceType_;
        result.spircVersion_ = spircVersion_;
        result.deviceId_ = deviceId_;
        result.isPrivateSession_ = isPrivateSession_;
        result.isSocialConnect_ = isSocialConnect_;
        result.clientId_ = clientId_;
        result.brand_ = brand_;
        result.model_ = model_;
        result.metadataMap_ = internalGetMetadataMap();
        result.metadataMap_.makeImmutable();
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private boolean canPlay_ ;
      /**
       * <code>bool can_play = 1;</code>
       * @return The canPlay.
       */
      public boolean getCanPlay() {
        return canPlay_;
      }
      /**
       * <code>bool can_play = 1;</code>
       * @param value The canPlay to set.
       * @return This builder for chaining.
       */
      public Builder setCanPlay(boolean value) {
        
        canPlay_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool can_play = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearCanPlay() {
        
        canPlay_ = false;
        onChanged();
        return this;
      }

      private int volume_ ;
      /**
       * <code>uint32 volume = 2;</code>
       * @return The volume.
       */
      public int getVolume() {
        return volume_;
      }
      /**
       * <code>uint32 volume = 2;</code>
       * @param value The volume to set.
       * @return This builder for chaining.
       */
      public Builder setVolume(int value) {
        
        volume_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>uint32 volume = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearVolume() {
        
        volume_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <code>string name = 3;</code>
       * @return The name.
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string name = 3;</code>
       * @return The bytes for name.
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string name = 3;</code>
       * @param value The name to set.
       * @return This builder for chaining.
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string name = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearName() {
        
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>string name = 3;</code>
       * @param value The bytes for name to set.
       * @return This builder for chaining.
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        name_ = value;
        onChanged();
        return this;
      }

      private com.spotify.connectstate.Connect.Capabilities capabilities_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Connect.Capabilities, com.spotify.connectstate.Connect.Capabilities.Builder, com.spotify.connectstate.Connect.CapabilitiesOrBuilder> capabilitiesBuilder_;
      /**
       * <code>.connectstate.Capabilities capabilities = 4;</code>
       * @return Whether the capabilities field is set.
       */
      public boolean hasCapabilities() {
        return capabilitiesBuilder_ != null || capabilities_ != null;
      }
      /**
       * <code>.connectstate.Capabilities capabilities = 4;</code>
       * @return The capabilities.
       */
      public com.spotify.connectstate.Connect.Capabilities getCapabilities() {
        if (capabilitiesBuilder_ == null) {
          return capabilities_ == null ? com.spotify.connectstate.Connect.Capabilities.getDefaultInstance() : capabilities_;
        } else {
          return capabilitiesBuilder_.getMessage();
        }
      }
      /**
       * <code>.connectstate.Capabilities capabilities = 4;</code>
       */
      public Builder setCapabilities(com.spotify.connectstate.Connect.Capabilities value) {
        if (capabilitiesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          capabilities_ = value;
          onChanged();
        } else {
          capabilitiesBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.Capabilities capabilities = 4;</code>
       */
      public Builder setCapabilities(
          com.spotify.connectstate.Connect.Capabilities.Builder builderForValue) {
        if (capabilitiesBuilder_ == null) {
          capabilities_ = builderForValue.build();
          onChanged();
        } else {
          capabilitiesBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.connectstate.Capabilities capabilities = 4;</code>
       */
      public Builder mergeCapabilities(com.spotify.connectstate.Connect.Capabilities value) {
        if (capabilitiesBuilder_ == null) {
          if (capabilities_ != null) {
            capabilities_ =
              com.spotify.connectstate.Connect.Capabilities.newBuilder(capabilities_).mergeFrom(value).buildPartial();
          } else {
            capabilities_ = value;
          }
          onChanged();
        } else {
          capabilitiesBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.Capabilities capabilities = 4;</code>
       */
      public Builder clearCapabilities() {
        if (capabilitiesBuilder_ == null) {
          capabilities_ = null;
          onChanged();
        } else {
          capabilities_ = null;
          capabilitiesBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.connectstate.Capabilities capabilities = 4;</code>
       */
      public com.spotify.connectstate.Connect.Capabilities.Builder getCapabilitiesBuilder() {
        
        onChanged();
        return getCapabilitiesFieldBuilder().getBuilder();
      }
      /**
       * <code>.connectstate.Capabilities capabilities = 4;</code>
       */
      public com.spotify.connectstate.Connect.CapabilitiesOrBuilder getCapabilitiesOrBuilder() {
        if (capabilitiesBuilder_ != null) {
          return capabilitiesBuilder_.getMessageOrBuilder();
        } else {
          return capabilities_ == null ?
              com.spotify.connectstate.Connect.Capabilities.getDefaultInstance() : capabilities_;
        }
      }
      /**
       * <code>.connectstate.Capabilities capabilities = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Connect.Capabilities, com.spotify.connectstate.Connect.Capabilities.Builder, com.spotify.connectstate.Connect.CapabilitiesOrBuilder> 
          getCapabilitiesFieldBuilder() {
        if (capabilitiesBuilder_ == null) {
          capabilitiesBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.connectstate.Connect.Capabilities, com.spotify.connectstate.Connect.Capabilities.Builder, com.spotify.connectstate.Connect.CapabilitiesOrBuilder>(
                  getCapabilities(),
                  getParentForChildren(),
                  isClean());
          capabilities_ = null;
        }
        return capabilitiesBuilder_;
      }

      private java.lang.Object deviceSoftwareVersion_ = "";
      /**
       * <code>string device_software_version = 6;</code>
       * @return The deviceSoftwareVersion.
       */
      public java.lang.String getDeviceSoftwareVersion() {
        java.lang.Object ref = deviceSoftwareVersion_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          deviceSoftwareVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string device_software_version = 6;</code>
       * @return The bytes for deviceSoftwareVersion.
       */
      public com.google.protobuf.ByteString
          getDeviceSoftwareVersionBytes() {
        java.lang.Object ref = deviceSoftwareVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          deviceSoftwareVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string device_software_version = 6;</code>
       * @param value The deviceSoftwareVersion to set.
       * @return This builder for chaining.
       */
      public Builder setDeviceSoftwareVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        deviceSoftwareVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string device_software_version = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearDeviceSoftwareVersion() {
        
        deviceSoftwareVersion_ = getDefaultInstance().getDeviceSoftwareVersion();
        onChanged();
        return this;
      }
      /**
       * <code>string device_software_version = 6;</code>
       * @param value The bytes for deviceSoftwareVersion to set.
       * @return This builder for chaining.
       */
      public Builder setDeviceSoftwareVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        deviceSoftwareVersion_ = value;
        onChanged();
        return this;
      }

      private int deviceType_ = 0;
      /**
       * <code>.connectstate.DeviceType device_type = 7;</code>
       * @return The enum numeric value on the wire for deviceType.
       */
      public int getDeviceTypeValue() {
        return deviceType_;
      }
      /**
       * <code>.connectstate.DeviceType device_type = 7;</code>
       * @param value The enum numeric value on the wire for deviceType to set.
       * @return This builder for chaining.
       */
      public Builder setDeviceTypeValue(int value) {
        deviceType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.connectstate.DeviceType device_type = 7;</code>
       * @return The deviceType.
       */
      public com.spotify.connectstate.Connect.DeviceType getDeviceType() {
        @SuppressWarnings("deprecation")
        com.spotify.connectstate.Connect.DeviceType result = com.spotify.connectstate.Connect.DeviceType.valueOf(deviceType_);
        return result == null ? com.spotify.connectstate.Connect.DeviceType.UNRECOGNIZED : result;
      }
      /**
       * <code>.connectstate.DeviceType device_type = 7;</code>
       * @param value The deviceType to set.
       * @return This builder for chaining.
       */
      public Builder setDeviceType(com.spotify.connectstate.Connect.DeviceType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        deviceType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.connectstate.DeviceType device_type = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearDeviceType() {
        
        deviceType_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object spircVersion_ = "";
      /**
       * <code>string spirc_version = 9;</code>
       * @return The spircVersion.
       */
      public java.lang.String getSpircVersion() {
        java.lang.Object ref = spircVersion_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          spircVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string spirc_version = 9;</code>
       * @return The bytes for spircVersion.
       */
      public com.google.protobuf.ByteString
          getSpircVersionBytes() {
        java.lang.Object ref = spircVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          spircVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string spirc_version = 9;</code>
       * @param value The spircVersion to set.
       * @return This builder for chaining.
       */
      public Builder setSpircVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        spircVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string spirc_version = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearSpircVersion() {
        
        spircVersion_ = getDefaultInstance().getSpircVersion();
        onChanged();
        return this;
      }
      /**
       * <code>string spirc_version = 9;</code>
       * @param value The bytes for spircVersion to set.
       * @return This builder for chaining.
       */
      public Builder setSpircVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        spircVersion_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object deviceId_ = "";
      /**
       * <code>string device_id = 10;</code>
       * @return The deviceId.
       */
      public java.lang.String getDeviceId() {
        java.lang.Object ref = deviceId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          deviceId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string device_id = 10;</code>
       * @return The bytes for deviceId.
       */
      public com.google.protobuf.ByteString
          getDeviceIdBytes() {
        java.lang.Object ref = deviceId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          deviceId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string device_id = 10;</code>
       * @param value The deviceId to set.
       * @return This builder for chaining.
       */
      public Builder setDeviceId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        deviceId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string device_id = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearDeviceId() {
        
        deviceId_ = getDefaultInstance().getDeviceId();
        onChanged();
        return this;
      }
      /**
       * <code>string device_id = 10;</code>
       * @param value The bytes for deviceId to set.
       * @return This builder for chaining.
       */
      public Builder setDeviceIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        deviceId_ = value;
        onChanged();
        return this;
      }

      private boolean isPrivateSession_ ;
      /**
       * <code>bool is_private_session = 11;</code>
       * @return The isPrivateSession.
       */
      public boolean getIsPrivateSession() {
        return isPrivateSession_;
      }
      /**
       * <code>bool is_private_session = 11;</code>
       * @param value The isPrivateSession to set.
       * @return This builder for chaining.
       */
      public Builder setIsPrivateSession(boolean value) {
        
        isPrivateSession_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool is_private_session = 11;</code>
       * @return This builder for chaining.
       */
      public Builder clearIsPrivateSession() {
        
        isPrivateSession_ = false;
        onChanged();
        return this;
      }

      private boolean isSocialConnect_ ;
      /**
       * <code>bool is_social_connect = 12;</code>
       * @return The isSocialConnect.
       */
      public boolean getIsSocialConnect() {
        return isSocialConnect_;
      }
      /**
       * <code>bool is_social_connect = 12;</code>
       * @param value The isSocialConnect to set.
       * @return This builder for chaining.
       */
      public Builder setIsSocialConnect(boolean value) {
        
        isSocialConnect_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool is_social_connect = 12;</code>
       * @return This builder for chaining.
       */
      public Builder clearIsSocialConnect() {
        
        isSocialConnect_ = false;
        onChanged();
        return this;
      }

      private java.lang.Object clientId_ = "";
      /**
       * <code>string client_id = 13;</code>
       * @return The clientId.
       */
      public java.lang.String getClientId() {
        java.lang.Object ref = clientId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          clientId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string client_id = 13;</code>
       * @return The bytes for clientId.
       */
      public com.google.protobuf.ByteString
          getClientIdBytes() {
        java.lang.Object ref = clientId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          clientId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string client_id = 13;</code>
       * @param value The clientId to set.
       * @return This builder for chaining.
       */
      public Builder setClientId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        clientId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string client_id = 13;</code>
       * @return This builder for chaining.
       */
      public Builder clearClientId() {
        
        clientId_ = getDefaultInstance().getClientId();
        onChanged();
        return this;
      }
      /**
       * <code>string client_id = 13;</code>
       * @param value The bytes for clientId to set.
       * @return This builder for chaining.
       */
      public Builder setClientIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        clientId_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object brand_ = "";
      /**
       * <code>string brand = 14;</code>
       * @return The brand.
       */
      public java.lang.String getBrand() {
        java.lang.Object ref = brand_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          brand_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string brand = 14;</code>
       * @return The bytes for brand.
       */
      public com.google.protobuf.ByteString
          getBrandBytes() {
        java.lang.Object ref = brand_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          brand_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string brand = 14;</code>
       * @param value The brand to set.
       * @return This builder for chaining.
       */
      public Builder setBrand(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        brand_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string brand = 14;</code>
       * @return This builder for chaining.
       */
      public Builder clearBrand() {
        
        brand_ = getDefaultInstance().getBrand();
        onChanged();
        return this;
      }
      /**
       * <code>string brand = 14;</code>
       * @param value The bytes for brand to set.
       * @return This builder for chaining.
       */
      public Builder setBrandBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        brand_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object model_ = "";
      /**
       * <code>string model = 15;</code>
       * @return The model.
       */
      public java.lang.String getModel() {
        java.lang.Object ref = model_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          model_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string model = 15;</code>
       * @return The bytes for model.
       */
      public com.google.protobuf.ByteString
          getModelBytes() {
        java.lang.Object ref = model_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          model_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string model = 15;</code>
       * @param value The model to set.
       * @return This builder for chaining.
       */
      public Builder setModel(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        model_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string model = 15;</code>
       * @return This builder for chaining.
       */
      public Builder clearModel() {
        
        model_ = getDefaultInstance().getModel();
        onChanged();
        return this;
      }
      /**
       * <code>string model = 15;</code>
       * @param value The bytes for model to set.
       * @return This builder for chaining.
       */
      public Builder setModelBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        model_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.MapField<
          java.lang.String, java.lang.String> metadataMap_;
      private com.google.protobuf.MapField<java.lang.String, java.lang.String>
      internalGetMetadataMap() {
        if (metadataMap_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              MetadataMapDefaultEntryHolder.defaultEntry);
        }
        return metadataMap_;
      }
      private com.google.protobuf.MapField<java.lang.String, java.lang.String>
      internalGetMutableMetadataMap() {
        onChanged();;
        if (metadataMap_ == null) {
          metadataMap_ = com.google.protobuf.MapField.newMapField(
              MetadataMapDefaultEntryHolder.defaultEntry);
        }
        if (!metadataMap_.isMutable()) {
          metadataMap_ = metadataMap_.copy();
        }
        return metadataMap_;
      }

      public int getMetadataMapCount() {
        return internalGetMetadataMap().getMap().size();
      }
      /**
       * <code>map&lt;string, string&gt; metadata_map = 16;</code>
       */

      public boolean containsMetadataMap(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        return internalGetMetadataMap().getMap().containsKey(key);
      }
      /**
       * Use {@link #getMetadataMapMap()} instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, java.lang.String> getMetadataMap() {
        return getMetadataMapMap();
      }
      /**
       * <code>map&lt;string, string&gt; metadata_map = 16;</code>
       */

      public java.util.Map<java.lang.String, java.lang.String> getMetadataMapMap() {
        return internalGetMetadataMap().getMap();
      }
      /**
       * <code>map&lt;string, string&gt; metadata_map = 16;</code>
       */

      public java.lang.String getMetadataMapOrDefault(
          java.lang.String key,
          java.lang.String defaultValue) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, java.lang.String> map =
            internalGetMetadataMap().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <code>map&lt;string, string&gt; metadata_map = 16;</code>
       */

      public java.lang.String getMetadataMapOrThrow(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, java.lang.String> map =
            internalGetMetadataMap().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearMetadataMap() {
        internalGetMutableMetadataMap().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <code>map&lt;string, string&gt; metadata_map = 16;</code>
       */

      public Builder removeMetadataMap(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableMetadataMap().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, java.lang.String>
      getMutableMetadataMap() {
        return internalGetMutableMetadataMap().getMutableMap();
      }
      /**
       * <code>map&lt;string, string&gt; metadata_map = 16;</code>
       */
      public Builder putMetadataMap(
          java.lang.String key,
          java.lang.String value) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        if (value == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableMetadataMap().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <code>map&lt;string, string&gt; metadata_map = 16;</code>
       */

      public Builder putAllMetadataMap(
          java.util.Map<java.lang.String, java.lang.String> values) {
        internalGetMutableMetadataMap().getMutableMap()
            .putAll(values);
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:connectstate.DeviceInfo)
    }

    // @@protoc_insertion_point(class_scope:connectstate.DeviceInfo)
    private static final com.spotify.connectstate.Connect.DeviceInfo DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.connectstate.Connect.DeviceInfo();
    }

    public static com.spotify.connectstate.Connect.DeviceInfo getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<DeviceInfo>
        PARSER = new com.google.protobuf.AbstractParser<DeviceInfo>() {
      @java.lang.Override
      public DeviceInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.connectstate.Connect.DeviceInfo getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CapabilitiesOrBuilder extends
      // @@protoc_insertion_point(interface_extends:connectstate.Capabilities)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>bool can_be_player = 2;</code>
     * @return The canBePlayer.
     */
    boolean getCanBePlayer();

    /**
     * <code>bool restrict_to_local = 3;</code>
     * @return The restrictToLocal.
     */
    boolean getRestrictToLocal();

    /**
     * <code>bool gaia_eq_connect_id = 5;</code>
     * @return The gaiaEqConnectId.
     */
    boolean getGaiaEqConnectId();

    /**
     * <code>bool supports_logout = 6;</code>
     * @return The supportsLogout.
     */
    boolean getSupportsLogout();

    /**
     * <code>bool is_observable = 7;</code>
     * @return The isObservable.
     */
    boolean getIsObservable();

    /**
     * <code>int32 volume_steps = 8;</code>
     * @return The volumeSteps.
     */
    int getVolumeSteps();

    /**
     * <code>repeated string supported_types = 9;</code>
     * @return A list containing the supportedTypes.
     */
    java.util.List<java.lang.String>
        getSupportedTypesList();
    /**
     * <code>repeated string supported_types = 9;</code>
     * @return The count of supportedTypes.
     */
    int getSupportedTypesCount();
    /**
     * <code>repeated string supported_types = 9;</code>
     * @param index The index of the element to return.
     * @return The supportedTypes at the given index.
     */
    java.lang.String getSupportedTypes(int index);
    /**
     * <code>repeated string supported_types = 9;</code>
     * @param index The index of the value to return.
     * @return The bytes of the supportedTypes at the given index.
     */
    com.google.protobuf.ByteString
        getSupportedTypesBytes(int index);

    /**
     * <code>bool command_acks = 10;</code>
     * @return The commandAcks.
     */
    boolean getCommandAcks();

    /**
     * <code>bool supports_rename = 11;</code>
     * @return The supportsRename.
     */
    boolean getSupportsRename();

    /**
     * <code>bool hidden = 12;</code>
     * @return The hidden.
     */
    boolean getHidden();

    /**
     * <code>bool disable_volume = 13;</code>
     * @return The disableVolume.
     */
    boolean getDisableVolume();

    /**
     * <code>bool connect_disabled = 14;</code>
     * @return The connectDisabled.
     */
    boolean getConnectDisabled();

    /**
     * <code>bool supports_playlist_v2 = 15;</code>
     * @return The supportsPlaylistV2.
     */
    boolean getSupportsPlaylistV2();

    /**
     * <code>bool is_controllable = 16;</code>
     * @return The isControllable.
     */
    boolean getIsControllable();

    /**
     * <code>bool supports_external_episodes = 17;</code>
     * @return The supportsExternalEpisodes.
     */
    boolean getSupportsExternalEpisodes();

    /**
     * <code>bool supports_set_backend_metadata = 18;</code>
     * @return The supportsSetBackendMetadata.
     */
    boolean getSupportsSetBackendMetadata();

    /**
     * <code>bool supports_transfer_command = 19;</code>
     * @return The supportsTransferCommand.
     */
    boolean getSupportsTransferCommand();

    /**
     * <code>bool supports_command_request = 20;</code>
     * @return The supportsCommandRequest.
     */
    boolean getSupportsCommandRequest();

    /**
     * <code>bool is_voice_enabled = 21;</code>
     * @return The isVoiceEnabled.
     */
    boolean getIsVoiceEnabled();

    /**
     * <code>bool needs_full_player_state = 22;</code>
     * @return The needsFullPlayerState.
     */
    boolean getNeedsFullPlayerState();

    /**
     * <pre>
     * reserved 1, "supported_contexts";
     * </pre>
     *
     * <code>bool supports_gzip_pushes = 23;</code>
     * @return The supportsGzipPushes.
     */
    boolean getSupportsGzipPushes();
  }
  /**
   * Protobuf type {@code connectstate.Capabilities}
   */
  public  static final class Capabilities extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:connectstate.Capabilities)
      CapabilitiesOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Capabilities.newBuilder() to construct.
    private Capabilities(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Capabilities() {
      supportedTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new Capabilities();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_Capabilities_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_Capabilities_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.connectstate.Connect.Capabilities.class, com.spotify.connectstate.Connect.Capabilities.Builder.class);
    }

    public static final int CAN_BE_PLAYER_FIELD_NUMBER = 2;
    private boolean canBePlayer_;
    /**
     * <code>bool can_be_player = 2;</code>
     * @return The canBePlayer.
     */
    public boolean getCanBePlayer() {
      return canBePlayer_;
    }

    public static final int RESTRICT_TO_LOCAL_FIELD_NUMBER = 3;
    private boolean restrictToLocal_;
    /**
     * <code>bool restrict_to_local = 3;</code>
     * @return The restrictToLocal.
     */
    public boolean getRestrictToLocal() {
      return restrictToLocal_;
    }

    public static final int GAIA_EQ_CONNECT_ID_FIELD_NUMBER = 5;
    private boolean gaiaEqConnectId_;
    /**
     * <code>bool gaia_eq_connect_id = 5;</code>
     * @return The gaiaEqConnectId.
     */
    public boolean getGaiaEqConnectId() {
      return gaiaEqConnectId_;
    }

    public static final int SUPPORTS_LOGOUT_FIELD_NUMBER = 6;
    private boolean supportsLogout_;
    /**
     * <code>bool supports_logout = 6;</code>
     * @return The supportsLogout.
     */
    public boolean getSupportsLogout() {
      return supportsLogout_;
    }

    public static final int IS_OBSERVABLE_FIELD_NUMBER = 7;
    private boolean isObservable_;
    /**
     * <code>bool is_observable = 7;</code>
     * @return The isObservable.
     */
    public boolean getIsObservable() {
      return isObservable_;
    }

    public static final int VOLUME_STEPS_FIELD_NUMBER = 8;
    private int volumeSteps_;
    /**
     * <code>int32 volume_steps = 8;</code>
     * @return The volumeSteps.
     */
    public int getVolumeSteps() {
      return volumeSteps_;
    }

    public static final int SUPPORTED_TYPES_FIELD_NUMBER = 9;
    private com.google.protobuf.LazyStringList supportedTypes_;
    /**
     * <code>repeated string supported_types = 9;</code>
     * @return A list containing the supportedTypes.
     */
    public com.google.protobuf.ProtocolStringList
        getSupportedTypesList() {
      return supportedTypes_;
    }
    /**
     * <code>repeated string supported_types = 9;</code>
     * @return The count of supportedTypes.
     */
    public int getSupportedTypesCount() {
      return supportedTypes_.size();
    }
    /**
     * <code>repeated string supported_types = 9;</code>
     * @param index The index of the element to return.
     * @return The supportedTypes at the given index.
     */
    public java.lang.String getSupportedTypes(int index) {
      return supportedTypes_.get(index);
    }
    /**
     * <code>repeated string supported_types = 9;</code>
     * @param index The index of the value to return.
     * @return The bytes of the supportedTypes at the given index.
     */
    public com.google.protobuf.ByteString
        getSupportedTypesBytes(int index) {
      return supportedTypes_.getByteString(index);
    }

    public static final int COMMAND_ACKS_FIELD_NUMBER = 10;
    private boolean commandAcks_;
    /**
     * <code>bool command_acks = 10;</code>
     * @return The commandAcks.
     */
    public boolean getCommandAcks() {
      return commandAcks_;
    }

    public static final int SUPPORTS_RENAME_FIELD_NUMBER = 11;
    private boolean supportsRename_;
    /**
     * <code>bool supports_rename = 11;</code>
     * @return The supportsRename.
     */
    public boolean getSupportsRename() {
      return supportsRename_;
    }

    public static final int HIDDEN_FIELD_NUMBER = 12;
    private boolean hidden_;
    /**
     * <code>bool hidden = 12;</code>
     * @return The hidden.
     */
    public boolean getHidden() {
      return hidden_;
    }

    public static final int DISABLE_VOLUME_FIELD_NUMBER = 13;
    private boolean disableVolume_;
    /**
     * <code>bool disable_volume = 13;</code>
     * @return The disableVolume.
     */
    public boolean getDisableVolume() {
      return disableVolume_;
    }

    public static final int CONNECT_DISABLED_FIELD_NUMBER = 14;
    private boolean connectDisabled_;
    /**
     * <code>bool connect_disabled = 14;</code>
     * @return The connectDisabled.
     */
    public boolean getConnectDisabled() {
      return connectDisabled_;
    }

    public static final int SUPPORTS_PLAYLIST_V2_FIELD_NUMBER = 15;
    private boolean supportsPlaylistV2_;
    /**
     * <code>bool supports_playlist_v2 = 15;</code>
     * @return The supportsPlaylistV2.
     */
    public boolean getSupportsPlaylistV2() {
      return supportsPlaylistV2_;
    }

    public static final int IS_CONTROLLABLE_FIELD_NUMBER = 16;
    private boolean isControllable_;
    /**
     * <code>bool is_controllable = 16;</code>
     * @return The isControllable.
     */
    public boolean getIsControllable() {
      return isControllable_;
    }

    public static final int SUPPORTS_EXTERNAL_EPISODES_FIELD_NUMBER = 17;
    private boolean supportsExternalEpisodes_;
    /**
     * <code>bool supports_external_episodes = 17;</code>
     * @return The supportsExternalEpisodes.
     */
    public boolean getSupportsExternalEpisodes() {
      return supportsExternalEpisodes_;
    }

    public static final int SUPPORTS_SET_BACKEND_METADATA_FIELD_NUMBER = 18;
    private boolean supportsSetBackendMetadata_;
    /**
     * <code>bool supports_set_backend_metadata = 18;</code>
     * @return The supportsSetBackendMetadata.
     */
    public boolean getSupportsSetBackendMetadata() {
      return supportsSetBackendMetadata_;
    }

    public static final int SUPPORTS_TRANSFER_COMMAND_FIELD_NUMBER = 19;
    private boolean supportsTransferCommand_;
    /**
     * <code>bool supports_transfer_command = 19;</code>
     * @return The supportsTransferCommand.
     */
    public boolean getSupportsTransferCommand() {
      return supportsTransferCommand_;
    }

    public static final int SUPPORTS_COMMAND_REQUEST_FIELD_NUMBER = 20;
    private boolean supportsCommandRequest_;
    /**
     * <code>bool supports_command_request = 20;</code>
     * @return The supportsCommandRequest.
     */
    public boolean getSupportsCommandRequest() {
      return supportsCommandRequest_;
    }

    public static final int IS_VOICE_ENABLED_FIELD_NUMBER = 21;
    private boolean isVoiceEnabled_;
    /**
     * <code>bool is_voice_enabled = 21;</code>
     * @return The isVoiceEnabled.
     */
    public boolean getIsVoiceEnabled() {
      return isVoiceEnabled_;
    }

    public static final int NEEDS_FULL_PLAYER_STATE_FIELD_NUMBER = 22;
    private boolean needsFullPlayerState_;
    /**
     * <code>bool needs_full_player_state = 22;</code>
     * @return The needsFullPlayerState.
     */
    public boolean getNeedsFullPlayerState() {
      return needsFullPlayerState_;
    }

    public static final int SUPPORTS_GZIP_PUSHES_FIELD_NUMBER = 23;
    private boolean supportsGzipPushes_;
    /**
     * <pre>
     * reserved 1, "supported_contexts";
     * </pre>
     *
     * <code>bool supports_gzip_pushes = 23;</code>
     * @return The supportsGzipPushes.
     */
    public boolean getSupportsGzipPushes() {
      return supportsGzipPushes_;
    }

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

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.connectstate.Connect.Capabilities prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code connectstate.Capabilities}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:connectstate.Capabilities)
        com.spotify.connectstate.Connect.CapabilitiesOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_Capabilities_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_Capabilities_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.connectstate.Connect.Capabilities.class, com.spotify.connectstate.Connect.Capabilities.Builder.class);
      }

      // Construct using com.spotify.connectstate.Connect.Capabilities.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        canBePlayer_ = false;

        restrictToLocal_ = false;

        gaiaEqConnectId_ = false;

        supportsLogout_ = false;

        isObservable_ = false;

        volumeSteps_ = 0;

        supportedTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        commandAcks_ = false;

        supportsRename_ = false;

        hidden_ = false;

        disableVolume_ = false;

        connectDisabled_ = false;

        supportsPlaylistV2_ = false;

        isControllable_ = false;

        supportsExternalEpisodes_ = false;

        supportsSetBackendMetadata_ = false;

        supportsTransferCommand_ = false;

        supportsCommandRequest_ = false;

        isVoiceEnabled_ = false;

        needsFullPlayerState_ = false;

        supportsGzipPushes_ = false;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_Capabilities_descriptor;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.Capabilities getDefaultInstanceForType() {
        return com.spotify.connectstate.Connect.Capabilities.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.Capabilities build() {
        com.spotify.connectstate.Connect.Capabilities result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.Capabilities buildPartial() {
        com.spotify.connectstate.Connect.Capabilities result = new com.spotify.connectstate.Connect.Capabilities(this);
        int from_bitField0_ = bitField0_;
        result.canBePlayer_ = canBePlayer_;
        result.restrictToLocal_ = restrictToLocal_;
        result.gaiaEqConnectId_ = gaiaEqConnectId_;
        result.supportsLogout_ = supportsLogout_;
        result.isObservable_ = isObservable_;
        result.volumeSteps_ = volumeSteps_;
        if (((bitField0_ & 0x00000001) != 0)) {
          supportedTypes_ = supportedTypes_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.supportedTypes_ = supportedTypes_;
        result.commandAcks_ = commandAcks_;
        result.supportsRename_ = supportsRename_;
        result.hidden_ = hidden_;
        result.disableVolume_ = disableVolume_;
        result.connectDisabled_ = connectDisabled_;
        result.supportsPlaylistV2_ = supportsPlaylistV2_;
        result.isControllable_ = isControllable_;
        result.supportsExternalEpisodes_ = supportsExternalEpisodes_;
        result.supportsSetBackendMetadata_ = supportsSetBackendMetadata_;
        result.supportsTransferCommand_ = supportsTransferCommand_;
        result.supportsCommandRequest_ = supportsCommandRequest_;
        result.isVoiceEnabled_ = isVoiceEnabled_;
        result.needsFullPlayerState_ = needsFullPlayerState_;
        result.supportsGzipPushes_ = supportsGzipPushes_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private boolean canBePlayer_ ;
      /**
       * <code>bool can_be_player = 2;</code>
       * @return The canBePlayer.
       */
      public boolean getCanBePlayer() {
        return canBePlayer_;
      }
      /**
       * <code>bool can_be_player = 2;</code>
       * @param value The canBePlayer to set.
       * @return This builder for chaining.
       */
      public Builder setCanBePlayer(boolean value) {
        
        canBePlayer_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool can_be_player = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearCanBePlayer() {
        
        canBePlayer_ = false;
        onChanged();
        return this;
      }

      private boolean restrictToLocal_ ;
      /**
       * <code>bool restrict_to_local = 3;</code>
       * @return The restrictToLocal.
       */
      public boolean getRestrictToLocal() {
        return restrictToLocal_;
      }
      /**
       * <code>bool restrict_to_local = 3;</code>
       * @param value The restrictToLocal to set.
       * @return This builder for chaining.
       */
      public Builder setRestrictToLocal(boolean value) {
        
        restrictToLocal_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool restrict_to_local = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearRestrictToLocal() {
        
        restrictToLocal_ = false;
        onChanged();
        return this;
      }

      private boolean gaiaEqConnectId_ ;
      /**
       * <code>bool gaia_eq_connect_id = 5;</code>
       * @return The gaiaEqConnectId.
       */
      public boolean getGaiaEqConnectId() {
        return gaiaEqConnectId_;
      }
      /**
       * <code>bool gaia_eq_connect_id = 5;</code>
       * @param value The gaiaEqConnectId to set.
       * @return This builder for chaining.
       */
      public Builder setGaiaEqConnectId(boolean value) {
        
        gaiaEqConnectId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool gaia_eq_connect_id = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearGaiaEqConnectId() {
        
        gaiaEqConnectId_ = false;
        onChanged();
        return this;
      }

      private boolean supportsLogout_ ;
      /**
       * <code>bool supports_logout = 6;</code>
       * @return The supportsLogout.
       */
      public boolean getSupportsLogout() {
        return supportsLogout_;
      }
      /**
       * <code>bool supports_logout = 6;</code>
       * @param value The supportsLogout to set.
       * @return This builder for chaining.
       */
      public Builder setSupportsLogout(boolean value) {
        
        supportsLogout_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool supports_logout = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearSupportsLogout() {
        
        supportsLogout_ = false;
        onChanged();
        return this;
      }

      private boolean isObservable_ ;
      /**
       * <code>bool is_observable = 7;</code>
       * @return The isObservable.
       */
      public boolean getIsObservable() {
        return isObservable_;
      }
      /**
       * <code>bool is_observable = 7;</code>
       * @param value The isObservable to set.
       * @return This builder for chaining.
       */
      public Builder setIsObservable(boolean value) {
        
        isObservable_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool is_observable = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearIsObservable() {
        
        isObservable_ = false;
        onChanged();
        return this;
      }

      private int volumeSteps_ ;
      /**
       * <code>int32 volume_steps = 8;</code>
       * @return The volumeSteps.
       */
      public int getVolumeSteps() {
        return volumeSteps_;
      }
      /**
       * <code>int32 volume_steps = 8;</code>
       * @param value The volumeSteps to set.
       * @return This builder for chaining.
       */
      public Builder setVolumeSteps(int value) {
        
        volumeSteps_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 volume_steps = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearVolumeSteps() {
        
        volumeSteps_ = 0;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList supportedTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureSupportedTypesIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          supportedTypes_ = new com.google.protobuf.LazyStringArrayList(supportedTypes_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <code>repeated string supported_types = 9;</code>
       * @return A list containing the supportedTypes.
       */
      public com.google.protobuf.ProtocolStringList
          getSupportedTypesList() {
        return supportedTypes_.getUnmodifiableView();
      }
      /**
       * <code>repeated string supported_types = 9;</code>
       * @return The count of supportedTypes.
       */
      public int getSupportedTypesCount() {
        return supportedTypes_.size();
      }
      /**
       * <code>repeated string supported_types = 9;</code>
       * @param index The index of the element to return.
       * @return The supportedTypes at the given index.
       */
      public java.lang.String getSupportedTypes(int index) {
        return supportedTypes_.get(index);
      }
      /**
       * <code>repeated string supported_types = 9;</code>
       * @param index The index of the value to return.
       * @return The bytes of the supportedTypes at the given index.
       */
      public com.google.protobuf.ByteString
          getSupportedTypesBytes(int index) {
        return supportedTypes_.getByteString(index);
      }
      /**
       * <code>repeated string supported_types = 9;</code>
       * @param index The index to set the value at.
       * @param value The supportedTypes to set.
       * @return This builder for chaining.
       */
      public Builder setSupportedTypes(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSupportedTypesIsMutable();
        supportedTypes_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string supported_types = 9;</code>
       * @param value The supportedTypes to add.
       * @return This builder for chaining.
       */
      public Builder addSupportedTypes(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSupportedTypesIsMutable();
        supportedTypes_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string supported_types = 9;</code>
       * @param values The supportedTypes to add.
       * @return This builder for chaining.
       */
      public Builder addAllSupportedTypes(
          java.lang.Iterable<java.lang.String> values) {
        ensureSupportedTypesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, supportedTypes_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string supported_types = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearSupportedTypes() {
        supportedTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string supported_types = 9;</code>
       * @param value The bytes of the supportedTypes to add.
       * @return This builder for chaining.
       */
      public Builder addSupportedTypesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureSupportedTypesIsMutable();
        supportedTypes_.add(value);
        onChanged();
        return this;
      }

      private boolean commandAcks_ ;
      /**
       * <code>bool command_acks = 10;</code>
       * @return The commandAcks.
       */
      public boolean getCommandAcks() {
        return commandAcks_;
      }
      /**
       * <code>bool command_acks = 10;</code>
       * @param value The commandAcks to set.
       * @return This builder for chaining.
       */
      public Builder setCommandAcks(boolean value) {
        
        commandAcks_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool command_acks = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearCommandAcks() {
        
        commandAcks_ = false;
        onChanged();
        return this;
      }

      private boolean supportsRename_ ;
      /**
       * <code>bool supports_rename = 11;</code>
       * @return The supportsRename.
       */
      public boolean getSupportsRename() {
        return supportsRename_;
      }
      /**
       * <code>bool supports_rename = 11;</code>
       * @param value The supportsRename to set.
       * @return This builder for chaining.
       */
      public Builder setSupportsRename(boolean value) {
        
        supportsRename_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool supports_rename = 11;</code>
       * @return This builder for chaining.
       */
      public Builder clearSupportsRename() {
        
        supportsRename_ = false;
        onChanged();
        return this;
      }

      private boolean hidden_ ;
      /**
       * <code>bool hidden = 12;</code>
       * @return The hidden.
       */
      public boolean getHidden() {
        return hidden_;
      }
      /**
       * <code>bool hidden = 12;</code>
       * @param value The hidden to set.
       * @return This builder for chaining.
       */
      public Builder setHidden(boolean value) {
        
        hidden_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool hidden = 12;</code>
       * @return This builder for chaining.
       */
      public Builder clearHidden() {
        
        hidden_ = false;
        onChanged();
        return this;
      }

      private boolean disableVolume_ ;
      /**
       * <code>bool disable_volume = 13;</code>
       * @return The disableVolume.
       */
      public boolean getDisableVolume() {
        return disableVolume_;
      }
      /**
       * <code>bool disable_volume = 13;</code>
       * @param value The disableVolume to set.
       * @return This builder for chaining.
       */
      public Builder setDisableVolume(boolean value) {
        
        disableVolume_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool disable_volume = 13;</code>
       * @return This builder for chaining.
       */
      public Builder clearDisableVolume() {
        
        disableVolume_ = false;
        onChanged();
        return this;
      }

      private boolean connectDisabled_ ;
      /**
       * <code>bool connect_disabled = 14;</code>
       * @return The connectDisabled.
       */
      public boolean getConnectDisabled() {
        return connectDisabled_;
      }
      /**
       * <code>bool connect_disabled = 14;</code>
       * @param value The connectDisabled to set.
       * @return This builder for chaining.
       */
      public Builder setConnectDisabled(boolean value) {
        
        connectDisabled_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool connect_disabled = 14;</code>
       * @return This builder for chaining.
       */
      public Builder clearConnectDisabled() {
        
        connectDisabled_ = false;
        onChanged();
        return this;
      }

      private boolean supportsPlaylistV2_ ;
      /**
       * <code>bool supports_playlist_v2 = 15;</code>
       * @return The supportsPlaylistV2.
       */
      public boolean getSupportsPlaylistV2() {
        return supportsPlaylistV2_;
      }
      /**
       * <code>bool supports_playlist_v2 = 15;</code>
       * @param value The supportsPlaylistV2 to set.
       * @return This builder for chaining.
       */
      public Builder setSupportsPlaylistV2(boolean value) {
        
        supportsPlaylistV2_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool supports_playlist_v2 = 15;</code>
       * @return This builder for chaining.
       */
      public Builder clearSupportsPlaylistV2() {
        
        supportsPlaylistV2_ = false;
        onChanged();
        return this;
      }

      private boolean isControllable_ ;
      /**
       * <code>bool is_controllable = 16;</code>
       * @return The isControllable.
       */
      public boolean getIsControllable() {
        return isControllable_;
      }
      /**
       * <code>bool is_controllable = 16;</code>
       * @param value The isControllable to set.
       * @return This builder for chaining.
       */
      public Builder setIsControllable(boolean value) {
        
        isControllable_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool is_controllable = 16;</code>
       * @return This builder for chaining.
       */
      public Builder clearIsControllable() {
        
        isControllable_ = false;
        onChanged();
        return this;
      }

      private boolean supportsExternalEpisodes_ ;
      /**
       * <code>bool supports_external_episodes = 17;</code>
       * @return The supportsExternalEpisodes.
       */
      public boolean getSupportsExternalEpisodes() {
        return supportsExternalEpisodes_;
      }
      /**
       * <code>bool supports_external_episodes = 17;</code>
       * @param value The supportsExternalEpisodes to set.
       * @return This builder for chaining.
       */
      public Builder setSupportsExternalEpisodes(boolean value) {
        
        supportsExternalEpisodes_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool supports_external_episodes = 17;</code>
       * @return This builder for chaining.
       */
      public Builder clearSupportsExternalEpisodes() {
        
        supportsExternalEpisodes_ = false;
        onChanged();
        return this;
      }

      private boolean supportsSetBackendMetadata_ ;
      /**
       * <code>bool supports_set_backend_metadata = 18;</code>
       * @return The supportsSetBackendMetadata.
       */
      public boolean getSupportsSetBackendMetadata() {
        return supportsSetBackendMetadata_;
      }
      /**
       * <code>bool supports_set_backend_metadata = 18;</code>
       * @param value The supportsSetBackendMetadata to set.
       * @return This builder for chaining.
       */
      public Builder setSupportsSetBackendMetadata(boolean value) {
        
        supportsSetBackendMetadata_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool supports_set_backend_metadata = 18;</code>
       * @return This builder for chaining.
       */
      public Builder clearSupportsSetBackendMetadata() {
        
        supportsSetBackendMetadata_ = false;
        onChanged();
        return this;
      }

      private boolean supportsTransferCommand_ ;
      /**
       * <code>bool supports_transfer_command = 19;</code>
       * @return The supportsTransferCommand.
       */
      public boolean getSupportsTransferCommand() {
        return supportsTransferCommand_;
      }
      /**
       * <code>bool supports_transfer_command = 19;</code>
       * @param value The supportsTransferCommand to set.
       * @return This builder for chaining.
       */
      public Builder setSupportsTransferCommand(boolean value) {
        
        supportsTransferCommand_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool supports_transfer_command = 19;</code>
       * @return This builder for chaining.
       */
      public Builder clearSupportsTransferCommand() {
        
        supportsTransferCommand_ = false;
        onChanged();
        return this;
      }

      private boolean supportsCommandRequest_ ;
      /**
       * <code>bool supports_command_request = 20;</code>
       * @return The supportsCommandRequest.
       */
      public boolean getSupportsCommandRequest() {
        return supportsCommandRequest_;
      }
      /**
       * <code>bool supports_command_request = 20;</code>
       * @param value The supportsCommandRequest to set.
       * @return This builder for chaining.
       */
      public Builder setSupportsCommandRequest(boolean value) {
        
        supportsCommandRequest_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool supports_command_request = 20;</code>
       * @return This builder for chaining.
       */
      public Builder clearSupportsCommandRequest() {
        
        supportsCommandRequest_ = false;
        onChanged();
        return this;
      }

      private boolean isVoiceEnabled_ ;
      /**
       * <code>bool is_voice_enabled = 21;</code>
       * @return The isVoiceEnabled.
       */
      public boolean getIsVoiceEnabled() {
        return isVoiceEnabled_;
      }
      /**
       * <code>bool is_voice_enabled = 21;</code>
       * @param value The isVoiceEnabled to set.
       * @return This builder for chaining.
       */
      public Builder setIsVoiceEnabled(boolean value) {
        
        isVoiceEnabled_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool is_voice_enabled = 21;</code>
       * @return This builder for chaining.
       */
      public Builder clearIsVoiceEnabled() {
        
        isVoiceEnabled_ = false;
        onChanged();
        return this;
      }

      private boolean needsFullPlayerState_ ;
      /**
       * <code>bool needs_full_player_state = 22;</code>
       * @return The needsFullPlayerState.
       */
      public boolean getNeedsFullPlayerState() {
        return needsFullPlayerState_;
      }
      /**
       * <code>bool needs_full_player_state = 22;</code>
       * @param value The needsFullPlayerState to set.
       * @return This builder for chaining.
       */
      public Builder setNeedsFullPlayerState(boolean value) {
        
        needsFullPlayerState_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool needs_full_player_state = 22;</code>
       * @return This builder for chaining.
       */
      public Builder clearNeedsFullPlayerState() {
        
        needsFullPlayerState_ = false;
        onChanged();
        return this;
      }

      private boolean supportsGzipPushes_ ;
      /**
       * <pre>
       * reserved 1, "supported_contexts";
       * </pre>
       *
       * <code>bool supports_gzip_pushes = 23;</code>
       * @return The supportsGzipPushes.
       */
      public boolean getSupportsGzipPushes() {
        return supportsGzipPushes_;
      }
      /**
       * <pre>
       * reserved 1, "supported_contexts";
       * </pre>
       *
       * <code>bool supports_gzip_pushes = 23;</code>
       * @param value The supportsGzipPushes to set.
       * @return This builder for chaining.
       */
      public Builder setSupportsGzipPushes(boolean value) {
        
        supportsGzipPushes_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * reserved 1, "supported_contexts";
       * </pre>
       *
       * <code>bool supports_gzip_pushes = 23;</code>
       * @return This builder for chaining.
       */
      public Builder clearSupportsGzipPushes() {
        
        supportsGzipPushes_ = false;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:connectstate.Capabilities)
    }

    // @@protoc_insertion_point(class_scope:connectstate.Capabilities)
    private static final com.spotify.connectstate.Connect.Capabilities DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.connectstate.Connect.Capabilities();
    }

    public static com.spotify.connectstate.Connect.Capabilities getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Capabilities>
        PARSER = new com.google.protobuf.AbstractParser<Capabilities>() {
      @java.lang.Override
      public Capabilities parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.connectstate.Connect.Capabilities getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ConnectCommandOptionsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:connectstate.ConnectCommandOptions)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>int32 message_id = 1;</code>
     * @return The messageId.
     */
    int getMessageId();
  }
  /**
   * Protobuf type {@code connectstate.ConnectCommandOptions}
   */
  public  static final class ConnectCommandOptions extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:connectstate.ConnectCommandOptions)
      ConnectCommandOptionsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ConnectCommandOptions.newBuilder() to construct.
    private ConnectCommandOptions(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ConnectCommandOptions() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ConnectCommandOptions();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_ConnectCommandOptions_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_ConnectCommandOptions_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.connectstate.Connect.ConnectCommandOptions.class, com.spotify.connectstate.Connect.ConnectCommandOptions.Builder.class);
    }

    public static final int MESSAGE_ID_FIELD_NUMBER = 1;
    private int messageId_;
    /**
     * <code>int32 message_id = 1;</code>
     * @return The messageId.
     */
    public int getMessageId() {
      return messageId_;
    }

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

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.connectstate.Connect.ConnectCommandOptions prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code connectstate.ConnectCommandOptions}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:connectstate.ConnectCommandOptions)
        com.spotify.connectstate.Connect.ConnectCommandOptionsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_ConnectCommandOptions_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_ConnectCommandOptions_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.connectstate.Connect.ConnectCommandOptions.class, com.spotify.connectstate.Connect.ConnectCommandOptions.Builder.class);
      }

      // Construct using com.spotify.connectstate.Connect.ConnectCommandOptions.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        messageId_ = 0;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_ConnectCommandOptions_descriptor;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.ConnectCommandOptions getDefaultInstanceForType() {
        return com.spotify.connectstate.Connect.ConnectCommandOptions.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.ConnectCommandOptions build() {
        com.spotify.connectstate.Connect.ConnectCommandOptions result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.ConnectCommandOptions buildPartial() {
        com.spotify.connectstate.Connect.ConnectCommandOptions result = new com.spotify.connectstate.Connect.ConnectCommandOptions(this);
        result.messageId_ = messageId_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }

      private int messageId_ ;
      /**
       * <code>int32 message_id = 1;</code>
       * @return The messageId.
       */
      public int getMessageId() {
        return messageId_;
      }
      /**
       * <code>int32 message_id = 1;</code>
       * @param value The messageId to set.
       * @return This builder for chaining.
       */
      public Builder setMessageId(int value) {
        
        messageId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 message_id = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearMessageId() {
        
        messageId_ = 0;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:connectstate.ConnectCommandOptions)
    }

    // @@protoc_insertion_point(class_scope:connectstate.ConnectCommandOptions)
    private static final com.spotify.connectstate.Connect.ConnectCommandOptions DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.connectstate.Connect.ConnectCommandOptions();
    }

    public static com.spotify.connectstate.Connect.ConnectCommandOptions getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<ConnectCommandOptions>
        PARSER = new com.google.protobuf.AbstractParser<ConnectCommandOptions>() {
      @java.lang.Override
      public ConnectCommandOptions parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.connectstate.Connect.ConnectCommandOptions getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface LogoutCommandOrBuilder extends
      // @@protoc_insertion_point(interface_extends:connectstate.LogoutCommand)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>.connectstate.ConnectCommandOptions command_options = 1;</code>
     * @return Whether the commandOptions field is set.
     */
    boolean hasCommandOptions();
    /**
     * <code>.connectstate.ConnectCommandOptions command_options = 1;</code>
     * @return The commandOptions.
     */
    com.spotify.connectstate.Connect.ConnectCommandOptions getCommandOptions();
    /**
     * <code>.connectstate.ConnectCommandOptions command_options = 1;</code>
     */
    com.spotify.connectstate.Connect.ConnectCommandOptionsOrBuilder getCommandOptionsOrBuilder();
  }
  /**
   * Protobuf type {@code connectstate.LogoutCommand}
   */
  public  static final class LogoutCommand extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:connectstate.LogoutCommand)
      LogoutCommandOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use LogoutCommand.newBuilder() to construct.
    private LogoutCommand(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private LogoutCommand() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new LogoutCommand();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_LogoutCommand_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_LogoutCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.connectstate.Connect.LogoutCommand.class, com.spotify.connectstate.Connect.LogoutCommand.Builder.class);
    }

    public static final int COMMAND_OPTIONS_FIELD_NUMBER = 1;
    private com.spotify.connectstate.Connect.ConnectCommandOptions commandOptions_;
    /**
     * <code>.connectstate.ConnectCommandOptions command_options = 1;</code>
     * @return Whether the commandOptions field is set.
     */
    public boolean hasCommandOptions() {
      return commandOptions_ != null;
    }
    /**
     * <code>.connectstate.ConnectCommandOptions command_options = 1;</code>
     * @return The commandOptions.
     */
    public com.spotify.connectstate.Connect.ConnectCommandOptions getCommandOptions() {
      return commandOptions_ == null ? com.spotify.connectstate.Connect.ConnectCommandOptions.getDefaultInstance() : commandOptions_;
    }
    /**
     * <code>.connectstate.ConnectCommandOptions command_options = 1;</code>
     */
    public com.spotify.connectstate.Connect.ConnectCommandOptionsOrBuilder getCommandOptionsOrBuilder() {
      return getCommandOptions();
    }

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

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.connectstate.Connect.LogoutCommand prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code connectstate.LogoutCommand}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:connectstate.LogoutCommand)
        com.spotify.connectstate.Connect.LogoutCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_LogoutCommand_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_LogoutCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.connectstate.Connect.LogoutCommand.class, com.spotify.connectstate.Connect.LogoutCommand.Builder.class);
      }

      // Construct using com.spotify.connectstate.Connect.LogoutCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (commandOptionsBuilder_ == null) {
          commandOptions_ = null;
        } else {
          commandOptions_ = null;
          commandOptionsBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_LogoutCommand_descriptor;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.LogoutCommand getDefaultInstanceForType() {
        return com.spotify.connectstate.Connect.LogoutCommand.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.LogoutCommand build() {
        com.spotify.connectstate.Connect.LogoutCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.LogoutCommand buildPartial() {
        com.spotify.connectstate.Connect.LogoutCommand result = new com.spotify.connectstate.Connect.LogoutCommand(this);
        if (commandOptionsBuilder_ == null) {
          result.commandOptions_ = commandOptions_;
        } else {
          result.commandOptions_ = commandOptionsBuilder_.build();
        }
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }

      private com.spotify.connectstate.Connect.ConnectCommandOptions commandOptions_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Connect.ConnectCommandOptions, com.spotify.connectstate.Connect.ConnectCommandOptions.Builder, com.spotify.connectstate.Connect.ConnectCommandOptionsOrBuilder> commandOptionsBuilder_;
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 1;</code>
       * @return Whether the commandOptions field is set.
       */
      public boolean hasCommandOptions() {
        return commandOptionsBuilder_ != null || commandOptions_ != null;
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 1;</code>
       * @return The commandOptions.
       */
      public com.spotify.connectstate.Connect.ConnectCommandOptions getCommandOptions() {
        if (commandOptionsBuilder_ == null) {
          return commandOptions_ == null ? com.spotify.connectstate.Connect.ConnectCommandOptions.getDefaultInstance() : commandOptions_;
        } else {
          return commandOptionsBuilder_.getMessage();
        }
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 1;</code>
       */
      public Builder setCommandOptions(com.spotify.connectstate.Connect.ConnectCommandOptions value) {
        if (commandOptionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          commandOptions_ = value;
          onChanged();
        } else {
          commandOptionsBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 1;</code>
       */
      public Builder setCommandOptions(
          com.spotify.connectstate.Connect.ConnectCommandOptions.Builder builderForValue) {
        if (commandOptionsBuilder_ == null) {
          commandOptions_ = builderForValue.build();
          onChanged();
        } else {
          commandOptionsBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 1;</code>
       */
      public Builder mergeCommandOptions(com.spotify.connectstate.Connect.ConnectCommandOptions value) {
        if (commandOptionsBuilder_ == null) {
          if (commandOptions_ != null) {
            commandOptions_ =
              com.spotify.connectstate.Connect.ConnectCommandOptions.newBuilder(commandOptions_).mergeFrom(value).buildPartial();
          } else {
            commandOptions_ = value;
          }
          onChanged();
        } else {
          commandOptionsBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 1;</code>
       */
      public Builder clearCommandOptions() {
        if (commandOptionsBuilder_ == null) {
          commandOptions_ = null;
          onChanged();
        } else {
          commandOptions_ = null;
          commandOptionsBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 1;</code>
       */
      public com.spotify.connectstate.Connect.ConnectCommandOptions.Builder getCommandOptionsBuilder() {
        
        onChanged();
        return getCommandOptionsFieldBuilder().getBuilder();
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 1;</code>
       */
      public com.spotify.connectstate.Connect.ConnectCommandOptionsOrBuilder getCommandOptionsOrBuilder() {
        if (commandOptionsBuilder_ != null) {
          return commandOptionsBuilder_.getMessageOrBuilder();
        } else {
          return commandOptions_ == null ?
              com.spotify.connectstate.Connect.ConnectCommandOptions.getDefaultInstance() : commandOptions_;
        }
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Connect.ConnectCommandOptions, com.spotify.connectstate.Connect.ConnectCommandOptions.Builder, com.spotify.connectstate.Connect.ConnectCommandOptionsOrBuilder> 
          getCommandOptionsFieldBuilder() {
        if (commandOptionsBuilder_ == null) {
          commandOptionsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.connectstate.Connect.ConnectCommandOptions, com.spotify.connectstate.Connect.ConnectCommandOptions.Builder, com.spotify.connectstate.Connect.ConnectCommandOptionsOrBuilder>(
                  getCommandOptions(),
                  getParentForChildren(),
                  isClean());
          commandOptions_ = null;
        }
        return commandOptionsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:connectstate.LogoutCommand)
    }

    // @@protoc_insertion_point(class_scope:connectstate.LogoutCommand)
    private static final com.spotify.connectstate.Connect.LogoutCommand DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.connectstate.Connect.LogoutCommand();
    }

    public static com.spotify.connectstate.Connect.LogoutCommand getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<LogoutCommand>
        PARSER = new com.google.protobuf.AbstractParser<LogoutCommand>() {
      @java.lang.Override
      public LogoutCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.connectstate.Connect.LogoutCommand getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SetVolumeCommandOrBuilder extends
      // @@protoc_insertion_point(interface_extends:connectstate.SetVolumeCommand)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>int32 volume = 1;</code>
     * @return The volume.
     */
    int getVolume();

    /**
     * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
     * @return Whether the commandOptions field is set.
     */
    boolean hasCommandOptions();
    /**
     * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
     * @return The commandOptions.
     */
    com.spotify.connectstate.Connect.ConnectCommandOptions getCommandOptions();
    /**
     * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
     */
    com.spotify.connectstate.Connect.ConnectCommandOptionsOrBuilder getCommandOptionsOrBuilder();
  }
  /**
   * Protobuf type {@code connectstate.SetVolumeCommand}
   */
  public  static final class SetVolumeCommand extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:connectstate.SetVolumeCommand)
      SetVolumeCommandOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SetVolumeCommand.newBuilder() to construct.
    private SetVolumeCommand(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SetVolumeCommand() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new SetVolumeCommand();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_SetVolumeCommand_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_SetVolumeCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.connectstate.Connect.SetVolumeCommand.class, com.spotify.connectstate.Connect.SetVolumeCommand.Builder.class);
    }

    public static final int VOLUME_FIELD_NUMBER = 1;
    private int volume_;
    /**
     * <code>int32 volume = 1;</code>
     * @return The volume.
     */
    public int getVolume() {
      return volume_;
    }

    public static final int COMMAND_OPTIONS_FIELD_NUMBER = 2;
    private com.spotify.connectstate.Connect.ConnectCommandOptions commandOptions_;
    /**
     * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
     * @return Whether the commandOptions field is set.
     */
    public boolean hasCommandOptions() {
      return commandOptions_ != null;
    }
    /**
     * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
     * @return The commandOptions.
     */
    public com.spotify.connectstate.Connect.ConnectCommandOptions getCommandOptions() {
      return commandOptions_ == null ? com.spotify.connectstate.Connect.ConnectCommandOptions.getDefaultInstance() : commandOptions_;
    }
    /**
     * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
     */
    public com.spotify.connectstate.Connect.ConnectCommandOptionsOrBuilder getCommandOptionsOrBuilder() {
      return getCommandOptions();
    }

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

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.connectstate.Connect.SetVolumeCommand prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code connectstate.SetVolumeCommand}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:connectstate.SetVolumeCommand)
        com.spotify.connectstate.Connect.SetVolumeCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_SetVolumeCommand_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_SetVolumeCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.connectstate.Connect.SetVolumeCommand.class, com.spotify.connectstate.Connect.SetVolumeCommand.Builder.class);
      }

      // Construct using com.spotify.connectstate.Connect.SetVolumeCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        volume_ = 0;

        if (commandOptionsBuilder_ == null) {
          commandOptions_ = null;
        } else {
          commandOptions_ = null;
          commandOptionsBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_SetVolumeCommand_descriptor;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.SetVolumeCommand getDefaultInstanceForType() {
        return com.spotify.connectstate.Connect.SetVolumeCommand.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.SetVolumeCommand build() {
        com.spotify.connectstate.Connect.SetVolumeCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.SetVolumeCommand buildPartial() {
        com.spotify.connectstate.Connect.SetVolumeCommand result = new com.spotify.connectstate.Connect.SetVolumeCommand(this);
        result.volume_ = volume_;
        if (commandOptionsBuilder_ == null) {
          result.commandOptions_ = commandOptions_;
        } else {
          result.commandOptions_ = commandOptionsBuilder_.build();
        }
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }

      private int volume_ ;
      /**
       * <code>int32 volume = 1;</code>
       * @return The volume.
       */
      public int getVolume() {
        return volume_;
      }
      /**
       * <code>int32 volume = 1;</code>
       * @param value The volume to set.
       * @return This builder for chaining.
       */
      public Builder setVolume(int value) {
        
        volume_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 volume = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearVolume() {
        
        volume_ = 0;
        onChanged();
        return this;
      }

      private com.spotify.connectstate.Connect.ConnectCommandOptions commandOptions_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Connect.ConnectCommandOptions, com.spotify.connectstate.Connect.ConnectCommandOptions.Builder, com.spotify.connectstate.Connect.ConnectCommandOptionsOrBuilder> commandOptionsBuilder_;
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
       * @return Whether the commandOptions field is set.
       */
      public boolean hasCommandOptions() {
        return commandOptionsBuilder_ != null || commandOptions_ != null;
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
       * @return The commandOptions.
       */
      public com.spotify.connectstate.Connect.ConnectCommandOptions getCommandOptions() {
        if (commandOptionsBuilder_ == null) {
          return commandOptions_ == null ? com.spotify.connectstate.Connect.ConnectCommandOptions.getDefaultInstance() : commandOptions_;
        } else {
          return commandOptionsBuilder_.getMessage();
        }
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
       */
      public Builder setCommandOptions(com.spotify.connectstate.Connect.ConnectCommandOptions value) {
        if (commandOptionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          commandOptions_ = value;
          onChanged();
        } else {
          commandOptionsBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
       */
      public Builder setCommandOptions(
          com.spotify.connectstate.Connect.ConnectCommandOptions.Builder builderForValue) {
        if (commandOptionsBuilder_ == null) {
          commandOptions_ = builderForValue.build();
          onChanged();
        } else {
          commandOptionsBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
       */
      public Builder mergeCommandOptions(com.spotify.connectstate.Connect.ConnectCommandOptions value) {
        if (commandOptionsBuilder_ == null) {
          if (commandOptions_ != null) {
            commandOptions_ =
              com.spotify.connectstate.Connect.ConnectCommandOptions.newBuilder(commandOptions_).mergeFrom(value).buildPartial();
          } else {
            commandOptions_ = value;
          }
          onChanged();
        } else {
          commandOptionsBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
       */
      public Builder clearCommandOptions() {
        if (commandOptionsBuilder_ == null) {
          commandOptions_ = null;
          onChanged();
        } else {
          commandOptions_ = null;
          commandOptionsBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
       */
      public com.spotify.connectstate.Connect.ConnectCommandOptions.Builder getCommandOptionsBuilder() {
        
        onChanged();
        return getCommandOptionsFieldBuilder().getBuilder();
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
       */
      public com.spotify.connectstate.Connect.ConnectCommandOptionsOrBuilder getCommandOptionsOrBuilder() {
        if (commandOptionsBuilder_ != null) {
          return commandOptionsBuilder_.getMessageOrBuilder();
        } else {
          return commandOptions_ == null ?
              com.spotify.connectstate.Connect.ConnectCommandOptions.getDefaultInstance() : commandOptions_;
        }
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Connect.ConnectCommandOptions, com.spotify.connectstate.Connect.ConnectCommandOptions.Builder, com.spotify.connectstate.Connect.ConnectCommandOptionsOrBuilder> 
          getCommandOptionsFieldBuilder() {
        if (commandOptionsBuilder_ == null) {
          commandOptionsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.connectstate.Connect.ConnectCommandOptions, com.spotify.connectstate.Connect.ConnectCommandOptions.Builder, com.spotify.connectstate.Connect.ConnectCommandOptionsOrBuilder>(
                  getCommandOptions(),
                  getParentForChildren(),
                  isClean());
          commandOptions_ = null;
        }
        return commandOptionsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:connectstate.SetVolumeCommand)
    }

    // @@protoc_insertion_point(class_scope:connectstate.SetVolumeCommand)
    private static final com.spotify.connectstate.Connect.SetVolumeCommand DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.connectstate.Connect.SetVolumeCommand();
    }

    public static com.spotify.connectstate.Connect.SetVolumeCommand getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<SetVolumeCommand>
        PARSER = new com.google.protobuf.AbstractParser<SetVolumeCommand>() {
      @java.lang.Override
      public SetVolumeCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.connectstate.Connect.SetVolumeCommand getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RenameCommandOrBuilder extends
      // @@protoc_insertion_point(interface_extends:connectstate.RenameCommand)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string rename_to = 1;</code>
     * @return The renameTo.
     */
    java.lang.String getRenameTo();
    /**
     * <code>string rename_to = 1;</code>
     * @return The bytes for renameTo.
     */
    com.google.protobuf.ByteString
        getRenameToBytes();

    /**
     * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
     * @return Whether the commandOptions field is set.
     */
    boolean hasCommandOptions();
    /**
     * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
     * @return The commandOptions.
     */
    com.spotify.connectstate.Connect.ConnectCommandOptions getCommandOptions();
    /**
     * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
     */
    com.spotify.connectstate.Connect.ConnectCommandOptionsOrBuilder getCommandOptionsOrBuilder();
  }
  /**
   * Protobuf type {@code connectstate.RenameCommand}
   */
  public  static final class RenameCommand extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:connectstate.RenameCommand)
      RenameCommandOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RenameCommand.newBuilder() to construct.
    private RenameCommand(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RenameCommand() {
      renameTo_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new RenameCommand();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_RenameCommand_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_RenameCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.connectstate.Connect.RenameCommand.class, com.spotify.connectstate.Connect.RenameCommand.Builder.class);
    }

    public static final int RENAME_TO_FIELD_NUMBER = 1;
    private volatile java.lang.Object renameTo_;
    /**
     * <code>string rename_to = 1;</code>
     * @return The renameTo.
     */
    public java.lang.String getRenameTo() {
      java.lang.Object ref = renameTo_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        renameTo_ = s;
        return s;
      }
    }
    /**
     * <code>string rename_to = 1;</code>
     * @return The bytes for renameTo.
     */
    public com.google.protobuf.ByteString
        getRenameToBytes() {
      java.lang.Object ref = renameTo_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        renameTo_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int COMMAND_OPTIONS_FIELD_NUMBER = 2;
    private com.spotify.connectstate.Connect.ConnectCommandOptions commandOptions_;
    /**
     * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
     * @return Whether the commandOptions field is set.
     */
    public boolean hasCommandOptions() {
      return commandOptions_ != null;
    }
    /**
     * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
     * @return The commandOptions.
     */
    public com.spotify.connectstate.Connect.ConnectCommandOptions getCommandOptions() {
      return commandOptions_ == null ? com.spotify.connectstate.Connect.ConnectCommandOptions.getDefaultInstance() : commandOptions_;
    }
    /**
     * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
     */
    public com.spotify.connectstate.Connect.ConnectCommandOptionsOrBuilder getCommandOptionsOrBuilder() {
      return getCommandOptions();
    }

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

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.connectstate.Connect.RenameCommand prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code connectstate.RenameCommand}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:connectstate.RenameCommand)
        com.spotify.connectstate.Connect.RenameCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_RenameCommand_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_RenameCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.connectstate.Connect.RenameCommand.class, com.spotify.connectstate.Connect.RenameCommand.Builder.class);
      }

      // Construct using com.spotify.connectstate.Connect.RenameCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        renameTo_ = "";

        if (commandOptionsBuilder_ == null) {
          commandOptions_ = null;
        } else {
          commandOptions_ = null;
          commandOptionsBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_RenameCommand_descriptor;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.RenameCommand getDefaultInstanceForType() {
        return com.spotify.connectstate.Connect.RenameCommand.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.RenameCommand build() {
        com.spotify.connectstate.Connect.RenameCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.RenameCommand buildPartial() {
        com.spotify.connectstate.Connect.RenameCommand result = new com.spotify.connectstate.Connect.RenameCommand(this);
        result.renameTo_ = renameTo_;
        if (commandOptionsBuilder_ == null) {
          result.commandOptions_ = commandOptions_;
        } else {
          result.commandOptions_ = commandOptionsBuilder_.build();
        }
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }

      private java.lang.Object renameTo_ = "";
      /**
       * <code>string rename_to = 1;</code>
       * @return The renameTo.
       */
      public java.lang.String getRenameTo() {
        java.lang.Object ref = renameTo_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          renameTo_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string rename_to = 1;</code>
       * @return The bytes for renameTo.
       */
      public com.google.protobuf.ByteString
          getRenameToBytes() {
        java.lang.Object ref = renameTo_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          renameTo_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string rename_to = 1;</code>
       * @param value The renameTo to set.
       * @return This builder for chaining.
       */
      public Builder setRenameTo(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        renameTo_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string rename_to = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearRenameTo() {
        
        renameTo_ = getDefaultInstance().getRenameTo();
        onChanged();
        return this;
      }
      /**
       * <code>string rename_to = 1;</code>
       * @param value The bytes for renameTo to set.
       * @return This builder for chaining.
       */
      public Builder setRenameToBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        renameTo_ = value;
        onChanged();
        return this;
      }

      private com.spotify.connectstate.Connect.ConnectCommandOptions commandOptions_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Connect.ConnectCommandOptions, com.spotify.connectstate.Connect.ConnectCommandOptions.Builder, com.spotify.connectstate.Connect.ConnectCommandOptionsOrBuilder> commandOptionsBuilder_;
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
       * @return Whether the commandOptions field is set.
       */
      public boolean hasCommandOptions() {
        return commandOptionsBuilder_ != null || commandOptions_ != null;
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
       * @return The commandOptions.
       */
      public com.spotify.connectstate.Connect.ConnectCommandOptions getCommandOptions() {
        if (commandOptionsBuilder_ == null) {
          return commandOptions_ == null ? com.spotify.connectstate.Connect.ConnectCommandOptions.getDefaultInstance() : commandOptions_;
        } else {
          return commandOptionsBuilder_.getMessage();
        }
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
       */
      public Builder setCommandOptions(com.spotify.connectstate.Connect.ConnectCommandOptions value) {
        if (commandOptionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          commandOptions_ = value;
          onChanged();
        } else {
          commandOptionsBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
       */
      public Builder setCommandOptions(
          com.spotify.connectstate.Connect.ConnectCommandOptions.Builder builderForValue) {
        if (commandOptionsBuilder_ == null) {
          commandOptions_ = builderForValue.build();
          onChanged();
        } else {
          commandOptionsBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
       */
      public Builder mergeCommandOptions(com.spotify.connectstate.Connect.ConnectCommandOptions value) {
        if (commandOptionsBuilder_ == null) {
          if (commandOptions_ != null) {
            commandOptions_ =
              com.spotify.connectstate.Connect.ConnectCommandOptions.newBuilder(commandOptions_).mergeFrom(value).buildPartial();
          } else {
            commandOptions_ = value;
          }
          onChanged();
        } else {
          commandOptionsBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
       */
      public Builder clearCommandOptions() {
        if (commandOptionsBuilder_ == null) {
          commandOptions_ = null;
          onChanged();
        } else {
          commandOptions_ = null;
          commandOptionsBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
       */
      public com.spotify.connectstate.Connect.ConnectCommandOptions.Builder getCommandOptionsBuilder() {
        
        onChanged();
        return getCommandOptionsFieldBuilder().getBuilder();
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
       */
      public com.spotify.connectstate.Connect.ConnectCommandOptionsOrBuilder getCommandOptionsOrBuilder() {
        if (commandOptionsBuilder_ != null) {
          return commandOptionsBuilder_.getMessageOrBuilder();
        } else {
          return commandOptions_ == null ?
              com.spotify.connectstate.Connect.ConnectCommandOptions.getDefaultInstance() : commandOptions_;
        }
      }
      /**
       * <code>.connectstate.ConnectCommandOptions command_options = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.spotify.connectstate.Connect.ConnectCommandOptions, com.spotify.connectstate.Connect.ConnectCommandOptions.Builder, com.spotify.connectstate.Connect.ConnectCommandOptionsOrBuilder> 
          getCommandOptionsFieldBuilder() {
        if (commandOptionsBuilder_ == null) {
          commandOptionsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.spotify.connectstate.Connect.ConnectCommandOptions, com.spotify.connectstate.Connect.ConnectCommandOptions.Builder, com.spotify.connectstate.Connect.ConnectCommandOptionsOrBuilder>(
                  getCommandOptions(),
                  getParentForChildren(),
                  isClean());
          commandOptions_ = null;
        }
        return commandOptionsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:connectstate.RenameCommand)
    }

    // @@protoc_insertion_point(class_scope:connectstate.RenameCommand)
    private static final com.spotify.connectstate.Connect.RenameCommand DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.connectstate.Connect.RenameCommand();
    }

    public static com.spotify.connectstate.Connect.RenameCommand getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<RenameCommand>
        PARSER = new com.google.protobuf.AbstractParser<RenameCommand>() {
      @java.lang.Override
      public RenameCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.connectstate.Connect.RenameCommand getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SetBackendMetadataCommandOrBuilder extends
      // @@protoc_insertion_point(interface_extends:connectstate.SetBackendMetadataCommand)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>map&lt;string, string&gt; metadata = 1;</code>
     */
    int getMetadataCount();
    /**
     * <code>map&lt;string, string&gt; metadata = 1;</code>
     */
    boolean containsMetadata(
        java.lang.String key);
    /**
     * Use {@link #getMetadataMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.String, java.lang.String>
    getMetadata();
    /**
     * <code>map&lt;string, string&gt; metadata = 1;</code>
     */
    java.util.Map<java.lang.String, java.lang.String>
    getMetadataMap();
    /**
     * <code>map&lt;string, string&gt; metadata = 1;</code>
     */

    java.lang.String getMetadataOrDefault(
        java.lang.String key,
        java.lang.String defaultValue);
    /**
     * <code>map&lt;string, string&gt; metadata = 1;</code>
     */

    java.lang.String getMetadataOrThrow(
        java.lang.String key);
  }
  /**
   * Protobuf type {@code connectstate.SetBackendMetadataCommand}
   */
  public  static final class SetBackendMetadataCommand extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:connectstate.SetBackendMetadataCommand)
      SetBackendMetadataCommandOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SetBackendMetadataCommand.newBuilder() to construct.
    private SetBackendMetadataCommand(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SetBackendMetadataCommand() {
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new SetBackendMetadataCommand();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_SetBackendMetadataCommand_descriptor;
    }

    @SuppressWarnings({"rawtypes"})
    @java.lang.Override
    protected com.google.protobuf.MapField internalGetMapField(
        int number) {
      switch (number) {
        case 1:
          return internalGetMetadata();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.spotify.connectstate.Connect.internal_static_connectstate_SetBackendMetadataCommand_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.spotify.connectstate.Connect.SetBackendMetadataCommand.class, com.spotify.connectstate.Connect.SetBackendMetadataCommand.Builder.class);
    }

    public static final int METADATA_FIELD_NUMBER = 1;
    private static final class MetadataDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.String, java.lang.String> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.String, java.lang.String>newDefaultInstance(
                  com.spotify.connectstate.Connect.internal_static_connectstate_SetBackendMetadataCommand_MetadataEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "",
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "");
    }
    private com.google.protobuf.MapField<
        java.lang.String, java.lang.String> metadata_;
    private com.google.protobuf.MapField<java.lang.String, java.lang.String>
    internalGetMetadata() {
      if (metadata_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            MetadataDefaultEntryHolder.defaultEntry);
      }
      return metadata_;
    }

    public int getMetadataCount() {
      return internalGetMetadata().getMap().size();
    }
    /**
     * <code>map&lt;string, string&gt; metadata = 1;</code>
     */

    public boolean containsMetadata(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      return internalGetMetadata().getMap().containsKey(key);
    }
    /**
     * Use {@link #getMetadataMap()} instead.
     */
    @java.lang.Deprecated
    public java.util.Map<java.lang.String, java.lang.String> getMetadata() {
      return getMetadataMap();
    }
    /**
     * <code>map&lt;string, string&gt; metadata = 1;</code>
     */

    public java.util.Map<java.lang.String, java.lang.String> getMetadataMap() {
      return internalGetMetadata().getMap();
    }
    /**
     * <code>map&lt;string, string&gt; metadata = 1;</code>
     */

    public java.lang.String getMetadataOrDefault(
        java.lang.String key,
        java.lang.String defaultValue) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, java.lang.String> map =
          internalGetMetadata().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <code>map&lt;string, string&gt; metadata = 1;</code>
     */

    public java.lang.String getMetadataOrThrow(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, java.lang.String> map =
          internalGetMetadata().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

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

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.spotify.connectstate.Connect.SetBackendMetadataCommand prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code connectstate.SetBackendMetadataCommand}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:connectstate.SetBackendMetadataCommand)
        com.spotify.connectstate.Connect.SetBackendMetadataCommandOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_SetBackendMetadataCommand_descriptor;
      }

      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMapField(
          int number) {
        switch (number) {
          case 1:
            return internalGetMetadata();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMutableMapField(
          int number) {
        switch (number) {
          case 1:
            return internalGetMutableMetadata();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_SetBackendMetadataCommand_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.spotify.connectstate.Connect.SetBackendMetadataCommand.class, com.spotify.connectstate.Connect.SetBackendMetadataCommand.Builder.class);
      }

      // Construct using com.spotify.connectstate.Connect.SetBackendMetadataCommand.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        internalGetMutableMetadata().clear();
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.spotify.connectstate.Connect.internal_static_connectstate_SetBackendMetadataCommand_descriptor;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.SetBackendMetadataCommand getDefaultInstanceForType() {
        return com.spotify.connectstate.Connect.SetBackendMetadataCommand.getDefaultInstance();
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.SetBackendMetadataCommand build() {
        com.spotify.connectstate.Connect.SetBackendMetadataCommand result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.spotify.connectstate.Connect.SetBackendMetadataCommand buildPartial() {
        com.spotify.connectstate.Connect.SetBackendMetadataCommand result = new com.spotify.connectstate.Connect.SetBackendMetadataCommand(this);
        int from_bitField0_ = bitField0_;
        result.metadata_ = internalGetMetadata();
        result.metadata_.makeImmutable();
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      private int bitField0_;

      private com.google.protobuf.MapField<
          java.lang.String, java.lang.String> metadata_;
      private com.google.protobuf.MapField<java.lang.String, java.lang.String>
      internalGetMetadata() {
        if (metadata_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              MetadataDefaultEntryHolder.defaultEntry);
        }
        return metadata_;
      }
      private com.google.protobuf.MapField<java.lang.String, java.lang.String>
      internalGetMutableMetadata() {
        onChanged();;
        if (metadata_ == null) {
          metadata_ = com.google.protobuf.MapField.newMapField(
              MetadataDefaultEntryHolder.defaultEntry);
        }
        if (!metadata_.isMutable()) {
          metadata_ = metadata_.copy();
        }
        return metadata_;
      }

      public int getMetadataCount() {
        return internalGetMetadata().getMap().size();
      }
      /**
       * <code>map&lt;string, string&gt; metadata = 1;</code>
       */

      public boolean containsMetadata(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        return internalGetMetadata().getMap().containsKey(key);
      }
      /**
       * Use {@link #getMetadataMap()} instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, java.lang.String> getMetadata() {
        return getMetadataMap();
      }
      /**
       * <code>map&lt;string, string&gt; metadata = 1;</code>
       */

      public java.util.Map<java.lang.String, java.lang.String> getMetadataMap() {
        return internalGetMetadata().getMap();
      }
      /**
       * <code>map&lt;string, string&gt; metadata = 1;</code>
       */

      public java.lang.String getMetadataOrDefault(
          java.lang.String key,
          java.lang.String defaultValue) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, java.lang.String> map =
            internalGetMetadata().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <code>map&lt;string, string&gt; metadata = 1;</code>
       */

      public java.lang.String getMetadataOrThrow(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, java.lang.String> map =
            internalGetMetadata().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearMetadata() {
        internalGetMutableMetadata().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <code>map&lt;string, string&gt; metadata = 1;</code>
       */

      public Builder removeMetadata(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableMetadata().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, java.lang.String>
      getMutableMetadata() {
        return internalGetMutableMetadata().getMutableMap();
      }
      /**
       * <code>map&lt;string, string&gt; metadata = 1;</code>
       */
      public Builder putMetadata(
          java.lang.String key,
          java.lang.String value) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        if (value == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableMetadata().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <code>map&lt;string, string&gt; metadata = 1;</code>
       */

      public Builder putAllMetadata(
          java.util.Map<java.lang.String, java.lang.String> values) {
        internalGetMutableMetadata().getMutableMap()
            .putAll(values);
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:connectstate.SetBackendMetadataCommand)
    }

    // @@protoc_insertion_point(class_scope:connectstate.SetBackendMetadataCommand)
    private static final com.spotify.connectstate.Connect.SetBackendMetadataCommand DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.spotify.connectstate.Connect.SetBackendMetadataCommand();
    }

    public static com.spotify.connectstate.Connect.SetBackendMetadataCommand getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<SetBackendMetadataCommand>
        PARSER = new com.google.protobuf.AbstractParser<SetBackendMetadataCommand>() {
      @java.lang.Override
      public SetBackendMetadataCommand parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(
                  builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public com.spotify.connectstate.Connect.SetBackendMetadataCommand getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_connectstate_ClusterUpdate_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_connectstate_ClusterUpdate_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_connectstate_Device_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_connectstate_Device_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_connectstate_Cluster_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_connectstate_Cluster_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_connectstate_Cluster_DeviceEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_connectstate_Cluster_DeviceEntry_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_connectstate_PutStateRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_connectstate_PutStateRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_connectstate_PrivateDeviceInfo_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_connectstate_PrivateDeviceInfo_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_connectstate_SubscribeRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_connectstate_SubscribeRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_connectstate_DeviceInfo_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_connectstate_DeviceInfo_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_connectstate_DeviceInfo_MetadataMapEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_connectstate_DeviceInfo_MetadataMapEntry_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_connectstate_Capabilities_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_connectstate_Capabilities_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_connectstate_ConnectCommandOptions_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_connectstate_ConnectCommandOptions_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_connectstate_LogoutCommand_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_connectstate_LogoutCommand_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_connectstate_SetVolumeCommand_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_connectstate_SetVolumeCommand_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_connectstate_RenameCommand_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_connectstate_RenameCommand_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_connectstate_SetBackendMetadataCommand_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_connectstate_SetBackendMetadataCommand_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_connectstate_SetBackendMetadataCommand_MetadataEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_connectstate_SetBackendMetadataCommand_MetadataEntry_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n\rconnect.proto\022\014connectstate\032\014player.pr" +
      "oto\"\237\001\n\rClusterUpdate\022&\n\007cluster\030\001 \001(\0132\025" +
      ".connectstate.Cluster\0228\n\rupdate_reason\030\002" +
      " \001(\0162!.connectstate.ClusterUpdateReason\022" +
      "\016\n\006ack_id\030\003 \001(\t\022\034\n\024devices_that_changed\030" +
      "\004 \003(\t\"\246\001\n\006Device\022-\n\013device_info\030\001 \001(\0132\030." +
      "connectstate.DeviceInfo\022/\n\014player_state\030" +
      "\002 \001(\0132\031.connectstate.PlayerState\022<\n\023priv" +
      "ate_device_info\030\003 \001(\0132\037.connectstate.Pri" +
      "vateDeviceInfo\"\372\001\n\007Cluster\022\021\n\ttimestamp\030" +
      "\001 \001(\003\022\030\n\020active_device_id\030\002 \001(\t\022/\n\014playe" +
      "r_state\030\003 \001(\0132\031.connectstate.PlayerState" +
      "\0221\n\006device\030\004 \003(\0132!.connectstate.Cluster." +
      "DeviceEntry\022\025\n\rtransfer_data\030\005 \001(\014\032G\n\013De" +
      "viceEntry\022\013\n\003key\030\001 \001(\t\022\'\n\005value\030\002 \001(\0132\030." +
      "connectstate.DeviceInfo:\0028\001\"\241\003\n\017PutState" +
      "Request\022\024\n\014callback_url\030\001 \001(\t\022$\n\006device\030" +
      "\002 \001(\0132\024.connectstate.Device\022-\n\013member_ty" +
      "pe\030\003 \001(\0162\030.connectstate.MemberType\022\021\n\tis" +
      "_active\030\004 \001(\010\0226\n\020put_state_reason\030\005 \001(\0162" +
      "\034.connectstate.PutStateReason\022\022\n\nmessage" +
      "_id\030\006 \001(\r\022&\n\036last_command_sent_by_device" +
      "_id\030\007 \001(\t\022\037\n\027last_command_message_id\030\010 \001" +
      "(\r\022\032\n\022started_playing_at\030\t \001(\004\022\037\n\027has_be" +
      "en_playing_for_ms\030\013 \001(\004\022\035\n\025client_side_t" +
      "imestamp\030\014 \001(\004\022\037\n\027only_write_player_stat" +
      "e\030\r \001(\010\"%\n\021PrivateDeviceInfo\022\020\n\010platform" +
      "\030\001 \001(\t\"(\n\020SubscribeRequest\022\024\n\014callback_u" +
      "rl\030\001 \001(\t\"\305\003\n\nDeviceInfo\022\020\n\010can_play\030\001 \001(" +
      "\010\022\016\n\006volume\030\002 \001(\r\022\014\n\004name\030\003 \001(\t\0220\n\014capab" +
      "ilities\030\004 \001(\0132\032.connectstate.Capabilitie" +
      "s\022\037\n\027device_software_version\030\006 \001(\t\022-\n\013de" +
      "vice_type\030\007 \001(\0162\030.connectstate.DeviceTyp" +
      "e\022\025\n\rspirc_version\030\t \001(\t\022\021\n\tdevice_id\030\n " +
      "\001(\t\022\032\n\022is_private_session\030\013 \001(\010\022\031\n\021is_so" +
      "cial_connect\030\014 \001(\010\022\021\n\tclient_id\030\r \001(\t\022\r\n" +
      "\005brand\030\016 \001(\t\022\r\n\005model\030\017 \001(\t\022?\n\014metadata_" +
      "map\030\020 \003(\0132).connectstate.DeviceInfo.Meta" +
      "dataMapEntry\0322\n\020MetadataMapEntry\022\013\n\003key\030" +
      "\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"\314\004\n\014Capabilitie" +
      "s\022\025\n\rcan_be_player\030\002 \001(\010\022\031\n\021restrict_to_" +
      "local\030\003 \001(\010\022\032\n\022gaia_eq_connect_id\030\005 \001(\010\022" +
      "\027\n\017supports_logout\030\006 \001(\010\022\025\n\ris_observabl" +
      "e\030\007 \001(\010\022\024\n\014volume_steps\030\010 \001(\005\022\027\n\017support" +
      "ed_types\030\t \003(\t\022\024\n\014command_acks\030\n \001(\010\022\027\n\017" +
      "supports_rename\030\013 \001(\010\022\016\n\006hidden\030\014 \001(\010\022\026\n" +
      "\016disable_volume\030\r \001(\010\022\030\n\020connect_disable" +
      "d\030\016 \001(\010\022\034\n\024supports_playlist_v2\030\017 \001(\010\022\027\n" +
      "\017is_controllable\030\020 \001(\010\022\"\n\032supports_exter" +
      "nal_episodes\030\021 \001(\010\022%\n\035supports_set_backe" +
      "nd_metadata\030\022 \001(\010\022!\n\031supports_transfer_c" +
      "ommand\030\023 \001(\010\022 \n\030supports_command_request" +
      "\030\024 \001(\010\022\030\n\020is_voice_enabled\030\025 \001(\010\022\037\n\027need" +
      "s_full_player_state\030\026 \001(\010\022\034\n\024supports_gz" +
      "ip_pushes\030\027 \001(\010\"+\n\025ConnectCommandOptions" +
      "\022\022\n\nmessage_id\030\001 \001(\005\"M\n\rLogoutCommand\022<\n" +
      "\017command_options\030\001 \001(\0132#.connectstate.Co" +
      "nnectCommandOptions\"`\n\020SetVolumeCommand\022" +
      "\016\n\006volume\030\001 \001(\005\022<\n\017command_options\030\002 \001(\013" +
      "2#.connectstate.ConnectCommandOptions\"`\n" +
      "\rRenameCommand\022\021\n\trename_to\030\001 \001(\t\022<\n\017com" +
      "mand_options\030\002 \001(\0132#.connectstate.Connec" +
      "tCommandOptions\"\225\001\n\031SetBackendMetadataCo" +
      "mmand\022G\n\010metadata\030\001 \003(\01325.connectstate.S" +
      "etBackendMetadataCommand.MetadataEntry\032/" +
      "\n\rMetadataEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 " +
      "\001(\t:\0028\001*\324\001\n\021SendCommandResult\022\037\n\033UNKNOWN" +
      "_SEND_COMMAND_RESULT\020\000\022\013\n\007SUCCESS\020\001\022\024\n\020D" +
      "EVICE_NOT_FOUND\020\002\022\030\n\024CONTEXT_PLAYER_ERRO" +
      "R\020\003\022\026\n\022DEVICE_DISAPPEARED\020\004\022\022\n\016UPSTREAM_" +
      "ERROR\020\005\022#\n\037DEVICE_DOES_NOT_SUPPORT_COMMA" +
      "ND\020\006\022\020\n\014RATE_LIMITED\020\007*\267\001\n\016PutStateReaso" +
      "n\022\034\n\030UNKNOWN_PUT_STATE_REASON\020\000\022\017\n\013SPIRC" +
      "_HELLO\020\001\022\020\n\014SPIRC_NOTIFY\020\002\022\016\n\nNEW_DEVICE" +
      "\020\003\022\030\n\024PLAYER_STATE_CHANGED\020\004\022\022\n\016VOLUME_C" +
      "HANGED\020\005\022\021\n\rPICKER_OPENED\020\006\022\023\n\017BECAME_IN" +
      "ACTIVE\020\007*;\n\nMemberType\022\014\n\010SPIRC_V2\020\000\022\014\n\010" +
      "SPIRC_V3\020\001\022\021\n\rCONNECT_STATE\020\002*\204\001\n\023Cluste" +
      "rUpdateReason\022!\n\035UNKNOWN_CLUSTER_UPDATE_" +
      "REASON\020\000\022\027\n\023DEVICES_DISAPPEARED\020\001\022\030\n\024DEV" +
      "ICE_STATE_CHANGED\020\002\022\027\n\023NEW_DEVICE_APPEAR" +
      "ED\020\003*\240\002\n\nDeviceType\022\013\n\007UNKNOWN\020\000\022\014\n\010COMP" +
      "UTER\020\001\022\n\n\006TABLET\020\002\022\016\n\nSMARTPHONE\020\003\022\013\n\007SP" +
      "EAKER\020\004\022\006\n\002TV\020\005\022\007\n\003AVR\020\006\022\007\n\003STB\020\007\022\020\n\014AUD" +
      "IO_DONGLE\020\010\022\020\n\014GAME_CONSOLE\020\t\022\016\n\nCAST_VI" +
      "DEO\020\n\022\016\n\nCAST_AUDIO\020\013\022\016\n\nAUTOMOBILE\020\014\022\016\n" +
      "\nSMARTWATCH\020\r\022\016\n\nCHROMEBOOK\020\016\022\023\n\017UNKNOWN" +
      "_SPOTIFY\020d\022\r\n\tCAR_THING\020e\022\014\n\010OBSERVER\020f\022" +
      "\016\n\nHOME_THING\020gB\034\n\030com.spotify.connectst" +
      "ateH\002b\006proto3"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
          com.spotify.connectstate.Player.getDescriptor(),
        });
    internal_static_connectstate_ClusterUpdate_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_connectstate_ClusterUpdate_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_connectstate_ClusterUpdate_descriptor,
        new java.lang.String[] { "Cluster", "UpdateReason", "AckId", "DevicesThatChanged", });
    internal_static_connectstate_Device_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_connectstate_Device_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_connectstate_Device_descriptor,
        new java.lang.String[] { "DeviceInfo", "PlayerState", "PrivateDeviceInfo", });
    internal_static_connectstate_Cluster_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_connectstate_Cluster_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_connectstate_Cluster_descriptor,
        new java.lang.String[] { "Timestamp", "ActiveDeviceId", "PlayerState", "Device", "TransferData", });
    internal_static_connectstate_Cluster_DeviceEntry_descriptor =
      internal_static_connectstate_Cluster_descriptor.getNestedTypes().get(0);
    internal_static_connectstate_Cluster_DeviceEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_connectstate_Cluster_DeviceEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_connectstate_PutStateRequest_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_connectstate_PutStateRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_connectstate_PutStateRequest_descriptor,
        new java.lang.String[] { "CallbackUrl", "Device", "MemberType", "IsActive", "PutStateReason", "MessageId", "LastCommandSentByDeviceId", "LastCommandMessageId", "StartedPlayingAt", "HasBeenPlayingForMs", "ClientSideTimestamp", "OnlyWritePlayerState", });
    internal_static_connectstate_PrivateDeviceInfo_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_connectstate_PrivateDeviceInfo_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_connectstate_PrivateDeviceInfo_descriptor,
        new java.lang.String[] { "Platform", });
    internal_static_connectstate_SubscribeRequest_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_connectstate_SubscribeRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_connectstate_SubscribeRequest_descriptor,
        new java.lang.String[] { "CallbackUrl", });
    internal_static_connectstate_DeviceInfo_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_connectstate_DeviceInfo_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_connectstate_DeviceInfo_descriptor,
        new java.lang.String[] { "CanPlay", "Volume", "Name", "Capabilities", "DeviceSoftwareVersion", "DeviceType", "SpircVersion", "DeviceId", "IsPrivateSession", "IsSocialConnect", "ClientId", "Brand", "Model", "MetadataMap", });
    internal_static_connectstate_DeviceInfo_MetadataMapEntry_descriptor =
      internal_static_connectstate_DeviceInfo_descriptor.getNestedTypes().get(0);
    internal_static_connectstate_DeviceInfo_MetadataMapEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_connectstate_DeviceInfo_MetadataMapEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_connectstate_Capabilities_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_connectstate_Capabilities_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_connectstate_Capabilities_descriptor,
        new java.lang.String[] { "CanBePlayer", "RestrictToLocal", "GaiaEqConnectId", "SupportsLogout", "IsObservable", "VolumeSteps", "SupportedTypes", "CommandAcks", "SupportsRename", "Hidden", "DisableVolume", "ConnectDisabled", "SupportsPlaylistV2", "IsControllable", "SupportsExternalEpisodes", "SupportsSetBackendMetadata", "SupportsTransferCommand", "SupportsCommandRequest", "IsVoiceEnabled", "NeedsFullPlayerState", "SupportsGzipPushes", });
    internal_static_connectstate_ConnectCommandOptions_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_connectstate_ConnectCommandOptions_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_connectstate_ConnectCommandOptions_descriptor,
        new java.lang.String[] { "MessageId", });
    internal_static_connectstate_LogoutCommand_descriptor =
      getDescriptor().getMessageTypes().get(9);
    internal_static_connectstate_LogoutCommand_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_connectstate_LogoutCommand_descriptor,
        new java.lang.String[] { "CommandOptions", });
    internal_static_connectstate_SetVolumeCommand_descriptor =
      getDescriptor().getMessageTypes().get(10);
    internal_static_connectstate_SetVolumeCommand_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_connectstate_SetVolumeCommand_descriptor,
        new java.lang.String[] { "Volume", "CommandOptions", });
    internal_static_connectstate_RenameCommand_descriptor =
      getDescriptor().getMessageTypes().get(11);
    internal_static_connectstate_RenameCommand_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_connectstate_RenameCommand_descriptor,
        new java.lang.String[] { "RenameTo", "CommandOptions", });
    internal_static_connectstate_SetBackendMetadataCommand_descriptor =
      getDescriptor().getMessageTypes().get(12);
    internal_static_connectstate_SetBackendMetadataCommand_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_connectstate_SetBackendMetadataCommand_descriptor,
        new java.lang.String[] { "Metadata", });
    internal_static_connectstate_SetBackendMetadataCommand_MetadataEntry_descriptor =
      internal_static_connectstate_SetBackendMetadataCommand_descriptor.getNestedTypes().get(0);
    internal_static_connectstate_SetBackendMetadataCommand_MetadataEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_connectstate_SetBackendMetadataCommand_MetadataEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
    com.spotify.connectstate.Player.getDescriptor();
  }

  // @@protoc_insertion_point(outer_class_scope)
}
