// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: keyapis/invoice/v1/keyapis_invoice_invoice_v1.proto

package ru.keyapis.invoice.v1;

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

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  public interface InvoiceOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.Invoice)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Идентификатор платежа.
     * # Тип: Guid
     * </pre>
     *
     * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The id.
     */
    java.lang.String getId();
    /**
     * <pre>
     * Идентификатор платежа.
     * # Тип: Guid
     * </pre>
     *
     * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for id.
     */
    com.google.protobuf.ByteString
        getIdBytes();

    /**
     * <pre>
     * Описание платежа
     * </pre>
     *
     * <code>string title = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The title.
     */
    java.lang.String getTitle();
    /**
     * <pre>
     * Описание платежа
     * </pre>
     *
     * <code>string title = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for title.
     */
    com.google.protobuf.ByteString
        getTitleBytes();

    /**
     * <pre>
     * Идентификатор пользователя
     * </pre>
     *
     * <code>int32 user_id = 3 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The userId.
     */
    int getUserId();

    /**
     * <pre>
     * Статус платежа
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.InvoiceStatusType invoice_status_type = 4 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The enum numeric value on the wire for invoiceStatusType.
     */
    int getInvoiceStatusTypeValue();
    /**
     * <pre>
     * Статус платежа
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.InvoiceStatusType invoice_status_type = 4 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The invoiceStatusType.
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType getInvoiceStatusType();

    /**
     * <pre>
     * Дата создания платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp created_at = 5 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return Whether the createdAt field is set.
     */
    boolean hasCreatedAt();
    /**
     * <pre>
     * Дата создания платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp created_at = 5 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The createdAt.
     */
    com.google.protobuf.Timestamp getCreatedAt();
    /**
     * <pre>
     * Дата создания платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp created_at = 5 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    com.google.protobuf.TimestampOrBuilder getCreatedAtOrBuilder();

    /**
     * <pre>
     * Дата обновления платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp updated_at = 6 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return Whether the updatedAt field is set.
     */
    boolean hasUpdatedAt();
    /**
     * <pre>
     * Дата обновления платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp updated_at = 6 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The updatedAt.
     */
    com.google.protobuf.Timestamp getUpdatedAt();
    /**
     * <pre>
     * Дата обновления платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp updated_at = 6 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    com.google.protobuf.TimestampOrBuilder getUpdatedAtOrBuilder();

    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    java.util.List<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position> 
        getPositionsList();
    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position getPositions(int index);
    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    int getPositionsCount();
    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    java.util.List<? extends ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PositionOrBuilder> 
        getPositionsOrBuilderList();
    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PositionOrBuilder getPositionsOrBuilder(
        int index);

    /**
     * <pre>
     * Метод платежа
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.PayInterfaceType pay_interface_type = 8;</code>
     * @return The enum numeric value on the wire for payInterfaceType.
     */
    int getPayInterfaceTypeValue();
    /**
     * <pre>
     * Метод платежа
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.PayInterfaceType pay_interface_type = 8;</code>
     * @return The payInterfaceType.
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType getPayInterfaceType();

    /**
     * <pre>
     * Способ оплаты
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.PaywayType payway_type = 9;</code>
     * @return The enum numeric value on the wire for paywayType.
     */
    int getPaywayTypeValue();
    /**
     * <pre>
     * Способ оплаты
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.PaywayType payway_type = 9;</code>
     * @return The paywayType.
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType getPaywayType();

    /**
     * <pre>
     * Дата изменения статуса платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp status_changed_at = 10;</code>
     * @return Whether the statusChangedAt field is set.
     */
    boolean hasStatusChangedAt();
    /**
     * <pre>
     * Дата изменения статуса платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp status_changed_at = 10;</code>
     * @return The statusChangedAt.
     */
    com.google.protobuf.Timestamp getStatusChangedAt();
    /**
     * <pre>
     * Дата изменения статуса платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp status_changed_at = 10;</code>
     */
    com.google.protobuf.TimestampOrBuilder getStatusChangedAtOrBuilder();

    /**
     * <pre>
     * Дата платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp paid_at = 11;</code>
     * @return Whether the paidAt field is set.
     */
    boolean hasPaidAt();
    /**
     * <pre>
     * Дата платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp paid_at = 11;</code>
     * @return The paidAt.
     */
    com.google.protobuf.Timestamp getPaidAt();
    /**
     * <pre>
     * Дата платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp paid_at = 11;</code>
     */
    com.google.protobuf.TimestampOrBuilder getPaidAtOrBuilder();

    /**
     * <pre>
     * Платежная ссылка
     * </pre>
     *
     * <code>string pay_url = 12;</code>
     * @return The payUrl.
     */
    java.lang.String getPayUrl();
    /**
     * <pre>
     * Платежная ссылка
     * </pre>
     *
     * <code>string pay_url = 12;</code>
     * @return The bytes for payUrl.
     */
    com.google.protobuf.ByteString
        getPayUrlBytes();

    /**
     * <pre>
     * Маскированный номер карты при платеже
     * </pre>
     *
     * <code>string paid_by_card_masked = 13;</code>
     * @return The paidByCardMasked.
     */
    java.lang.String getPaidByCardMasked();
    /**
     * <pre>
     * Маскированный номер карты при платеже
     * </pre>
     *
     * <code>string paid_by_card_masked = 13;</code>
     * @return The bytes for paidByCardMasked.
     */
    com.google.protobuf.ByteString
        getPaidByCardMaskedBytes();

    /**
     * <pre>
     * Идентификатор платежного средства в внешней системы
     * </pre>
     *
     * <code>string paid_by_card_espp_id = 14;</code>
     * @return The paidByCardEsppId.
     */
    java.lang.String getPaidByCardEsppId();
    /**
     * <pre>
     * Идентификатор платежного средства в внешней системы
     * </pre>
     *
     * <code>string paid_by_card_espp_id = 14;</code>
     * @return The bytes for paidByCardEsppId.
     */
    com.google.protobuf.ByteString
        getPaidByCardEsppIdBytes();

    /**
     * <pre>
     * Тип банковской карты
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.CardType card_type = 15;</code>
     * @return The enum numeric value on the wire for cardType.
     */
    int getCardTypeValue();
    /**
     * <pre>
     * Тип банковской карты
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.CardType card_type = 15;</code>
     * @return The cardType.
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.CardType getCardType();

    /**
     * <pre>
     * Код ошибки внешней системы
     * </pre>
     *
     * <code>int32 espp_req_status = 16;</code>
     * @return The esppReqStatus.
     */
    int getEsppReqStatus();

    /**
     * <pre>
     * Комментарий к статусу платежа из внешней системы
     * </pre>
     *
     * <code>string espp_req_user_msg = 17;</code>
     * @return The esppReqUserMsg.
     */
    java.lang.String getEsppReqUserMsg();
    /**
     * <pre>
     * Комментарий к статусу платежа из внешней системы
     * </pre>
     *
     * <code>string espp_req_user_msg = 17;</code>
     * @return The bytes for esppReqUserMsg.
     */
    com.google.protobuf.ByteString
        getEsppReqUserMsgBytes();

    /**
     * <pre>
     * Уникальный номер транзакции в внешней системы
     * </pre>
     *
     * <code>string espp_invoice_id = 18;</code>
     * @return The esppInvoiceId.
     */
    java.lang.String getEsppInvoiceId();
    /**
     * <pre>
     * Уникальный номер транзакции в внешней системы
     * </pre>
     *
     * <code>string espp_invoice_id = 18;</code>
     * @return The bytes for esppInvoiceId.
     */
    com.google.protobuf.ByteString
        getEsppInvoiceIdBytes();

    /**
     * <pre>
     * Номер телефона
     * </pre>
     *
     * <code>string phone_number = 19;</code>
     * @return The phoneNumber.
     */
    java.lang.String getPhoneNumber();
    /**
     * <pre>
     * Номер телефона
     * </pre>
     *
     * <code>string phone_number = 19;</code>
     * @return The bytes for phoneNumber.
     */
    com.google.protobuf.ByteString
        getPhoneNumberBytes();

    /**
     * <pre>
     * Электронная почта
     * </pre>
     *
     * <code>string email = 20;</code>
     * @return The email.
     */
    java.lang.String getEmail();
    /**
     * <pre>
     * Электронная почта
     * </pre>
     *
     * <code>string email = 20;</code>
     * @return The bytes for email.
     */
    com.google.protobuf.ByteString
        getEmailBytes();
  }
  /**
   * <pre>
   * Выставленный счёт
   * </pre>
   *
   * Protobuf type {@code keyapis.invoice.v1.Invoice}
   */
  public static final class Invoice extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.Invoice)
      InvoiceOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Invoice.newBuilder() to construct.
    private Invoice(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Invoice() {
      id_ = "";
      title_ = "";
      invoiceStatusType_ = 0;
      positions_ = java.util.Collections.emptyList();
      payInterfaceType_ = 0;
      paywayType_ = 0;
      payUrl_ = "";
      paidByCardMasked_ = "";
      paidByCardEsppId_ = "";
      cardType_ = 0;
      esppReqUserMsg_ = "";
      esppInvoiceId_ = "";
      phoneNumber_ = "";
      email_ = "";
    }

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

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder.class);
    }

    /**
     * <pre>
     * Справочник типов статусов оплаты счёта
     * </pre>
     *
     * Protobuf enum {@code keyapis.invoice.v1.Invoice.InvoiceStatusType}
     */
    public enum InvoiceStatusType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <pre>
       * Значение не указано
       * </pre>
       *
       * <code>INVOICE_STATUS_TYPE_UNKNOWN = 0;</code>
       */
      INVOICE_STATUS_TYPE_UNKNOWN(0),
      /**
       * <pre>
       * Создан, ожидает подтверждения
       * </pre>
       *
       * <code>PLANNED = 1;</code>
       */
      PLANNED(1),
      /**
       * <pre>
       * Ожидает оплаты
       * </pre>
       *
       * <code>PENDING = 2;</code>
       */
      PENDING(2),
      /**
       * <pre>
       * Ошибка оплаты
       * </pre>
       *
       * <code>ERROR = 3;</code>
       */
      ERROR(3),
      /**
       * <pre>
       * Оплачен
       * </pre>
       *
       * <code>PAID = 4;</code>
       */
      PAID(4),
      /**
       * <pre>
       * Отменен
       * </pre>
       *
       * <code>CANCELLED = 5;</code>
       */
      CANCELLED(5),
      UNRECOGNIZED(-1),
      ;

      /**
       * <pre>
       * Значение не указано
       * </pre>
       *
       * <code>INVOICE_STATUS_TYPE_UNKNOWN = 0;</code>
       */
      public static final int INVOICE_STATUS_TYPE_UNKNOWN_VALUE = 0;
      /**
       * <pre>
       * Создан, ожидает подтверждения
       * </pre>
       *
       * <code>PLANNED = 1;</code>
       */
      public static final int PLANNED_VALUE = 1;
      /**
       * <pre>
       * Ожидает оплаты
       * </pre>
       *
       * <code>PENDING = 2;</code>
       */
      public static final int PENDING_VALUE = 2;
      /**
       * <pre>
       * Ошибка оплаты
       * </pre>
       *
       * <code>ERROR = 3;</code>
       */
      public static final int ERROR_VALUE = 3;
      /**
       * <pre>
       * Оплачен
       * </pre>
       *
       * <code>PAID = 4;</code>
       */
      public static final int PAID_VALUE = 4;
      /**
       * <pre>
       * Отменен
       * </pre>
       *
       * <code>CANCELLED = 5;</code>
       */
      public static final int CANCELLED_VALUE = 5;


      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 InvoiceStatusType 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 InvoiceStatusType forNumber(int value) {
        switch (value) {
          case 0: return INVOICE_STATUS_TYPE_UNKNOWN;
          case 1: return PLANNED;
          case 2: return PENDING;
          case 3: return ERROR;
          case 4: return PAID;
          case 5: return CANCELLED;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalStateException(
              "Can't get the descriptor of an unrecognized enum value.");
        }
        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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDescriptor().getEnumTypes().get(0);
      }

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

      public static InvoiceStatusType 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 InvoiceStatusType(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:keyapis.invoice.v1.Invoice.InvoiceStatusType)
    }

    /**
     * <pre>
     * Справочник банковских карт
     * </pre>
     *
     * Protobuf enum {@code keyapis.invoice.v1.Invoice.CardType}
     */
    public enum CardType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <pre>
       * Значение не указано
       * </pre>
       *
       * <code>CARD_TYPE_UNKNOWN = 0;</code>
       */
      CARD_TYPE_UNKNOWN(0),
      /**
       * <pre>
       * Карта VISA
       * </pre>
       *
       * <code>VISA = 1;</code>
       */
      VISA(1),
      /**
       * <pre>
       * Карта EuroCard/MasterCard
       * </pre>
       *
       * <code>EC_MC = 2;</code>
       */
      EC_MC(2),
      /**
       * <pre>
       * Карта DinersClub
       * </pre>
       *
       * <code>DCL = 3;</code>
       */
      DCL(3),
      /**
       * <pre>
       * Карта JCB
       * </pre>
       *
       * <code>JCB = 4;</code>
       */
      JCB(4),
      /**
       * <pre>
       * Карта American Express
       * </pre>
       *
       * <code>AMEX = 5;</code>
       */
      AMEX(5),
      /**
       * <pre>
       * Платежная система "Мир"
       * </pre>
       *
       * <code>MIR = 6;</code>
       */
      MIR(6),
      UNRECOGNIZED(-1),
      ;

      /**
       * <pre>
       * Значение не указано
       * </pre>
       *
       * <code>CARD_TYPE_UNKNOWN = 0;</code>
       */
      public static final int CARD_TYPE_UNKNOWN_VALUE = 0;
      /**
       * <pre>
       * Карта VISA
       * </pre>
       *
       * <code>VISA = 1;</code>
       */
      public static final int VISA_VALUE = 1;
      /**
       * <pre>
       * Карта EuroCard/MasterCard
       * </pre>
       *
       * <code>EC_MC = 2;</code>
       */
      public static final int EC_MC_VALUE = 2;
      /**
       * <pre>
       * Карта DinersClub
       * </pre>
       *
       * <code>DCL = 3;</code>
       */
      public static final int DCL_VALUE = 3;
      /**
       * <pre>
       * Карта JCB
       * </pre>
       *
       * <code>JCB = 4;</code>
       */
      public static final int JCB_VALUE = 4;
      /**
       * <pre>
       * Карта American Express
       * </pre>
       *
       * <code>AMEX = 5;</code>
       */
      public static final int AMEX_VALUE = 5;
      /**
       * <pre>
       * Платежная система "Мир"
       * </pre>
       *
       * <code>MIR = 6;</code>
       */
      public static final int MIR_VALUE = 6;


      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 CardType 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 CardType forNumber(int value) {
        switch (value) {
          case 0: return CARD_TYPE_UNKNOWN;
          case 1: return VISA;
          case 2: return EC_MC;
          case 3: return DCL;
          case 4: return JCB;
          case 5: return AMEX;
          case 6: return MIR;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalStateException(
              "Can't get the descriptor of an unrecognized enum value.");
        }
        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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDescriptor().getEnumTypes().get(1);
      }

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

      public static CardType 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 CardType(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:keyapis.invoice.v1.Invoice.CardType)
    }

    /**
     * <pre>
     * Справочник методов платежа
     * </pre>
     *
     * Protobuf enum {@code keyapis.invoice.v1.Invoice.PayInterfaceType}
     */
    public enum PayInterfaceType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <pre>
       * Значение не указано
       * </pre>
       *
       * <code>PAY_INTERFACE_TYPE_UNKNOWN = 0;</code>
       */
      PAY_INTERFACE_TYPE_UNKNOWN(0),
      /**
       * <pre>
       * Оплата через интерфейс предпроцессинга
       * </pre>
       *
       * <code>GUI = 1;</code>
       */
      GUI(1),
      /**
       * <pre>
       * Оплата с использованием ранее созданного способа платежа, настроенного по умолчанию
       * </pre>
       *
       * <code>M2M = 2;</code>
       */
      M2M(2),
      UNRECOGNIZED(-1),
      ;

      /**
       * <pre>
       * Значение не указано
       * </pre>
       *
       * <code>PAY_INTERFACE_TYPE_UNKNOWN = 0;</code>
       */
      public static final int PAY_INTERFACE_TYPE_UNKNOWN_VALUE = 0;
      /**
       * <pre>
       * Оплата через интерфейс предпроцессинга
       * </pre>
       *
       * <code>GUI = 1;</code>
       */
      public static final int GUI_VALUE = 1;
      /**
       * <pre>
       * Оплата с использованием ранее созданного способа платежа, настроенного по умолчанию
       * </pre>
       *
       * <code>M2M = 2;</code>
       */
      public static final int M2M_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 PayInterfaceType 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 PayInterfaceType forNumber(int value) {
        switch (value) {
          case 0: return PAY_INTERFACE_TYPE_UNKNOWN;
          case 1: return GUI;
          case 2: return M2M;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalStateException(
              "Can't get the descriptor of an unrecognized enum value.");
        }
        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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDescriptor().getEnumTypes().get(2);
      }

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

      public static PayInterfaceType 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 PayInterfaceType(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:keyapis.invoice.v1.Invoice.PayInterfaceType)
    }

    /**
     * <pre>
     * Справочник типов платежных средств
     * </pre>
     *
     * Protobuf enum {@code keyapis.invoice.v1.Invoice.PaywayType}
     */
    public enum PaywayType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <pre>
       * Значение не указано
       * </pre>
       *
       * <code>PAYWAY_TYPE_UNKNOWN = 0;</code>
       */
      PAYWAY_TYPE_UNKNOWN(0),
      /**
       * <pre>
       * Банковская карта
       * </pre>
       *
       * <code>BANK_CARD = 1;</code>
       */
      BANK_CARD(1),
      /**
       * <pre>
       * Сервис быстрых платежей
       * </pre>
       *
       * <code>SBP = 2;</code>
       */
      SBP(2),
      /**
       * <pre>
       * Связка Сбербанка
       * </pre>
       *
       * <code>SBER_PAY = 3;</code>
       */
      SBER_PAY(3),
      UNRECOGNIZED(-1),
      ;

      /**
       * <pre>
       * Значение не указано
       * </pre>
       *
       * <code>PAYWAY_TYPE_UNKNOWN = 0;</code>
       */
      public static final int PAYWAY_TYPE_UNKNOWN_VALUE = 0;
      /**
       * <pre>
       * Банковская карта
       * </pre>
       *
       * <code>BANK_CARD = 1;</code>
       */
      public static final int BANK_CARD_VALUE = 1;
      /**
       * <pre>
       * Сервис быстрых платежей
       * </pre>
       *
       * <code>SBP = 2;</code>
       */
      public static final int SBP_VALUE = 2;
      /**
       * <pre>
       * Связка Сбербанка
       * </pre>
       *
       * <code>SBER_PAY = 3;</code>
       */
      public static final int SBER_PAY_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 PaywayType 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 PaywayType forNumber(int value) {
        switch (value) {
          case 0: return PAYWAY_TYPE_UNKNOWN;
          case 1: return BANK_CARD;
          case 2: return SBP;
          case 3: return SBER_PAY;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalStateException(
              "Can't get the descriptor of an unrecognized enum value.");
        }
        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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDescriptor().getEnumTypes().get(3);
      }

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

      public static PaywayType 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 PaywayType(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:keyapis.invoice.v1.Invoice.PaywayType)
    }

    public interface ExternalErrorOrBuilder extends
        // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.Invoice.ExternalError)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * Запрос к внешней системе вернул ошибку или прекращен по таймауту
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError external_system_error = 1;</code>
       * @return Whether the externalSystemError field is set.
       */
      boolean hasExternalSystemError();
      /**
       * <pre>
       * Запрос к внешней системе вернул ошибку или прекращен по таймауту
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError external_system_error = 1;</code>
       * @return The externalSystemError.
       */
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError getExternalSystemError();
      /**
       * <pre>
       * Запрос к внешней системе вернул ошибку или прекращен по таймауту
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError external_system_error = 1;</code>
       */
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemErrorOrBuilder getExternalSystemErrorOrBuilder();

      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ReasonCase getReasonCase();
    }
    /**
     * <pre>
     * Ошибки внешней системы
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.Invoice.ExternalError}
     */
    public static final class ExternalError extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.Invoice.ExternalError)
        ExternalErrorOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use ExternalError.newBuilder() to construct.
      private ExternalError(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private ExternalError() {
      }

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

      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_ExternalError_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_ExternalError_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.Builder.class);
      }

      public interface ExternalSystemErrorOrBuilder extends
          // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError)
          com.google.protobuf.MessageOrBuilder {
      }
      /**
       * <pre>
       * Запрос к внешней системе вернул ошибку или прекращен по таймауту
       * </pre>
       *
       * Protobuf type {@code keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError}
       */
      public static final class ExternalSystemError extends
          com.google.protobuf.GeneratedMessageV3 implements
          // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError)
          ExternalSystemErrorOrBuilder {
      private static final long serialVersionUID = 0L;
        // Use ExternalSystemError.newBuilder() to construct.
        private ExternalSystemError(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
          super(builder);
        }
        private ExternalSystemError() {
        }

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

        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_ExternalError_ExternalSystemError_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_ExternalError_ExternalSystemError_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.Builder.class);
        }

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

          memoizedIsInitialized = 1;
          return true;
        }

        @java.lang.Override
        public void writeTo(com.google.protobuf.CodedOutputStream output)
                            throws java.io.IOException {
          getUnknownFields().writeTo(output);
        }

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

          size = 0;
          size += getUnknownFields().getSerializedSize();
          memoizedSize = size;
          return size;
        }

        @java.lang.Override
        public boolean equals(final java.lang.Object obj) {
          if (obj == this) {
           return true;
          }
          if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError)) {
            return super.equals(obj);
          }
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError) obj;

          if (!getUnknownFields().equals(other.getUnknownFields())) return false;
          return true;
        }

        @java.lang.Override
        public int hashCode() {
          if (memoizedHashCode != 0) {
            return memoizedHashCode;
          }
          int hash = 41;
          hash = (19 * hash) + getDescriptor().hashCode();
          hash = (29 * hash) + getUnknownFields().hashCode();
          memoizedHashCode = hash;
          return hash;
        }

        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError parseFrom(
            java.nio.ByteBuffer data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError parseFrom(
            java.nio.ByteBuffer data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError parseFrom(
            com.google.protobuf.ByteString data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError parseFrom(
            com.google.protobuf.ByteString data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError parseFrom(byte[] data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError parseFrom(
            byte[] data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError parseFrom(java.io.InputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseWithIOException(PARSER, input);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError parseDelimitedFrom(java.io.InputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseDelimitedWithIOException(PARSER, input);
        }

        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError parseFrom(
            com.google.protobuf.CodedInputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseWithIOException(PARSER, input);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError 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;
        }
        /**
         * <pre>
         * Запрос к внешней системе вернул ошибку или прекращен по таймауту
         * </pre>
         *
         * Protobuf type {@code keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError}
         */
        public static final class Builder extends
            com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
            // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError)
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemErrorOrBuilder {
          public static final com.google.protobuf.Descriptors.Descriptor
              getDescriptor() {
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_ExternalError_ExternalSystemError_descriptor;
          }

          @java.lang.Override
          protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
              internalGetFieldAccessorTable() {
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_ExternalError_ExternalSystemError_fieldAccessorTable
                .ensureFieldAccessorsInitialized(
                    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.Builder.class);
          }

          // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.newBuilder()
          private Builder() {

          }

          private Builder(
              com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
            super(parent);

          }
          @java.lang.Override
          public Builder clear() {
            super.clear();
            return this;
          }

          @java.lang.Override
          public com.google.protobuf.Descriptors.Descriptor
              getDescriptorForType() {
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_ExternalError_ExternalSystemError_descriptor;
          }

          @java.lang.Override
          public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError getDefaultInstanceForType() {
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.getDefaultInstance();
          }

          @java.lang.Override
          public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError build() {
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError result = buildPartial();
            if (!result.isInitialized()) {
              throw newUninitializedMessageException(result);
            }
            return result;
          }

          @java.lang.Override
          public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError buildPartial() {
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError(this);
            onBuilt();
            return result;
          }

          @java.lang.Override
          public Builder mergeFrom(com.google.protobuf.Message other) {
            if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError) {
              return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError)other);
            } else {
              super.mergeFrom(other);
              return this;
            }
          }

          public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError other) {
            if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.getDefaultInstance()) return this;
            this.mergeUnknownFields(other.getUnknownFields());
            onChanged();
            return this;
          }

          @java.lang.Override
          public final boolean isInitialized() {
            return true;
          }

          @java.lang.Override
          public Builder mergeFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws java.io.IOException {
            if (extensionRegistry == null) {
              throw new java.lang.NullPointerException();
            }
            try {
              boolean done = false;
              while (!done) {
                int tag = input.readTag();
                switch (tag) {
                  case 0:
                    done = true;
                    break;
                  default: {
                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                      done = true; // was an endgroup tag
                    }
                    break;
                  } // default:
                } // switch (tag)
              } // while (!done)
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              throw e.unwrapIOException();
            } finally {
              onChanged();
            } // finally
            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:keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError)
        }

        // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError)
        private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError DEFAULT_INSTANCE;
        static {
          DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError();
        }

        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError getDefaultInstance() {
          return DEFAULT_INSTANCE;
        }

        private static final com.google.protobuf.Parser<ExternalSystemError>
            PARSER = new com.google.protobuf.AbstractParser<ExternalSystemError>() {
          @java.lang.Override
          public ExternalSystemError 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 (com.google.protobuf.UninitializedMessageException e) {
              throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
            } catch (java.io.IOException e) {
              throw new com.google.protobuf.InvalidProtocolBufferException(e)
                  .setUnfinishedMessage(builder.buildPartial());
            }
            return builder.buildPartial();
          }
        };

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

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

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError getDefaultInstanceForType() {
          return DEFAULT_INSTANCE;
        }

      }

      private int reasonCase_ = 0;
      @SuppressWarnings("serial")
      private java.lang.Object reason_;
      public enum ReasonCase
          implements com.google.protobuf.Internal.EnumLite,
              com.google.protobuf.AbstractMessage.InternalOneOfEnum {
        EXTERNAL_SYSTEM_ERROR(1),
        REASON_NOT_SET(0);
        private final int value;
        private ReasonCase(int value) {
          this.value = value;
        }
        /**
         * @param value The number of the enum to look for.
         * @return The enum associated with the given number.
         * @deprecated Use {@link #forNumber(int)} instead.
         */
        @java.lang.Deprecated
        public static ReasonCase valueOf(int value) {
          return forNumber(value);
        }

        public static ReasonCase forNumber(int value) {
          switch (value) {
            case 1: return EXTERNAL_SYSTEM_ERROR;
            case 0: return REASON_NOT_SET;
            default: return null;
          }
        }
        public int getNumber() {
          return this.value;
        }
      };

      public ReasonCase
      getReasonCase() {
        return ReasonCase.forNumber(
            reasonCase_);
      }

      public static final int EXTERNAL_SYSTEM_ERROR_FIELD_NUMBER = 1;
      /**
       * <pre>
       * Запрос к внешней системе вернул ошибку или прекращен по таймауту
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError external_system_error = 1;</code>
       * @return Whether the externalSystemError field is set.
       */
      @java.lang.Override
      public boolean hasExternalSystemError() {
        return reasonCase_ == 1;
      }
      /**
       * <pre>
       * Запрос к внешней системе вернул ошибку или прекращен по таймауту
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError external_system_error = 1;</code>
       * @return The externalSystemError.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError getExternalSystemError() {
        if (reasonCase_ == 1) {
           return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError) reason_;
        }
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.getDefaultInstance();
      }
      /**
       * <pre>
       * Запрос к внешней системе вернул ошибку или прекращен по таймауту
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError external_system_error = 1;</code>
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemErrorOrBuilder getExternalSystemErrorOrBuilder() {
        if (reasonCase_ == 1) {
           return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError) reason_;
        }
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.getDefaultInstance();
      }

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

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (reasonCase_ == 1) {
          output.writeMessage(1, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError) reason_);
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (reasonCase_ == 1) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError) reason_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError)) {
          return super.equals(obj);
        }
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError) obj;

        if (!getReasonCase().equals(other.getReasonCase())) return false;
        switch (reasonCase_) {
          case 1:
            if (!getExternalSystemError()
                .equals(other.getExternalSystemError())) return false;
            break;
          case 0:
          default:
        }
        if (!getUnknownFields().equals(other.getUnknownFields())) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        switch (reasonCase_) {
          case 1:
            hash = (37 * hash) + EXTERNAL_SYSTEM_ERROR_FIELD_NUMBER;
            hash = (53 * hash) + getExternalSystemError().hashCode();
            break;
          case 0:
          default:
        }
        hash = (29 * hash) + getUnknownFields().hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError 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;
      }
      /**
       * <pre>
       * Ошибки внешней системы
       * </pre>
       *
       * Protobuf type {@code keyapis.invoice.v1.Invoice.ExternalError}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.Invoice.ExternalError)
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalErrorOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_ExternalError_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_ExternalError_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.Builder.class);
        }

        // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.newBuilder()
        private Builder() {

        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);

        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          bitField0_ = 0;
          if (externalSystemErrorBuilder_ != null) {
            externalSystemErrorBuilder_.clear();
          }
          reasonCase_ = 0;
          reason_ = null;
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_ExternalError_descriptor;
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError getDefaultInstanceForType() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.getDefaultInstance();
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError build() {
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError buildPartial() {
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError(this);
          if (bitField0_ != 0) { buildPartial0(result); }
          buildPartialOneofs(result);
          onBuilt();
          return result;
        }

        private void buildPartial0(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError result) {
          int from_bitField0_ = bitField0_;
        }

        private void buildPartialOneofs(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError result) {
          result.reasonCase_ = reasonCase_;
          result.reason_ = this.reason_;
          if (reasonCase_ == 1 &&
              externalSystemErrorBuilder_ != null) {
            result.reason_ = externalSystemErrorBuilder_.build();
          }
        }

        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError) {
            return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError other) {
          if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.getDefaultInstance()) return this;
          switch (other.getReasonCase()) {
            case EXTERNAL_SYSTEM_ERROR: {
              mergeExternalSystemError(other.getExternalSystemError());
              break;
            }
            case REASON_NOT_SET: {
              break;
            }
          }
          this.mergeUnknownFields(other.getUnknownFields());
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          if (extensionRegistry == null) {
            throw new java.lang.NullPointerException();
          }
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                case 10: {
                  input.readMessage(
                      getExternalSystemErrorFieldBuilder().getBuilder(),
                      extensionRegistry);
                  reasonCase_ = 1;
                  break;
                } // case 10
                default: {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
              } // switch (tag)
            } // while (!done)
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.unwrapIOException();
          } finally {
            onChanged();
          } // finally
          return this;
        }
        private int reasonCase_ = 0;
        private java.lang.Object reason_;
        public ReasonCase
            getReasonCase() {
          return ReasonCase.forNumber(
              reasonCase_);
        }

        public Builder clearReason() {
          reasonCase_ = 0;
          reason_ = null;
          onChanged();
          return this;
        }

        private int bitField0_;

        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemErrorOrBuilder> externalSystemErrorBuilder_;
        /**
         * <pre>
         * Запрос к внешней системе вернул ошибку или прекращен по таймауту
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError external_system_error = 1;</code>
         * @return Whether the externalSystemError field is set.
         */
        @java.lang.Override
        public boolean hasExternalSystemError() {
          return reasonCase_ == 1;
        }
        /**
         * <pre>
         * Запрос к внешней системе вернул ошибку или прекращен по таймауту
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError external_system_error = 1;</code>
         * @return The externalSystemError.
         */
        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError getExternalSystemError() {
          if (externalSystemErrorBuilder_ == null) {
            if (reasonCase_ == 1) {
              return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError) reason_;
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.getDefaultInstance();
          } else {
            if (reasonCase_ == 1) {
              return externalSystemErrorBuilder_.getMessage();
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Запрос к внешней системе вернул ошибку или прекращен по таймауту
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError external_system_error = 1;</code>
         */
        public Builder setExternalSystemError(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError value) {
          if (externalSystemErrorBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            reason_ = value;
            onChanged();
          } else {
            externalSystemErrorBuilder_.setMessage(value);
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Запрос к внешней системе вернул ошибку или прекращен по таймауту
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError external_system_error = 1;</code>
         */
        public Builder setExternalSystemError(
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.Builder builderForValue) {
          if (externalSystemErrorBuilder_ == null) {
            reason_ = builderForValue.build();
            onChanged();
          } else {
            externalSystemErrorBuilder_.setMessage(builderForValue.build());
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Запрос к внешней системе вернул ошибку или прекращен по таймауту
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError external_system_error = 1;</code>
         */
        public Builder mergeExternalSystemError(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError value) {
          if (externalSystemErrorBuilder_ == null) {
            if (reasonCase_ == 1 &&
                reason_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.getDefaultInstance()) {
              reason_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.newBuilder((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError) reason_)
                  .mergeFrom(value).buildPartial();
            } else {
              reason_ = value;
            }
            onChanged();
          } else {
            if (reasonCase_ == 1) {
              externalSystemErrorBuilder_.mergeFrom(value);
            } else {
              externalSystemErrorBuilder_.setMessage(value);
            }
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Запрос к внешней системе вернул ошибку или прекращен по таймауту
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError external_system_error = 1;</code>
         */
        public Builder clearExternalSystemError() {
          if (externalSystemErrorBuilder_ == null) {
            if (reasonCase_ == 1) {
              reasonCase_ = 0;
              reason_ = null;
              onChanged();
            }
          } else {
            if (reasonCase_ == 1) {
              reasonCase_ = 0;
              reason_ = null;
            }
            externalSystemErrorBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * Запрос к внешней системе вернул ошибку или прекращен по таймауту
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError external_system_error = 1;</code>
         */
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.Builder getExternalSystemErrorBuilder() {
          return getExternalSystemErrorFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Запрос к внешней системе вернул ошибку или прекращен по таймауту
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError external_system_error = 1;</code>
         */
        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemErrorOrBuilder getExternalSystemErrorOrBuilder() {
          if ((reasonCase_ == 1) && (externalSystemErrorBuilder_ != null)) {
            return externalSystemErrorBuilder_.getMessageOrBuilder();
          } else {
            if (reasonCase_ == 1) {
              return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError) reason_;
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Запрос к внешней системе вернул ошибку или прекращен по таймауту
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.ExternalError.ExternalSystemError external_system_error = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemErrorOrBuilder> 
            getExternalSystemErrorFieldBuilder() {
          if (externalSystemErrorBuilder_ == null) {
            if (!(reasonCase_ == 1)) {
              reason_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.getDefaultInstance();
            }
            externalSystemErrorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemErrorOrBuilder>(
                    (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.ExternalSystemError) reason_,
                    getParentForChildren(),
                    isClean());
            reason_ = null;
          }
          reasonCase_ = 1;
          onChanged();
          return externalSystemErrorBuilder_;
        }
        @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:keyapis.invoice.v1.Invoice.ExternalError)
      }

      // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.Invoice.ExternalError)
      private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError();
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<ExternalError>
          PARSER = new com.google.protobuf.AbstractParser<ExternalError>() {
        @java.lang.Override
        public ExternalError 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 (com.google.protobuf.UninitializedMessageException e) {
            throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(e)
                .setUnfinishedMessage(builder.buildPartial());
          }
          return builder.buildPartial();
        }
      };

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

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

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public interface PositionOrBuilder extends
        // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.Invoice.Position)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * Идентификатор позиции.
       * # Тип: Guid
       * </pre>
       *
       * <code>string id = 1;</code>
       * @return The id.
       */
      java.lang.String getId();
      /**
       * <pre>
       * Идентификатор позиции.
       * # Тип: Guid
       * </pre>
       *
       * <code>string id = 1;</code>
       * @return The bytes for id.
       */
      com.google.protobuf.ByteString
          getIdBytes();

      /**
       * <pre>
       * Идентификатор платежа.
       * # Тип: Guid
       * </pre>
       *
       * <code>string invoice_id = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The invoiceId.
       */
      java.lang.String getInvoiceId();
      /**
       * <pre>
       * Идентификатор платежа.
       * # Тип: Guid
       * </pre>
       *
       * <code>string invoice_id = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for invoiceId.
       */
      com.google.protobuf.ByteString
          getInvoiceIdBytes();

      /**
       * <pre>
       * Название позиции
       * </pre>
       *
       * <code>string title = 3 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The title.
       */
      java.lang.String getTitle();
      /**
       * <pre>
       * Название позиции
       * </pre>
       *
       * <code>string title = 3 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for title.
       */
      com.google.protobuf.ByteString
          getTitleBytes();

      /**
       * <pre>
       * Категория позиции (='subscription')
       * </pre>
       *
       * <code>string category = 4 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The category.
       */
      java.lang.String getCategory();
      /**
       * <pre>
       * Категория позиции (='subscription')
       * </pre>
       *
       * <code>string category = 4 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for category.
       */
      com.google.protobuf.ByteString
          getCategoryBytes();

      /**
       * <pre>
       * Цена в рублях.
       * Число должно быть больше 0
       * </pre>
       *
       * <code>float amount = 5 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The amount.
       */
      float getAmount();

      /**
       * <pre>
       * Дата создания позиции платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 6 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       * @return Whether the createdAt field is set.
       */
      boolean hasCreatedAt();
      /**
       * <pre>
       * Дата создания позиции платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 6 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       * @return The createdAt.
       */
      com.google.protobuf.Timestamp getCreatedAt();
      /**
       * <pre>
       * Дата создания позиции платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 6 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       */
      com.google.protobuf.TimestampOrBuilder getCreatedAtOrBuilder();

      /**
       * <pre>
       * Дата обновления позиции платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp updated_at = 7 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       * @return Whether the updatedAt field is set.
       */
      boolean hasUpdatedAt();
      /**
       * <pre>
       * Дата обновления позиции платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp updated_at = 7 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       * @return The updatedAt.
       */
      com.google.protobuf.Timestamp getUpdatedAt();
      /**
       * <pre>
       * Дата обновления позиции платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp updated_at = 7 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       */
      com.google.protobuf.TimestampOrBuilder getUpdatedAtOrBuilder();

      /**
       * <pre>
       * Идентификатор МРФ
       * </pre>
       *
       * <code>int32 mrf_id = 8 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The mrfId.
       */
      int getMrfId();

      /**
       * <pre>
       * Идентификатор РФ
       * </pre>
       *
       * <code>int32 rf_id = 9 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The rfId.
       */
      int getRfId();

      /**
       * <pre>
       * Идентификатор экземпляра оплачиваемой подписки.
       * # Тип: Guid
       * </pre>
       *
       * <code>string instance_id = 10 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The instanceId.
       */
      java.lang.String getInstanceId();
      /**
       * <pre>
       * Идентификатор экземпляра оплачиваемой подписки.
       * # Тип: Guid
       * </pre>
       *
       * <code>string instance_id = 10 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for instanceId.
       */
      com.google.protobuf.ByteString
          getInstanceIdBytes();

      /**
       * <pre>
       * Идентификатор предложения оплачиваемой подписки
       * </pre>
       *
       * <code>int32 offering_id = 11 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The offeringId.
       */
      int getOfferingId();

      /**
       * <pre>
       * Срок окончания оплачиваемого периода
       * </pre>
       *
       * <code>.google.protobuf.Timestamp due_date_at = 12;</code>
       * @return Whether the dueDateAt field is set.
       */
      boolean hasDueDateAt();
      /**
       * <pre>
       * Срок окончания оплачиваемого периода
       * </pre>
       *
       * <code>.google.protobuf.Timestamp due_date_at = 12;</code>
       * @return The dueDateAt.
       */
      com.google.protobuf.Timestamp getDueDateAt();
      /**
       * <pre>
       * Срок окончания оплачиваемого периода
       * </pre>
       *
       * <code>.google.protobuf.Timestamp due_date_at = 12;</code>
       */
      com.google.protobuf.TimestampOrBuilder getDueDateAtOrBuilder();

      /**
       * <pre>
       * Идентификатор получателя платежа
       * </pre>
       *
       * <code>string svc_type_id = 13;</code>
       * @return The svcTypeId.
       */
      java.lang.String getSvcTypeId();
      /**
       * <pre>
       * Идентификатор получателя платежа
       * </pre>
       *
       * <code>string svc_type_id = 13;</code>
       * @return The bytes for svcTypeId.
       */
      com.google.protobuf.ByteString
          getSvcTypeIdBytes();

      /**
       * <pre>
       * Признак скидки
       * </pre>
       *
       * <code>bool is_discount = 14;</code>
       * @return The isDiscount.
       */
      boolean getIsDiscount();
    }
    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.Invoice.Position}
     */
    public static final class Position extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.Invoice.Position)
        PositionOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use Position.newBuilder() to construct.
      private Position(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private Position() {
        id_ = "";
        invoiceId_ = "";
        title_ = "";
        category_ = "";
        instanceId_ = "";
        svcTypeId_ = "";
      }

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

      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_Position_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_Position_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder.class);
      }

      public static final int ID_FIELD_NUMBER = 1;
      @SuppressWarnings("serial")
      private volatile java.lang.Object id_ = "";
      /**
       * <pre>
       * Идентификатор позиции.
       * # Тип: Guid
       * </pre>
       *
       * <code>string id = 1;</code>
       * @return The id.
       */
      @java.lang.Override
      public java.lang.String getId() {
        java.lang.Object ref = id_;
        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();
          id_ = s;
          return s;
        }
      }
      /**
       * <pre>
       * Идентификатор позиции.
       * # Тип: Guid
       * </pre>
       *
       * <code>string id = 1;</code>
       * @return The bytes for id.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getIdBytes() {
        java.lang.Object ref = id_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          id_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int INVOICE_ID_FIELD_NUMBER = 2;
      @SuppressWarnings("serial")
      private volatile java.lang.Object invoiceId_ = "";
      /**
       * <pre>
       * Идентификатор платежа.
       * # Тип: Guid
       * </pre>
       *
       * <code>string invoice_id = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The invoiceId.
       */
      @java.lang.Override
      public java.lang.String getInvoiceId() {
        java.lang.Object ref = invoiceId_;
        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();
          invoiceId_ = s;
          return s;
        }
      }
      /**
       * <pre>
       * Идентификатор платежа.
       * # Тип: Guid
       * </pre>
       *
       * <code>string invoice_id = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for invoiceId.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getInvoiceIdBytes() {
        java.lang.Object ref = invoiceId_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          invoiceId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int TITLE_FIELD_NUMBER = 3;
      @SuppressWarnings("serial")
      private volatile java.lang.Object title_ = "";
      /**
       * <pre>
       * Название позиции
       * </pre>
       *
       * <code>string title = 3 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The title.
       */
      @java.lang.Override
      public java.lang.String getTitle() {
        java.lang.Object ref = title_;
        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();
          title_ = s;
          return s;
        }
      }
      /**
       * <pre>
       * Название позиции
       * </pre>
       *
       * <code>string title = 3 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for title.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getTitleBytes() {
        java.lang.Object ref = title_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          title_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int CATEGORY_FIELD_NUMBER = 4;
      @SuppressWarnings("serial")
      private volatile java.lang.Object category_ = "";
      /**
       * <pre>
       * Категория позиции (='subscription')
       * </pre>
       *
       * <code>string category = 4 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The category.
       */
      @java.lang.Override
      public java.lang.String getCategory() {
        java.lang.Object ref = category_;
        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();
          category_ = s;
          return s;
        }
      }
      /**
       * <pre>
       * Категория позиции (='subscription')
       * </pre>
       *
       * <code>string category = 4 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for category.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getCategoryBytes() {
        java.lang.Object ref = category_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          category_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int AMOUNT_FIELD_NUMBER = 5;
      private float amount_ = 0F;
      /**
       * <pre>
       * Цена в рублях.
       * Число должно быть больше 0
       * </pre>
       *
       * <code>float amount = 5 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The amount.
       */
      @java.lang.Override
      public float getAmount() {
        return amount_;
      }

      public static final int CREATED_AT_FIELD_NUMBER = 6;
      private com.google.protobuf.Timestamp createdAt_;
      /**
       * <pre>
       * Дата создания позиции платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 6 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       * @return Whether the createdAt field is set.
       */
      @java.lang.Override
      public boolean hasCreatedAt() {
        return createdAt_ != null;
      }
      /**
       * <pre>
       * Дата создания позиции платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 6 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       * @return The createdAt.
       */
      @java.lang.Override
      public com.google.protobuf.Timestamp getCreatedAt() {
        return createdAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createdAt_;
      }
      /**
       * <pre>
       * Дата создания позиции платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 6 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       */
      @java.lang.Override
      public com.google.protobuf.TimestampOrBuilder getCreatedAtOrBuilder() {
        return createdAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createdAt_;
      }

      public static final int UPDATED_AT_FIELD_NUMBER = 7;
      private com.google.protobuf.Timestamp updatedAt_;
      /**
       * <pre>
       * Дата обновления позиции платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp updated_at = 7 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       * @return Whether the updatedAt field is set.
       */
      @java.lang.Override
      public boolean hasUpdatedAt() {
        return updatedAt_ != null;
      }
      /**
       * <pre>
       * Дата обновления позиции платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp updated_at = 7 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       * @return The updatedAt.
       */
      @java.lang.Override
      public com.google.protobuf.Timestamp getUpdatedAt() {
        return updatedAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : updatedAt_;
      }
      /**
       * <pre>
       * Дата обновления позиции платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp updated_at = 7 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
       */
      @java.lang.Override
      public com.google.protobuf.TimestampOrBuilder getUpdatedAtOrBuilder() {
        return updatedAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : updatedAt_;
      }

      public static final int MRF_ID_FIELD_NUMBER = 8;
      private int mrfId_ = 0;
      /**
       * <pre>
       * Идентификатор МРФ
       * </pre>
       *
       * <code>int32 mrf_id = 8 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The mrfId.
       */
      @java.lang.Override
      public int getMrfId() {
        return mrfId_;
      }

      public static final int RF_ID_FIELD_NUMBER = 9;
      private int rfId_ = 0;
      /**
       * <pre>
       * Идентификатор РФ
       * </pre>
       *
       * <code>int32 rf_id = 9 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The rfId.
       */
      @java.lang.Override
      public int getRfId() {
        return rfId_;
      }

      public static final int INSTANCE_ID_FIELD_NUMBER = 10;
      @SuppressWarnings("serial")
      private volatile java.lang.Object instanceId_ = "";
      /**
       * <pre>
       * Идентификатор экземпляра оплачиваемой подписки.
       * # Тип: Guid
       * </pre>
       *
       * <code>string instance_id = 10 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The instanceId.
       */
      @java.lang.Override
      public java.lang.String getInstanceId() {
        java.lang.Object ref = instanceId_;
        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();
          instanceId_ = s;
          return s;
        }
      }
      /**
       * <pre>
       * Идентификатор экземпляра оплачиваемой подписки.
       * # Тип: Guid
       * </pre>
       *
       * <code>string instance_id = 10 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for instanceId.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getInstanceIdBytes() {
        java.lang.Object ref = instanceId_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          instanceId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int OFFERING_ID_FIELD_NUMBER = 11;
      private int offeringId_ = 0;
      /**
       * <pre>
       * Идентификатор предложения оплачиваемой подписки
       * </pre>
       *
       * <code>int32 offering_id = 11 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The offeringId.
       */
      @java.lang.Override
      public int getOfferingId() {
        return offeringId_;
      }

      public static final int DUE_DATE_AT_FIELD_NUMBER = 12;
      private com.google.protobuf.Timestamp dueDateAt_;
      /**
       * <pre>
       * Срок окончания оплачиваемого периода
       * </pre>
       *
       * <code>.google.protobuf.Timestamp due_date_at = 12;</code>
       * @return Whether the dueDateAt field is set.
       */
      @java.lang.Override
      public boolean hasDueDateAt() {
        return dueDateAt_ != null;
      }
      /**
       * <pre>
       * Срок окончания оплачиваемого периода
       * </pre>
       *
       * <code>.google.protobuf.Timestamp due_date_at = 12;</code>
       * @return The dueDateAt.
       */
      @java.lang.Override
      public com.google.protobuf.Timestamp getDueDateAt() {
        return dueDateAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : dueDateAt_;
      }
      /**
       * <pre>
       * Срок окончания оплачиваемого периода
       * </pre>
       *
       * <code>.google.protobuf.Timestamp due_date_at = 12;</code>
       */
      @java.lang.Override
      public com.google.protobuf.TimestampOrBuilder getDueDateAtOrBuilder() {
        return dueDateAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : dueDateAt_;
      }

      public static final int SVC_TYPE_ID_FIELD_NUMBER = 13;
      @SuppressWarnings("serial")
      private volatile java.lang.Object svcTypeId_ = "";
      /**
       * <pre>
       * Идентификатор получателя платежа
       * </pre>
       *
       * <code>string svc_type_id = 13;</code>
       * @return The svcTypeId.
       */
      @java.lang.Override
      public java.lang.String getSvcTypeId() {
        java.lang.Object ref = svcTypeId_;
        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();
          svcTypeId_ = s;
          return s;
        }
      }
      /**
       * <pre>
       * Идентификатор получателя платежа
       * </pre>
       *
       * <code>string svc_type_id = 13;</code>
       * @return The bytes for svcTypeId.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getSvcTypeIdBytes() {
        java.lang.Object ref = svcTypeId_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          svcTypeId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int IS_DISCOUNT_FIELD_NUMBER = 14;
      private boolean isDiscount_ = false;
      /**
       * <pre>
       * Признак скидки
       * </pre>
       *
       * <code>bool is_discount = 14;</code>
       * @return The isDiscount.
       */
      @java.lang.Override
      public boolean getIsDiscount() {
        return isDiscount_;
      }

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

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(id_)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, id_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(invoiceId_)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 2, invoiceId_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(title_)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 3, title_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(category_)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 4, category_);
        }
        if (java.lang.Float.floatToRawIntBits(amount_) != 0) {
          output.writeFloat(5, amount_);
        }
        if (createdAt_ != null) {
          output.writeMessage(6, getCreatedAt());
        }
        if (updatedAt_ != null) {
          output.writeMessage(7, getUpdatedAt());
        }
        if (mrfId_ != 0) {
          output.writeInt32(8, mrfId_);
        }
        if (rfId_ != 0) {
          output.writeInt32(9, rfId_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 10, instanceId_);
        }
        if (offeringId_ != 0) {
          output.writeInt32(11, offeringId_);
        }
        if (dueDateAt_ != null) {
          output.writeMessage(12, getDueDateAt());
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(svcTypeId_)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 13, svcTypeId_);
        }
        if (isDiscount_ != false) {
          output.writeBool(14, isDiscount_);
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(id_)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, id_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(invoiceId_)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, invoiceId_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(title_)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, title_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(category_)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, category_);
        }
        if (java.lang.Float.floatToRawIntBits(amount_) != 0) {
          size += com.google.protobuf.CodedOutputStream
            .computeFloatSize(5, amount_);
        }
        if (createdAt_ != null) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(6, getCreatedAt());
        }
        if (updatedAt_ != null) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(7, getUpdatedAt());
        }
        if (mrfId_ != 0) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(8, mrfId_);
        }
        if (rfId_ != 0) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(9, rfId_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(instanceId_)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(10, instanceId_);
        }
        if (offeringId_ != 0) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(11, offeringId_);
        }
        if (dueDateAt_ != null) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(12, getDueDateAt());
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(svcTypeId_)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(13, svcTypeId_);
        }
        if (isDiscount_ != false) {
          size += com.google.protobuf.CodedOutputStream
            .computeBoolSize(14, isDiscount_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position)) {
          return super.equals(obj);
        }
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position) obj;

        if (!getId()
            .equals(other.getId())) return false;
        if (!getInvoiceId()
            .equals(other.getInvoiceId())) return false;
        if (!getTitle()
            .equals(other.getTitle())) return false;
        if (!getCategory()
            .equals(other.getCategory())) return false;
        if (java.lang.Float.floatToIntBits(getAmount())
            != java.lang.Float.floatToIntBits(
                other.getAmount())) return false;
        if (hasCreatedAt() != other.hasCreatedAt()) return false;
        if (hasCreatedAt()) {
          if (!getCreatedAt()
              .equals(other.getCreatedAt())) return false;
        }
        if (hasUpdatedAt() != other.hasUpdatedAt()) return false;
        if (hasUpdatedAt()) {
          if (!getUpdatedAt()
              .equals(other.getUpdatedAt())) return false;
        }
        if (getMrfId()
            != other.getMrfId()) return false;
        if (getRfId()
            != other.getRfId()) return false;
        if (!getInstanceId()
            .equals(other.getInstanceId())) return false;
        if (getOfferingId()
            != other.getOfferingId()) return false;
        if (hasDueDateAt() != other.hasDueDateAt()) return false;
        if (hasDueDateAt()) {
          if (!getDueDateAt()
              .equals(other.getDueDateAt())) return false;
        }
        if (!getSvcTypeId()
            .equals(other.getSvcTypeId())) return false;
        if (getIsDiscount()
            != other.getIsDiscount()) return false;
        if (!getUnknownFields().equals(other.getUnknownFields())) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        hash = (37 * hash) + ID_FIELD_NUMBER;
        hash = (53 * hash) + getId().hashCode();
        hash = (37 * hash) + INVOICE_ID_FIELD_NUMBER;
        hash = (53 * hash) + getInvoiceId().hashCode();
        hash = (37 * hash) + TITLE_FIELD_NUMBER;
        hash = (53 * hash) + getTitle().hashCode();
        hash = (37 * hash) + CATEGORY_FIELD_NUMBER;
        hash = (53 * hash) + getCategory().hashCode();
        hash = (37 * hash) + AMOUNT_FIELD_NUMBER;
        hash = (53 * hash) + java.lang.Float.floatToIntBits(
            getAmount());
        if (hasCreatedAt()) {
          hash = (37 * hash) + CREATED_AT_FIELD_NUMBER;
          hash = (53 * hash) + getCreatedAt().hashCode();
        }
        if (hasUpdatedAt()) {
          hash = (37 * hash) + UPDATED_AT_FIELD_NUMBER;
          hash = (53 * hash) + getUpdatedAt().hashCode();
        }
        hash = (37 * hash) + MRF_ID_FIELD_NUMBER;
        hash = (53 * hash) + getMrfId();
        hash = (37 * hash) + RF_ID_FIELD_NUMBER;
        hash = (53 * hash) + getRfId();
        hash = (37 * hash) + INSTANCE_ID_FIELD_NUMBER;
        hash = (53 * hash) + getInstanceId().hashCode();
        hash = (37 * hash) + OFFERING_ID_FIELD_NUMBER;
        hash = (53 * hash) + getOfferingId();
        if (hasDueDateAt()) {
          hash = (37 * hash) + DUE_DATE_AT_FIELD_NUMBER;
          hash = (53 * hash) + getDueDateAt().hashCode();
        }
        hash = (37 * hash) + SVC_TYPE_ID_FIELD_NUMBER;
        hash = (53 * hash) + getSvcTypeId().hashCode();
        hash = (37 * hash) + IS_DISCOUNT_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getIsDiscount());
        hash = (29 * hash) + getUnknownFields().hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position 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;
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * Protobuf type {@code keyapis.invoice.v1.Invoice.Position}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.Invoice.Position)
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PositionOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_Position_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_Position_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder.class);
        }

        // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.newBuilder()
        private Builder() {

        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);

        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          bitField0_ = 0;
          id_ = "";
          invoiceId_ = "";
          title_ = "";
          category_ = "";
          amount_ = 0F;
          createdAt_ = null;
          if (createdAtBuilder_ != null) {
            createdAtBuilder_.dispose();
            createdAtBuilder_ = null;
          }
          updatedAt_ = null;
          if (updatedAtBuilder_ != null) {
            updatedAtBuilder_.dispose();
            updatedAtBuilder_ = null;
          }
          mrfId_ = 0;
          rfId_ = 0;
          instanceId_ = "";
          offeringId_ = 0;
          dueDateAt_ = null;
          if (dueDateAtBuilder_ != null) {
            dueDateAtBuilder_.dispose();
            dueDateAtBuilder_ = null;
          }
          svcTypeId_ = "";
          isDiscount_ = false;
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_Position_descriptor;
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position getDefaultInstanceForType() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.getDefaultInstance();
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position build() {
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position buildPartial() {
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position(this);
          if (bitField0_ != 0) { buildPartial0(result); }
          onBuilt();
          return result;
        }

        private void buildPartial0(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position result) {
          int from_bitField0_ = bitField0_;
          if (((from_bitField0_ & 0x00000001) != 0)) {
            result.id_ = id_;
          }
          if (((from_bitField0_ & 0x00000002) != 0)) {
            result.invoiceId_ = invoiceId_;
          }
          if (((from_bitField0_ & 0x00000004) != 0)) {
            result.title_ = title_;
          }
          if (((from_bitField0_ & 0x00000008) != 0)) {
            result.category_ = category_;
          }
          if (((from_bitField0_ & 0x00000010) != 0)) {
            result.amount_ = amount_;
          }
          if (((from_bitField0_ & 0x00000020) != 0)) {
            result.createdAt_ = createdAtBuilder_ == null
                ? createdAt_
                : createdAtBuilder_.build();
          }
          if (((from_bitField0_ & 0x00000040) != 0)) {
            result.updatedAt_ = updatedAtBuilder_ == null
                ? updatedAt_
                : updatedAtBuilder_.build();
          }
          if (((from_bitField0_ & 0x00000080) != 0)) {
            result.mrfId_ = mrfId_;
          }
          if (((from_bitField0_ & 0x00000100) != 0)) {
            result.rfId_ = rfId_;
          }
          if (((from_bitField0_ & 0x00000200) != 0)) {
            result.instanceId_ = instanceId_;
          }
          if (((from_bitField0_ & 0x00000400) != 0)) {
            result.offeringId_ = offeringId_;
          }
          if (((from_bitField0_ & 0x00000800) != 0)) {
            result.dueDateAt_ = dueDateAtBuilder_ == null
                ? dueDateAt_
                : dueDateAtBuilder_.build();
          }
          if (((from_bitField0_ & 0x00001000) != 0)) {
            result.svcTypeId_ = svcTypeId_;
          }
          if (((from_bitField0_ & 0x00002000) != 0)) {
            result.isDiscount_ = isDiscount_;
          }
        }

        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position) {
            return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position other) {
          if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.getDefaultInstance()) return this;
          if (!other.getId().isEmpty()) {
            id_ = other.id_;
            bitField0_ |= 0x00000001;
            onChanged();
          }
          if (!other.getInvoiceId().isEmpty()) {
            invoiceId_ = other.invoiceId_;
            bitField0_ |= 0x00000002;
            onChanged();
          }
          if (!other.getTitle().isEmpty()) {
            title_ = other.title_;
            bitField0_ |= 0x00000004;
            onChanged();
          }
          if (!other.getCategory().isEmpty()) {
            category_ = other.category_;
            bitField0_ |= 0x00000008;
            onChanged();
          }
          if (other.getAmount() != 0F) {
            setAmount(other.getAmount());
          }
          if (other.hasCreatedAt()) {
            mergeCreatedAt(other.getCreatedAt());
          }
          if (other.hasUpdatedAt()) {
            mergeUpdatedAt(other.getUpdatedAt());
          }
          if (other.getMrfId() != 0) {
            setMrfId(other.getMrfId());
          }
          if (other.getRfId() != 0) {
            setRfId(other.getRfId());
          }
          if (!other.getInstanceId().isEmpty()) {
            instanceId_ = other.instanceId_;
            bitField0_ |= 0x00000200;
            onChanged();
          }
          if (other.getOfferingId() != 0) {
            setOfferingId(other.getOfferingId());
          }
          if (other.hasDueDateAt()) {
            mergeDueDateAt(other.getDueDateAt());
          }
          if (!other.getSvcTypeId().isEmpty()) {
            svcTypeId_ = other.svcTypeId_;
            bitField0_ |= 0x00001000;
            onChanged();
          }
          if (other.getIsDiscount() != false) {
            setIsDiscount(other.getIsDiscount());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          if (extensionRegistry == null) {
            throw new java.lang.NullPointerException();
          }
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                case 10: {
                  id_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000001;
                  break;
                } // case 10
                case 18: {
                  invoiceId_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000002;
                  break;
                } // case 18
                case 26: {
                  title_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000004;
                  break;
                } // case 26
                case 34: {
                  category_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000008;
                  break;
                } // case 34
                case 45: {
                  amount_ = input.readFloat();
                  bitField0_ |= 0x00000010;
                  break;
                } // case 45
                case 50: {
                  input.readMessage(
                      getCreatedAtFieldBuilder().getBuilder(),
                      extensionRegistry);
                  bitField0_ |= 0x00000020;
                  break;
                } // case 50
                case 58: {
                  input.readMessage(
                      getUpdatedAtFieldBuilder().getBuilder(),
                      extensionRegistry);
                  bitField0_ |= 0x00000040;
                  break;
                } // case 58
                case 64: {
                  mrfId_ = input.readInt32();
                  bitField0_ |= 0x00000080;
                  break;
                } // case 64
                case 72: {
                  rfId_ = input.readInt32();
                  bitField0_ |= 0x00000100;
                  break;
                } // case 72
                case 82: {
                  instanceId_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000200;
                  break;
                } // case 82
                case 88: {
                  offeringId_ = input.readInt32();
                  bitField0_ |= 0x00000400;
                  break;
                } // case 88
                case 98: {
                  input.readMessage(
                      getDueDateAtFieldBuilder().getBuilder(),
                      extensionRegistry);
                  bitField0_ |= 0x00000800;
                  break;
                } // case 98
                case 106: {
                  svcTypeId_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00001000;
                  break;
                } // case 106
                case 112: {
                  isDiscount_ = input.readBool();
                  bitField0_ |= 0x00002000;
                  break;
                } // case 112
                default: {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
              } // switch (tag)
            } // while (!done)
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.unwrapIOException();
          } finally {
            onChanged();
          } // finally
          return this;
        }
        private int bitField0_;

        private java.lang.Object id_ = "";
        /**
         * <pre>
         * Идентификатор позиции.
         * # Тип: Guid
         * </pre>
         *
         * <code>string id = 1;</code>
         * @return The id.
         */
        public java.lang.String getId() {
          java.lang.Object ref = id_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            id_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * Идентификатор позиции.
         * # Тип: Guid
         * </pre>
         *
         * <code>string id = 1;</code>
         * @return The bytes for id.
         */
        public com.google.protobuf.ByteString
            getIdBytes() {
          java.lang.Object ref = id_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            id_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * Идентификатор позиции.
         * # Тип: Guid
         * </pre>
         *
         * <code>string id = 1;</code>
         * @param value The id to set.
         * @return This builder for chaining.
         */
        public Builder setId(
            java.lang.String value) {
          if (value == null) { throw new NullPointerException(); }
          id_ = value;
          bitField0_ |= 0x00000001;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Идентификатор позиции.
         * # Тип: Guid
         * </pre>
         *
         * <code>string id = 1;</code>
         * @return This builder for chaining.
         */
        public Builder clearId() {
          id_ = getDefaultInstance().getId();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Идентификатор позиции.
         * # Тип: Guid
         * </pre>
         *
         * <code>string id = 1;</code>
         * @param value The bytes for id to set.
         * @return This builder for chaining.
         */
        public Builder setIdBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) { throw new NullPointerException(); }
          checkByteStringIsUtf8(value);
          id_ = value;
          bitField0_ |= 0x00000001;
          onChanged();
          return this;
        }

        private java.lang.Object invoiceId_ = "";
        /**
         * <pre>
         * Идентификатор платежа.
         * # Тип: Guid
         * </pre>
         *
         * <code>string invoice_id = 2 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The invoiceId.
         */
        public java.lang.String getInvoiceId() {
          java.lang.Object ref = invoiceId_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            invoiceId_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * Идентификатор платежа.
         * # Тип: Guid
         * </pre>
         *
         * <code>string invoice_id = 2 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The bytes for invoiceId.
         */
        public com.google.protobuf.ByteString
            getInvoiceIdBytes() {
          java.lang.Object ref = invoiceId_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            invoiceId_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * Идентификатор платежа.
         * # Тип: Guid
         * </pre>
         *
         * <code>string invoice_id = 2 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The invoiceId to set.
         * @return This builder for chaining.
         */
        public Builder setInvoiceId(
            java.lang.String value) {
          if (value == null) { throw new NullPointerException(); }
          invoiceId_ = value;
          bitField0_ |= 0x00000002;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Идентификатор платежа.
         * # Тип: Guid
         * </pre>
         *
         * <code>string invoice_id = 2 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return This builder for chaining.
         */
        public Builder clearInvoiceId() {
          invoiceId_ = getDefaultInstance().getInvoiceId();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Идентификатор платежа.
         * # Тип: Guid
         * </pre>
         *
         * <code>string invoice_id = 2 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The bytes for invoiceId to set.
         * @return This builder for chaining.
         */
        public Builder setInvoiceIdBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) { throw new NullPointerException(); }
          checkByteStringIsUtf8(value);
          invoiceId_ = value;
          bitField0_ |= 0x00000002;
          onChanged();
          return this;
        }

        private java.lang.Object title_ = "";
        /**
         * <pre>
         * Название позиции
         * </pre>
         *
         * <code>string title = 3 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The title.
         */
        public java.lang.String getTitle() {
          java.lang.Object ref = title_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            title_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * Название позиции
         * </pre>
         *
         * <code>string title = 3 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The bytes for title.
         */
        public com.google.protobuf.ByteString
            getTitleBytes() {
          java.lang.Object ref = title_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            title_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * Название позиции
         * </pre>
         *
         * <code>string title = 3 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The title to set.
         * @return This builder for chaining.
         */
        public Builder setTitle(
            java.lang.String value) {
          if (value == null) { throw new NullPointerException(); }
          title_ = value;
          bitField0_ |= 0x00000004;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Название позиции
         * </pre>
         *
         * <code>string title = 3 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return This builder for chaining.
         */
        public Builder clearTitle() {
          title_ = getDefaultInstance().getTitle();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Название позиции
         * </pre>
         *
         * <code>string title = 3 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The bytes for title to set.
         * @return This builder for chaining.
         */
        public Builder setTitleBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) { throw new NullPointerException(); }
          checkByteStringIsUtf8(value);
          title_ = value;
          bitField0_ |= 0x00000004;
          onChanged();
          return this;
        }

        private java.lang.Object category_ = "";
        /**
         * <pre>
         * Категория позиции (='subscription')
         * </pre>
         *
         * <code>string category = 4 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The category.
         */
        public java.lang.String getCategory() {
          java.lang.Object ref = category_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            category_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * Категория позиции (='subscription')
         * </pre>
         *
         * <code>string category = 4 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The bytes for category.
         */
        public com.google.protobuf.ByteString
            getCategoryBytes() {
          java.lang.Object ref = category_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            category_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * Категория позиции (='subscription')
         * </pre>
         *
         * <code>string category = 4 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The category to set.
         * @return This builder for chaining.
         */
        public Builder setCategory(
            java.lang.String value) {
          if (value == null) { throw new NullPointerException(); }
          category_ = value;
          bitField0_ |= 0x00000008;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Категория позиции (='subscription')
         * </pre>
         *
         * <code>string category = 4 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return This builder for chaining.
         */
        public Builder clearCategory() {
          category_ = getDefaultInstance().getCategory();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Категория позиции (='subscription')
         * </pre>
         *
         * <code>string category = 4 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The bytes for category to set.
         * @return This builder for chaining.
         */
        public Builder setCategoryBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) { throw new NullPointerException(); }
          checkByteStringIsUtf8(value);
          category_ = value;
          bitField0_ |= 0x00000008;
          onChanged();
          return this;
        }

        private float amount_ ;
        /**
         * <pre>
         * Цена в рублях.
         * Число должно быть больше 0
         * </pre>
         *
         * <code>float amount = 5 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The amount.
         */
        @java.lang.Override
        public float getAmount() {
          return amount_;
        }
        /**
         * <pre>
         * Цена в рублях.
         * Число должно быть больше 0
         * </pre>
         *
         * <code>float amount = 5 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The amount to set.
         * @return This builder for chaining.
         */
        public Builder setAmount(float value) {

          amount_ = value;
          bitField0_ |= 0x00000010;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Цена в рублях.
         * Число должно быть больше 0
         * </pre>
         *
         * <code>float amount = 5 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return This builder for chaining.
         */
        public Builder clearAmount() {
          bitField0_ = (bitField0_ & ~0x00000010);
          amount_ = 0F;
          onChanged();
          return this;
        }

        private com.google.protobuf.Timestamp createdAt_;
        private com.google.protobuf.SingleFieldBuilderV3<
            com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> createdAtBuilder_;
        /**
         * <pre>
         * Дата создания позиции платежа.
         * # Тип: DateTime
         * </pre>
         *
         * <code>.google.protobuf.Timestamp created_at = 6 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
         * @return Whether the createdAt field is set.
         */
        public boolean hasCreatedAt() {
          return ((bitField0_ & 0x00000020) != 0);
        }
        /**
         * <pre>
         * Дата создания позиции платежа.
         * # Тип: DateTime
         * </pre>
         *
         * <code>.google.protobuf.Timestamp created_at = 6 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
         * @return The createdAt.
         */
        public com.google.protobuf.Timestamp getCreatedAt() {
          if (createdAtBuilder_ == null) {
            return createdAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createdAt_;
          } else {
            return createdAtBuilder_.getMessage();
          }
        }
        /**
         * <pre>
         * Дата создания позиции платежа.
         * # Тип: DateTime
         * </pre>
         *
         * <code>.google.protobuf.Timestamp created_at = 6 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
         */
        public Builder setCreatedAt(com.google.protobuf.Timestamp value) {
          if (createdAtBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            createdAt_ = value;
          } else {
            createdAtBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000020;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Дата создания позиции платежа.
         * # Тип: DateTime
         * </pre>
         *
         * <code>.google.protobuf.Timestamp created_at = 6 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
         */
        public Builder setCreatedAt(
            com.google.protobuf.Timestamp.Builder builderForValue) {
          if (createdAtBuilder_ == null) {
            createdAt_ = builderForValue.build();
          } else {
            createdAtBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000020;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Дата создания позиции платежа.
         * # Тип: DateTime
         * </pre>
         *
         * <code>.google.protobuf.Timestamp created_at = 6 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
         */
        public Builder mergeCreatedAt(com.google.protobuf.Timestamp value) {
          if (createdAtBuilder_ == null) {
            if (((bitField0_ & 0x00000020) != 0) &&
              createdAt_ != null &&
              createdAt_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
              getCreatedAtBuilder().mergeFrom(value);
            } else {
              createdAt_ = value;
            }
          } else {
            createdAtBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000020;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Дата создания позиции платежа.
         * # Тип: DateTime
         * </pre>
         *
         * <code>.google.protobuf.Timestamp created_at = 6 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
         */
        public Builder clearCreatedAt() {
          bitField0_ = (bitField0_ & ~0x00000020);
          createdAt_ = null;
          if (createdAtBuilder_ != null) {
            createdAtBuilder_.dispose();
            createdAtBuilder_ = null;
          }
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Дата создания позиции платежа.
         * # Тип: DateTime
         * </pre>
         *
         * <code>.google.protobuf.Timestamp created_at = 6 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
         */
        public com.google.protobuf.Timestamp.Builder getCreatedAtBuilder() {
          bitField0_ |= 0x00000020;
          onChanged();
          return getCreatedAtFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Дата создания позиции платежа.
         * # Тип: DateTime
         * </pre>
         *
         * <code>.google.protobuf.Timestamp created_at = 6 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
         */
        public com.google.protobuf.TimestampOrBuilder getCreatedAtOrBuilder() {
          if (createdAtBuilder_ != null) {
            return createdAtBuilder_.getMessageOrBuilder();
          } else {
            return createdAt_ == null ?
                com.google.protobuf.Timestamp.getDefaultInstance() : createdAt_;
          }
        }
        /**
         * <pre>
         * Дата создания позиции платежа.
         * # Тип: DateTime
         * </pre>
         *
         * <code>.google.protobuf.Timestamp created_at = 6 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
            getCreatedAtFieldBuilder() {
          if (createdAtBuilder_ == null) {
            createdAtBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
                    getCreatedAt(),
                    getParentForChildren(),
                    isClean());
            createdAt_ = null;
          }
          return createdAtBuilder_;
        }

        private com.google.protobuf.Timestamp updatedAt_;
        private com.google.protobuf.SingleFieldBuilderV3<
            com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> updatedAtBuilder_;
        /**
         * <pre>
         * Дата обновления позиции платежа.
         * # Тип: DateTime
         * </pre>
         *
         * <code>.google.protobuf.Timestamp updated_at = 7 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
         * @return Whether the updatedAt field is set.
         */
        public boolean hasUpdatedAt() {
          return ((bitField0_ & 0x00000040) != 0);
        }
        /**
         * <pre>
         * Дата обновления позиции платежа.
         * # Тип: DateTime
         * </pre>
         *
         * <code>.google.protobuf.Timestamp updated_at = 7 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
         * @return The updatedAt.
         */
        public com.google.protobuf.Timestamp getUpdatedAt() {
          if (updatedAtBuilder_ == null) {
            return updatedAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : updatedAt_;
          } else {
            return updatedAtBuilder_.getMessage();
          }
        }
        /**
         * <pre>
         * Дата обновления позиции платежа.
         * # Тип: DateTime
         * </pre>
         *
         * <code>.google.protobuf.Timestamp updated_at = 7 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
         */
        public Builder setUpdatedAt(com.google.protobuf.Timestamp value) {
          if (updatedAtBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            updatedAt_ = value;
          } else {
            updatedAtBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000040;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Дата обновления позиции платежа.
         * # Тип: DateTime
         * </pre>
         *
         * <code>.google.protobuf.Timestamp updated_at = 7 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
         */
        public Builder setUpdatedAt(
            com.google.protobuf.Timestamp.Builder builderForValue) {
          if (updatedAtBuilder_ == null) {
            updatedAt_ = builderForValue.build();
          } else {
            updatedAtBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000040;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Дата обновления позиции платежа.
         * # Тип: DateTime
         * </pre>
         *
         * <code>.google.protobuf.Timestamp updated_at = 7 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
         */
        public Builder mergeUpdatedAt(com.google.protobuf.Timestamp value) {
          if (updatedAtBuilder_ == null) {
            if (((bitField0_ & 0x00000040) != 0) &&
              updatedAt_ != null &&
              updatedAt_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
              getUpdatedAtBuilder().mergeFrom(value);
            } else {
              updatedAt_ = value;
            }
          } else {
            updatedAtBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000040;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Дата обновления позиции платежа.
         * # Тип: DateTime
         * </pre>
         *
         * <code>.google.protobuf.Timestamp updated_at = 7 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
         */
        public Builder clearUpdatedAt() {
          bitField0_ = (bitField0_ & ~0x00000040);
          updatedAt_ = null;
          if (updatedAtBuilder_ != null) {
            updatedAtBuilder_.dispose();
            updatedAtBuilder_ = null;
          }
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Дата обновления позиции платежа.
         * # Тип: DateTime
         * </pre>
         *
         * <code>.google.protobuf.Timestamp updated_at = 7 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
         */
        public com.google.protobuf.Timestamp.Builder getUpdatedAtBuilder() {
          bitField0_ |= 0x00000040;
          onChanged();
          return getUpdatedAtFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Дата обновления позиции платежа.
         * # Тип: DateTime
         * </pre>
         *
         * <code>.google.protobuf.Timestamp updated_at = 7 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
         */
        public com.google.protobuf.TimestampOrBuilder getUpdatedAtOrBuilder() {
          if (updatedAtBuilder_ != null) {
            return updatedAtBuilder_.getMessageOrBuilder();
          } else {
            return updatedAt_ == null ?
                com.google.protobuf.Timestamp.getDefaultInstance() : updatedAt_;
          }
        }
        /**
         * <pre>
         * Дата обновления позиции платежа.
         * # Тип: DateTime
         * </pre>
         *
         * <code>.google.protobuf.Timestamp updated_at = 7 [(.google.api.field_behavior) = OUTPUT_ONLY];</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
            getUpdatedAtFieldBuilder() {
          if (updatedAtBuilder_ == null) {
            updatedAtBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
                    getUpdatedAt(),
                    getParentForChildren(),
                    isClean());
            updatedAt_ = null;
          }
          return updatedAtBuilder_;
        }

        private int mrfId_ ;
        /**
         * <pre>
         * Идентификатор МРФ
         * </pre>
         *
         * <code>int32 mrf_id = 8 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The mrfId.
         */
        @java.lang.Override
        public int getMrfId() {
          return mrfId_;
        }
        /**
         * <pre>
         * Идентификатор МРФ
         * </pre>
         *
         * <code>int32 mrf_id = 8 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The mrfId to set.
         * @return This builder for chaining.
         */
        public Builder setMrfId(int value) {

          mrfId_ = value;
          bitField0_ |= 0x00000080;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Идентификатор МРФ
         * </pre>
         *
         * <code>int32 mrf_id = 8 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return This builder for chaining.
         */
        public Builder clearMrfId() {
          bitField0_ = (bitField0_ & ~0x00000080);
          mrfId_ = 0;
          onChanged();
          return this;
        }

        private int rfId_ ;
        /**
         * <pre>
         * Идентификатор РФ
         * </pre>
         *
         * <code>int32 rf_id = 9 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The rfId.
         */
        @java.lang.Override
        public int getRfId() {
          return rfId_;
        }
        /**
         * <pre>
         * Идентификатор РФ
         * </pre>
         *
         * <code>int32 rf_id = 9 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The rfId to set.
         * @return This builder for chaining.
         */
        public Builder setRfId(int value) {

          rfId_ = value;
          bitField0_ |= 0x00000100;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Идентификатор РФ
         * </pre>
         *
         * <code>int32 rf_id = 9 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return This builder for chaining.
         */
        public Builder clearRfId() {
          bitField0_ = (bitField0_ & ~0x00000100);
          rfId_ = 0;
          onChanged();
          return this;
        }

        private java.lang.Object instanceId_ = "";
        /**
         * <pre>
         * Идентификатор экземпляра оплачиваемой подписки.
         * # Тип: Guid
         * </pre>
         *
         * <code>string instance_id = 10 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The instanceId.
         */
        public java.lang.String getInstanceId() {
          java.lang.Object ref = instanceId_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            instanceId_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * Идентификатор экземпляра оплачиваемой подписки.
         * # Тип: Guid
         * </pre>
         *
         * <code>string instance_id = 10 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The bytes for instanceId.
         */
        public com.google.protobuf.ByteString
            getInstanceIdBytes() {
          java.lang.Object ref = instanceId_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            instanceId_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * Идентификатор экземпляра оплачиваемой подписки.
         * # Тип: Guid
         * </pre>
         *
         * <code>string instance_id = 10 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The instanceId to set.
         * @return This builder for chaining.
         */
        public Builder setInstanceId(
            java.lang.String value) {
          if (value == null) { throw new NullPointerException(); }
          instanceId_ = value;
          bitField0_ |= 0x00000200;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Идентификатор экземпляра оплачиваемой подписки.
         * # Тип: Guid
         * </pre>
         *
         * <code>string instance_id = 10 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return This builder for chaining.
         */
        public Builder clearInstanceId() {
          instanceId_ = getDefaultInstance().getInstanceId();
          bitField0_ = (bitField0_ & ~0x00000200);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Идентификатор экземпляра оплачиваемой подписки.
         * # Тип: Guid
         * </pre>
         *
         * <code>string instance_id = 10 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The bytes for instanceId to set.
         * @return This builder for chaining.
         */
        public Builder setInstanceIdBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) { throw new NullPointerException(); }
          checkByteStringIsUtf8(value);
          instanceId_ = value;
          bitField0_ |= 0x00000200;
          onChanged();
          return this;
        }

        private int offeringId_ ;
        /**
         * <pre>
         * Идентификатор предложения оплачиваемой подписки
         * </pre>
         *
         * <code>int32 offering_id = 11 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return The offeringId.
         */
        @java.lang.Override
        public int getOfferingId() {
          return offeringId_;
        }
        /**
         * <pre>
         * Идентификатор предложения оплачиваемой подписки
         * </pre>
         *
         * <code>int32 offering_id = 11 [(.google.api.field_behavior) = REQUIRED];</code>
         * @param value The offeringId to set.
         * @return This builder for chaining.
         */
        public Builder setOfferingId(int value) {

          offeringId_ = value;
          bitField0_ |= 0x00000400;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Идентификатор предложения оплачиваемой подписки
         * </pre>
         *
         * <code>int32 offering_id = 11 [(.google.api.field_behavior) = REQUIRED];</code>
         * @return This builder for chaining.
         */
        public Builder clearOfferingId() {
          bitField0_ = (bitField0_ & ~0x00000400);
          offeringId_ = 0;
          onChanged();
          return this;
        }

        private com.google.protobuf.Timestamp dueDateAt_;
        private com.google.protobuf.SingleFieldBuilderV3<
            com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> dueDateAtBuilder_;
        /**
         * <pre>
         * Срок окончания оплачиваемого периода
         * </pre>
         *
         * <code>.google.protobuf.Timestamp due_date_at = 12;</code>
         * @return Whether the dueDateAt field is set.
         */
        public boolean hasDueDateAt() {
          return ((bitField0_ & 0x00000800) != 0);
        }
        /**
         * <pre>
         * Срок окончания оплачиваемого периода
         * </pre>
         *
         * <code>.google.protobuf.Timestamp due_date_at = 12;</code>
         * @return The dueDateAt.
         */
        public com.google.protobuf.Timestamp getDueDateAt() {
          if (dueDateAtBuilder_ == null) {
            return dueDateAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : dueDateAt_;
          } else {
            return dueDateAtBuilder_.getMessage();
          }
        }
        /**
         * <pre>
         * Срок окончания оплачиваемого периода
         * </pre>
         *
         * <code>.google.protobuf.Timestamp due_date_at = 12;</code>
         */
        public Builder setDueDateAt(com.google.protobuf.Timestamp value) {
          if (dueDateAtBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            dueDateAt_ = value;
          } else {
            dueDateAtBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000800;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Срок окончания оплачиваемого периода
         * </pre>
         *
         * <code>.google.protobuf.Timestamp due_date_at = 12;</code>
         */
        public Builder setDueDateAt(
            com.google.protobuf.Timestamp.Builder builderForValue) {
          if (dueDateAtBuilder_ == null) {
            dueDateAt_ = builderForValue.build();
          } else {
            dueDateAtBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000800;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Срок окончания оплачиваемого периода
         * </pre>
         *
         * <code>.google.protobuf.Timestamp due_date_at = 12;</code>
         */
        public Builder mergeDueDateAt(com.google.protobuf.Timestamp value) {
          if (dueDateAtBuilder_ == null) {
            if (((bitField0_ & 0x00000800) != 0) &&
              dueDateAt_ != null &&
              dueDateAt_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
              getDueDateAtBuilder().mergeFrom(value);
            } else {
              dueDateAt_ = value;
            }
          } else {
            dueDateAtBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000800;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Срок окончания оплачиваемого периода
         * </pre>
         *
         * <code>.google.protobuf.Timestamp due_date_at = 12;</code>
         */
        public Builder clearDueDateAt() {
          bitField0_ = (bitField0_ & ~0x00000800);
          dueDateAt_ = null;
          if (dueDateAtBuilder_ != null) {
            dueDateAtBuilder_.dispose();
            dueDateAtBuilder_ = null;
          }
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Срок окончания оплачиваемого периода
         * </pre>
         *
         * <code>.google.protobuf.Timestamp due_date_at = 12;</code>
         */
        public com.google.protobuf.Timestamp.Builder getDueDateAtBuilder() {
          bitField0_ |= 0x00000800;
          onChanged();
          return getDueDateAtFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Срок окончания оплачиваемого периода
         * </pre>
         *
         * <code>.google.protobuf.Timestamp due_date_at = 12;</code>
         */
        public com.google.protobuf.TimestampOrBuilder getDueDateAtOrBuilder() {
          if (dueDateAtBuilder_ != null) {
            return dueDateAtBuilder_.getMessageOrBuilder();
          } else {
            return dueDateAt_ == null ?
                com.google.protobuf.Timestamp.getDefaultInstance() : dueDateAt_;
          }
        }
        /**
         * <pre>
         * Срок окончания оплачиваемого периода
         * </pre>
         *
         * <code>.google.protobuf.Timestamp due_date_at = 12;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
            getDueDateAtFieldBuilder() {
          if (dueDateAtBuilder_ == null) {
            dueDateAtBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
                    getDueDateAt(),
                    getParentForChildren(),
                    isClean());
            dueDateAt_ = null;
          }
          return dueDateAtBuilder_;
        }

        private java.lang.Object svcTypeId_ = "";
        /**
         * <pre>
         * Идентификатор получателя платежа
         * </pre>
         *
         * <code>string svc_type_id = 13;</code>
         * @return The svcTypeId.
         */
        public java.lang.String getSvcTypeId() {
          java.lang.Object ref = svcTypeId_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            svcTypeId_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * Идентификатор получателя платежа
         * </pre>
         *
         * <code>string svc_type_id = 13;</code>
         * @return The bytes for svcTypeId.
         */
        public com.google.protobuf.ByteString
            getSvcTypeIdBytes() {
          java.lang.Object ref = svcTypeId_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            svcTypeId_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * Идентификатор получателя платежа
         * </pre>
         *
         * <code>string svc_type_id = 13;</code>
         * @param value The svcTypeId to set.
         * @return This builder for chaining.
         */
        public Builder setSvcTypeId(
            java.lang.String value) {
          if (value == null) { throw new NullPointerException(); }
          svcTypeId_ = value;
          bitField0_ |= 0x00001000;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Идентификатор получателя платежа
         * </pre>
         *
         * <code>string svc_type_id = 13;</code>
         * @return This builder for chaining.
         */
        public Builder clearSvcTypeId() {
          svcTypeId_ = getDefaultInstance().getSvcTypeId();
          bitField0_ = (bitField0_ & ~0x00001000);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Идентификатор получателя платежа
         * </pre>
         *
         * <code>string svc_type_id = 13;</code>
         * @param value The bytes for svcTypeId to set.
         * @return This builder for chaining.
         */
        public Builder setSvcTypeIdBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) { throw new NullPointerException(); }
          checkByteStringIsUtf8(value);
          svcTypeId_ = value;
          bitField0_ |= 0x00001000;
          onChanged();
          return this;
        }

        private boolean isDiscount_ ;
        /**
         * <pre>
         * Признак скидки
         * </pre>
         *
         * <code>bool is_discount = 14;</code>
         * @return The isDiscount.
         */
        @java.lang.Override
        public boolean getIsDiscount() {
          return isDiscount_;
        }
        /**
         * <pre>
         * Признак скидки
         * </pre>
         *
         * <code>bool is_discount = 14;</code>
         * @param value The isDiscount to set.
         * @return This builder for chaining.
         */
        public Builder setIsDiscount(boolean value) {

          isDiscount_ = value;
          bitField0_ |= 0x00002000;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Признак скидки
         * </pre>
         *
         * <code>bool is_discount = 14;</code>
         * @return This builder for chaining.
         */
        public Builder clearIsDiscount() {
          bitField0_ = (bitField0_ & ~0x00002000);
          isDiscount_ = 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:keyapis.invoice.v1.Invoice.Position)
      }

      // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.Invoice.Position)
      private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position();
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<Position>
          PARSER = new com.google.protobuf.AbstractParser<Position>() {
        @java.lang.Override
        public Position 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 (com.google.protobuf.UninitializedMessageException e) {
            throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(e)
                .setUnfinishedMessage(builder.buildPartial());
          }
          return builder.buildPartial();
        }
      };

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

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

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public interface SavingErrorOrBuilder extends
        // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.Invoice.SavingError)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * У пользователя уже есть платеж со статусом PENDING
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists invoice_already_exists = 1;</code>
       * @return Whether the invoiceAlreadyExists field is set.
       */
      boolean hasInvoiceAlreadyExists();
      /**
       * <pre>
       * У пользователя уже есть платеж со статусом PENDING
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists invoice_already_exists = 1;</code>
       * @return The invoiceAlreadyExists.
       */
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists getInvoiceAlreadyExists();
      /**
       * <pre>
       * У пользователя уже есть платеж со статусом PENDING
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists invoice_already_exists = 1;</code>
       */
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExistsOrBuilder getInvoiceAlreadyExistsOrBuilder();

      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.ReasonCase getReasonCase();
    }
    /**
     * <pre>
     * Ошибка сохранения.
     * Эти проверки выполняются при работе с базой данных и сторонними сервисами
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.Invoice.SavingError}
     */
    public static final class SavingError extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.Invoice.SavingError)
        SavingErrorOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use SavingError.newBuilder() to construct.
      private SavingError(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private SavingError() {
      }

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

      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_SavingError_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_SavingError_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.Builder.class);
      }

      public interface InvoiceAlreadyExistsOrBuilder extends
          // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists)
          com.google.protobuf.MessageOrBuilder {
      }
      /**
       * <pre>
       * У пользователя уже есть платеж со статусом PENDING
       * </pre>
       *
       * Protobuf type {@code keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists}
       */
      public static final class InvoiceAlreadyExists extends
          com.google.protobuf.GeneratedMessageV3 implements
          // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists)
          InvoiceAlreadyExistsOrBuilder {
      private static final long serialVersionUID = 0L;
        // Use InvoiceAlreadyExists.newBuilder() to construct.
        private InvoiceAlreadyExists(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
          super(builder);
        }
        private InvoiceAlreadyExists() {
        }

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

        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_SavingError_InvoiceAlreadyExists_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_SavingError_InvoiceAlreadyExists_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.Builder.class);
        }

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

          memoizedIsInitialized = 1;
          return true;
        }

        @java.lang.Override
        public void writeTo(com.google.protobuf.CodedOutputStream output)
                            throws java.io.IOException {
          getUnknownFields().writeTo(output);
        }

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

          size = 0;
          size += getUnknownFields().getSerializedSize();
          memoizedSize = size;
          return size;
        }

        @java.lang.Override
        public boolean equals(final java.lang.Object obj) {
          if (obj == this) {
           return true;
          }
          if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists)) {
            return super.equals(obj);
          }
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists) obj;

          if (!getUnknownFields().equals(other.getUnknownFields())) return false;
          return true;
        }

        @java.lang.Override
        public int hashCode() {
          if (memoizedHashCode != 0) {
            return memoizedHashCode;
          }
          int hash = 41;
          hash = (19 * hash) + getDescriptor().hashCode();
          hash = (29 * hash) + getUnknownFields().hashCode();
          memoizedHashCode = hash;
          return hash;
        }

        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists parseFrom(
            java.nio.ByteBuffer data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists parseFrom(
            java.nio.ByteBuffer data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists parseFrom(
            com.google.protobuf.ByteString data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists parseFrom(
            com.google.protobuf.ByteString data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists parseFrom(byte[] data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists parseFrom(
            byte[] data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists parseFrom(java.io.InputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseWithIOException(PARSER, input);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists parseDelimitedFrom(java.io.InputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseDelimitedWithIOException(PARSER, input);
        }

        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists parseFrom(
            com.google.protobuf.CodedInputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseWithIOException(PARSER, input);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists 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;
        }
        /**
         * <pre>
         * У пользователя уже есть платеж со статусом PENDING
         * </pre>
         *
         * Protobuf type {@code keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists}
         */
        public static final class Builder extends
            com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
            // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists)
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExistsOrBuilder {
          public static final com.google.protobuf.Descriptors.Descriptor
              getDescriptor() {
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_SavingError_InvoiceAlreadyExists_descriptor;
          }

          @java.lang.Override
          protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
              internalGetFieldAccessorTable() {
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_SavingError_InvoiceAlreadyExists_fieldAccessorTable
                .ensureFieldAccessorsInitialized(
                    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.Builder.class);
          }

          // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.newBuilder()
          private Builder() {

          }

          private Builder(
              com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
            super(parent);

          }
          @java.lang.Override
          public Builder clear() {
            super.clear();
            return this;
          }

          @java.lang.Override
          public com.google.protobuf.Descriptors.Descriptor
              getDescriptorForType() {
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_SavingError_InvoiceAlreadyExists_descriptor;
          }

          @java.lang.Override
          public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists getDefaultInstanceForType() {
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.getDefaultInstance();
          }

          @java.lang.Override
          public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists build() {
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists result = buildPartial();
            if (!result.isInitialized()) {
              throw newUninitializedMessageException(result);
            }
            return result;
          }

          @java.lang.Override
          public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists buildPartial() {
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists(this);
            onBuilt();
            return result;
          }

          @java.lang.Override
          public Builder mergeFrom(com.google.protobuf.Message other) {
            if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists) {
              return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists)other);
            } else {
              super.mergeFrom(other);
              return this;
            }
          }

          public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists other) {
            if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.getDefaultInstance()) return this;
            this.mergeUnknownFields(other.getUnknownFields());
            onChanged();
            return this;
          }

          @java.lang.Override
          public final boolean isInitialized() {
            return true;
          }

          @java.lang.Override
          public Builder mergeFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws java.io.IOException {
            if (extensionRegistry == null) {
              throw new java.lang.NullPointerException();
            }
            try {
              boolean done = false;
              while (!done) {
                int tag = input.readTag();
                switch (tag) {
                  case 0:
                    done = true;
                    break;
                  default: {
                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                      done = true; // was an endgroup tag
                    }
                    break;
                  } // default:
                } // switch (tag)
              } // while (!done)
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              throw e.unwrapIOException();
            } finally {
              onChanged();
            } // finally
            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:keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists)
        }

        // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists)
        private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists DEFAULT_INSTANCE;
        static {
          DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists();
        }

        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists getDefaultInstance() {
          return DEFAULT_INSTANCE;
        }

        private static final com.google.protobuf.Parser<InvoiceAlreadyExists>
            PARSER = new com.google.protobuf.AbstractParser<InvoiceAlreadyExists>() {
          @java.lang.Override
          public InvoiceAlreadyExists 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 (com.google.protobuf.UninitializedMessageException e) {
              throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
            } catch (java.io.IOException e) {
              throw new com.google.protobuf.InvalidProtocolBufferException(e)
                  .setUnfinishedMessage(builder.buildPartial());
            }
            return builder.buildPartial();
          }
        };

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

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

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists getDefaultInstanceForType() {
          return DEFAULT_INSTANCE;
        }

      }

      private int reasonCase_ = 0;
      @SuppressWarnings("serial")
      private java.lang.Object reason_;
      public enum ReasonCase
          implements com.google.protobuf.Internal.EnumLite,
              com.google.protobuf.AbstractMessage.InternalOneOfEnum {
        INVOICE_ALREADY_EXISTS(1),
        REASON_NOT_SET(0);
        private final int value;
        private ReasonCase(int value) {
          this.value = value;
        }
        /**
         * @param value The number of the enum to look for.
         * @return The enum associated with the given number.
         * @deprecated Use {@link #forNumber(int)} instead.
         */
        @java.lang.Deprecated
        public static ReasonCase valueOf(int value) {
          return forNumber(value);
        }

        public static ReasonCase forNumber(int value) {
          switch (value) {
            case 1: return INVOICE_ALREADY_EXISTS;
            case 0: return REASON_NOT_SET;
            default: return null;
          }
        }
        public int getNumber() {
          return this.value;
        }
      };

      public ReasonCase
      getReasonCase() {
        return ReasonCase.forNumber(
            reasonCase_);
      }

      public static final int INVOICE_ALREADY_EXISTS_FIELD_NUMBER = 1;
      /**
       * <pre>
       * У пользователя уже есть платеж со статусом PENDING
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists invoice_already_exists = 1;</code>
       * @return Whether the invoiceAlreadyExists field is set.
       */
      @java.lang.Override
      public boolean hasInvoiceAlreadyExists() {
        return reasonCase_ == 1;
      }
      /**
       * <pre>
       * У пользователя уже есть платеж со статусом PENDING
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists invoice_already_exists = 1;</code>
       * @return The invoiceAlreadyExists.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists getInvoiceAlreadyExists() {
        if (reasonCase_ == 1) {
           return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists) reason_;
        }
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.getDefaultInstance();
      }
      /**
       * <pre>
       * У пользователя уже есть платеж со статусом PENDING
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists invoice_already_exists = 1;</code>
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExistsOrBuilder getInvoiceAlreadyExistsOrBuilder() {
        if (reasonCase_ == 1) {
           return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists) reason_;
        }
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.getDefaultInstance();
      }

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

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (reasonCase_ == 1) {
          output.writeMessage(1, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists) reason_);
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (reasonCase_ == 1) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists) reason_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError)) {
          return super.equals(obj);
        }
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError) obj;

        if (!getReasonCase().equals(other.getReasonCase())) return false;
        switch (reasonCase_) {
          case 1:
            if (!getInvoiceAlreadyExists()
                .equals(other.getInvoiceAlreadyExists())) return false;
            break;
          case 0:
          default:
        }
        if (!getUnknownFields().equals(other.getUnknownFields())) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        switch (reasonCase_) {
          case 1:
            hash = (37 * hash) + INVOICE_ALREADY_EXISTS_FIELD_NUMBER;
            hash = (53 * hash) + getInvoiceAlreadyExists().hashCode();
            break;
          case 0:
          default:
        }
        hash = (29 * hash) + getUnknownFields().hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError 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;
      }
      /**
       * <pre>
       * Ошибка сохранения.
       * Эти проверки выполняются при работе с базой данных и сторонними сервисами
       * </pre>
       *
       * Protobuf type {@code keyapis.invoice.v1.Invoice.SavingError}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.Invoice.SavingError)
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingErrorOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_SavingError_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_SavingError_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.Builder.class);
        }

        // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.newBuilder()
        private Builder() {

        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);

        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          bitField0_ = 0;
          if (invoiceAlreadyExistsBuilder_ != null) {
            invoiceAlreadyExistsBuilder_.clear();
          }
          reasonCase_ = 0;
          reason_ = null;
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_SavingError_descriptor;
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError getDefaultInstanceForType() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.getDefaultInstance();
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError build() {
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError buildPartial() {
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError(this);
          if (bitField0_ != 0) { buildPartial0(result); }
          buildPartialOneofs(result);
          onBuilt();
          return result;
        }

        private void buildPartial0(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError result) {
          int from_bitField0_ = bitField0_;
        }

        private void buildPartialOneofs(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError result) {
          result.reasonCase_ = reasonCase_;
          result.reason_ = this.reason_;
          if (reasonCase_ == 1 &&
              invoiceAlreadyExistsBuilder_ != null) {
            result.reason_ = invoiceAlreadyExistsBuilder_.build();
          }
        }

        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError) {
            return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError other) {
          if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.getDefaultInstance()) return this;
          switch (other.getReasonCase()) {
            case INVOICE_ALREADY_EXISTS: {
              mergeInvoiceAlreadyExists(other.getInvoiceAlreadyExists());
              break;
            }
            case REASON_NOT_SET: {
              break;
            }
          }
          this.mergeUnknownFields(other.getUnknownFields());
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          if (extensionRegistry == null) {
            throw new java.lang.NullPointerException();
          }
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                case 10: {
                  input.readMessage(
                      getInvoiceAlreadyExistsFieldBuilder().getBuilder(),
                      extensionRegistry);
                  reasonCase_ = 1;
                  break;
                } // case 10
                default: {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
              } // switch (tag)
            } // while (!done)
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.unwrapIOException();
          } finally {
            onChanged();
          } // finally
          return this;
        }
        private int reasonCase_ = 0;
        private java.lang.Object reason_;
        public ReasonCase
            getReasonCase() {
          return ReasonCase.forNumber(
              reasonCase_);
        }

        public Builder clearReason() {
          reasonCase_ = 0;
          reason_ = null;
          onChanged();
          return this;
        }

        private int bitField0_;

        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExistsOrBuilder> invoiceAlreadyExistsBuilder_;
        /**
         * <pre>
         * У пользователя уже есть платеж со статусом PENDING
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists invoice_already_exists = 1;</code>
         * @return Whether the invoiceAlreadyExists field is set.
         */
        @java.lang.Override
        public boolean hasInvoiceAlreadyExists() {
          return reasonCase_ == 1;
        }
        /**
         * <pre>
         * У пользователя уже есть платеж со статусом PENDING
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists invoice_already_exists = 1;</code>
         * @return The invoiceAlreadyExists.
         */
        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists getInvoiceAlreadyExists() {
          if (invoiceAlreadyExistsBuilder_ == null) {
            if (reasonCase_ == 1) {
              return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists) reason_;
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.getDefaultInstance();
          } else {
            if (reasonCase_ == 1) {
              return invoiceAlreadyExistsBuilder_.getMessage();
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * У пользователя уже есть платеж со статусом PENDING
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists invoice_already_exists = 1;</code>
         */
        public Builder setInvoiceAlreadyExists(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists value) {
          if (invoiceAlreadyExistsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            reason_ = value;
            onChanged();
          } else {
            invoiceAlreadyExistsBuilder_.setMessage(value);
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * У пользователя уже есть платеж со статусом PENDING
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists invoice_already_exists = 1;</code>
         */
        public Builder setInvoiceAlreadyExists(
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.Builder builderForValue) {
          if (invoiceAlreadyExistsBuilder_ == null) {
            reason_ = builderForValue.build();
            onChanged();
          } else {
            invoiceAlreadyExistsBuilder_.setMessage(builderForValue.build());
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * У пользователя уже есть платеж со статусом PENDING
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists invoice_already_exists = 1;</code>
         */
        public Builder mergeInvoiceAlreadyExists(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists value) {
          if (invoiceAlreadyExistsBuilder_ == null) {
            if (reasonCase_ == 1 &&
                reason_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.getDefaultInstance()) {
              reason_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.newBuilder((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists) reason_)
                  .mergeFrom(value).buildPartial();
            } else {
              reason_ = value;
            }
            onChanged();
          } else {
            if (reasonCase_ == 1) {
              invoiceAlreadyExistsBuilder_.mergeFrom(value);
            } else {
              invoiceAlreadyExistsBuilder_.setMessage(value);
            }
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * У пользователя уже есть платеж со статусом PENDING
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists invoice_already_exists = 1;</code>
         */
        public Builder clearInvoiceAlreadyExists() {
          if (invoiceAlreadyExistsBuilder_ == null) {
            if (reasonCase_ == 1) {
              reasonCase_ = 0;
              reason_ = null;
              onChanged();
            }
          } else {
            if (reasonCase_ == 1) {
              reasonCase_ = 0;
              reason_ = null;
            }
            invoiceAlreadyExistsBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * У пользователя уже есть платеж со статусом PENDING
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists invoice_already_exists = 1;</code>
         */
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.Builder getInvoiceAlreadyExistsBuilder() {
          return getInvoiceAlreadyExistsFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * У пользователя уже есть платеж со статусом PENDING
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists invoice_already_exists = 1;</code>
         */
        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExistsOrBuilder getInvoiceAlreadyExistsOrBuilder() {
          if ((reasonCase_ == 1) && (invoiceAlreadyExistsBuilder_ != null)) {
            return invoiceAlreadyExistsBuilder_.getMessageOrBuilder();
          } else {
            if (reasonCase_ == 1) {
              return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists) reason_;
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * У пользователя уже есть платеж со статусом PENDING
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.SavingError.InvoiceAlreadyExists invoice_already_exists = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExistsOrBuilder> 
            getInvoiceAlreadyExistsFieldBuilder() {
          if (invoiceAlreadyExistsBuilder_ == null) {
            if (!(reasonCase_ == 1)) {
              reason_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.getDefaultInstance();
            }
            invoiceAlreadyExistsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExistsOrBuilder>(
                    (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.InvoiceAlreadyExists) reason_,
                    getParentForChildren(),
                    isClean());
            reason_ = null;
          }
          reasonCase_ = 1;
          onChanged();
          return invoiceAlreadyExistsBuilder_;
        }
        @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:keyapis.invoice.v1.Invoice.SavingError)
      }

      // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.Invoice.SavingError)
      private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError();
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<SavingError>
          PARSER = new com.google.protobuf.AbstractParser<SavingError>() {
        @java.lang.Override
        public SavingError 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 (com.google.protobuf.UninitializedMessageException e) {
            throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(e)
                .setUnfinishedMessage(builder.buildPartial());
          }
          return builder.buildPartial();
        }
      };

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

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

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public static final int ID_FIELD_NUMBER = 1;
    @SuppressWarnings("serial")
    private volatile java.lang.Object id_ = "";
    /**
     * <pre>
     * Идентификатор платежа.
     * # Тип: Guid
     * </pre>
     *
     * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The id.
     */
    @java.lang.Override
    public java.lang.String getId() {
      java.lang.Object ref = id_;
      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();
        id_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Идентификатор платежа.
     * # Тип: Guid
     * </pre>
     *
     * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for id.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getIdBytes() {
      java.lang.Object ref = id_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        id_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TITLE_FIELD_NUMBER = 2;
    @SuppressWarnings("serial")
    private volatile java.lang.Object title_ = "";
    /**
     * <pre>
     * Описание платежа
     * </pre>
     *
     * <code>string title = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The title.
     */
    @java.lang.Override
    public java.lang.String getTitle() {
      java.lang.Object ref = title_;
      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();
        title_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Описание платежа
     * </pre>
     *
     * <code>string title = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for title.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getTitleBytes() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        title_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int USER_ID_FIELD_NUMBER = 3;
    private int userId_ = 0;
    /**
     * <pre>
     * Идентификатор пользователя
     * </pre>
     *
     * <code>int32 user_id = 3 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The userId.
     */
    @java.lang.Override
    public int getUserId() {
      return userId_;
    }

    public static final int INVOICE_STATUS_TYPE_FIELD_NUMBER = 4;
    private int invoiceStatusType_ = 0;
    /**
     * <pre>
     * Статус платежа
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.InvoiceStatusType invoice_status_type = 4 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The enum numeric value on the wire for invoiceStatusType.
     */
    @java.lang.Override public int getInvoiceStatusTypeValue() {
      return invoiceStatusType_;
    }
    /**
     * <pre>
     * Статус платежа
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.InvoiceStatusType invoice_status_type = 4 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The invoiceStatusType.
     */
    @java.lang.Override public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType getInvoiceStatusType() {
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType result = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType.forNumber(invoiceStatusType_);
      return result == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType.UNRECOGNIZED : result;
    }

    public static final int CREATED_AT_FIELD_NUMBER = 5;
    private com.google.protobuf.Timestamp createdAt_;
    /**
     * <pre>
     * Дата создания платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp created_at = 5 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return Whether the createdAt field is set.
     */
    @java.lang.Override
    public boolean hasCreatedAt() {
      return createdAt_ != null;
    }
    /**
     * <pre>
     * Дата создания платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp created_at = 5 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The createdAt.
     */
    @java.lang.Override
    public com.google.protobuf.Timestamp getCreatedAt() {
      return createdAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createdAt_;
    }
    /**
     * <pre>
     * Дата создания платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp created_at = 5 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    @java.lang.Override
    public com.google.protobuf.TimestampOrBuilder getCreatedAtOrBuilder() {
      return createdAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createdAt_;
    }

    public static final int UPDATED_AT_FIELD_NUMBER = 6;
    private com.google.protobuf.Timestamp updatedAt_;
    /**
     * <pre>
     * Дата обновления платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp updated_at = 6 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return Whether the updatedAt field is set.
     */
    @java.lang.Override
    public boolean hasUpdatedAt() {
      return updatedAt_ != null;
    }
    /**
     * <pre>
     * Дата обновления платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp updated_at = 6 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The updatedAt.
     */
    @java.lang.Override
    public com.google.protobuf.Timestamp getUpdatedAt() {
      return updatedAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : updatedAt_;
    }
    /**
     * <pre>
     * Дата обновления платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp updated_at = 6 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    @java.lang.Override
    public com.google.protobuf.TimestampOrBuilder getUpdatedAtOrBuilder() {
      return updatedAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : updatedAt_;
    }

    public static final int POSITIONS_FIELD_NUMBER = 7;
    @SuppressWarnings("serial")
    private java.util.List<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position> positions_;
    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    @java.lang.Override
    public java.util.List<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position> getPositionsList() {
      return positions_;
    }
    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    @java.lang.Override
    public java.util.List<? extends ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PositionOrBuilder> 
        getPositionsOrBuilderList() {
      return positions_;
    }
    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    @java.lang.Override
    public int getPositionsCount() {
      return positions_.size();
    }
    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position getPositions(int index) {
      return positions_.get(index);
    }
    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PositionOrBuilder getPositionsOrBuilder(
        int index) {
      return positions_.get(index);
    }

    public static final int PAY_INTERFACE_TYPE_FIELD_NUMBER = 8;
    private int payInterfaceType_ = 0;
    /**
     * <pre>
     * Метод платежа
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.PayInterfaceType pay_interface_type = 8;</code>
     * @return The enum numeric value on the wire for payInterfaceType.
     */
    @java.lang.Override public int getPayInterfaceTypeValue() {
      return payInterfaceType_;
    }
    /**
     * <pre>
     * Метод платежа
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.PayInterfaceType pay_interface_type = 8;</code>
     * @return The payInterfaceType.
     */
    @java.lang.Override public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType getPayInterfaceType() {
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType result = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType.forNumber(payInterfaceType_);
      return result == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType.UNRECOGNIZED : result;
    }

    public static final int PAYWAY_TYPE_FIELD_NUMBER = 9;
    private int paywayType_ = 0;
    /**
     * <pre>
     * Способ оплаты
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.PaywayType payway_type = 9;</code>
     * @return The enum numeric value on the wire for paywayType.
     */
    @java.lang.Override public int getPaywayTypeValue() {
      return paywayType_;
    }
    /**
     * <pre>
     * Способ оплаты
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.PaywayType payway_type = 9;</code>
     * @return The paywayType.
     */
    @java.lang.Override public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType getPaywayType() {
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType result = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType.forNumber(paywayType_);
      return result == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType.UNRECOGNIZED : result;
    }

    public static final int STATUS_CHANGED_AT_FIELD_NUMBER = 10;
    private com.google.protobuf.Timestamp statusChangedAt_;
    /**
     * <pre>
     * Дата изменения статуса платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp status_changed_at = 10;</code>
     * @return Whether the statusChangedAt field is set.
     */
    @java.lang.Override
    public boolean hasStatusChangedAt() {
      return statusChangedAt_ != null;
    }
    /**
     * <pre>
     * Дата изменения статуса платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp status_changed_at = 10;</code>
     * @return The statusChangedAt.
     */
    @java.lang.Override
    public com.google.protobuf.Timestamp getStatusChangedAt() {
      return statusChangedAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : statusChangedAt_;
    }
    /**
     * <pre>
     * Дата изменения статуса платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp status_changed_at = 10;</code>
     */
    @java.lang.Override
    public com.google.protobuf.TimestampOrBuilder getStatusChangedAtOrBuilder() {
      return statusChangedAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : statusChangedAt_;
    }

    public static final int PAID_AT_FIELD_NUMBER = 11;
    private com.google.protobuf.Timestamp paidAt_;
    /**
     * <pre>
     * Дата платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp paid_at = 11;</code>
     * @return Whether the paidAt field is set.
     */
    @java.lang.Override
    public boolean hasPaidAt() {
      return paidAt_ != null;
    }
    /**
     * <pre>
     * Дата платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp paid_at = 11;</code>
     * @return The paidAt.
     */
    @java.lang.Override
    public com.google.protobuf.Timestamp getPaidAt() {
      return paidAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : paidAt_;
    }
    /**
     * <pre>
     * Дата платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp paid_at = 11;</code>
     */
    @java.lang.Override
    public com.google.protobuf.TimestampOrBuilder getPaidAtOrBuilder() {
      return paidAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : paidAt_;
    }

    public static final int PAY_URL_FIELD_NUMBER = 12;
    @SuppressWarnings("serial")
    private volatile java.lang.Object payUrl_ = "";
    /**
     * <pre>
     * Платежная ссылка
     * </pre>
     *
     * <code>string pay_url = 12;</code>
     * @return The payUrl.
     */
    @java.lang.Override
    public java.lang.String getPayUrl() {
      java.lang.Object ref = payUrl_;
      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();
        payUrl_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Платежная ссылка
     * </pre>
     *
     * <code>string pay_url = 12;</code>
     * @return The bytes for payUrl.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getPayUrlBytes() {
      java.lang.Object ref = payUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        payUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PAID_BY_CARD_MASKED_FIELD_NUMBER = 13;
    @SuppressWarnings("serial")
    private volatile java.lang.Object paidByCardMasked_ = "";
    /**
     * <pre>
     * Маскированный номер карты при платеже
     * </pre>
     *
     * <code>string paid_by_card_masked = 13;</code>
     * @return The paidByCardMasked.
     */
    @java.lang.Override
    public java.lang.String getPaidByCardMasked() {
      java.lang.Object ref = paidByCardMasked_;
      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();
        paidByCardMasked_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Маскированный номер карты при платеже
     * </pre>
     *
     * <code>string paid_by_card_masked = 13;</code>
     * @return The bytes for paidByCardMasked.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getPaidByCardMaskedBytes() {
      java.lang.Object ref = paidByCardMasked_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        paidByCardMasked_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PAID_BY_CARD_ESPP_ID_FIELD_NUMBER = 14;
    @SuppressWarnings("serial")
    private volatile java.lang.Object paidByCardEsppId_ = "";
    /**
     * <pre>
     * Идентификатор платежного средства в внешней системы
     * </pre>
     *
     * <code>string paid_by_card_espp_id = 14;</code>
     * @return The paidByCardEsppId.
     */
    @java.lang.Override
    public java.lang.String getPaidByCardEsppId() {
      java.lang.Object ref = paidByCardEsppId_;
      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();
        paidByCardEsppId_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Идентификатор платежного средства в внешней системы
     * </pre>
     *
     * <code>string paid_by_card_espp_id = 14;</code>
     * @return The bytes for paidByCardEsppId.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getPaidByCardEsppIdBytes() {
      java.lang.Object ref = paidByCardEsppId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        paidByCardEsppId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CARD_TYPE_FIELD_NUMBER = 15;
    private int cardType_ = 0;
    /**
     * <pre>
     * Тип банковской карты
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.CardType card_type = 15;</code>
     * @return The enum numeric value on the wire for cardType.
     */
    @java.lang.Override public int getCardTypeValue() {
      return cardType_;
    }
    /**
     * <pre>
     * Тип банковской карты
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.CardType card_type = 15;</code>
     * @return The cardType.
     */
    @java.lang.Override public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.CardType getCardType() {
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.CardType result = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.CardType.forNumber(cardType_);
      return result == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.CardType.UNRECOGNIZED : result;
    }

    public static final int ESPP_REQ_STATUS_FIELD_NUMBER = 16;
    private int esppReqStatus_ = 0;
    /**
     * <pre>
     * Код ошибки внешней системы
     * </pre>
     *
     * <code>int32 espp_req_status = 16;</code>
     * @return The esppReqStatus.
     */
    @java.lang.Override
    public int getEsppReqStatus() {
      return esppReqStatus_;
    }

    public static final int ESPP_REQ_USER_MSG_FIELD_NUMBER = 17;
    @SuppressWarnings("serial")
    private volatile java.lang.Object esppReqUserMsg_ = "";
    /**
     * <pre>
     * Комментарий к статусу платежа из внешней системы
     * </pre>
     *
     * <code>string espp_req_user_msg = 17;</code>
     * @return The esppReqUserMsg.
     */
    @java.lang.Override
    public java.lang.String getEsppReqUserMsg() {
      java.lang.Object ref = esppReqUserMsg_;
      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();
        esppReqUserMsg_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Комментарий к статусу платежа из внешней системы
     * </pre>
     *
     * <code>string espp_req_user_msg = 17;</code>
     * @return The bytes for esppReqUserMsg.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getEsppReqUserMsgBytes() {
      java.lang.Object ref = esppReqUserMsg_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        esppReqUserMsg_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ESPP_INVOICE_ID_FIELD_NUMBER = 18;
    @SuppressWarnings("serial")
    private volatile java.lang.Object esppInvoiceId_ = "";
    /**
     * <pre>
     * Уникальный номер транзакции в внешней системы
     * </pre>
     *
     * <code>string espp_invoice_id = 18;</code>
     * @return The esppInvoiceId.
     */
    @java.lang.Override
    public java.lang.String getEsppInvoiceId() {
      java.lang.Object ref = esppInvoiceId_;
      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();
        esppInvoiceId_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Уникальный номер транзакции в внешней системы
     * </pre>
     *
     * <code>string espp_invoice_id = 18;</code>
     * @return The bytes for esppInvoiceId.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getEsppInvoiceIdBytes() {
      java.lang.Object ref = esppInvoiceId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        esppInvoiceId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PHONE_NUMBER_FIELD_NUMBER = 19;
    @SuppressWarnings("serial")
    private volatile java.lang.Object phoneNumber_ = "";
    /**
     * <pre>
     * Номер телефона
     * </pre>
     *
     * <code>string phone_number = 19;</code>
     * @return The phoneNumber.
     */
    @java.lang.Override
    public java.lang.String getPhoneNumber() {
      java.lang.Object ref = phoneNumber_;
      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();
        phoneNumber_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Номер телефона
     * </pre>
     *
     * <code>string phone_number = 19;</code>
     * @return The bytes for phoneNumber.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getPhoneNumberBytes() {
      java.lang.Object ref = phoneNumber_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        phoneNumber_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int EMAIL_FIELD_NUMBER = 20;
    @SuppressWarnings("serial")
    private volatile java.lang.Object email_ = "";
    /**
     * <pre>
     * Электронная почта
     * </pre>
     *
     * <code>string email = 20;</code>
     * @return The email.
     */
    @java.lang.Override
    public java.lang.String getEmail() {
      java.lang.Object ref = email_;
      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();
        email_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Электронная почта
     * </pre>
     *
     * <code>string email = 20;</code>
     * @return The bytes for email.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getEmailBytes() {
      java.lang.Object ref = email_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        email_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(id_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, id_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(title_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, title_);
      }
      if (userId_ != 0) {
        output.writeInt32(3, userId_);
      }
      if (invoiceStatusType_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType.INVOICE_STATUS_TYPE_UNKNOWN.getNumber()) {
        output.writeEnum(4, invoiceStatusType_);
      }
      if (createdAt_ != null) {
        output.writeMessage(5, getCreatedAt());
      }
      if (updatedAt_ != null) {
        output.writeMessage(6, getUpdatedAt());
      }
      for (int i = 0; i < positions_.size(); i++) {
        output.writeMessage(7, positions_.get(i));
      }
      if (payInterfaceType_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType.PAY_INTERFACE_TYPE_UNKNOWN.getNumber()) {
        output.writeEnum(8, payInterfaceType_);
      }
      if (paywayType_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType.PAYWAY_TYPE_UNKNOWN.getNumber()) {
        output.writeEnum(9, paywayType_);
      }
      if (statusChangedAt_ != null) {
        output.writeMessage(10, getStatusChangedAt());
      }
      if (paidAt_ != null) {
        output.writeMessage(11, getPaidAt());
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(payUrl_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 12, payUrl_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(paidByCardMasked_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 13, paidByCardMasked_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(paidByCardEsppId_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 14, paidByCardEsppId_);
      }
      if (cardType_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.CardType.CARD_TYPE_UNKNOWN.getNumber()) {
        output.writeEnum(15, cardType_);
      }
      if (esppReqStatus_ != 0) {
        output.writeInt32(16, esppReqStatus_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(esppReqUserMsg_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 17, esppReqUserMsg_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(esppInvoiceId_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 18, esppInvoiceId_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(phoneNumber_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 19, phoneNumber_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(email_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 20, email_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(id_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, id_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(title_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, title_);
      }
      if (userId_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, userId_);
      }
      if (invoiceStatusType_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType.INVOICE_STATUS_TYPE_UNKNOWN.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(4, invoiceStatusType_);
      }
      if (createdAt_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, getCreatedAt());
      }
      if (updatedAt_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, getUpdatedAt());
      }
      for (int i = 0; i < positions_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, positions_.get(i));
      }
      if (payInterfaceType_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType.PAY_INTERFACE_TYPE_UNKNOWN.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(8, payInterfaceType_);
      }
      if (paywayType_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType.PAYWAY_TYPE_UNKNOWN.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(9, paywayType_);
      }
      if (statusChangedAt_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, getStatusChangedAt());
      }
      if (paidAt_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(11, getPaidAt());
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(payUrl_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(12, payUrl_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(paidByCardMasked_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(13, paidByCardMasked_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(paidByCardEsppId_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(14, paidByCardEsppId_);
      }
      if (cardType_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.CardType.CARD_TYPE_UNKNOWN.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(15, cardType_);
      }
      if (esppReqStatus_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(16, esppReqStatus_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(esppReqUserMsg_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(17, esppReqUserMsg_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(esppInvoiceId_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(18, esppInvoiceId_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(phoneNumber_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(19, phoneNumber_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(email_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(20, email_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice)) {
        return super.equals(obj);
      }
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice) obj;

      if (!getId()
          .equals(other.getId())) return false;
      if (!getTitle()
          .equals(other.getTitle())) return false;
      if (getUserId()
          != other.getUserId()) return false;
      if (invoiceStatusType_ != other.invoiceStatusType_) return false;
      if (hasCreatedAt() != other.hasCreatedAt()) return false;
      if (hasCreatedAt()) {
        if (!getCreatedAt()
            .equals(other.getCreatedAt())) return false;
      }
      if (hasUpdatedAt() != other.hasUpdatedAt()) return false;
      if (hasUpdatedAt()) {
        if (!getUpdatedAt()
            .equals(other.getUpdatedAt())) return false;
      }
      if (!getPositionsList()
          .equals(other.getPositionsList())) return false;
      if (payInterfaceType_ != other.payInterfaceType_) return false;
      if (paywayType_ != other.paywayType_) return false;
      if (hasStatusChangedAt() != other.hasStatusChangedAt()) return false;
      if (hasStatusChangedAt()) {
        if (!getStatusChangedAt()
            .equals(other.getStatusChangedAt())) return false;
      }
      if (hasPaidAt() != other.hasPaidAt()) return false;
      if (hasPaidAt()) {
        if (!getPaidAt()
            .equals(other.getPaidAt())) return false;
      }
      if (!getPayUrl()
          .equals(other.getPayUrl())) return false;
      if (!getPaidByCardMasked()
          .equals(other.getPaidByCardMasked())) return false;
      if (!getPaidByCardEsppId()
          .equals(other.getPaidByCardEsppId())) return false;
      if (cardType_ != other.cardType_) return false;
      if (getEsppReqStatus()
          != other.getEsppReqStatus()) return false;
      if (!getEsppReqUserMsg()
          .equals(other.getEsppReqUserMsg())) return false;
      if (!getEsppInvoiceId()
          .equals(other.getEsppInvoiceId())) return false;
      if (!getPhoneNumber()
          .equals(other.getPhoneNumber())) return false;
      if (!getEmail()
          .equals(other.getEmail())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + ID_FIELD_NUMBER;
      hash = (53 * hash) + getId().hashCode();
      hash = (37 * hash) + TITLE_FIELD_NUMBER;
      hash = (53 * hash) + getTitle().hashCode();
      hash = (37 * hash) + USER_ID_FIELD_NUMBER;
      hash = (53 * hash) + getUserId();
      hash = (37 * hash) + INVOICE_STATUS_TYPE_FIELD_NUMBER;
      hash = (53 * hash) + invoiceStatusType_;
      if (hasCreatedAt()) {
        hash = (37 * hash) + CREATED_AT_FIELD_NUMBER;
        hash = (53 * hash) + getCreatedAt().hashCode();
      }
      if (hasUpdatedAt()) {
        hash = (37 * hash) + UPDATED_AT_FIELD_NUMBER;
        hash = (53 * hash) + getUpdatedAt().hashCode();
      }
      if (getPositionsCount() > 0) {
        hash = (37 * hash) + POSITIONS_FIELD_NUMBER;
        hash = (53 * hash) + getPositionsList().hashCode();
      }
      hash = (37 * hash) + PAY_INTERFACE_TYPE_FIELD_NUMBER;
      hash = (53 * hash) + payInterfaceType_;
      hash = (37 * hash) + PAYWAY_TYPE_FIELD_NUMBER;
      hash = (53 * hash) + paywayType_;
      if (hasStatusChangedAt()) {
        hash = (37 * hash) + STATUS_CHANGED_AT_FIELD_NUMBER;
        hash = (53 * hash) + getStatusChangedAt().hashCode();
      }
      if (hasPaidAt()) {
        hash = (37 * hash) + PAID_AT_FIELD_NUMBER;
        hash = (53 * hash) + getPaidAt().hashCode();
      }
      hash = (37 * hash) + PAY_URL_FIELD_NUMBER;
      hash = (53 * hash) + getPayUrl().hashCode();
      hash = (37 * hash) + PAID_BY_CARD_MASKED_FIELD_NUMBER;
      hash = (53 * hash) + getPaidByCardMasked().hashCode();
      hash = (37 * hash) + PAID_BY_CARD_ESPP_ID_FIELD_NUMBER;
      hash = (53 * hash) + getPaidByCardEsppId().hashCode();
      hash = (37 * hash) + CARD_TYPE_FIELD_NUMBER;
      hash = (53 * hash) + cardType_;
      hash = (37 * hash) + ESPP_REQ_STATUS_FIELD_NUMBER;
      hash = (53 * hash) + getEsppReqStatus();
      hash = (37 * hash) + ESPP_REQ_USER_MSG_FIELD_NUMBER;
      hash = (53 * hash) + getEsppReqUserMsg().hashCode();
      hash = (37 * hash) + ESPP_INVOICE_ID_FIELD_NUMBER;
      hash = (53 * hash) + getEsppInvoiceId().hashCode();
      hash = (37 * hash) + PHONE_NUMBER_FIELD_NUMBER;
      hash = (53 * hash) + getPhoneNumber().hashCode();
      hash = (37 * hash) + EMAIL_FIELD_NUMBER;
      hash = (53 * hash) + getEmail().hashCode();
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice 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;
    }
    /**
     * <pre>
     * Выставленный счёт
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.Invoice}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.Invoice)
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder.class);
      }

      // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        id_ = "";
        title_ = "";
        userId_ = 0;
        invoiceStatusType_ = 0;
        createdAt_ = null;
        if (createdAtBuilder_ != null) {
          createdAtBuilder_.dispose();
          createdAtBuilder_ = null;
        }
        updatedAt_ = null;
        if (updatedAtBuilder_ != null) {
          updatedAtBuilder_.dispose();
          updatedAtBuilder_ = null;
        }
        if (positionsBuilder_ == null) {
          positions_ = java.util.Collections.emptyList();
        } else {
          positions_ = null;
          positionsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        payInterfaceType_ = 0;
        paywayType_ = 0;
        statusChangedAt_ = null;
        if (statusChangedAtBuilder_ != null) {
          statusChangedAtBuilder_.dispose();
          statusChangedAtBuilder_ = null;
        }
        paidAt_ = null;
        if (paidAtBuilder_ != null) {
          paidAtBuilder_.dispose();
          paidAtBuilder_ = null;
        }
        payUrl_ = "";
        paidByCardMasked_ = "";
        paidByCardEsppId_ = "";
        cardType_ = 0;
        esppReqStatus_ = 0;
        esppReqUserMsg_ = "";
        esppInvoiceId_ = "";
        phoneNumber_ = "";
        email_ = "";
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_Invoice_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice getDefaultInstanceForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice build() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice buildPartial() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice(this);
        buildPartialRepeatedFields(result);
        if (bitField0_ != 0) { buildPartial0(result); }
        onBuilt();
        return result;
      }

      private void buildPartialRepeatedFields(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice result) {
        if (positionsBuilder_ == null) {
          if (((bitField0_ & 0x00000040) != 0)) {
            positions_ = java.util.Collections.unmodifiableList(positions_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.positions_ = positions_;
        } else {
          result.positions_ = positionsBuilder_.build();
        }
      }

      private void buildPartial0(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.id_ = id_;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.title_ = title_;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.userId_ = userId_;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.invoiceStatusType_ = invoiceStatusType_;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          result.createdAt_ = createdAtBuilder_ == null
              ? createdAt_
              : createdAtBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          result.updatedAt_ = updatedAtBuilder_ == null
              ? updatedAt_
              : updatedAtBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) != 0)) {
          result.payInterfaceType_ = payInterfaceType_;
        }
        if (((from_bitField0_ & 0x00000100) != 0)) {
          result.paywayType_ = paywayType_;
        }
        if (((from_bitField0_ & 0x00000200) != 0)) {
          result.statusChangedAt_ = statusChangedAtBuilder_ == null
              ? statusChangedAt_
              : statusChangedAtBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000400) != 0)) {
          result.paidAt_ = paidAtBuilder_ == null
              ? paidAt_
              : paidAtBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000800) != 0)) {
          result.payUrl_ = payUrl_;
        }
        if (((from_bitField0_ & 0x00001000) != 0)) {
          result.paidByCardMasked_ = paidByCardMasked_;
        }
        if (((from_bitField0_ & 0x00002000) != 0)) {
          result.paidByCardEsppId_ = paidByCardEsppId_;
        }
        if (((from_bitField0_ & 0x00004000) != 0)) {
          result.cardType_ = cardType_;
        }
        if (((from_bitField0_ & 0x00008000) != 0)) {
          result.esppReqStatus_ = esppReqStatus_;
        }
        if (((from_bitField0_ & 0x00010000) != 0)) {
          result.esppReqUserMsg_ = esppReqUserMsg_;
        }
        if (((from_bitField0_ & 0x00020000) != 0)) {
          result.esppInvoiceId_ = esppInvoiceId_;
        }
        if (((from_bitField0_ & 0x00040000) != 0)) {
          result.phoneNumber_ = phoneNumber_;
        }
        if (((from_bitField0_ & 0x00080000) != 0)) {
          result.email_ = email_;
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice) {
          return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice other) {
        if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDefaultInstance()) return this;
        if (!other.getId().isEmpty()) {
          id_ = other.id_;
          bitField0_ |= 0x00000001;
          onChanged();
        }
        if (!other.getTitle().isEmpty()) {
          title_ = other.title_;
          bitField0_ |= 0x00000002;
          onChanged();
        }
        if (other.getUserId() != 0) {
          setUserId(other.getUserId());
        }
        if (other.invoiceStatusType_ != 0) {
          setInvoiceStatusTypeValue(other.getInvoiceStatusTypeValue());
        }
        if (other.hasCreatedAt()) {
          mergeCreatedAt(other.getCreatedAt());
        }
        if (other.hasUpdatedAt()) {
          mergeUpdatedAt(other.getUpdatedAt());
        }
        if (positionsBuilder_ == null) {
          if (!other.positions_.isEmpty()) {
            if (positions_.isEmpty()) {
              positions_ = other.positions_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensurePositionsIsMutable();
              positions_.addAll(other.positions_);
            }
            onChanged();
          }
        } else {
          if (!other.positions_.isEmpty()) {
            if (positionsBuilder_.isEmpty()) {
              positionsBuilder_.dispose();
              positionsBuilder_ = null;
              positions_ = other.positions_;
              bitField0_ = (bitField0_ & ~0x00000040);
              positionsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getPositionsFieldBuilder() : null;
            } else {
              positionsBuilder_.addAllMessages(other.positions_);
            }
          }
        }
        if (other.payInterfaceType_ != 0) {
          setPayInterfaceTypeValue(other.getPayInterfaceTypeValue());
        }
        if (other.paywayType_ != 0) {
          setPaywayTypeValue(other.getPaywayTypeValue());
        }
        if (other.hasStatusChangedAt()) {
          mergeStatusChangedAt(other.getStatusChangedAt());
        }
        if (other.hasPaidAt()) {
          mergePaidAt(other.getPaidAt());
        }
        if (!other.getPayUrl().isEmpty()) {
          payUrl_ = other.payUrl_;
          bitField0_ |= 0x00000800;
          onChanged();
        }
        if (!other.getPaidByCardMasked().isEmpty()) {
          paidByCardMasked_ = other.paidByCardMasked_;
          bitField0_ |= 0x00001000;
          onChanged();
        }
        if (!other.getPaidByCardEsppId().isEmpty()) {
          paidByCardEsppId_ = other.paidByCardEsppId_;
          bitField0_ |= 0x00002000;
          onChanged();
        }
        if (other.cardType_ != 0) {
          setCardTypeValue(other.getCardTypeValue());
        }
        if (other.getEsppReqStatus() != 0) {
          setEsppReqStatus(other.getEsppReqStatus());
        }
        if (!other.getEsppReqUserMsg().isEmpty()) {
          esppReqUserMsg_ = other.esppReqUserMsg_;
          bitField0_ |= 0x00010000;
          onChanged();
        }
        if (!other.getEsppInvoiceId().isEmpty()) {
          esppInvoiceId_ = other.esppInvoiceId_;
          bitField0_ |= 0x00020000;
          onChanged();
        }
        if (!other.getPhoneNumber().isEmpty()) {
          phoneNumber_ = other.phoneNumber_;
          bitField0_ |= 0x00040000;
          onChanged();
        }
        if (!other.getEmail().isEmpty()) {
          email_ = other.email_;
          bitField0_ |= 0x00080000;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                id_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000001;
                break;
              } // case 10
              case 18: {
                title_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000002;
                break;
              } // case 18
              case 24: {
                userId_ = input.readInt32();
                bitField0_ |= 0x00000004;
                break;
              } // case 24
              case 32: {
                invoiceStatusType_ = input.readEnum();
                bitField0_ |= 0x00000008;
                break;
              } // case 32
              case 42: {
                input.readMessage(
                    getCreatedAtFieldBuilder().getBuilder(),
                    extensionRegistry);
                bitField0_ |= 0x00000010;
                break;
              } // case 42
              case 50: {
                input.readMessage(
                    getUpdatedAtFieldBuilder().getBuilder(),
                    extensionRegistry);
                bitField0_ |= 0x00000020;
                break;
              } // case 50
              case 58: {
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position m =
                    input.readMessage(
                        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.parser(),
                        extensionRegistry);
                if (positionsBuilder_ == null) {
                  ensurePositionsIsMutable();
                  positions_.add(m);
                } else {
                  positionsBuilder_.addMessage(m);
                }
                break;
              } // case 58
              case 64: {
                payInterfaceType_ = input.readEnum();
                bitField0_ |= 0x00000080;
                break;
              } // case 64
              case 72: {
                paywayType_ = input.readEnum();
                bitField0_ |= 0x00000100;
                break;
              } // case 72
              case 82: {
                input.readMessage(
                    getStatusChangedAtFieldBuilder().getBuilder(),
                    extensionRegistry);
                bitField0_ |= 0x00000200;
                break;
              } // case 82
              case 90: {
                input.readMessage(
                    getPaidAtFieldBuilder().getBuilder(),
                    extensionRegistry);
                bitField0_ |= 0x00000400;
                break;
              } // case 90
              case 98: {
                payUrl_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000800;
                break;
              } // case 98
              case 106: {
                paidByCardMasked_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00001000;
                break;
              } // case 106
              case 114: {
                paidByCardEsppId_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00002000;
                break;
              } // case 114
              case 120: {
                cardType_ = input.readEnum();
                bitField0_ |= 0x00004000;
                break;
              } // case 120
              case 128: {
                esppReqStatus_ = input.readInt32();
                bitField0_ |= 0x00008000;
                break;
              } // case 128
              case 138: {
                esppReqUserMsg_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00010000;
                break;
              } // case 138
              case 146: {
                esppInvoiceId_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00020000;
                break;
              } // case 146
              case 154: {
                phoneNumber_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00040000;
                break;
              } // case 154
              case 162: {
                email_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00080000;
                break;
              } // case 162
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private java.lang.Object id_ = "";
      /**
       * <pre>
       * Идентификатор платежа.
       * # Тип: Guid
       * </pre>
       *
       * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The id.
       */
      public java.lang.String getId() {
        java.lang.Object ref = id_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          id_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Идентификатор платежа.
       * # Тип: Guid
       * </pre>
       *
       * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for id.
       */
      public com.google.protobuf.ByteString
          getIdBytes() {
        java.lang.Object ref = id_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          id_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Идентификатор платежа.
       * # Тип: Guid
       * </pre>
       *
       * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The id to set.
       * @return This builder for chaining.
       */
      public Builder setId(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        id_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Идентификатор платежа.
       * # Тип: Guid
       * </pre>
       *
       * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return This builder for chaining.
       */
      public Builder clearId() {
        id_ = getDefaultInstance().getId();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Идентификатор платежа.
       * # Тип: Guid
       * </pre>
       *
       * <code>string id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The bytes for id to set.
       * @return This builder for chaining.
       */
      public Builder setIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        id_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }

      private java.lang.Object title_ = "";
      /**
       * <pre>
       * Описание платежа
       * </pre>
       *
       * <code>string title = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The title.
       */
      public java.lang.String getTitle() {
        java.lang.Object ref = title_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          title_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Описание платежа
       * </pre>
       *
       * <code>string title = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for title.
       */
      public com.google.protobuf.ByteString
          getTitleBytes() {
        java.lang.Object ref = title_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          title_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Описание платежа
       * </pre>
       *
       * <code>string title = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The title to set.
       * @return This builder for chaining.
       */
      public Builder setTitle(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        title_ = value;
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Описание платежа
       * </pre>
       *
       * <code>string title = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return This builder for chaining.
       */
      public Builder clearTitle() {
        title_ = getDefaultInstance().getTitle();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Описание платежа
       * </pre>
       *
       * <code>string title = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The bytes for title to set.
       * @return This builder for chaining.
       */
      public Builder setTitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        title_ = value;
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }

      private int userId_ ;
      /**
       * <pre>
       * Идентификатор пользователя
       * </pre>
       *
       * <code>int32 user_id = 3 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The userId.
       */
      @java.lang.Override
      public int getUserId() {
        return userId_;
      }
      /**
       * <pre>
       * Идентификатор пользователя
       * </pre>
       *
       * <code>int32 user_id = 3 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The userId to set.
       * @return This builder for chaining.
       */
      public Builder setUserId(int value) {

        userId_ = value;
        bitField0_ |= 0x00000004;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Идентификатор пользователя
       * </pre>
       *
       * <code>int32 user_id = 3 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return This builder for chaining.
       */
      public Builder clearUserId() {
        bitField0_ = (bitField0_ & ~0x00000004);
        userId_ = 0;
        onChanged();
        return this;
      }

      private int invoiceStatusType_ = 0;
      /**
       * <pre>
       * Статус платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.InvoiceStatusType invoice_status_type = 4 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The enum numeric value on the wire for invoiceStatusType.
       */
      @java.lang.Override public int getInvoiceStatusTypeValue() {
        return invoiceStatusType_;
      }
      /**
       * <pre>
       * Статус платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.InvoiceStatusType invoice_status_type = 4 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The enum numeric value on the wire for invoiceStatusType to set.
       * @return This builder for chaining.
       */
      public Builder setInvoiceStatusTypeValue(int value) {
        invoiceStatusType_ = value;
        bitField0_ |= 0x00000008;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Статус платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.InvoiceStatusType invoice_status_type = 4 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The invoiceStatusType.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType getInvoiceStatusType() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType result = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType.forNumber(invoiceStatusType_);
        return result == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType.UNRECOGNIZED : result;
      }
      /**
       * <pre>
       * Статус платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.InvoiceStatusType invoice_status_type = 4 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The invoiceStatusType to set.
       * @return This builder for chaining.
       */
      public Builder setInvoiceStatusType(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        invoiceStatusType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Статус платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.InvoiceStatusType invoice_status_type = 4 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return This builder for chaining.
       */
      public Builder clearInvoiceStatusType() {
        bitField0_ = (bitField0_ & ~0x00000008);
        invoiceStatusType_ = 0;
        onChanged();
        return this;
      }

      private com.google.protobuf.Timestamp createdAt_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> createdAtBuilder_;
      /**
       * <pre>
       * Дата создания платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 5 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return Whether the createdAt field is set.
       */
      public boolean hasCreatedAt() {
        return ((bitField0_ & 0x00000010) != 0);
      }
      /**
       * <pre>
       * Дата создания платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 5 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The createdAt.
       */
      public com.google.protobuf.Timestamp getCreatedAt() {
        if (createdAtBuilder_ == null) {
          return createdAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createdAt_;
        } else {
          return createdAtBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Дата создания платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 5 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder setCreatedAt(com.google.protobuf.Timestamp value) {
        if (createdAtBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          createdAt_ = value;
        } else {
          createdAtBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата создания платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 5 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder setCreatedAt(
          com.google.protobuf.Timestamp.Builder builderForValue) {
        if (createdAtBuilder_ == null) {
          createdAt_ = builderForValue.build();
        } else {
          createdAtBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата создания платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 5 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder mergeCreatedAt(com.google.protobuf.Timestamp value) {
        if (createdAtBuilder_ == null) {
          if (((bitField0_ & 0x00000010) != 0) &&
            createdAt_ != null &&
            createdAt_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
            getCreatedAtBuilder().mergeFrom(value);
          } else {
            createdAt_ = value;
          }
        } else {
          createdAtBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата создания платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 5 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder clearCreatedAt() {
        bitField0_ = (bitField0_ & ~0x00000010);
        createdAt_ = null;
        if (createdAtBuilder_ != null) {
          createdAtBuilder_.dispose();
          createdAtBuilder_ = null;
        }
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата создания платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 5 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public com.google.protobuf.Timestamp.Builder getCreatedAtBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getCreatedAtFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Дата создания платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 5 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public com.google.protobuf.TimestampOrBuilder getCreatedAtOrBuilder() {
        if (createdAtBuilder_ != null) {
          return createdAtBuilder_.getMessageOrBuilder();
        } else {
          return createdAt_ == null ?
              com.google.protobuf.Timestamp.getDefaultInstance() : createdAt_;
        }
      }
      /**
       * <pre>
       * Дата создания платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp created_at = 5 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
          getCreatedAtFieldBuilder() {
        if (createdAtBuilder_ == null) {
          createdAtBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
                  getCreatedAt(),
                  getParentForChildren(),
                  isClean());
          createdAt_ = null;
        }
        return createdAtBuilder_;
      }

      private com.google.protobuf.Timestamp updatedAt_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> updatedAtBuilder_;
      /**
       * <pre>
       * Дата обновления платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp updated_at = 6 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return Whether the updatedAt field is set.
       */
      public boolean hasUpdatedAt() {
        return ((bitField0_ & 0x00000020) != 0);
      }
      /**
       * <pre>
       * Дата обновления платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp updated_at = 6 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The updatedAt.
       */
      public com.google.protobuf.Timestamp getUpdatedAt() {
        if (updatedAtBuilder_ == null) {
          return updatedAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : updatedAt_;
        } else {
          return updatedAtBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Дата обновления платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp updated_at = 6 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder setUpdatedAt(com.google.protobuf.Timestamp value) {
        if (updatedAtBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          updatedAt_ = value;
        } else {
          updatedAtBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата обновления платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp updated_at = 6 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder setUpdatedAt(
          com.google.protobuf.Timestamp.Builder builderForValue) {
        if (updatedAtBuilder_ == null) {
          updatedAt_ = builderForValue.build();
        } else {
          updatedAtBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата обновления платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp updated_at = 6 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder mergeUpdatedAt(com.google.protobuf.Timestamp value) {
        if (updatedAtBuilder_ == null) {
          if (((bitField0_ & 0x00000020) != 0) &&
            updatedAt_ != null &&
            updatedAt_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
            getUpdatedAtBuilder().mergeFrom(value);
          } else {
            updatedAt_ = value;
          }
        } else {
          updatedAtBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата обновления платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp updated_at = 6 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder clearUpdatedAt() {
        bitField0_ = (bitField0_ & ~0x00000020);
        updatedAt_ = null;
        if (updatedAtBuilder_ != null) {
          updatedAtBuilder_.dispose();
          updatedAtBuilder_ = null;
        }
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата обновления платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp updated_at = 6 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public com.google.protobuf.Timestamp.Builder getUpdatedAtBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getUpdatedAtFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Дата обновления платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp updated_at = 6 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public com.google.protobuf.TimestampOrBuilder getUpdatedAtOrBuilder() {
        if (updatedAtBuilder_ != null) {
          return updatedAtBuilder_.getMessageOrBuilder();
        } else {
          return updatedAt_ == null ?
              com.google.protobuf.Timestamp.getDefaultInstance() : updatedAt_;
        }
      }
      /**
       * <pre>
       * Дата обновления платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp updated_at = 6 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
          getUpdatedAtFieldBuilder() {
        if (updatedAtBuilder_ == null) {
          updatedAtBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
                  getUpdatedAt(),
                  getParentForChildren(),
                  isClean());
          updatedAt_ = null;
        }
        return updatedAtBuilder_;
      }

      private java.util.List<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position> positions_ =
        java.util.Collections.emptyList();
      private void ensurePositionsIsMutable() {
        if (!((bitField0_ & 0x00000040) != 0)) {
          positions_ = new java.util.ArrayList<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position>(positions_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PositionOrBuilder> positionsBuilder_;

      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public java.util.List<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position> getPositionsList() {
        if (positionsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(positions_);
        } else {
          return positionsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public int getPositionsCount() {
        if (positionsBuilder_ == null) {
          return positions_.size();
        } else {
          return positionsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position getPositions(int index) {
        if (positionsBuilder_ == null) {
          return positions_.get(index);
        } else {
          return positionsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder setPositions(
          int index, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position value) {
        if (positionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePositionsIsMutable();
          positions_.set(index, value);
          onChanged();
        } else {
          positionsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder setPositions(
          int index, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder builderForValue) {
        if (positionsBuilder_ == null) {
          ensurePositionsIsMutable();
          positions_.set(index, builderForValue.build());
          onChanged();
        } else {
          positionsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder addPositions(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position value) {
        if (positionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePositionsIsMutable();
          positions_.add(value);
          onChanged();
        } else {
          positionsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder addPositions(
          int index, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position value) {
        if (positionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePositionsIsMutable();
          positions_.add(index, value);
          onChanged();
        } else {
          positionsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder addPositions(
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder builderForValue) {
        if (positionsBuilder_ == null) {
          ensurePositionsIsMutable();
          positions_.add(builderForValue.build());
          onChanged();
        } else {
          positionsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder addPositions(
          int index, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder builderForValue) {
        if (positionsBuilder_ == null) {
          ensurePositionsIsMutable();
          positions_.add(index, builderForValue.build());
          onChanged();
        } else {
          positionsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder addAllPositions(
          java.lang.Iterable<? extends ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position> values) {
        if (positionsBuilder_ == null) {
          ensurePositionsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, positions_);
          onChanged();
        } else {
          positionsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder clearPositions() {
        if (positionsBuilder_ == null) {
          positions_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          positionsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder removePositions(int index) {
        if (positionsBuilder_ == null) {
          ensurePositionsIsMutable();
          positions_.remove(index);
          onChanged();
        } else {
          positionsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder getPositionsBuilder(
          int index) {
        return getPositionsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PositionOrBuilder getPositionsOrBuilder(
          int index) {
        if (positionsBuilder_ == null) {
          return positions_.get(index);  } else {
          return positionsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public java.util.List<? extends ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PositionOrBuilder> 
           getPositionsOrBuilderList() {
        if (positionsBuilder_ != null) {
          return positionsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(positions_);
        }
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder addPositionsBuilder() {
        return getPositionsFieldBuilder().addBuilder(
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.getDefaultInstance());
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder addPositionsBuilder(
          int index) {
        return getPositionsFieldBuilder().addBuilder(
            index, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.getDefaultInstance());
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 7 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public java.util.List<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder> 
           getPositionsBuilderList() {
        return getPositionsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PositionOrBuilder> 
          getPositionsFieldBuilder() {
        if (positionsBuilder_ == null) {
          positionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PositionOrBuilder>(
                  positions_,
                  ((bitField0_ & 0x00000040) != 0),
                  getParentForChildren(),
                  isClean());
          positions_ = null;
        }
        return positionsBuilder_;
      }

      private int payInterfaceType_ = 0;
      /**
       * <pre>
       * Метод платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PayInterfaceType pay_interface_type = 8;</code>
       * @return The enum numeric value on the wire for payInterfaceType.
       */
      @java.lang.Override public int getPayInterfaceTypeValue() {
        return payInterfaceType_;
      }
      /**
       * <pre>
       * Метод платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PayInterfaceType pay_interface_type = 8;</code>
       * @param value The enum numeric value on the wire for payInterfaceType to set.
       * @return This builder for chaining.
       */
      public Builder setPayInterfaceTypeValue(int value) {
        payInterfaceType_ = value;
        bitField0_ |= 0x00000080;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Метод платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PayInterfaceType pay_interface_type = 8;</code>
       * @return The payInterfaceType.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType getPayInterfaceType() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType result = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType.forNumber(payInterfaceType_);
        return result == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType.UNRECOGNIZED : result;
      }
      /**
       * <pre>
       * Метод платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PayInterfaceType pay_interface_type = 8;</code>
       * @param value The payInterfaceType to set.
       * @return This builder for chaining.
       */
      public Builder setPayInterfaceType(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000080;
        payInterfaceType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Метод платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PayInterfaceType pay_interface_type = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearPayInterfaceType() {
        bitField0_ = (bitField0_ & ~0x00000080);
        payInterfaceType_ = 0;
        onChanged();
        return this;
      }

      private int paywayType_ = 0;
      /**
       * <pre>
       * Способ оплаты
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PaywayType payway_type = 9;</code>
       * @return The enum numeric value on the wire for paywayType.
       */
      @java.lang.Override public int getPaywayTypeValue() {
        return paywayType_;
      }
      /**
       * <pre>
       * Способ оплаты
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PaywayType payway_type = 9;</code>
       * @param value The enum numeric value on the wire for paywayType to set.
       * @return This builder for chaining.
       */
      public Builder setPaywayTypeValue(int value) {
        paywayType_ = value;
        bitField0_ |= 0x00000100;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Способ оплаты
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PaywayType payway_type = 9;</code>
       * @return The paywayType.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType getPaywayType() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType result = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType.forNumber(paywayType_);
        return result == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType.UNRECOGNIZED : result;
      }
      /**
       * <pre>
       * Способ оплаты
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PaywayType payway_type = 9;</code>
       * @param value The paywayType to set.
       * @return This builder for chaining.
       */
      public Builder setPaywayType(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000100;
        paywayType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Способ оплаты
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PaywayType payway_type = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearPaywayType() {
        bitField0_ = (bitField0_ & ~0x00000100);
        paywayType_ = 0;
        onChanged();
        return this;
      }

      private com.google.protobuf.Timestamp statusChangedAt_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> statusChangedAtBuilder_;
      /**
       * <pre>
       * Дата изменения статуса платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp status_changed_at = 10;</code>
       * @return Whether the statusChangedAt field is set.
       */
      public boolean hasStatusChangedAt() {
        return ((bitField0_ & 0x00000200) != 0);
      }
      /**
       * <pre>
       * Дата изменения статуса платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp status_changed_at = 10;</code>
       * @return The statusChangedAt.
       */
      public com.google.protobuf.Timestamp getStatusChangedAt() {
        if (statusChangedAtBuilder_ == null) {
          return statusChangedAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : statusChangedAt_;
        } else {
          return statusChangedAtBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Дата изменения статуса платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp status_changed_at = 10;</code>
       */
      public Builder setStatusChangedAt(com.google.protobuf.Timestamp value) {
        if (statusChangedAtBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          statusChangedAt_ = value;
        } else {
          statusChangedAtBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000200;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата изменения статуса платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp status_changed_at = 10;</code>
       */
      public Builder setStatusChangedAt(
          com.google.protobuf.Timestamp.Builder builderForValue) {
        if (statusChangedAtBuilder_ == null) {
          statusChangedAt_ = builderForValue.build();
        } else {
          statusChangedAtBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000200;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата изменения статуса платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp status_changed_at = 10;</code>
       */
      public Builder mergeStatusChangedAt(com.google.protobuf.Timestamp value) {
        if (statusChangedAtBuilder_ == null) {
          if (((bitField0_ & 0x00000200) != 0) &&
            statusChangedAt_ != null &&
            statusChangedAt_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
            getStatusChangedAtBuilder().mergeFrom(value);
          } else {
            statusChangedAt_ = value;
          }
        } else {
          statusChangedAtBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000200;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата изменения статуса платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp status_changed_at = 10;</code>
       */
      public Builder clearStatusChangedAt() {
        bitField0_ = (bitField0_ & ~0x00000200);
        statusChangedAt_ = null;
        if (statusChangedAtBuilder_ != null) {
          statusChangedAtBuilder_.dispose();
          statusChangedAtBuilder_ = null;
        }
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата изменения статуса платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp status_changed_at = 10;</code>
       */
      public com.google.protobuf.Timestamp.Builder getStatusChangedAtBuilder() {
        bitField0_ |= 0x00000200;
        onChanged();
        return getStatusChangedAtFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Дата изменения статуса платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp status_changed_at = 10;</code>
       */
      public com.google.protobuf.TimestampOrBuilder getStatusChangedAtOrBuilder() {
        if (statusChangedAtBuilder_ != null) {
          return statusChangedAtBuilder_.getMessageOrBuilder();
        } else {
          return statusChangedAt_ == null ?
              com.google.protobuf.Timestamp.getDefaultInstance() : statusChangedAt_;
        }
      }
      /**
       * <pre>
       * Дата изменения статуса платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp status_changed_at = 10;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
          getStatusChangedAtFieldBuilder() {
        if (statusChangedAtBuilder_ == null) {
          statusChangedAtBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
                  getStatusChangedAt(),
                  getParentForChildren(),
                  isClean());
          statusChangedAt_ = null;
        }
        return statusChangedAtBuilder_;
      }

      private com.google.protobuf.Timestamp paidAt_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> paidAtBuilder_;
      /**
       * <pre>
       * Дата платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp paid_at = 11;</code>
       * @return Whether the paidAt field is set.
       */
      public boolean hasPaidAt() {
        return ((bitField0_ & 0x00000400) != 0);
      }
      /**
       * <pre>
       * Дата платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp paid_at = 11;</code>
       * @return The paidAt.
       */
      public com.google.protobuf.Timestamp getPaidAt() {
        if (paidAtBuilder_ == null) {
          return paidAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : paidAt_;
        } else {
          return paidAtBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Дата платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp paid_at = 11;</code>
       */
      public Builder setPaidAt(com.google.protobuf.Timestamp value) {
        if (paidAtBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          paidAt_ = value;
        } else {
          paidAtBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000400;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp paid_at = 11;</code>
       */
      public Builder setPaidAt(
          com.google.protobuf.Timestamp.Builder builderForValue) {
        if (paidAtBuilder_ == null) {
          paidAt_ = builderForValue.build();
        } else {
          paidAtBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000400;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp paid_at = 11;</code>
       */
      public Builder mergePaidAt(com.google.protobuf.Timestamp value) {
        if (paidAtBuilder_ == null) {
          if (((bitField0_ & 0x00000400) != 0) &&
            paidAt_ != null &&
            paidAt_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
            getPaidAtBuilder().mergeFrom(value);
          } else {
            paidAt_ = value;
          }
        } else {
          paidAtBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000400;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp paid_at = 11;</code>
       */
      public Builder clearPaidAt() {
        bitField0_ = (bitField0_ & ~0x00000400);
        paidAt_ = null;
        if (paidAtBuilder_ != null) {
          paidAtBuilder_.dispose();
          paidAtBuilder_ = null;
        }
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp paid_at = 11;</code>
       */
      public com.google.protobuf.Timestamp.Builder getPaidAtBuilder() {
        bitField0_ |= 0x00000400;
        onChanged();
        return getPaidAtFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Дата платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp paid_at = 11;</code>
       */
      public com.google.protobuf.TimestampOrBuilder getPaidAtOrBuilder() {
        if (paidAtBuilder_ != null) {
          return paidAtBuilder_.getMessageOrBuilder();
        } else {
          return paidAt_ == null ?
              com.google.protobuf.Timestamp.getDefaultInstance() : paidAt_;
        }
      }
      /**
       * <pre>
       * Дата платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp paid_at = 11;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
          getPaidAtFieldBuilder() {
        if (paidAtBuilder_ == null) {
          paidAtBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
                  getPaidAt(),
                  getParentForChildren(),
                  isClean());
          paidAt_ = null;
        }
        return paidAtBuilder_;
      }

      private java.lang.Object payUrl_ = "";
      /**
       * <pre>
       * Платежная ссылка
       * </pre>
       *
       * <code>string pay_url = 12;</code>
       * @return The payUrl.
       */
      public java.lang.String getPayUrl() {
        java.lang.Object ref = payUrl_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          payUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Платежная ссылка
       * </pre>
       *
       * <code>string pay_url = 12;</code>
       * @return The bytes for payUrl.
       */
      public com.google.protobuf.ByteString
          getPayUrlBytes() {
        java.lang.Object ref = payUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          payUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Платежная ссылка
       * </pre>
       *
       * <code>string pay_url = 12;</code>
       * @param value The payUrl to set.
       * @return This builder for chaining.
       */
      public Builder setPayUrl(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        payUrl_ = value;
        bitField0_ |= 0x00000800;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Платежная ссылка
       * </pre>
       *
       * <code>string pay_url = 12;</code>
       * @return This builder for chaining.
       */
      public Builder clearPayUrl() {
        payUrl_ = getDefaultInstance().getPayUrl();
        bitField0_ = (bitField0_ & ~0x00000800);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Платежная ссылка
       * </pre>
       *
       * <code>string pay_url = 12;</code>
       * @param value The bytes for payUrl to set.
       * @return This builder for chaining.
       */
      public Builder setPayUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        payUrl_ = value;
        bitField0_ |= 0x00000800;
        onChanged();
        return this;
      }

      private java.lang.Object paidByCardMasked_ = "";
      /**
       * <pre>
       * Маскированный номер карты при платеже
       * </pre>
       *
       * <code>string paid_by_card_masked = 13;</code>
       * @return The paidByCardMasked.
       */
      public java.lang.String getPaidByCardMasked() {
        java.lang.Object ref = paidByCardMasked_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          paidByCardMasked_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Маскированный номер карты при платеже
       * </pre>
       *
       * <code>string paid_by_card_masked = 13;</code>
       * @return The bytes for paidByCardMasked.
       */
      public com.google.protobuf.ByteString
          getPaidByCardMaskedBytes() {
        java.lang.Object ref = paidByCardMasked_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          paidByCardMasked_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Маскированный номер карты при платеже
       * </pre>
       *
       * <code>string paid_by_card_masked = 13;</code>
       * @param value The paidByCardMasked to set.
       * @return This builder for chaining.
       */
      public Builder setPaidByCardMasked(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        paidByCardMasked_ = value;
        bitField0_ |= 0x00001000;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Маскированный номер карты при платеже
       * </pre>
       *
       * <code>string paid_by_card_masked = 13;</code>
       * @return This builder for chaining.
       */
      public Builder clearPaidByCardMasked() {
        paidByCardMasked_ = getDefaultInstance().getPaidByCardMasked();
        bitField0_ = (bitField0_ & ~0x00001000);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Маскированный номер карты при платеже
       * </pre>
       *
       * <code>string paid_by_card_masked = 13;</code>
       * @param value The bytes for paidByCardMasked to set.
       * @return This builder for chaining.
       */
      public Builder setPaidByCardMaskedBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        paidByCardMasked_ = value;
        bitField0_ |= 0x00001000;
        onChanged();
        return this;
      }

      private java.lang.Object paidByCardEsppId_ = "";
      /**
       * <pre>
       * Идентификатор платежного средства в внешней системы
       * </pre>
       *
       * <code>string paid_by_card_espp_id = 14;</code>
       * @return The paidByCardEsppId.
       */
      public java.lang.String getPaidByCardEsppId() {
        java.lang.Object ref = paidByCardEsppId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          paidByCardEsppId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Идентификатор платежного средства в внешней системы
       * </pre>
       *
       * <code>string paid_by_card_espp_id = 14;</code>
       * @return The bytes for paidByCardEsppId.
       */
      public com.google.protobuf.ByteString
          getPaidByCardEsppIdBytes() {
        java.lang.Object ref = paidByCardEsppId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          paidByCardEsppId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Идентификатор платежного средства в внешней системы
       * </pre>
       *
       * <code>string paid_by_card_espp_id = 14;</code>
       * @param value The paidByCardEsppId to set.
       * @return This builder for chaining.
       */
      public Builder setPaidByCardEsppId(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        paidByCardEsppId_ = value;
        bitField0_ |= 0x00002000;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Идентификатор платежного средства в внешней системы
       * </pre>
       *
       * <code>string paid_by_card_espp_id = 14;</code>
       * @return This builder for chaining.
       */
      public Builder clearPaidByCardEsppId() {
        paidByCardEsppId_ = getDefaultInstance().getPaidByCardEsppId();
        bitField0_ = (bitField0_ & ~0x00002000);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Идентификатор платежного средства в внешней системы
       * </pre>
       *
       * <code>string paid_by_card_espp_id = 14;</code>
       * @param value The bytes for paidByCardEsppId to set.
       * @return This builder for chaining.
       */
      public Builder setPaidByCardEsppIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        paidByCardEsppId_ = value;
        bitField0_ |= 0x00002000;
        onChanged();
        return this;
      }

      private int cardType_ = 0;
      /**
       * <pre>
       * Тип банковской карты
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.CardType card_type = 15;</code>
       * @return The enum numeric value on the wire for cardType.
       */
      @java.lang.Override public int getCardTypeValue() {
        return cardType_;
      }
      /**
       * <pre>
       * Тип банковской карты
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.CardType card_type = 15;</code>
       * @param value The enum numeric value on the wire for cardType to set.
       * @return This builder for chaining.
       */
      public Builder setCardTypeValue(int value) {
        cardType_ = value;
        bitField0_ |= 0x00004000;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Тип банковской карты
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.CardType card_type = 15;</code>
       * @return The cardType.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.CardType getCardType() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.CardType result = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.CardType.forNumber(cardType_);
        return result == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.CardType.UNRECOGNIZED : result;
      }
      /**
       * <pre>
       * Тип банковской карты
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.CardType card_type = 15;</code>
       * @param value The cardType to set.
       * @return This builder for chaining.
       */
      public Builder setCardType(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.CardType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00004000;
        cardType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Тип банковской карты
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.CardType card_type = 15;</code>
       * @return This builder for chaining.
       */
      public Builder clearCardType() {
        bitField0_ = (bitField0_ & ~0x00004000);
        cardType_ = 0;
        onChanged();
        return this;
      }

      private int esppReqStatus_ ;
      /**
       * <pre>
       * Код ошибки внешней системы
       * </pre>
       *
       * <code>int32 espp_req_status = 16;</code>
       * @return The esppReqStatus.
       */
      @java.lang.Override
      public int getEsppReqStatus() {
        return esppReqStatus_;
      }
      /**
       * <pre>
       * Код ошибки внешней системы
       * </pre>
       *
       * <code>int32 espp_req_status = 16;</code>
       * @param value The esppReqStatus to set.
       * @return This builder for chaining.
       */
      public Builder setEsppReqStatus(int value) {

        esppReqStatus_ = value;
        bitField0_ |= 0x00008000;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Код ошибки внешней системы
       * </pre>
       *
       * <code>int32 espp_req_status = 16;</code>
       * @return This builder for chaining.
       */
      public Builder clearEsppReqStatus() {
        bitField0_ = (bitField0_ & ~0x00008000);
        esppReqStatus_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object esppReqUserMsg_ = "";
      /**
       * <pre>
       * Комментарий к статусу платежа из внешней системы
       * </pre>
       *
       * <code>string espp_req_user_msg = 17;</code>
       * @return The esppReqUserMsg.
       */
      public java.lang.String getEsppReqUserMsg() {
        java.lang.Object ref = esppReqUserMsg_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          esppReqUserMsg_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Комментарий к статусу платежа из внешней системы
       * </pre>
       *
       * <code>string espp_req_user_msg = 17;</code>
       * @return The bytes for esppReqUserMsg.
       */
      public com.google.protobuf.ByteString
          getEsppReqUserMsgBytes() {
        java.lang.Object ref = esppReqUserMsg_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          esppReqUserMsg_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Комментарий к статусу платежа из внешней системы
       * </pre>
       *
       * <code>string espp_req_user_msg = 17;</code>
       * @param value The esppReqUserMsg to set.
       * @return This builder for chaining.
       */
      public Builder setEsppReqUserMsg(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        esppReqUserMsg_ = value;
        bitField0_ |= 0x00010000;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Комментарий к статусу платежа из внешней системы
       * </pre>
       *
       * <code>string espp_req_user_msg = 17;</code>
       * @return This builder for chaining.
       */
      public Builder clearEsppReqUserMsg() {
        esppReqUserMsg_ = getDefaultInstance().getEsppReqUserMsg();
        bitField0_ = (bitField0_ & ~0x00010000);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Комментарий к статусу платежа из внешней системы
       * </pre>
       *
       * <code>string espp_req_user_msg = 17;</code>
       * @param value The bytes for esppReqUserMsg to set.
       * @return This builder for chaining.
       */
      public Builder setEsppReqUserMsgBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        esppReqUserMsg_ = value;
        bitField0_ |= 0x00010000;
        onChanged();
        return this;
      }

      private java.lang.Object esppInvoiceId_ = "";
      /**
       * <pre>
       * Уникальный номер транзакции в внешней системы
       * </pre>
       *
       * <code>string espp_invoice_id = 18;</code>
       * @return The esppInvoiceId.
       */
      public java.lang.String getEsppInvoiceId() {
        java.lang.Object ref = esppInvoiceId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          esppInvoiceId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Уникальный номер транзакции в внешней системы
       * </pre>
       *
       * <code>string espp_invoice_id = 18;</code>
       * @return The bytes for esppInvoiceId.
       */
      public com.google.protobuf.ByteString
          getEsppInvoiceIdBytes() {
        java.lang.Object ref = esppInvoiceId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          esppInvoiceId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Уникальный номер транзакции в внешней системы
       * </pre>
       *
       * <code>string espp_invoice_id = 18;</code>
       * @param value The esppInvoiceId to set.
       * @return This builder for chaining.
       */
      public Builder setEsppInvoiceId(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        esppInvoiceId_ = value;
        bitField0_ |= 0x00020000;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Уникальный номер транзакции в внешней системы
       * </pre>
       *
       * <code>string espp_invoice_id = 18;</code>
       * @return This builder for chaining.
       */
      public Builder clearEsppInvoiceId() {
        esppInvoiceId_ = getDefaultInstance().getEsppInvoiceId();
        bitField0_ = (bitField0_ & ~0x00020000);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Уникальный номер транзакции в внешней системы
       * </pre>
       *
       * <code>string espp_invoice_id = 18;</code>
       * @param value The bytes for esppInvoiceId to set.
       * @return This builder for chaining.
       */
      public Builder setEsppInvoiceIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        esppInvoiceId_ = value;
        bitField0_ |= 0x00020000;
        onChanged();
        return this;
      }

      private java.lang.Object phoneNumber_ = "";
      /**
       * <pre>
       * Номер телефона
       * </pre>
       *
       * <code>string phone_number = 19;</code>
       * @return The phoneNumber.
       */
      public java.lang.String getPhoneNumber() {
        java.lang.Object ref = phoneNumber_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          phoneNumber_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Номер телефона
       * </pre>
       *
       * <code>string phone_number = 19;</code>
       * @return The bytes for phoneNumber.
       */
      public com.google.protobuf.ByteString
          getPhoneNumberBytes() {
        java.lang.Object ref = phoneNumber_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          phoneNumber_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Номер телефона
       * </pre>
       *
       * <code>string phone_number = 19;</code>
       * @param value The phoneNumber to set.
       * @return This builder for chaining.
       */
      public Builder setPhoneNumber(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        phoneNumber_ = value;
        bitField0_ |= 0x00040000;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Номер телефона
       * </pre>
       *
       * <code>string phone_number = 19;</code>
       * @return This builder for chaining.
       */
      public Builder clearPhoneNumber() {
        phoneNumber_ = getDefaultInstance().getPhoneNumber();
        bitField0_ = (bitField0_ & ~0x00040000);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Номер телефона
       * </pre>
       *
       * <code>string phone_number = 19;</code>
       * @param value The bytes for phoneNumber to set.
       * @return This builder for chaining.
       */
      public Builder setPhoneNumberBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        phoneNumber_ = value;
        bitField0_ |= 0x00040000;
        onChanged();
        return this;
      }

      private java.lang.Object email_ = "";
      /**
       * <pre>
       * Электронная почта
       * </pre>
       *
       * <code>string email = 20;</code>
       * @return The email.
       */
      public java.lang.String getEmail() {
        java.lang.Object ref = email_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          email_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Электронная почта
       * </pre>
       *
       * <code>string email = 20;</code>
       * @return The bytes for email.
       */
      public com.google.protobuf.ByteString
          getEmailBytes() {
        java.lang.Object ref = email_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          email_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Электронная почта
       * </pre>
       *
       * <code>string email = 20;</code>
       * @param value The email to set.
       * @return This builder for chaining.
       */
      public Builder setEmail(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        email_ = value;
        bitField0_ |= 0x00080000;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Электронная почта
       * </pre>
       *
       * <code>string email = 20;</code>
       * @return This builder for chaining.
       */
      public Builder clearEmail() {
        email_ = getDefaultInstance().getEmail();
        bitField0_ = (bitField0_ & ~0x00080000);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Электронная почта
       * </pre>
       *
       * <code>string email = 20;</code>
       * @param value The bytes for email to set.
       * @return This builder for chaining.
       */
      public Builder setEmailBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        email_ = value;
        bitField0_ |= 0x00080000;
        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:keyapis.invoice.v1.Invoice)
    }

    // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.Invoice)
    private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice();
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Invoice>
        PARSER = new com.google.protobuf.AbstractParser<Invoice>() {
      @java.lang.Override
      public Invoice 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 (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface InvoiceFilterOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.InvoiceFilter)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Идентификатор пользователя
     * </pre>
     *
     * <code>int32 user_id = 1;</code>
     * @return The userId.
     */
    int getUserId();

    /**
     * <pre>
     * Статус платежа
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.InvoiceStatusType invoice_status_type = 2;</code>
     * @return The enum numeric value on the wire for invoiceStatusType.
     */
    int getInvoiceStatusTypeValue();
    /**
     * <pre>
     * Статус платежа
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.InvoiceStatusType invoice_status_type = 2;</code>
     * @return The invoiceStatusType.
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType getInvoiceStatusType();
  }
  /**
   * <pre>
   * Фильтр инвойсов
   * </pre>
   *
   * Protobuf type {@code keyapis.invoice.v1.InvoiceFilter}
   */
  public static final class InvoiceFilter extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.InvoiceFilter)
      InvoiceFilterOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use InvoiceFilter.newBuilder() to construct.
    private InvoiceFilter(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private InvoiceFilter() {
      invoiceStatusType_ = 0;
    }

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

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_InvoiceFilter_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_InvoiceFilter_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.Builder.class);
    }

    public static final int USER_ID_FIELD_NUMBER = 1;
    private int userId_ = 0;
    /**
     * <pre>
     * Идентификатор пользователя
     * </pre>
     *
     * <code>int32 user_id = 1;</code>
     * @return The userId.
     */
    @java.lang.Override
    public int getUserId() {
      return userId_;
    }

    public static final int INVOICE_STATUS_TYPE_FIELD_NUMBER = 2;
    private int invoiceStatusType_ = 0;
    /**
     * <pre>
     * Статус платежа
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.InvoiceStatusType invoice_status_type = 2;</code>
     * @return The enum numeric value on the wire for invoiceStatusType.
     */
    @java.lang.Override public int getInvoiceStatusTypeValue() {
      return invoiceStatusType_;
    }
    /**
     * <pre>
     * Статус платежа
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.InvoiceStatusType invoice_status_type = 2;</code>
     * @return The invoiceStatusType.
     */
    @java.lang.Override public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType getInvoiceStatusType() {
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType result = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType.forNumber(invoiceStatusType_);
      return result == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType.UNRECOGNIZED : result;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (userId_ != 0) {
        output.writeInt32(1, userId_);
      }
      if (invoiceStatusType_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType.INVOICE_STATUS_TYPE_UNKNOWN.getNumber()) {
        output.writeEnum(2, invoiceStatusType_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (userId_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, userId_);
      }
      if (invoiceStatusType_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType.INVOICE_STATUS_TYPE_UNKNOWN.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, invoiceStatusType_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter)) {
        return super.equals(obj);
      }
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter) obj;

      if (getUserId()
          != other.getUserId()) return false;
      if (invoiceStatusType_ != other.invoiceStatusType_) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + USER_ID_FIELD_NUMBER;
      hash = (53 * hash) + getUserId();
      hash = (37 * hash) + INVOICE_STATUS_TYPE_FIELD_NUMBER;
      hash = (53 * hash) + invoiceStatusType_;
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter 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;
    }
    /**
     * <pre>
     * Фильтр инвойсов
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.InvoiceFilter}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.InvoiceFilter)
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilterOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_InvoiceFilter_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_InvoiceFilter_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.Builder.class);
      }

      // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        userId_ = 0;
        invoiceStatusType_ = 0;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_InvoiceFilter_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter getDefaultInstanceForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter build() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter buildPartial() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter(this);
        if (bitField0_ != 0) { buildPartial0(result); }
        onBuilt();
        return result;
      }

      private void buildPartial0(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.userId_ = userId_;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.invoiceStatusType_ = invoiceStatusType_;
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter) {
          return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter other) {
        if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.getDefaultInstance()) return this;
        if (other.getUserId() != 0) {
          setUserId(other.getUserId());
        }
        if (other.invoiceStatusType_ != 0) {
          setInvoiceStatusTypeValue(other.getInvoiceStatusTypeValue());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 8: {
                userId_ = input.readInt32();
                bitField0_ |= 0x00000001;
                break;
              } // case 8
              case 16: {
                invoiceStatusType_ = input.readEnum();
                bitField0_ |= 0x00000002;
                break;
              } // case 16
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private int userId_ ;
      /**
       * <pre>
       * Идентификатор пользователя
       * </pre>
       *
       * <code>int32 user_id = 1;</code>
       * @return The userId.
       */
      @java.lang.Override
      public int getUserId() {
        return userId_;
      }
      /**
       * <pre>
       * Идентификатор пользователя
       * </pre>
       *
       * <code>int32 user_id = 1;</code>
       * @param value The userId to set.
       * @return This builder for chaining.
       */
      public Builder setUserId(int value) {

        userId_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Идентификатор пользователя
       * </pre>
       *
       * <code>int32 user_id = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearUserId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        userId_ = 0;
        onChanged();
        return this;
      }

      private int invoiceStatusType_ = 0;
      /**
       * <pre>
       * Статус платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.InvoiceStatusType invoice_status_type = 2;</code>
       * @return The enum numeric value on the wire for invoiceStatusType.
       */
      @java.lang.Override public int getInvoiceStatusTypeValue() {
        return invoiceStatusType_;
      }
      /**
       * <pre>
       * Статус платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.InvoiceStatusType invoice_status_type = 2;</code>
       * @param value The enum numeric value on the wire for invoiceStatusType to set.
       * @return This builder for chaining.
       */
      public Builder setInvoiceStatusTypeValue(int value) {
        invoiceStatusType_ = value;
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Статус платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.InvoiceStatusType invoice_status_type = 2;</code>
       * @return The invoiceStatusType.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType getInvoiceStatusType() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType result = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType.forNumber(invoiceStatusType_);
        return result == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType.UNRECOGNIZED : result;
      }
      /**
       * <pre>
       * Статус платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.InvoiceStatusType invoice_status_type = 2;</code>
       * @param value The invoiceStatusType to set.
       * @return This builder for chaining.
       */
      public Builder setInvoiceStatusType(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.InvoiceStatusType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        invoiceStatusType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Статус платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.InvoiceStatusType invoice_status_type = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearInvoiceStatusType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        invoiceStatusType_ = 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:keyapis.invoice.v1.InvoiceFilter)
    }

    // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.InvoiceFilter)
    private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter();
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<InvoiceFilter>
        PARSER = new com.google.protobuf.AbstractParser<InvoiceFilter>() {
      @java.lang.Override
      public InvoiceFilter 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 (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface InvoicePagingOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.InvoicePaging)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Тип значения сортировки.
     * Если значение не передано, то будет взято значение по умолчанию.
     * # По умолчанию: PAID_AT
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoicePaging.OrderByType order_by_type = 1;</code>
     * @return The enum numeric value on the wire for orderByType.
     */
    int getOrderByTypeValue();
    /**
     * <pre>
     * Тип значения сортировки.
     * Если значение не передано, то будет взято значение по умолчанию.
     * # По умолчанию: PAID_AT
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoicePaging.OrderByType order_by_type = 1;</code>
     * @return The orderByType.
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.OrderByType getOrderByType();

    /**
     * <pre>
     * Тип направления сортировки.
     * # По умолчанию: DESC
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoicePaging.DirectionType direction_type = 2;</code>
     * @return The enum numeric value on the wire for directionType.
     */
    int getDirectionTypeValue();
    /**
     * <pre>
     * Тип направления сортировки.
     * # По умолчанию: DESC
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoicePaging.DirectionType direction_type = 2;</code>
     * @return The directionType.
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.DirectionType getDirectionType();

    /**
     * <pre>
     * Количество записей на страницу.
     * Если значение 0 (не передано), то будет взято значение по умолчанию.
     * # Диапазон: 0..100.
     * # По умолчанию: 20
     * </pre>
     *
     * <code>int32 limit = 3;</code>
     * @return The limit.
     */
    int getLimit();

    /**
     * <pre>
     * Сдвиг.
     * # Диапазон: 0..2147483647
     * </pre>
     *
     * <code>int32 offset = 4;</code>
     * @return The offset.
     */
    int getOffset();
  }
  /**
   * <pre>
   * Постраничный вывод
   * </pre>
   *
   * Protobuf type {@code keyapis.invoice.v1.InvoicePaging}
   */
  public static final class InvoicePaging extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.InvoicePaging)
      InvoicePagingOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use InvoicePaging.newBuilder() to construct.
    private InvoicePaging(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private InvoicePaging() {
      orderByType_ = 0;
      directionType_ = 0;
    }

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

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_InvoicePaging_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_InvoicePaging_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.Builder.class);
    }

    /**
     * <pre>
     * Справочник типов значений сортировки.
     * # Тип: byte
     * </pre>
     *
     * Protobuf enum {@code keyapis.invoice.v1.InvoicePaging.OrderByType}
     */
    public enum OrderByType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <pre>
       * Значение не указано
       * </pre>
       *
       * <code>ORDER_BY_TYPE_UNKNOWN = 0;</code>
       */
      ORDER_BY_TYPE_UNKNOWN(0),
      /**
       * <pre>
       * По идентификатору
       * </pre>
       *
       * <code>ID = 1;</code>
       */
      ID(1),
      /**
       * <pre>
       * По дате оплаты
       * </pre>
       *
       * <code>PAID_AT = 2;</code>
       */
      PAID_AT(2),
      /**
       * <pre>
       * По дате создания
       * </pre>
       *
       * <code>CREATED_AT = 3;</code>
       */
      CREATED_AT(3),
      UNRECOGNIZED(-1),
      ;

      /**
       * <pre>
       * Значение не указано
       * </pre>
       *
       * <code>ORDER_BY_TYPE_UNKNOWN = 0;</code>
       */
      public static final int ORDER_BY_TYPE_UNKNOWN_VALUE = 0;
      /**
       * <pre>
       * По идентификатору
       * </pre>
       *
       * <code>ID = 1;</code>
       */
      public static final int ID_VALUE = 1;
      /**
       * <pre>
       * По дате оплаты
       * </pre>
       *
       * <code>PAID_AT = 2;</code>
       */
      public static final int PAID_AT_VALUE = 2;
      /**
       * <pre>
       * По дате создания
       * </pre>
       *
       * <code>CREATED_AT = 3;</code>
       */
      public static final int CREATED_AT_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 OrderByType 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 OrderByType forNumber(int value) {
        switch (value) {
          case 0: return ORDER_BY_TYPE_UNKNOWN;
          case 1: return ID;
          case 2: return PAID_AT;
          case 3: return CREATED_AT;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalStateException(
              "Can't get the descriptor of an unrecognized enum value.");
        }
        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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.getDescriptor().getEnumTypes().get(0);
      }

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

      public static OrderByType 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 OrderByType(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:keyapis.invoice.v1.InvoicePaging.OrderByType)
    }

    /**
     * <pre>
     * Справочник типов направлений сортировки.
     * # Тип: byte
     * </pre>
     *
     * Protobuf enum {@code keyapis.invoice.v1.InvoicePaging.DirectionType}
     */
    public enum DirectionType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <pre>
       * Значение не указано
       * </pre>
       *
       * <code>DIRECTION_TYPE_UNKNOWN = 0;</code>
       */
      DIRECTION_TYPE_UNKNOWN(0),
      /**
       * <pre>
       * От большего к меньшему
       * </pre>
       *
       * <code>DESC = 1;</code>
       */
      DESC(1),
      /**
       * <pre>
       * От меньшего к большему
       * </pre>
       *
       * <code>ASC = 2;</code>
       */
      ASC(2),
      UNRECOGNIZED(-1),
      ;

      /**
       * <pre>
       * Значение не указано
       * </pre>
       *
       * <code>DIRECTION_TYPE_UNKNOWN = 0;</code>
       */
      public static final int DIRECTION_TYPE_UNKNOWN_VALUE = 0;
      /**
       * <pre>
       * От большего к меньшему
       * </pre>
       *
       * <code>DESC = 1;</code>
       */
      public static final int DESC_VALUE = 1;
      /**
       * <pre>
       * От меньшего к большему
       * </pre>
       *
       * <code>ASC = 2;</code>
       */
      public static final int ASC_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 DirectionType 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 DirectionType forNumber(int value) {
        switch (value) {
          case 0: return DIRECTION_TYPE_UNKNOWN;
          case 1: return DESC;
          case 2: return ASC;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalStateException(
              "Can't get the descriptor of an unrecognized enum value.");
        }
        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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.getDescriptor().getEnumTypes().get(1);
      }

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

      public static DirectionType 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 DirectionType(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:keyapis.invoice.v1.InvoicePaging.DirectionType)
    }

    public static final int ORDER_BY_TYPE_FIELD_NUMBER = 1;
    private int orderByType_ = 0;
    /**
     * <pre>
     * Тип значения сортировки.
     * Если значение не передано, то будет взято значение по умолчанию.
     * # По умолчанию: PAID_AT
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoicePaging.OrderByType order_by_type = 1;</code>
     * @return The enum numeric value on the wire for orderByType.
     */
    @java.lang.Override public int getOrderByTypeValue() {
      return orderByType_;
    }
    /**
     * <pre>
     * Тип значения сортировки.
     * Если значение не передано, то будет взято значение по умолчанию.
     * # По умолчанию: PAID_AT
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoicePaging.OrderByType order_by_type = 1;</code>
     * @return The orderByType.
     */
    @java.lang.Override public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.OrderByType getOrderByType() {
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.OrderByType result = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.OrderByType.forNumber(orderByType_);
      return result == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.OrderByType.UNRECOGNIZED : result;
    }

    public static final int DIRECTION_TYPE_FIELD_NUMBER = 2;
    private int directionType_ = 0;
    /**
     * <pre>
     * Тип направления сортировки.
     * # По умолчанию: DESC
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoicePaging.DirectionType direction_type = 2;</code>
     * @return The enum numeric value on the wire for directionType.
     */
    @java.lang.Override public int getDirectionTypeValue() {
      return directionType_;
    }
    /**
     * <pre>
     * Тип направления сортировки.
     * # По умолчанию: DESC
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoicePaging.DirectionType direction_type = 2;</code>
     * @return The directionType.
     */
    @java.lang.Override public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.DirectionType getDirectionType() {
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.DirectionType result = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.DirectionType.forNumber(directionType_);
      return result == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.DirectionType.UNRECOGNIZED : result;
    }

    public static final int LIMIT_FIELD_NUMBER = 3;
    private int limit_ = 0;
    /**
     * <pre>
     * Количество записей на страницу.
     * Если значение 0 (не передано), то будет взято значение по умолчанию.
     * # Диапазон: 0..100.
     * # По умолчанию: 20
     * </pre>
     *
     * <code>int32 limit = 3;</code>
     * @return The limit.
     */
    @java.lang.Override
    public int getLimit() {
      return limit_;
    }

    public static final int OFFSET_FIELD_NUMBER = 4;
    private int offset_ = 0;
    /**
     * <pre>
     * Сдвиг.
     * # Диапазон: 0..2147483647
     * </pre>
     *
     * <code>int32 offset = 4;</code>
     * @return The offset.
     */
    @java.lang.Override
    public int getOffset() {
      return offset_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (orderByType_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.OrderByType.ORDER_BY_TYPE_UNKNOWN.getNumber()) {
        output.writeEnum(1, orderByType_);
      }
      if (directionType_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.DirectionType.DIRECTION_TYPE_UNKNOWN.getNumber()) {
        output.writeEnum(2, directionType_);
      }
      if (limit_ != 0) {
        output.writeInt32(3, limit_);
      }
      if (offset_ != 0) {
        output.writeInt32(4, offset_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (orderByType_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.OrderByType.ORDER_BY_TYPE_UNKNOWN.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, orderByType_);
      }
      if (directionType_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.DirectionType.DIRECTION_TYPE_UNKNOWN.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, directionType_);
      }
      if (limit_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, limit_);
      }
      if (offset_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, offset_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging)) {
        return super.equals(obj);
      }
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging) obj;

      if (orderByType_ != other.orderByType_) return false;
      if (directionType_ != other.directionType_) return false;
      if (getLimit()
          != other.getLimit()) return false;
      if (getOffset()
          != other.getOffset()) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + ORDER_BY_TYPE_FIELD_NUMBER;
      hash = (53 * hash) + orderByType_;
      hash = (37 * hash) + DIRECTION_TYPE_FIELD_NUMBER;
      hash = (53 * hash) + directionType_;
      hash = (37 * hash) + LIMIT_FIELD_NUMBER;
      hash = (53 * hash) + getLimit();
      hash = (37 * hash) + OFFSET_FIELD_NUMBER;
      hash = (53 * hash) + getOffset();
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging 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;
    }
    /**
     * <pre>
     * Постраничный вывод
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.InvoicePaging}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.InvoicePaging)
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePagingOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_InvoicePaging_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_InvoicePaging_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.Builder.class);
      }

      // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        orderByType_ = 0;
        directionType_ = 0;
        limit_ = 0;
        offset_ = 0;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_InvoicePaging_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging getDefaultInstanceForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging build() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging buildPartial() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging(this);
        if (bitField0_ != 0) { buildPartial0(result); }
        onBuilt();
        return result;
      }

      private void buildPartial0(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.orderByType_ = orderByType_;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.directionType_ = directionType_;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.limit_ = limit_;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.offset_ = offset_;
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging) {
          return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging other) {
        if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.getDefaultInstance()) return this;
        if (other.orderByType_ != 0) {
          setOrderByTypeValue(other.getOrderByTypeValue());
        }
        if (other.directionType_ != 0) {
          setDirectionTypeValue(other.getDirectionTypeValue());
        }
        if (other.getLimit() != 0) {
          setLimit(other.getLimit());
        }
        if (other.getOffset() != 0) {
          setOffset(other.getOffset());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 8: {
                orderByType_ = input.readEnum();
                bitField0_ |= 0x00000001;
                break;
              } // case 8
              case 16: {
                directionType_ = input.readEnum();
                bitField0_ |= 0x00000002;
                break;
              } // case 16
              case 24: {
                limit_ = input.readInt32();
                bitField0_ |= 0x00000004;
                break;
              } // case 24
              case 32: {
                offset_ = input.readInt32();
                bitField0_ |= 0x00000008;
                break;
              } // case 32
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private int orderByType_ = 0;
      /**
       * <pre>
       * Тип значения сортировки.
       * Если значение не передано, то будет взято значение по умолчанию.
       * # По умолчанию: PAID_AT
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoicePaging.OrderByType order_by_type = 1;</code>
       * @return The enum numeric value on the wire for orderByType.
       */
      @java.lang.Override public int getOrderByTypeValue() {
        return orderByType_;
      }
      /**
       * <pre>
       * Тип значения сортировки.
       * Если значение не передано, то будет взято значение по умолчанию.
       * # По умолчанию: PAID_AT
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoicePaging.OrderByType order_by_type = 1;</code>
       * @param value The enum numeric value on the wire for orderByType to set.
       * @return This builder for chaining.
       */
      public Builder setOrderByTypeValue(int value) {
        orderByType_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Тип значения сортировки.
       * Если значение не передано, то будет взято значение по умолчанию.
       * # По умолчанию: PAID_AT
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoicePaging.OrderByType order_by_type = 1;</code>
       * @return The orderByType.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.OrderByType getOrderByType() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.OrderByType result = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.OrderByType.forNumber(orderByType_);
        return result == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.OrderByType.UNRECOGNIZED : result;
      }
      /**
       * <pre>
       * Тип значения сортировки.
       * Если значение не передано, то будет взято значение по умолчанию.
       * # По умолчанию: PAID_AT
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoicePaging.OrderByType order_by_type = 1;</code>
       * @param value The orderByType to set.
       * @return This builder for chaining.
       */
      public Builder setOrderByType(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.OrderByType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        orderByType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Тип значения сортировки.
       * Если значение не передано, то будет взято значение по умолчанию.
       * # По умолчанию: PAID_AT
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoicePaging.OrderByType order_by_type = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearOrderByType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        orderByType_ = 0;
        onChanged();
        return this;
      }

      private int directionType_ = 0;
      /**
       * <pre>
       * Тип направления сортировки.
       * # По умолчанию: DESC
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoicePaging.DirectionType direction_type = 2;</code>
       * @return The enum numeric value on the wire for directionType.
       */
      @java.lang.Override public int getDirectionTypeValue() {
        return directionType_;
      }
      /**
       * <pre>
       * Тип направления сортировки.
       * # По умолчанию: DESC
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoicePaging.DirectionType direction_type = 2;</code>
       * @param value The enum numeric value on the wire for directionType to set.
       * @return This builder for chaining.
       */
      public Builder setDirectionTypeValue(int value) {
        directionType_ = value;
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Тип направления сортировки.
       * # По умолчанию: DESC
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoicePaging.DirectionType direction_type = 2;</code>
       * @return The directionType.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.DirectionType getDirectionType() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.DirectionType result = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.DirectionType.forNumber(directionType_);
        return result == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.DirectionType.UNRECOGNIZED : result;
      }
      /**
       * <pre>
       * Тип направления сортировки.
       * # По умолчанию: DESC
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoicePaging.DirectionType direction_type = 2;</code>
       * @param value The directionType to set.
       * @return This builder for chaining.
       */
      public Builder setDirectionType(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.DirectionType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        directionType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Тип направления сортировки.
       * # По умолчанию: DESC
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoicePaging.DirectionType direction_type = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearDirectionType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        directionType_ = 0;
        onChanged();
        return this;
      }

      private int limit_ ;
      /**
       * <pre>
       * Количество записей на страницу.
       * Если значение 0 (не передано), то будет взято значение по умолчанию.
       * # Диапазон: 0..100.
       * # По умолчанию: 20
       * </pre>
       *
       * <code>int32 limit = 3;</code>
       * @return The limit.
       */
      @java.lang.Override
      public int getLimit() {
        return limit_;
      }
      /**
       * <pre>
       * Количество записей на страницу.
       * Если значение 0 (не передано), то будет взято значение по умолчанию.
       * # Диапазон: 0..100.
       * # По умолчанию: 20
       * </pre>
       *
       * <code>int32 limit = 3;</code>
       * @param value The limit to set.
       * @return This builder for chaining.
       */
      public Builder setLimit(int value) {

        limit_ = value;
        bitField0_ |= 0x00000004;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Количество записей на страницу.
       * Если значение 0 (не передано), то будет взято значение по умолчанию.
       * # Диапазон: 0..100.
       * # По умолчанию: 20
       * </pre>
       *
       * <code>int32 limit = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearLimit() {
        bitField0_ = (bitField0_ & ~0x00000004);
        limit_ = 0;
        onChanged();
        return this;
      }

      private int offset_ ;
      /**
       * <pre>
       * Сдвиг.
       * # Диапазон: 0..2147483647
       * </pre>
       *
       * <code>int32 offset = 4;</code>
       * @return The offset.
       */
      @java.lang.Override
      public int getOffset() {
        return offset_;
      }
      /**
       * <pre>
       * Сдвиг.
       * # Диапазон: 0..2147483647
       * </pre>
       *
       * <code>int32 offset = 4;</code>
       * @param value The offset to set.
       * @return This builder for chaining.
       */
      public Builder setOffset(int value) {

        offset_ = value;
        bitField0_ |= 0x00000008;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Сдвиг.
       * # Диапазон: 0..2147483647
       * </pre>
       *
       * <code>int32 offset = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearOffset() {
        bitField0_ = (bitField0_ & ~0x00000008);
        offset_ = 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:keyapis.invoice.v1.InvoicePaging)
    }

    // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.InvoicePaging)
    private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging();
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<InvoicePaging>
        PARSER = new com.google.protobuf.AbstractParser<InvoicePaging>() {
      @java.lang.Override
      public InvoicePaging 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 (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CreateInvoiceRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.CreateInvoiceRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Идентификатор пользователя
     * </pre>
     *
     * <code>int32 user_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The userId.
     */
    int getUserId();

    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    java.util.List<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position> 
        getPositionsList();
    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position getPositions(int index);
    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    int getPositionsCount();
    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    java.util.List<? extends ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PositionOrBuilder> 
        getPositionsOrBuilderList();
    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PositionOrBuilder getPositionsOrBuilder(
        int index);

    /**
     * <pre>
     * Метод платежа
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.PayInterfaceType pay_interface_type = 3 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The enum numeric value on the wire for payInterfaceType.
     */
    int getPayInterfaceTypeValue();
    /**
     * <pre>
     * Метод платежа
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.PayInterfaceType pay_interface_type = 3 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The payInterfaceType.
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType getPayInterfaceType();

    /**
     * <pre>
     * Способ оплаты.
     * По умолчанию: BANK_CARD
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.PaywayType payway_type = 4;</code>
     * @return The enum numeric value on the wire for paywayType.
     */
    int getPaywayTypeValue();
    /**
     * <pre>
     * Способ оплаты.
     * По умолчанию: BANK_CARD
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.PaywayType payway_type = 4;</code>
     * @return The paywayType.
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType getPaywayType();

    /**
     * <pre>
     * Ссылка для перехода после оплаты.
     * Если не передан подставится значение по умолчанию
     * </pre>
     *
     * <code>string return_url = 5;</code>
     * @return The returnUrl.
     */
    java.lang.String getReturnUrl();
    /**
     * <pre>
     * Ссылка для перехода после оплаты.
     * Если не передан подставится значение по умолчанию
     * </pre>
     *
     * <code>string return_url = 5;</code>
     * @return The bytes for returnUrl.
     */
    com.google.protobuf.ByteString
        getReturnUrlBytes();

    /**
     * <pre>
     * Номер телефона.
     * Должно быть означено поле phone_number, либо поле email
     * </pre>
     *
     * <code>string phone_number = 6;</code>
     * @return The phoneNumber.
     */
    java.lang.String getPhoneNumber();
    /**
     * <pre>
     * Номер телефона.
     * Должно быть означено поле phone_number, либо поле email
     * </pre>
     *
     * <code>string phone_number = 6;</code>
     * @return The bytes for phoneNumber.
     */
    com.google.protobuf.ByteString
        getPhoneNumberBytes();

    /**
     * <pre>
     * Электронная почта.
     * Должно быть означено поле phone_number, либо поле email
     * </pre>
     *
     * <code>string email = 7;</code>
     * @return The email.
     */
    java.lang.String getEmail();
    /**
     * <pre>
     * Электронная почта.
     * Должно быть означено поле phone_number, либо поле email
     * </pre>
     *
     * <code>string email = 7;</code>
     * @return The bytes for email.
     */
    com.google.protobuf.ByteString
        getEmailBytes();

    /**
     * <pre>
     * Описание платежа.
     * По умолчанию подставляется "Счёт от {DD.MM.YYYY}г."
     * </pre>
     *
     * <code>string title = 8;</code>
     * @return The title.
     */
    java.lang.String getTitle();
    /**
     * <pre>
     * Описание платежа.
     * По умолчанию подставляется "Счёт от {DD.MM.YYYY}г."
     * </pre>
     *
     * <code>string title = 8;</code>
     * @return The bytes for title.
     */
    com.google.protobuf.ByteString
        getTitleBytes();
  }
  /**
   * <pre>
   * Запрос на создание платежа
   * </pre>
   *
   * Protobuf type {@code keyapis.invoice.v1.CreateInvoiceRequest}
   */
  public static final class CreateInvoiceRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.CreateInvoiceRequest)
      CreateInvoiceRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use CreateInvoiceRequest.newBuilder() to construct.
    private CreateInvoiceRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CreateInvoiceRequest() {
      positions_ = java.util.Collections.emptyList();
      payInterfaceType_ = 0;
      paywayType_ = 0;
      returnUrl_ = "";
      phoneNumber_ = "";
      email_ = "";
      title_ = "";
    }

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

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest.Builder.class);
    }

    public static final int USER_ID_FIELD_NUMBER = 1;
    private int userId_ = 0;
    /**
     * <pre>
     * Идентификатор пользователя
     * </pre>
     *
     * <code>int32 user_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The userId.
     */
    @java.lang.Override
    public int getUserId() {
      return userId_;
    }

    public static final int POSITIONS_FIELD_NUMBER = 2;
    @SuppressWarnings("serial")
    private java.util.List<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position> positions_;
    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    @java.lang.Override
    public java.util.List<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position> getPositionsList() {
      return positions_;
    }
    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    @java.lang.Override
    public java.util.List<? extends ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PositionOrBuilder> 
        getPositionsOrBuilderList() {
      return positions_;
    }
    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    @java.lang.Override
    public int getPositionsCount() {
      return positions_.size();
    }
    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position getPositions(int index) {
      return positions_.get(index);
    }
    /**
     * <pre>
     * Позиция счета
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PositionOrBuilder getPositionsOrBuilder(
        int index) {
      return positions_.get(index);
    }

    public static final int PAY_INTERFACE_TYPE_FIELD_NUMBER = 3;
    private int payInterfaceType_ = 0;
    /**
     * <pre>
     * Метод платежа
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.PayInterfaceType pay_interface_type = 3 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The enum numeric value on the wire for payInterfaceType.
     */
    @java.lang.Override public int getPayInterfaceTypeValue() {
      return payInterfaceType_;
    }
    /**
     * <pre>
     * Метод платежа
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.PayInterfaceType pay_interface_type = 3 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The payInterfaceType.
     */
    @java.lang.Override public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType getPayInterfaceType() {
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType result = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType.forNumber(payInterfaceType_);
      return result == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType.UNRECOGNIZED : result;
    }

    public static final int PAYWAY_TYPE_FIELD_NUMBER = 4;
    private int paywayType_ = 0;
    /**
     * <pre>
     * Способ оплаты.
     * По умолчанию: BANK_CARD
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.PaywayType payway_type = 4;</code>
     * @return The enum numeric value on the wire for paywayType.
     */
    @java.lang.Override public int getPaywayTypeValue() {
      return paywayType_;
    }
    /**
     * <pre>
     * Способ оплаты.
     * По умолчанию: BANK_CARD
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice.PaywayType payway_type = 4;</code>
     * @return The paywayType.
     */
    @java.lang.Override public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType getPaywayType() {
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType result = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType.forNumber(paywayType_);
      return result == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType.UNRECOGNIZED : result;
    }

    public static final int RETURN_URL_FIELD_NUMBER = 5;
    @SuppressWarnings("serial")
    private volatile java.lang.Object returnUrl_ = "";
    /**
     * <pre>
     * Ссылка для перехода после оплаты.
     * Если не передан подставится значение по умолчанию
     * </pre>
     *
     * <code>string return_url = 5;</code>
     * @return The returnUrl.
     */
    @java.lang.Override
    public java.lang.String getReturnUrl() {
      java.lang.Object ref = returnUrl_;
      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();
        returnUrl_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Ссылка для перехода после оплаты.
     * Если не передан подставится значение по умолчанию
     * </pre>
     *
     * <code>string return_url = 5;</code>
     * @return The bytes for returnUrl.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getReturnUrlBytes() {
      java.lang.Object ref = returnUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        returnUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PHONE_NUMBER_FIELD_NUMBER = 6;
    @SuppressWarnings("serial")
    private volatile java.lang.Object phoneNumber_ = "";
    /**
     * <pre>
     * Номер телефона.
     * Должно быть означено поле phone_number, либо поле email
     * </pre>
     *
     * <code>string phone_number = 6;</code>
     * @return The phoneNumber.
     */
    @java.lang.Override
    public java.lang.String getPhoneNumber() {
      java.lang.Object ref = phoneNumber_;
      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();
        phoneNumber_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Номер телефона.
     * Должно быть означено поле phone_number, либо поле email
     * </pre>
     *
     * <code>string phone_number = 6;</code>
     * @return The bytes for phoneNumber.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getPhoneNumberBytes() {
      java.lang.Object ref = phoneNumber_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        phoneNumber_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int EMAIL_FIELD_NUMBER = 7;
    @SuppressWarnings("serial")
    private volatile java.lang.Object email_ = "";
    /**
     * <pre>
     * Электронная почта.
     * Должно быть означено поле phone_number, либо поле email
     * </pre>
     *
     * <code>string email = 7;</code>
     * @return The email.
     */
    @java.lang.Override
    public java.lang.String getEmail() {
      java.lang.Object ref = email_;
      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();
        email_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Электронная почта.
     * Должно быть означено поле phone_number, либо поле email
     * </pre>
     *
     * <code>string email = 7;</code>
     * @return The bytes for email.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getEmailBytes() {
      java.lang.Object ref = email_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        email_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TITLE_FIELD_NUMBER = 8;
    @SuppressWarnings("serial")
    private volatile java.lang.Object title_ = "";
    /**
     * <pre>
     * Описание платежа.
     * По умолчанию подставляется "Счёт от {DD.MM.YYYY}г."
     * </pre>
     *
     * <code>string title = 8;</code>
     * @return The title.
     */
    @java.lang.Override
    public java.lang.String getTitle() {
      java.lang.Object ref = title_;
      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();
        title_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Описание платежа.
     * По умолчанию подставляется "Счёт от {DD.MM.YYYY}г."
     * </pre>
     *
     * <code>string title = 8;</code>
     * @return The bytes for title.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getTitleBytes() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        title_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (userId_ != 0) {
        output.writeInt32(1, userId_);
      }
      for (int i = 0; i < positions_.size(); i++) {
        output.writeMessage(2, positions_.get(i));
      }
      if (payInterfaceType_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType.PAY_INTERFACE_TYPE_UNKNOWN.getNumber()) {
        output.writeEnum(3, payInterfaceType_);
      }
      if (paywayType_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType.PAYWAY_TYPE_UNKNOWN.getNumber()) {
        output.writeEnum(4, paywayType_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(returnUrl_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, returnUrl_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(phoneNumber_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, phoneNumber_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(email_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, email_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(title_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 8, title_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (userId_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, userId_);
      }
      for (int i = 0; i < positions_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, positions_.get(i));
      }
      if (payInterfaceType_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType.PAY_INTERFACE_TYPE_UNKNOWN.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, payInterfaceType_);
      }
      if (paywayType_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType.PAYWAY_TYPE_UNKNOWN.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(4, paywayType_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(returnUrl_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, returnUrl_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(phoneNumber_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, phoneNumber_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(email_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, email_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(title_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, title_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest)) {
        return super.equals(obj);
      }
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest) obj;

      if (getUserId()
          != other.getUserId()) return false;
      if (!getPositionsList()
          .equals(other.getPositionsList())) return false;
      if (payInterfaceType_ != other.payInterfaceType_) return false;
      if (paywayType_ != other.paywayType_) return false;
      if (!getReturnUrl()
          .equals(other.getReturnUrl())) return false;
      if (!getPhoneNumber()
          .equals(other.getPhoneNumber())) return false;
      if (!getEmail()
          .equals(other.getEmail())) return false;
      if (!getTitle()
          .equals(other.getTitle())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + USER_ID_FIELD_NUMBER;
      hash = (53 * hash) + getUserId();
      if (getPositionsCount() > 0) {
        hash = (37 * hash) + POSITIONS_FIELD_NUMBER;
        hash = (53 * hash) + getPositionsList().hashCode();
      }
      hash = (37 * hash) + PAY_INTERFACE_TYPE_FIELD_NUMBER;
      hash = (53 * hash) + payInterfaceType_;
      hash = (37 * hash) + PAYWAY_TYPE_FIELD_NUMBER;
      hash = (53 * hash) + paywayType_;
      hash = (37 * hash) + RETURN_URL_FIELD_NUMBER;
      hash = (53 * hash) + getReturnUrl().hashCode();
      hash = (37 * hash) + PHONE_NUMBER_FIELD_NUMBER;
      hash = (53 * hash) + getPhoneNumber().hashCode();
      hash = (37 * hash) + EMAIL_FIELD_NUMBER;
      hash = (53 * hash) + getEmail().hashCode();
      hash = (37 * hash) + TITLE_FIELD_NUMBER;
      hash = (53 * hash) + getTitle().hashCode();
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest 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;
    }
    /**
     * <pre>
     * Запрос на создание платежа
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.CreateInvoiceRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.CreateInvoiceRequest)
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest.Builder.class);
      }

      // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        userId_ = 0;
        if (positionsBuilder_ == null) {
          positions_ = java.util.Collections.emptyList();
        } else {
          positions_ = null;
          positionsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        payInterfaceType_ = 0;
        paywayType_ = 0;
        returnUrl_ = "";
        phoneNumber_ = "";
        email_ = "";
        title_ = "";
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceRequest_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest getDefaultInstanceForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest build() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest buildPartial() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest(this);
        buildPartialRepeatedFields(result);
        if (bitField0_ != 0) { buildPartial0(result); }
        onBuilt();
        return result;
      }

      private void buildPartialRepeatedFields(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest result) {
        if (positionsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0)) {
            positions_ = java.util.Collections.unmodifiableList(positions_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.positions_ = positions_;
        } else {
          result.positions_ = positionsBuilder_.build();
        }
      }

      private void buildPartial0(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.userId_ = userId_;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.payInterfaceType_ = payInterfaceType_;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.paywayType_ = paywayType_;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          result.returnUrl_ = returnUrl_;
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          result.phoneNumber_ = phoneNumber_;
        }
        if (((from_bitField0_ & 0x00000040) != 0)) {
          result.email_ = email_;
        }
        if (((from_bitField0_ & 0x00000080) != 0)) {
          result.title_ = title_;
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest) {
          return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest other) {
        if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest.getDefaultInstance()) return this;
        if (other.getUserId() != 0) {
          setUserId(other.getUserId());
        }
        if (positionsBuilder_ == null) {
          if (!other.positions_.isEmpty()) {
            if (positions_.isEmpty()) {
              positions_ = other.positions_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensurePositionsIsMutable();
              positions_.addAll(other.positions_);
            }
            onChanged();
          }
        } else {
          if (!other.positions_.isEmpty()) {
            if (positionsBuilder_.isEmpty()) {
              positionsBuilder_.dispose();
              positionsBuilder_ = null;
              positions_ = other.positions_;
              bitField0_ = (bitField0_ & ~0x00000002);
              positionsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getPositionsFieldBuilder() : null;
            } else {
              positionsBuilder_.addAllMessages(other.positions_);
            }
          }
        }
        if (other.payInterfaceType_ != 0) {
          setPayInterfaceTypeValue(other.getPayInterfaceTypeValue());
        }
        if (other.paywayType_ != 0) {
          setPaywayTypeValue(other.getPaywayTypeValue());
        }
        if (!other.getReturnUrl().isEmpty()) {
          returnUrl_ = other.returnUrl_;
          bitField0_ |= 0x00000010;
          onChanged();
        }
        if (!other.getPhoneNumber().isEmpty()) {
          phoneNumber_ = other.phoneNumber_;
          bitField0_ |= 0x00000020;
          onChanged();
        }
        if (!other.getEmail().isEmpty()) {
          email_ = other.email_;
          bitField0_ |= 0x00000040;
          onChanged();
        }
        if (!other.getTitle().isEmpty()) {
          title_ = other.title_;
          bitField0_ |= 0x00000080;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 8: {
                userId_ = input.readInt32();
                bitField0_ |= 0x00000001;
                break;
              } // case 8
              case 18: {
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position m =
                    input.readMessage(
                        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.parser(),
                        extensionRegistry);
                if (positionsBuilder_ == null) {
                  ensurePositionsIsMutable();
                  positions_.add(m);
                } else {
                  positionsBuilder_.addMessage(m);
                }
                break;
              } // case 18
              case 24: {
                payInterfaceType_ = input.readEnum();
                bitField0_ |= 0x00000004;
                break;
              } // case 24
              case 32: {
                paywayType_ = input.readEnum();
                bitField0_ |= 0x00000008;
                break;
              } // case 32
              case 42: {
                returnUrl_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000010;
                break;
              } // case 42
              case 50: {
                phoneNumber_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000020;
                break;
              } // case 50
              case 58: {
                email_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000040;
                break;
              } // case 58
              case 66: {
                title_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000080;
                break;
              } // case 66
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private int userId_ ;
      /**
       * <pre>
       * Идентификатор пользователя
       * </pre>
       *
       * <code>int32 user_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The userId.
       */
      @java.lang.Override
      public int getUserId() {
        return userId_;
      }
      /**
       * <pre>
       * Идентификатор пользователя
       * </pre>
       *
       * <code>int32 user_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The userId to set.
       * @return This builder for chaining.
       */
      public Builder setUserId(int value) {

        userId_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Идентификатор пользователя
       * </pre>
       *
       * <code>int32 user_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return This builder for chaining.
       */
      public Builder clearUserId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        userId_ = 0;
        onChanged();
        return this;
      }

      private java.util.List<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position> positions_ =
        java.util.Collections.emptyList();
      private void ensurePositionsIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          positions_ = new java.util.ArrayList<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position>(positions_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PositionOrBuilder> positionsBuilder_;

      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public java.util.List<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position> getPositionsList() {
        if (positionsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(positions_);
        } else {
          return positionsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public int getPositionsCount() {
        if (positionsBuilder_ == null) {
          return positions_.size();
        } else {
          return positionsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position getPositions(int index) {
        if (positionsBuilder_ == null) {
          return positions_.get(index);
        } else {
          return positionsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder setPositions(
          int index, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position value) {
        if (positionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePositionsIsMutable();
          positions_.set(index, value);
          onChanged();
        } else {
          positionsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder setPositions(
          int index, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder builderForValue) {
        if (positionsBuilder_ == null) {
          ensurePositionsIsMutable();
          positions_.set(index, builderForValue.build());
          onChanged();
        } else {
          positionsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder addPositions(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position value) {
        if (positionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePositionsIsMutable();
          positions_.add(value);
          onChanged();
        } else {
          positionsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder addPositions(
          int index, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position value) {
        if (positionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePositionsIsMutable();
          positions_.add(index, value);
          onChanged();
        } else {
          positionsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder addPositions(
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder builderForValue) {
        if (positionsBuilder_ == null) {
          ensurePositionsIsMutable();
          positions_.add(builderForValue.build());
          onChanged();
        } else {
          positionsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder addPositions(
          int index, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder builderForValue) {
        if (positionsBuilder_ == null) {
          ensurePositionsIsMutable();
          positions_.add(index, builderForValue.build());
          onChanged();
        } else {
          positionsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder addAllPositions(
          java.lang.Iterable<? extends ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position> values) {
        if (positionsBuilder_ == null) {
          ensurePositionsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, positions_);
          onChanged();
        } else {
          positionsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder clearPositions() {
        if (positionsBuilder_ == null) {
          positions_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          positionsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder removePositions(int index) {
        if (positionsBuilder_ == null) {
          ensurePositionsIsMutable();
          positions_.remove(index);
          onChanged();
        } else {
          positionsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder getPositionsBuilder(
          int index) {
        return getPositionsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PositionOrBuilder getPositionsOrBuilder(
          int index) {
        if (positionsBuilder_ == null) {
          return positions_.get(index);  } else {
          return positionsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public java.util.List<? extends ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PositionOrBuilder> 
           getPositionsOrBuilderList() {
        if (positionsBuilder_ != null) {
          return positionsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(positions_);
        }
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder addPositionsBuilder() {
        return getPositionsFieldBuilder().addBuilder(
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.getDefaultInstance());
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder addPositionsBuilder(
          int index) {
        return getPositionsFieldBuilder().addBuilder(
            index, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.getDefaultInstance());
      }
      /**
       * <pre>
       * Позиция счета
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice.Position positions = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public java.util.List<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder> 
           getPositionsBuilderList() {
        return getPositionsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PositionOrBuilder> 
          getPositionsFieldBuilder() {
        if (positionsBuilder_ == null) {
          positionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Position.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PositionOrBuilder>(
                  positions_,
                  ((bitField0_ & 0x00000002) != 0),
                  getParentForChildren(),
                  isClean());
          positions_ = null;
        }
        return positionsBuilder_;
      }

      private int payInterfaceType_ = 0;
      /**
       * <pre>
       * Метод платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PayInterfaceType pay_interface_type = 3 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The enum numeric value on the wire for payInterfaceType.
       */
      @java.lang.Override public int getPayInterfaceTypeValue() {
        return payInterfaceType_;
      }
      /**
       * <pre>
       * Метод платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PayInterfaceType pay_interface_type = 3 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The enum numeric value on the wire for payInterfaceType to set.
       * @return This builder for chaining.
       */
      public Builder setPayInterfaceTypeValue(int value) {
        payInterfaceType_ = value;
        bitField0_ |= 0x00000004;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Метод платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PayInterfaceType pay_interface_type = 3 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The payInterfaceType.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType getPayInterfaceType() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType result = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType.forNumber(payInterfaceType_);
        return result == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType.UNRECOGNIZED : result;
      }
      /**
       * <pre>
       * Метод платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PayInterfaceType pay_interface_type = 3 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The payInterfaceType to set.
       * @return This builder for chaining.
       */
      public Builder setPayInterfaceType(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PayInterfaceType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        payInterfaceType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Метод платежа
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PayInterfaceType pay_interface_type = 3 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return This builder for chaining.
       */
      public Builder clearPayInterfaceType() {
        bitField0_ = (bitField0_ & ~0x00000004);
        payInterfaceType_ = 0;
        onChanged();
        return this;
      }

      private int paywayType_ = 0;
      /**
       * <pre>
       * Способ оплаты.
       * По умолчанию: BANK_CARD
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PaywayType payway_type = 4;</code>
       * @return The enum numeric value on the wire for paywayType.
       */
      @java.lang.Override public int getPaywayTypeValue() {
        return paywayType_;
      }
      /**
       * <pre>
       * Способ оплаты.
       * По умолчанию: BANK_CARD
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PaywayType payway_type = 4;</code>
       * @param value The enum numeric value on the wire for paywayType to set.
       * @return This builder for chaining.
       */
      public Builder setPaywayTypeValue(int value) {
        paywayType_ = value;
        bitField0_ |= 0x00000008;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Способ оплаты.
       * По умолчанию: BANK_CARD
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PaywayType payway_type = 4;</code>
       * @return The paywayType.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType getPaywayType() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType result = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType.forNumber(paywayType_);
        return result == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType.UNRECOGNIZED : result;
      }
      /**
       * <pre>
       * Способ оплаты.
       * По умолчанию: BANK_CARD
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PaywayType payway_type = 4;</code>
       * @param value The paywayType to set.
       * @return This builder for chaining.
       */
      public Builder setPaywayType(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.PaywayType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        paywayType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Способ оплаты.
       * По умолчанию: BANK_CARD
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.PaywayType payway_type = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearPaywayType() {
        bitField0_ = (bitField0_ & ~0x00000008);
        paywayType_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object returnUrl_ = "";
      /**
       * <pre>
       * Ссылка для перехода после оплаты.
       * Если не передан подставится значение по умолчанию
       * </pre>
       *
       * <code>string return_url = 5;</code>
       * @return The returnUrl.
       */
      public java.lang.String getReturnUrl() {
        java.lang.Object ref = returnUrl_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          returnUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Ссылка для перехода после оплаты.
       * Если не передан подставится значение по умолчанию
       * </pre>
       *
       * <code>string return_url = 5;</code>
       * @return The bytes for returnUrl.
       */
      public com.google.protobuf.ByteString
          getReturnUrlBytes() {
        java.lang.Object ref = returnUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          returnUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Ссылка для перехода после оплаты.
       * Если не передан подставится значение по умолчанию
       * </pre>
       *
       * <code>string return_url = 5;</code>
       * @param value The returnUrl to set.
       * @return This builder for chaining.
       */
      public Builder setReturnUrl(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        returnUrl_ = value;
        bitField0_ |= 0x00000010;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Ссылка для перехода после оплаты.
       * Если не передан подставится значение по умолчанию
       * </pre>
       *
       * <code>string return_url = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearReturnUrl() {
        returnUrl_ = getDefaultInstance().getReturnUrl();
        bitField0_ = (bitField0_ & ~0x00000010);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Ссылка для перехода после оплаты.
       * Если не передан подставится значение по умолчанию
       * </pre>
       *
       * <code>string return_url = 5;</code>
       * @param value The bytes for returnUrl to set.
       * @return This builder for chaining.
       */
      public Builder setReturnUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        returnUrl_ = value;
        bitField0_ |= 0x00000010;
        onChanged();
        return this;
      }

      private java.lang.Object phoneNumber_ = "";
      /**
       * <pre>
       * Номер телефона.
       * Должно быть означено поле phone_number, либо поле email
       * </pre>
       *
       * <code>string phone_number = 6;</code>
       * @return The phoneNumber.
       */
      public java.lang.String getPhoneNumber() {
        java.lang.Object ref = phoneNumber_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          phoneNumber_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Номер телефона.
       * Должно быть означено поле phone_number, либо поле email
       * </pre>
       *
       * <code>string phone_number = 6;</code>
       * @return The bytes for phoneNumber.
       */
      public com.google.protobuf.ByteString
          getPhoneNumberBytes() {
        java.lang.Object ref = phoneNumber_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          phoneNumber_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Номер телефона.
       * Должно быть означено поле phone_number, либо поле email
       * </pre>
       *
       * <code>string phone_number = 6;</code>
       * @param value The phoneNumber to set.
       * @return This builder for chaining.
       */
      public Builder setPhoneNumber(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        phoneNumber_ = value;
        bitField0_ |= 0x00000020;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Номер телефона.
       * Должно быть означено поле phone_number, либо поле email
       * </pre>
       *
       * <code>string phone_number = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearPhoneNumber() {
        phoneNumber_ = getDefaultInstance().getPhoneNumber();
        bitField0_ = (bitField0_ & ~0x00000020);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Номер телефона.
       * Должно быть означено поле phone_number, либо поле email
       * </pre>
       *
       * <code>string phone_number = 6;</code>
       * @param value The bytes for phoneNumber to set.
       * @return This builder for chaining.
       */
      public Builder setPhoneNumberBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        phoneNumber_ = value;
        bitField0_ |= 0x00000020;
        onChanged();
        return this;
      }

      private java.lang.Object email_ = "";
      /**
       * <pre>
       * Электронная почта.
       * Должно быть означено поле phone_number, либо поле email
       * </pre>
       *
       * <code>string email = 7;</code>
       * @return The email.
       */
      public java.lang.String getEmail() {
        java.lang.Object ref = email_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          email_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Электронная почта.
       * Должно быть означено поле phone_number, либо поле email
       * </pre>
       *
       * <code>string email = 7;</code>
       * @return The bytes for email.
       */
      public com.google.protobuf.ByteString
          getEmailBytes() {
        java.lang.Object ref = email_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          email_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Электронная почта.
       * Должно быть означено поле phone_number, либо поле email
       * </pre>
       *
       * <code>string email = 7;</code>
       * @param value The email to set.
       * @return This builder for chaining.
       */
      public Builder setEmail(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        email_ = value;
        bitField0_ |= 0x00000040;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Электронная почта.
       * Должно быть означено поле phone_number, либо поле email
       * </pre>
       *
       * <code>string email = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearEmail() {
        email_ = getDefaultInstance().getEmail();
        bitField0_ = (bitField0_ & ~0x00000040);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Электронная почта.
       * Должно быть означено поле phone_number, либо поле email
       * </pre>
       *
       * <code>string email = 7;</code>
       * @param value The bytes for email to set.
       * @return This builder for chaining.
       */
      public Builder setEmailBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        email_ = value;
        bitField0_ |= 0x00000040;
        onChanged();
        return this;
      }

      private java.lang.Object title_ = "";
      /**
       * <pre>
       * Описание платежа.
       * По умолчанию подставляется "Счёт от {DD.MM.YYYY}г."
       * </pre>
       *
       * <code>string title = 8;</code>
       * @return The title.
       */
      public java.lang.String getTitle() {
        java.lang.Object ref = title_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          title_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Описание платежа.
       * По умолчанию подставляется "Счёт от {DD.MM.YYYY}г."
       * </pre>
       *
       * <code>string title = 8;</code>
       * @return The bytes for title.
       */
      public com.google.protobuf.ByteString
          getTitleBytes() {
        java.lang.Object ref = title_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          title_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Описание платежа.
       * По умолчанию подставляется "Счёт от {DD.MM.YYYY}г."
       * </pre>
       *
       * <code>string title = 8;</code>
       * @param value The title to set.
       * @return This builder for chaining.
       */
      public Builder setTitle(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        title_ = value;
        bitField0_ |= 0x00000080;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Описание платежа.
       * По умолчанию подставляется "Счёт от {DD.MM.YYYY}г."
       * </pre>
       *
       * <code>string title = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearTitle() {
        title_ = getDefaultInstance().getTitle();
        bitField0_ = (bitField0_ & ~0x00000080);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Описание платежа.
       * По умолчанию подставляется "Счёт от {DD.MM.YYYY}г."
       * </pre>
       *
       * <code>string title = 8;</code>
       * @param value The bytes for title to set.
       * @return This builder for chaining.
       */
      public Builder setTitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        title_ = value;
        bitField0_ |= 0x00000080;
        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:keyapis.invoice.v1.CreateInvoiceRequest)
    }

    // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.CreateInvoiceRequest)
    private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest();
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<CreateInvoiceRequest>
        PARSER = new com.google.protobuf.AbstractParser<CreateInvoiceRequest>() {
      @java.lang.Override
      public CreateInvoiceRequest 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 (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CreateInvoiceResponseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.CreateInvoiceResponse)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Ошибка валидации
     * </pre>
     *
     * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error error = 1;</code>
     * @return Whether the error field is set.
     */
    boolean hasError();
    /**
     * <pre>
     * Ошибка валидации
     * </pre>
     *
     * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error error = 1;</code>
     * @return The error.
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error getError();
    /**
     * <pre>
     * Ошибка валидации
     * </pre>
     *
     * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error error = 1;</code>
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.ErrorOrBuilder getErrorOrBuilder();

    /**
     * <pre>
     * Платеж
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
     * @return Whether the data field is set.
     */
    boolean hasData();
    /**
     * <pre>
     * Платеж
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
     * @return The data.
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice getData();
    /**
     * <pre>
     * Платеж
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder getDataOrBuilder();

    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.TypeCase getTypeCase();
  }
  /**
   * <pre>
   * Ответ на запрос создание платежа
   * </pre>
   *
   * Protobuf type {@code keyapis.invoice.v1.CreateInvoiceResponse}
   */
  public static final class CreateInvoiceResponse extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.CreateInvoiceResponse)
      CreateInvoiceResponseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use CreateInvoiceResponse.newBuilder() to construct.
    private CreateInvoiceResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CreateInvoiceResponse() {
    }

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

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceResponse_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Builder.class);
    }

    public interface ErrorOrBuilder extends
        // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.CreateInvoiceResponse.Error)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
       * @return Whether the validation field is set.
       */
      boolean hasValidation();
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
       * @return The validation.
       */
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError getValidation();
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
       */
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationErrorOrBuilder getValidationOrBuilder();

      /**
       * <pre>
       * Должно быть означено поле phone_number, либо поле email
       * </pre>
       *
       * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts missing_user_contacts = 2;</code>
       * @return Whether the missingUserContacts field is set.
       */
      boolean hasMissingUserContacts();
      /**
       * <pre>
       * Должно быть означено поле phone_number, либо поле email
       * </pre>
       *
       * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts missing_user_contacts = 2;</code>
       * @return The missingUserContacts.
       */
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts getMissingUserContacts();
      /**
       * <pre>
       * Должно быть означено поле phone_number, либо поле email
       * </pre>
       *
       * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts missing_user_contacts = 2;</code>
       */
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContactsOrBuilder getMissingUserContactsOrBuilder();

      /**
       * <pre>
       * Ошибки внешней системы
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.ExternalError external = 3;</code>
       * @return Whether the external field is set.
       */
      boolean hasExternal();
      /**
       * <pre>
       * Ошибки внешней системы
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.ExternalError external = 3;</code>
       * @return The external.
       */
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError getExternal();
      /**
       * <pre>
       * Ошибки внешней системы
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.ExternalError external = 3;</code>
       */
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalErrorOrBuilder getExternalOrBuilder();

      /**
       * <pre>
       * Ошибка сохранения
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.SavingError saving = 4;</code>
       * @return Whether the saving field is set.
       */
      boolean hasSaving();
      /**
       * <pre>
       * Ошибка сохранения
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.SavingError saving = 4;</code>
       * @return The saving.
       */
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError getSaving();
      /**
       * <pre>
       * Ошибка сохранения
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.SavingError saving = 4;</code>
       */
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingErrorOrBuilder getSavingOrBuilder();

      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.ReasonCase getReasonCase();
    }
    /**
     * <pre>
     * Ошибка запроса
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.CreateInvoiceResponse.Error}
     */
    public static final class Error extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.CreateInvoiceResponse.Error)
        ErrorOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use Error.newBuilder() to construct.
      private Error(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private Error() {
      }

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

      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.Builder.class);
      }

      public interface MissingUserContactsOrBuilder extends
          // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts)
          com.google.protobuf.MessageOrBuilder {
      }
      /**
       * <pre>
       * Должно быть означено поле phone_number, либо поле email
       * </pre>
       *
       * Protobuf type {@code keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts}
       */
      public static final class MissingUserContacts extends
          com.google.protobuf.GeneratedMessageV3 implements
          // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts)
          MissingUserContactsOrBuilder {
      private static final long serialVersionUID = 0L;
        // Use MissingUserContacts.newBuilder() to construct.
        private MissingUserContacts(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
          super(builder);
        }
        private MissingUserContacts() {
        }

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

        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_MissingUserContacts_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_MissingUserContacts_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.Builder.class);
        }

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

          memoizedIsInitialized = 1;
          return true;
        }

        @java.lang.Override
        public void writeTo(com.google.protobuf.CodedOutputStream output)
                            throws java.io.IOException {
          getUnknownFields().writeTo(output);
        }

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

          size = 0;
          size += getUnknownFields().getSerializedSize();
          memoizedSize = size;
          return size;
        }

        @java.lang.Override
        public boolean equals(final java.lang.Object obj) {
          if (obj == this) {
           return true;
          }
          if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts)) {
            return super.equals(obj);
          }
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts) obj;

          if (!getUnknownFields().equals(other.getUnknownFields())) return false;
          return true;
        }

        @java.lang.Override
        public int hashCode() {
          if (memoizedHashCode != 0) {
            return memoizedHashCode;
          }
          int hash = 41;
          hash = (19 * hash) + getDescriptor().hashCode();
          hash = (29 * hash) + getUnknownFields().hashCode();
          memoizedHashCode = hash;
          return hash;
        }

        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts parseFrom(
            java.nio.ByteBuffer data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts parseFrom(
            java.nio.ByteBuffer data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts parseFrom(
            com.google.protobuf.ByteString data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts parseFrom(
            com.google.protobuf.ByteString data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts parseFrom(byte[] data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts parseFrom(
            byte[] data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts parseFrom(java.io.InputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseWithIOException(PARSER, input);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts parseDelimitedFrom(java.io.InputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseDelimitedWithIOException(PARSER, input);
        }

        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts parseFrom(
            com.google.protobuf.CodedInputStream input)
            throws java.io.IOException {
          return com.google.protobuf.GeneratedMessageV3
              .parseWithIOException(PARSER, input);
        }
        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts 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;
        }
        /**
         * <pre>
         * Должно быть означено поле phone_number, либо поле email
         * </pre>
         *
         * Protobuf type {@code keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts}
         */
        public static final class Builder extends
            com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
            // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts)
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContactsOrBuilder {
          public static final com.google.protobuf.Descriptors.Descriptor
              getDescriptor() {
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_MissingUserContacts_descriptor;
          }

          @java.lang.Override
          protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
              internalGetFieldAccessorTable() {
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_MissingUserContacts_fieldAccessorTable
                .ensureFieldAccessorsInitialized(
                    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.Builder.class);
          }

          // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.newBuilder()
          private Builder() {

          }

          private Builder(
              com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
            super(parent);

          }
          @java.lang.Override
          public Builder clear() {
            super.clear();
            return this;
          }

          @java.lang.Override
          public com.google.protobuf.Descriptors.Descriptor
              getDescriptorForType() {
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_MissingUserContacts_descriptor;
          }

          @java.lang.Override
          public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts getDefaultInstanceForType() {
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.getDefaultInstance();
          }

          @java.lang.Override
          public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts build() {
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts result = buildPartial();
            if (!result.isInitialized()) {
              throw newUninitializedMessageException(result);
            }
            return result;
          }

          @java.lang.Override
          public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts buildPartial() {
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts(this);
            onBuilt();
            return result;
          }

          @java.lang.Override
          public Builder mergeFrom(com.google.protobuf.Message other) {
            if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts) {
              return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts)other);
            } else {
              super.mergeFrom(other);
              return this;
            }
          }

          public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts other) {
            if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.getDefaultInstance()) return this;
            this.mergeUnknownFields(other.getUnknownFields());
            onChanged();
            return this;
          }

          @java.lang.Override
          public final boolean isInitialized() {
            return true;
          }

          @java.lang.Override
          public Builder mergeFrom(
              com.google.protobuf.CodedInputStream input,
              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
              throws java.io.IOException {
            if (extensionRegistry == null) {
              throw new java.lang.NullPointerException();
            }
            try {
              boolean done = false;
              while (!done) {
                int tag = input.readTag();
                switch (tag) {
                  case 0:
                    done = true;
                    break;
                  default: {
                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                      done = true; // was an endgroup tag
                    }
                    break;
                  } // default:
                } // switch (tag)
              } // while (!done)
            } catch (com.google.protobuf.InvalidProtocolBufferException e) {
              throw e.unwrapIOException();
            } finally {
              onChanged();
            } // finally
            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:keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts)
        }

        // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts)
        private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts DEFAULT_INSTANCE;
        static {
          DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts();
        }

        public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts getDefaultInstance() {
          return DEFAULT_INSTANCE;
        }

        private static final com.google.protobuf.Parser<MissingUserContacts>
            PARSER = new com.google.protobuf.AbstractParser<MissingUserContacts>() {
          @java.lang.Override
          public MissingUserContacts 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 (com.google.protobuf.UninitializedMessageException e) {
              throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
            } catch (java.io.IOException e) {
              throw new com.google.protobuf.InvalidProtocolBufferException(e)
                  .setUnfinishedMessage(builder.buildPartial());
            }
            return builder.buildPartial();
          }
        };

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

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

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts getDefaultInstanceForType() {
          return DEFAULT_INSTANCE;
        }

      }

      private int reasonCase_ = 0;
      @SuppressWarnings("serial")
      private java.lang.Object reason_;
      public enum ReasonCase
          implements com.google.protobuf.Internal.EnumLite,
              com.google.protobuf.AbstractMessage.InternalOneOfEnum {
        VALIDATION(1),
        MISSING_USER_CONTACTS(2),
        EXTERNAL(3),
        SAVING(4),
        REASON_NOT_SET(0);
        private final int value;
        private ReasonCase(int value) {
          this.value = value;
        }
        /**
         * @param value The number of the enum to look for.
         * @return The enum associated with the given number.
         * @deprecated Use {@link #forNumber(int)} instead.
         */
        @java.lang.Deprecated
        public static ReasonCase valueOf(int value) {
          return forNumber(value);
        }

        public static ReasonCase forNumber(int value) {
          switch (value) {
            case 1: return VALIDATION;
            case 2: return MISSING_USER_CONTACTS;
            case 3: return EXTERNAL;
            case 4: return SAVING;
            case 0: return REASON_NOT_SET;
            default: return null;
          }
        }
        public int getNumber() {
          return this.value;
        }
      };

      public ReasonCase
      getReasonCase() {
        return ReasonCase.forNumber(
            reasonCase_);
      }

      public static final int VALIDATION_FIELD_NUMBER = 1;
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
       * @return Whether the validation field is set.
       */
      @java.lang.Override
      public boolean hasValidation() {
        return reasonCase_ == 1;
      }
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
       * @return The validation.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError getValidation() {
        if (reasonCase_ == 1) {
           return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_;
        }
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance();
      }
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationErrorOrBuilder getValidationOrBuilder() {
        if (reasonCase_ == 1) {
           return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_;
        }
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance();
      }

      public static final int MISSING_USER_CONTACTS_FIELD_NUMBER = 2;
      /**
       * <pre>
       * Должно быть означено поле phone_number, либо поле email
       * </pre>
       *
       * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts missing_user_contacts = 2;</code>
       * @return Whether the missingUserContacts field is set.
       */
      @java.lang.Override
      public boolean hasMissingUserContacts() {
        return reasonCase_ == 2;
      }
      /**
       * <pre>
       * Должно быть означено поле phone_number, либо поле email
       * </pre>
       *
       * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts missing_user_contacts = 2;</code>
       * @return The missingUserContacts.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts getMissingUserContacts() {
        if (reasonCase_ == 2) {
           return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts) reason_;
        }
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.getDefaultInstance();
      }
      /**
       * <pre>
       * Должно быть означено поле phone_number, либо поле email
       * </pre>
       *
       * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts missing_user_contacts = 2;</code>
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContactsOrBuilder getMissingUserContactsOrBuilder() {
        if (reasonCase_ == 2) {
           return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts) reason_;
        }
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.getDefaultInstance();
      }

      public static final int EXTERNAL_FIELD_NUMBER = 3;
      /**
       * <pre>
       * Ошибки внешней системы
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.ExternalError external = 3;</code>
       * @return Whether the external field is set.
       */
      @java.lang.Override
      public boolean hasExternal() {
        return reasonCase_ == 3;
      }
      /**
       * <pre>
       * Ошибки внешней системы
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.ExternalError external = 3;</code>
       * @return The external.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError getExternal() {
        if (reasonCase_ == 3) {
           return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError) reason_;
        }
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.getDefaultInstance();
      }
      /**
       * <pre>
       * Ошибки внешней системы
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.ExternalError external = 3;</code>
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalErrorOrBuilder getExternalOrBuilder() {
        if (reasonCase_ == 3) {
           return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError) reason_;
        }
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.getDefaultInstance();
      }

      public static final int SAVING_FIELD_NUMBER = 4;
      /**
       * <pre>
       * Ошибка сохранения
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.SavingError saving = 4;</code>
       * @return Whether the saving field is set.
       */
      @java.lang.Override
      public boolean hasSaving() {
        return reasonCase_ == 4;
      }
      /**
       * <pre>
       * Ошибка сохранения
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.SavingError saving = 4;</code>
       * @return The saving.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError getSaving() {
        if (reasonCase_ == 4) {
           return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError) reason_;
        }
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.getDefaultInstance();
      }
      /**
       * <pre>
       * Ошибка сохранения
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice.SavingError saving = 4;</code>
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingErrorOrBuilder getSavingOrBuilder() {
        if (reasonCase_ == 4) {
           return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError) reason_;
        }
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.getDefaultInstance();
      }

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

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (reasonCase_ == 1) {
          output.writeMessage(1, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_);
        }
        if (reasonCase_ == 2) {
          output.writeMessage(2, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts) reason_);
        }
        if (reasonCase_ == 3) {
          output.writeMessage(3, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError) reason_);
        }
        if (reasonCase_ == 4) {
          output.writeMessage(4, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError) reason_);
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (reasonCase_ == 1) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_);
        }
        if (reasonCase_ == 2) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(2, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts) reason_);
        }
        if (reasonCase_ == 3) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(3, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError) reason_);
        }
        if (reasonCase_ == 4) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(4, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError) reason_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error)) {
          return super.equals(obj);
        }
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error) obj;

        if (!getReasonCase().equals(other.getReasonCase())) return false;
        switch (reasonCase_) {
          case 1:
            if (!getValidation()
                .equals(other.getValidation())) return false;
            break;
          case 2:
            if (!getMissingUserContacts()
                .equals(other.getMissingUserContacts())) return false;
            break;
          case 3:
            if (!getExternal()
                .equals(other.getExternal())) return false;
            break;
          case 4:
            if (!getSaving()
                .equals(other.getSaving())) return false;
            break;
          case 0:
          default:
        }
        if (!getUnknownFields().equals(other.getUnknownFields())) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        switch (reasonCase_) {
          case 1:
            hash = (37 * hash) + VALIDATION_FIELD_NUMBER;
            hash = (53 * hash) + getValidation().hashCode();
            break;
          case 2:
            hash = (37 * hash) + MISSING_USER_CONTACTS_FIELD_NUMBER;
            hash = (53 * hash) + getMissingUserContacts().hashCode();
            break;
          case 3:
            hash = (37 * hash) + EXTERNAL_FIELD_NUMBER;
            hash = (53 * hash) + getExternal().hashCode();
            break;
          case 4:
            hash = (37 * hash) + SAVING_FIELD_NUMBER;
            hash = (53 * hash) + getSaving().hashCode();
            break;
          case 0:
          default:
        }
        hash = (29 * hash) + getUnknownFields().hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error 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;
      }
      /**
       * <pre>
       * Ошибка запроса
       * </pre>
       *
       * Protobuf type {@code keyapis.invoice.v1.CreateInvoiceResponse.Error}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.CreateInvoiceResponse.Error)
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.ErrorOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.Builder.class);
        }

        // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.newBuilder()
        private Builder() {

        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);

        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          bitField0_ = 0;
          if (validationBuilder_ != null) {
            validationBuilder_.clear();
          }
          if (missingUserContactsBuilder_ != null) {
            missingUserContactsBuilder_.clear();
          }
          if (externalBuilder_ != null) {
            externalBuilder_.clear();
          }
          if (savingBuilder_ != null) {
            savingBuilder_.clear();
          }
          reasonCase_ = 0;
          reason_ = null;
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_descriptor;
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error getDefaultInstanceForType() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.getDefaultInstance();
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error build() {
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error buildPartial() {
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error(this);
          if (bitField0_ != 0) { buildPartial0(result); }
          buildPartialOneofs(result);
          onBuilt();
          return result;
        }

        private void buildPartial0(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error result) {
          int from_bitField0_ = bitField0_;
        }

        private void buildPartialOneofs(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error result) {
          result.reasonCase_ = reasonCase_;
          result.reason_ = this.reason_;
          if (reasonCase_ == 1 &&
              validationBuilder_ != null) {
            result.reason_ = validationBuilder_.build();
          }
          if (reasonCase_ == 2 &&
              missingUserContactsBuilder_ != null) {
            result.reason_ = missingUserContactsBuilder_.build();
          }
          if (reasonCase_ == 3 &&
              externalBuilder_ != null) {
            result.reason_ = externalBuilder_.build();
          }
          if (reasonCase_ == 4 &&
              savingBuilder_ != null) {
            result.reason_ = savingBuilder_.build();
          }
        }

        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error) {
            return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error other) {
          if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.getDefaultInstance()) return this;
          switch (other.getReasonCase()) {
            case VALIDATION: {
              mergeValidation(other.getValidation());
              break;
            }
            case MISSING_USER_CONTACTS: {
              mergeMissingUserContacts(other.getMissingUserContacts());
              break;
            }
            case EXTERNAL: {
              mergeExternal(other.getExternal());
              break;
            }
            case SAVING: {
              mergeSaving(other.getSaving());
              break;
            }
            case REASON_NOT_SET: {
              break;
            }
          }
          this.mergeUnknownFields(other.getUnknownFields());
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          if (extensionRegistry == null) {
            throw new java.lang.NullPointerException();
          }
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                case 10: {
                  input.readMessage(
                      getValidationFieldBuilder().getBuilder(),
                      extensionRegistry);
                  reasonCase_ = 1;
                  break;
                } // case 10
                case 18: {
                  input.readMessage(
                      getMissingUserContactsFieldBuilder().getBuilder(),
                      extensionRegistry);
                  reasonCase_ = 2;
                  break;
                } // case 18
                case 26: {
                  input.readMessage(
                      getExternalFieldBuilder().getBuilder(),
                      extensionRegistry);
                  reasonCase_ = 3;
                  break;
                } // case 26
                case 34: {
                  input.readMessage(
                      getSavingFieldBuilder().getBuilder(),
                      extensionRegistry);
                  reasonCase_ = 4;
                  break;
                } // case 34
                default: {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
              } // switch (tag)
            } // while (!done)
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.unwrapIOException();
          } finally {
            onChanged();
          } // finally
          return this;
        }
        private int reasonCase_ = 0;
        private java.lang.Object reason_;
        public ReasonCase
            getReasonCase() {
          return ReasonCase.forNumber(
              reasonCase_);
        }

        public Builder clearReason() {
          reasonCase_ = 0;
          reason_ = null;
          onChanged();
          return this;
        }

        private int bitField0_;

        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationErrorOrBuilder> validationBuilder_;
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         * @return Whether the validation field is set.
         */
        @java.lang.Override
        public boolean hasValidation() {
          return reasonCase_ == 1;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         * @return The validation.
         */
        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError getValidation() {
          if (validationBuilder_ == null) {
            if (reasonCase_ == 1) {
              return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_;
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance();
          } else {
            if (reasonCase_ == 1) {
              return validationBuilder_.getMessage();
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        public Builder setValidation(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError value) {
          if (validationBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            reason_ = value;
            onChanged();
          } else {
            validationBuilder_.setMessage(value);
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        public Builder setValidation(
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.Builder builderForValue) {
          if (validationBuilder_ == null) {
            reason_ = builderForValue.build();
            onChanged();
          } else {
            validationBuilder_.setMessage(builderForValue.build());
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        public Builder mergeValidation(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError value) {
          if (validationBuilder_ == null) {
            if (reasonCase_ == 1 &&
                reason_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance()) {
              reason_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.newBuilder((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_)
                  .mergeFrom(value).buildPartial();
            } else {
              reason_ = value;
            }
            onChanged();
          } else {
            if (reasonCase_ == 1) {
              validationBuilder_.mergeFrom(value);
            } else {
              validationBuilder_.setMessage(value);
            }
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        public Builder clearValidation() {
          if (validationBuilder_ == null) {
            if (reasonCase_ == 1) {
              reasonCase_ = 0;
              reason_ = null;
              onChanged();
            }
          } else {
            if (reasonCase_ == 1) {
              reasonCase_ = 0;
              reason_ = null;
            }
            validationBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.Builder getValidationBuilder() {
          return getValidationFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationErrorOrBuilder getValidationOrBuilder() {
          if ((reasonCase_ == 1) && (validationBuilder_ != null)) {
            return validationBuilder_.getMessageOrBuilder();
          } else {
            if (reasonCase_ == 1) {
              return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_;
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationErrorOrBuilder> 
            getValidationFieldBuilder() {
          if (validationBuilder_ == null) {
            if (!(reasonCase_ == 1)) {
              reason_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance();
            }
            validationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationErrorOrBuilder>(
                    (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_,
                    getParentForChildren(),
                    isClean());
            reason_ = null;
          }
          reasonCase_ = 1;
          onChanged();
          return validationBuilder_;
        }

        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContactsOrBuilder> missingUserContactsBuilder_;
        /**
         * <pre>
         * Должно быть означено поле phone_number, либо поле email
         * </pre>
         *
         * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts missing_user_contacts = 2;</code>
         * @return Whether the missingUserContacts field is set.
         */
        @java.lang.Override
        public boolean hasMissingUserContacts() {
          return reasonCase_ == 2;
        }
        /**
         * <pre>
         * Должно быть означено поле phone_number, либо поле email
         * </pre>
         *
         * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts missing_user_contacts = 2;</code>
         * @return The missingUserContacts.
         */
        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts getMissingUserContacts() {
          if (missingUserContactsBuilder_ == null) {
            if (reasonCase_ == 2) {
              return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts) reason_;
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.getDefaultInstance();
          } else {
            if (reasonCase_ == 2) {
              return missingUserContactsBuilder_.getMessage();
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Должно быть означено поле phone_number, либо поле email
         * </pre>
         *
         * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts missing_user_contacts = 2;</code>
         */
        public Builder setMissingUserContacts(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts value) {
          if (missingUserContactsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            reason_ = value;
            onChanged();
          } else {
            missingUserContactsBuilder_.setMessage(value);
          }
          reasonCase_ = 2;
          return this;
        }
        /**
         * <pre>
         * Должно быть означено поле phone_number, либо поле email
         * </pre>
         *
         * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts missing_user_contacts = 2;</code>
         */
        public Builder setMissingUserContacts(
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.Builder builderForValue) {
          if (missingUserContactsBuilder_ == null) {
            reason_ = builderForValue.build();
            onChanged();
          } else {
            missingUserContactsBuilder_.setMessage(builderForValue.build());
          }
          reasonCase_ = 2;
          return this;
        }
        /**
         * <pre>
         * Должно быть означено поле phone_number, либо поле email
         * </pre>
         *
         * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts missing_user_contacts = 2;</code>
         */
        public Builder mergeMissingUserContacts(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts value) {
          if (missingUserContactsBuilder_ == null) {
            if (reasonCase_ == 2 &&
                reason_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.getDefaultInstance()) {
              reason_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.newBuilder((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts) reason_)
                  .mergeFrom(value).buildPartial();
            } else {
              reason_ = value;
            }
            onChanged();
          } else {
            if (reasonCase_ == 2) {
              missingUserContactsBuilder_.mergeFrom(value);
            } else {
              missingUserContactsBuilder_.setMessage(value);
            }
          }
          reasonCase_ = 2;
          return this;
        }
        /**
         * <pre>
         * Должно быть означено поле phone_number, либо поле email
         * </pre>
         *
         * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts missing_user_contacts = 2;</code>
         */
        public Builder clearMissingUserContacts() {
          if (missingUserContactsBuilder_ == null) {
            if (reasonCase_ == 2) {
              reasonCase_ = 0;
              reason_ = null;
              onChanged();
            }
          } else {
            if (reasonCase_ == 2) {
              reasonCase_ = 0;
              reason_ = null;
            }
            missingUserContactsBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * Должно быть означено поле phone_number, либо поле email
         * </pre>
         *
         * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts missing_user_contacts = 2;</code>
         */
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.Builder getMissingUserContactsBuilder() {
          return getMissingUserContactsFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Должно быть означено поле phone_number, либо поле email
         * </pre>
         *
         * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts missing_user_contacts = 2;</code>
         */
        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContactsOrBuilder getMissingUserContactsOrBuilder() {
          if ((reasonCase_ == 2) && (missingUserContactsBuilder_ != null)) {
            return missingUserContactsBuilder_.getMessageOrBuilder();
          } else {
            if (reasonCase_ == 2) {
              return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts) reason_;
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Должно быть означено поле phone_number, либо поле email
         * </pre>
         *
         * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error.MissingUserContacts missing_user_contacts = 2;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContactsOrBuilder> 
            getMissingUserContactsFieldBuilder() {
          if (missingUserContactsBuilder_ == null) {
            if (!(reasonCase_ == 2)) {
              reason_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.getDefaultInstance();
            }
            missingUserContactsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContactsOrBuilder>(
                    (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.MissingUserContacts) reason_,
                    getParentForChildren(),
                    isClean());
            reason_ = null;
          }
          reasonCase_ = 2;
          onChanged();
          return missingUserContactsBuilder_;
        }

        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalErrorOrBuilder> externalBuilder_;
        /**
         * <pre>
         * Ошибки внешней системы
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.ExternalError external = 3;</code>
         * @return Whether the external field is set.
         */
        @java.lang.Override
        public boolean hasExternal() {
          return reasonCase_ == 3;
        }
        /**
         * <pre>
         * Ошибки внешней системы
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.ExternalError external = 3;</code>
         * @return The external.
         */
        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError getExternal() {
          if (externalBuilder_ == null) {
            if (reasonCase_ == 3) {
              return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError) reason_;
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.getDefaultInstance();
          } else {
            if (reasonCase_ == 3) {
              return externalBuilder_.getMessage();
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Ошибки внешней системы
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.ExternalError external = 3;</code>
         */
        public Builder setExternal(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError value) {
          if (externalBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            reason_ = value;
            onChanged();
          } else {
            externalBuilder_.setMessage(value);
          }
          reasonCase_ = 3;
          return this;
        }
        /**
         * <pre>
         * Ошибки внешней системы
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.ExternalError external = 3;</code>
         */
        public Builder setExternal(
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.Builder builderForValue) {
          if (externalBuilder_ == null) {
            reason_ = builderForValue.build();
            onChanged();
          } else {
            externalBuilder_.setMessage(builderForValue.build());
          }
          reasonCase_ = 3;
          return this;
        }
        /**
         * <pre>
         * Ошибки внешней системы
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.ExternalError external = 3;</code>
         */
        public Builder mergeExternal(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError value) {
          if (externalBuilder_ == null) {
            if (reasonCase_ == 3 &&
                reason_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.getDefaultInstance()) {
              reason_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.newBuilder((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError) reason_)
                  .mergeFrom(value).buildPartial();
            } else {
              reason_ = value;
            }
            onChanged();
          } else {
            if (reasonCase_ == 3) {
              externalBuilder_.mergeFrom(value);
            } else {
              externalBuilder_.setMessage(value);
            }
          }
          reasonCase_ = 3;
          return this;
        }
        /**
         * <pre>
         * Ошибки внешней системы
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.ExternalError external = 3;</code>
         */
        public Builder clearExternal() {
          if (externalBuilder_ == null) {
            if (reasonCase_ == 3) {
              reasonCase_ = 0;
              reason_ = null;
              onChanged();
            }
          } else {
            if (reasonCase_ == 3) {
              reasonCase_ = 0;
              reason_ = null;
            }
            externalBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * Ошибки внешней системы
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.ExternalError external = 3;</code>
         */
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.Builder getExternalBuilder() {
          return getExternalFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Ошибки внешней системы
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.ExternalError external = 3;</code>
         */
        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalErrorOrBuilder getExternalOrBuilder() {
          if ((reasonCase_ == 3) && (externalBuilder_ != null)) {
            return externalBuilder_.getMessageOrBuilder();
          } else {
            if (reasonCase_ == 3) {
              return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError) reason_;
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Ошибки внешней системы
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.ExternalError external = 3;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalErrorOrBuilder> 
            getExternalFieldBuilder() {
          if (externalBuilder_ == null) {
            if (!(reasonCase_ == 3)) {
              reason_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.getDefaultInstance();
            }
            externalBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalErrorOrBuilder>(
                    (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.ExternalError) reason_,
                    getParentForChildren(),
                    isClean());
            reason_ = null;
          }
          reasonCase_ = 3;
          onChanged();
          return externalBuilder_;
        }

        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingErrorOrBuilder> savingBuilder_;
        /**
         * <pre>
         * Ошибка сохранения
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.SavingError saving = 4;</code>
         * @return Whether the saving field is set.
         */
        @java.lang.Override
        public boolean hasSaving() {
          return reasonCase_ == 4;
        }
        /**
         * <pre>
         * Ошибка сохранения
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.SavingError saving = 4;</code>
         * @return The saving.
         */
        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError getSaving() {
          if (savingBuilder_ == null) {
            if (reasonCase_ == 4) {
              return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError) reason_;
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.getDefaultInstance();
          } else {
            if (reasonCase_ == 4) {
              return savingBuilder_.getMessage();
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Ошибка сохранения
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.SavingError saving = 4;</code>
         */
        public Builder setSaving(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError value) {
          if (savingBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            reason_ = value;
            onChanged();
          } else {
            savingBuilder_.setMessage(value);
          }
          reasonCase_ = 4;
          return this;
        }
        /**
         * <pre>
         * Ошибка сохранения
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.SavingError saving = 4;</code>
         */
        public Builder setSaving(
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.Builder builderForValue) {
          if (savingBuilder_ == null) {
            reason_ = builderForValue.build();
            onChanged();
          } else {
            savingBuilder_.setMessage(builderForValue.build());
          }
          reasonCase_ = 4;
          return this;
        }
        /**
         * <pre>
         * Ошибка сохранения
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.SavingError saving = 4;</code>
         */
        public Builder mergeSaving(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError value) {
          if (savingBuilder_ == null) {
            if (reasonCase_ == 4 &&
                reason_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.getDefaultInstance()) {
              reason_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.newBuilder((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError) reason_)
                  .mergeFrom(value).buildPartial();
            } else {
              reason_ = value;
            }
            onChanged();
          } else {
            if (reasonCase_ == 4) {
              savingBuilder_.mergeFrom(value);
            } else {
              savingBuilder_.setMessage(value);
            }
          }
          reasonCase_ = 4;
          return this;
        }
        /**
         * <pre>
         * Ошибка сохранения
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.SavingError saving = 4;</code>
         */
        public Builder clearSaving() {
          if (savingBuilder_ == null) {
            if (reasonCase_ == 4) {
              reasonCase_ = 0;
              reason_ = null;
              onChanged();
            }
          } else {
            if (reasonCase_ == 4) {
              reasonCase_ = 0;
              reason_ = null;
            }
            savingBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * Ошибка сохранения
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.SavingError saving = 4;</code>
         */
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.Builder getSavingBuilder() {
          return getSavingFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Ошибка сохранения
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.SavingError saving = 4;</code>
         */
        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingErrorOrBuilder getSavingOrBuilder() {
          if ((reasonCase_ == 4) && (savingBuilder_ != null)) {
            return savingBuilder_.getMessageOrBuilder();
          } else {
            if (reasonCase_ == 4) {
              return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError) reason_;
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Ошибка сохранения
         * </pre>
         *
         * <code>.keyapis.invoice.v1.Invoice.SavingError saving = 4;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingErrorOrBuilder> 
            getSavingFieldBuilder() {
          if (savingBuilder_ == null) {
            if (!(reasonCase_ == 4)) {
              reason_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.getDefaultInstance();
            }
            savingBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingErrorOrBuilder>(
                    (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.SavingError) reason_,
                    getParentForChildren(),
                    isClean());
            reason_ = null;
          }
          reasonCase_ = 4;
          onChanged();
          return savingBuilder_;
        }
        @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:keyapis.invoice.v1.CreateInvoiceResponse.Error)
      }

      // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.CreateInvoiceResponse.Error)
      private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error();
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<Error>
          PARSER = new com.google.protobuf.AbstractParser<Error>() {
        @java.lang.Override
        public Error 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 (com.google.protobuf.UninitializedMessageException e) {
            throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(e)
                .setUnfinishedMessage(builder.buildPartial());
          }
          return builder.buildPartial();
        }
      };

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

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

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int typeCase_ = 0;
    @SuppressWarnings("serial")
    private java.lang.Object type_;
    public enum TypeCase
        implements com.google.protobuf.Internal.EnumLite,
            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
      ERROR(1),
      DATA(2),
      TYPE_NOT_SET(0);
      private final int value;
      private TypeCase(int value) {
        this.value = value;
      }
      /**
       * @param value The number of the enum to look for.
       * @return The enum associated with the given number.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static TypeCase valueOf(int value) {
        return forNumber(value);
      }

      public static TypeCase forNumber(int value) {
        switch (value) {
          case 1: return ERROR;
          case 2: return DATA;
          case 0: return TYPE_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public TypeCase
    getTypeCase() {
      return TypeCase.forNumber(
          typeCase_);
    }

    public static final int ERROR_FIELD_NUMBER = 1;
    /**
     * <pre>
     * Ошибка валидации
     * </pre>
     *
     * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error error = 1;</code>
     * @return Whether the error field is set.
     */
    @java.lang.Override
    public boolean hasError() {
      return typeCase_ == 1;
    }
    /**
     * <pre>
     * Ошибка валидации
     * </pre>
     *
     * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error error = 1;</code>
     * @return The error.
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error getError() {
      if (typeCase_ == 1) {
         return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error) type_;
      }
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.getDefaultInstance();
    }
    /**
     * <pre>
     * Ошибка валидации
     * </pre>
     *
     * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error error = 1;</code>
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.ErrorOrBuilder getErrorOrBuilder() {
      if (typeCase_ == 1) {
         return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error) type_;
      }
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.getDefaultInstance();
    }

    public static final int DATA_FIELD_NUMBER = 2;
    /**
     * <pre>
     * Платеж
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
     * @return Whether the data field is set.
     */
    @java.lang.Override
    public boolean hasData() {
      return typeCase_ == 2;
    }
    /**
     * <pre>
     * Платеж
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
     * @return The data.
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice getData() {
      if (typeCase_ == 2) {
         return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice) type_;
      }
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDefaultInstance();
    }
    /**
     * <pre>
     * Платеж
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder getDataOrBuilder() {
      if (typeCase_ == 2) {
         return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice) type_;
      }
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDefaultInstance();
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (typeCase_ == 1) {
        output.writeMessage(1, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error) type_);
      }
      if (typeCase_ == 2) {
        output.writeMessage(2, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice) type_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (typeCase_ == 1) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error) type_);
      }
      if (typeCase_ == 2) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice) type_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse)) {
        return super.equals(obj);
      }
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse) obj;

      if (!getTypeCase().equals(other.getTypeCase())) return false;
      switch (typeCase_) {
        case 1:
          if (!getError()
              .equals(other.getError())) return false;
          break;
        case 2:
          if (!getData()
              .equals(other.getData())) return false;
          break;
        case 0:
        default:
      }
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      switch (typeCase_) {
        case 1:
          hash = (37 * hash) + ERROR_FIELD_NUMBER;
          hash = (53 * hash) + getError().hashCode();
          break;
        case 2:
          hash = (37 * hash) + DATA_FIELD_NUMBER;
          hash = (53 * hash) + getData().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse 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;
    }
    /**
     * <pre>
     * Ответ на запрос создание платежа
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.CreateInvoiceResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.CreateInvoiceResponse)
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceResponse_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Builder.class);
      }

      // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        if (errorBuilder_ != null) {
          errorBuilder_.clear();
        }
        if (dataBuilder_ != null) {
          dataBuilder_.clear();
        }
        typeCase_ = 0;
        type_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_CreateInvoiceResponse_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse getDefaultInstanceForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse build() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse buildPartial() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse(this);
        if (bitField0_ != 0) { buildPartial0(result); }
        buildPartialOneofs(result);
        onBuilt();
        return result;
      }

      private void buildPartial0(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse result) {
        int from_bitField0_ = bitField0_;
      }

      private void buildPartialOneofs(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse result) {
        result.typeCase_ = typeCase_;
        result.type_ = this.type_;
        if (typeCase_ == 1 &&
            errorBuilder_ != null) {
          result.type_ = errorBuilder_.build();
        }
        if (typeCase_ == 2 &&
            dataBuilder_ != null) {
          result.type_ = dataBuilder_.build();
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse) {
          return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse other) {
        if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.getDefaultInstance()) return this;
        switch (other.getTypeCase()) {
          case ERROR: {
            mergeError(other.getError());
            break;
          }
          case DATA: {
            mergeData(other.getData());
            break;
          }
          case TYPE_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                input.readMessage(
                    getErrorFieldBuilder().getBuilder(),
                    extensionRegistry);
                typeCase_ = 1;
                break;
              } // case 10
              case 18: {
                input.readMessage(
                    getDataFieldBuilder().getBuilder(),
                    extensionRegistry);
                typeCase_ = 2;
                break;
              } // case 18
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int typeCase_ = 0;
      private java.lang.Object type_;
      public TypeCase
          getTypeCase() {
        return TypeCase.forNumber(
            typeCase_);
      }

      public Builder clearType() {
        typeCase_ = 0;
        type_ = null;
        onChanged();
        return this;
      }

      private int bitField0_;

      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.ErrorOrBuilder> errorBuilder_;
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error error = 1;</code>
       * @return Whether the error field is set.
       */
      @java.lang.Override
      public boolean hasError() {
        return typeCase_ == 1;
      }
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error error = 1;</code>
       * @return The error.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error getError() {
        if (errorBuilder_ == null) {
          if (typeCase_ == 1) {
            return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error) type_;
          }
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.getDefaultInstance();
        } else {
          if (typeCase_ == 1) {
            return errorBuilder_.getMessage();
          }
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error error = 1;</code>
       */
      public Builder setError(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error value) {
        if (errorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          type_ = value;
          onChanged();
        } else {
          errorBuilder_.setMessage(value);
        }
        typeCase_ = 1;
        return this;
      }
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error error = 1;</code>
       */
      public Builder setError(
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.Builder builderForValue) {
        if (errorBuilder_ == null) {
          type_ = builderForValue.build();
          onChanged();
        } else {
          errorBuilder_.setMessage(builderForValue.build());
        }
        typeCase_ = 1;
        return this;
      }
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error error = 1;</code>
       */
      public Builder mergeError(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error value) {
        if (errorBuilder_ == null) {
          if (typeCase_ == 1 &&
              type_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.getDefaultInstance()) {
            type_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.newBuilder((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error) type_)
                .mergeFrom(value).buildPartial();
          } else {
            type_ = value;
          }
          onChanged();
        } else {
          if (typeCase_ == 1) {
            errorBuilder_.mergeFrom(value);
          } else {
            errorBuilder_.setMessage(value);
          }
        }
        typeCase_ = 1;
        return this;
      }
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error error = 1;</code>
       */
      public Builder clearError() {
        if (errorBuilder_ == null) {
          if (typeCase_ == 1) {
            typeCase_ = 0;
            type_ = null;
            onChanged();
          }
        } else {
          if (typeCase_ == 1) {
            typeCase_ = 0;
            type_ = null;
          }
          errorBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error error = 1;</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.Builder getErrorBuilder() {
        return getErrorFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error error = 1;</code>
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.ErrorOrBuilder getErrorOrBuilder() {
        if ((typeCase_ == 1) && (errorBuilder_ != null)) {
          return errorBuilder_.getMessageOrBuilder();
        } else {
          if (typeCase_ == 1) {
            return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error) type_;
          }
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.CreateInvoiceResponse.Error error = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.ErrorOrBuilder> 
          getErrorFieldBuilder() {
        if (errorBuilder_ == null) {
          if (!(typeCase_ == 1)) {
            type_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.getDefaultInstance();
          }
          errorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.ErrorOrBuilder>(
                  (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse.Error) type_,
                  getParentForChildren(),
                  isClean());
          type_ = null;
        }
        typeCase_ = 1;
        onChanged();
        return errorBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder> dataBuilder_;
      /**
       * <pre>
       * Платеж
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
       * @return Whether the data field is set.
       */
      @java.lang.Override
      public boolean hasData() {
        return typeCase_ == 2;
      }
      /**
       * <pre>
       * Платеж
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
       * @return The data.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice getData() {
        if (dataBuilder_ == null) {
          if (typeCase_ == 2) {
            return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice) type_;
          }
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDefaultInstance();
        } else {
          if (typeCase_ == 2) {
            return dataBuilder_.getMessage();
          }
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Платеж
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
       */
      public Builder setData(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice value) {
        if (dataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          type_ = value;
          onChanged();
        } else {
          dataBuilder_.setMessage(value);
        }
        typeCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * Платеж
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
       */
      public Builder setData(
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder builderForValue) {
        if (dataBuilder_ == null) {
          type_ = builderForValue.build();
          onChanged();
        } else {
          dataBuilder_.setMessage(builderForValue.build());
        }
        typeCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * Платеж
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
       */
      public Builder mergeData(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice value) {
        if (dataBuilder_ == null) {
          if (typeCase_ == 2 &&
              type_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDefaultInstance()) {
            type_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.newBuilder((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice) type_)
                .mergeFrom(value).buildPartial();
          } else {
            type_ = value;
          }
          onChanged();
        } else {
          if (typeCase_ == 2) {
            dataBuilder_.mergeFrom(value);
          } else {
            dataBuilder_.setMessage(value);
          }
        }
        typeCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * Платеж
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
       */
      public Builder clearData() {
        if (dataBuilder_ == null) {
          if (typeCase_ == 2) {
            typeCase_ = 0;
            type_ = null;
            onChanged();
          }
        } else {
          if (typeCase_ == 2) {
            typeCase_ = 0;
            type_ = null;
          }
          dataBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Платеж
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder getDataBuilder() {
        return getDataFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Платеж
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder getDataOrBuilder() {
        if ((typeCase_ == 2) && (dataBuilder_ != null)) {
          return dataBuilder_.getMessageOrBuilder();
        } else {
          if (typeCase_ == 2) {
            return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice) type_;
          }
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Платеж
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder> 
          getDataFieldBuilder() {
        if (dataBuilder_ == null) {
          if (!(typeCase_ == 2)) {
            type_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDefaultInstance();
          }
          dataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder>(
                  (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice) type_,
                  getParentForChildren(),
                  isClean());
          type_ = null;
        }
        typeCase_ = 2;
        onChanged();
        return dataBuilder_;
      }
      @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:keyapis.invoice.v1.CreateInvoiceResponse)
    }

    // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.CreateInvoiceResponse)
    private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse();
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<CreateInvoiceResponse>
        PARSER = new com.google.protobuf.AbstractParser<CreateInvoiceResponse>() {
      @java.lang.Override
      public CreateInvoiceResponse 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 (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.CreateInvoiceResponse getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface GetInvoiceRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.GetInvoiceRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Идентификатор платежа в Ключе.
     * # Тип: Guid
     * </pre>
     *
     * <code>string invoice_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The invoiceId.
     */
    java.lang.String getInvoiceId();
    /**
     * <pre>
     * Идентификатор платежа в Ключе.
     * # Тип: Guid
     * </pre>
     *
     * <code>string invoice_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for invoiceId.
     */
    com.google.protobuf.ByteString
        getInvoiceIdBytes();
  }
  /**
   * <pre>
   * Запрос на получение статуса платежа
   * </pre>
   *
   * Protobuf type {@code keyapis.invoice.v1.GetInvoiceRequest}
   */
  public static final class GetInvoiceRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.GetInvoiceRequest)
      GetInvoiceRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GetInvoiceRequest.newBuilder() to construct.
    private GetInvoiceRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private GetInvoiceRequest() {
      invoiceId_ = "";
    }

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

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest.Builder.class);
    }

    public static final int INVOICE_ID_FIELD_NUMBER = 1;
    @SuppressWarnings("serial")
    private volatile java.lang.Object invoiceId_ = "";
    /**
     * <pre>
     * Идентификатор платежа в Ключе.
     * # Тип: Guid
     * </pre>
     *
     * <code>string invoice_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The invoiceId.
     */
    @java.lang.Override
    public java.lang.String getInvoiceId() {
      java.lang.Object ref = invoiceId_;
      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();
        invoiceId_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Идентификатор платежа в Ключе.
     * # Тип: Guid
     * </pre>
     *
     * <code>string invoice_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for invoiceId.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getInvoiceIdBytes() {
      java.lang.Object ref = invoiceId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        invoiceId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(invoiceId_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, invoiceId_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(invoiceId_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, invoiceId_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest)) {
        return super.equals(obj);
      }
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest) obj;

      if (!getInvoiceId()
          .equals(other.getInvoiceId())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + INVOICE_ID_FIELD_NUMBER;
      hash = (53 * hash) + getInvoiceId().hashCode();
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest 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;
    }
    /**
     * <pre>
     * Запрос на получение статуса платежа
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.GetInvoiceRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.GetInvoiceRequest)
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest.Builder.class);
      }

      // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        invoiceId_ = "";
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceRequest_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest getDefaultInstanceForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest build() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest buildPartial() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest(this);
        if (bitField0_ != 0) { buildPartial0(result); }
        onBuilt();
        return result;
      }

      private void buildPartial0(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.invoiceId_ = invoiceId_;
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest) {
          return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest other) {
        if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest.getDefaultInstance()) return this;
        if (!other.getInvoiceId().isEmpty()) {
          invoiceId_ = other.invoiceId_;
          bitField0_ |= 0x00000001;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                invoiceId_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000001;
                break;
              } // case 10
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private java.lang.Object invoiceId_ = "";
      /**
       * <pre>
       * Идентификатор платежа в Ключе.
       * # Тип: Guid
       * </pre>
       *
       * <code>string invoice_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The invoiceId.
       */
      public java.lang.String getInvoiceId() {
        java.lang.Object ref = invoiceId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          invoiceId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Идентификатор платежа в Ключе.
       * # Тип: Guid
       * </pre>
       *
       * <code>string invoice_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for invoiceId.
       */
      public com.google.protobuf.ByteString
          getInvoiceIdBytes() {
        java.lang.Object ref = invoiceId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          invoiceId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Идентификатор платежа в Ключе.
       * # Тип: Guid
       * </pre>
       *
       * <code>string invoice_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The invoiceId to set.
       * @return This builder for chaining.
       */
      public Builder setInvoiceId(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        invoiceId_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Идентификатор платежа в Ключе.
       * # Тип: Guid
       * </pre>
       *
       * <code>string invoice_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return This builder for chaining.
       */
      public Builder clearInvoiceId() {
        invoiceId_ = getDefaultInstance().getInvoiceId();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Идентификатор платежа в Ключе.
       * # Тип: Guid
       * </pre>
       *
       * <code>string invoice_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The bytes for invoiceId to set.
       * @return This builder for chaining.
       */
      public Builder setInvoiceIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        invoiceId_ = value;
        bitField0_ |= 0x00000001;
        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:keyapis.invoice.v1.GetInvoiceRequest)
    }

    // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.GetInvoiceRequest)
    private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest();
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<GetInvoiceRequest>
        PARSER = new com.google.protobuf.AbstractParser<GetInvoiceRequest>() {
      @java.lang.Override
      public GetInvoiceRequest 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 (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface GetInvoiceResponseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.GetInvoiceResponse)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.invoice.v1.GetInvoiceResponse.Error error = 1;</code>
     * @return Whether the error field is set.
     */
    boolean hasError();
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.invoice.v1.GetInvoiceResponse.Error error = 1;</code>
     * @return The error.
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error getError();
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.invoice.v1.GetInvoiceResponse.Error error = 1;</code>
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.ErrorOrBuilder getErrorOrBuilder();

    /**
     * <pre>
     * Платеж
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
     * @return Whether the data field is set.
     */
    boolean hasData();
    /**
     * <pre>
     * Платеж
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
     * @return The data.
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice getData();
    /**
     * <pre>
     * Платеж
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder getDataOrBuilder();

    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.TypeCase getTypeCase();
  }
  /**
   * <pre>
   * Ответ на запрос получения платежа
   * </pre>
   *
   * Protobuf type {@code keyapis.invoice.v1.GetInvoiceResponse}
   */
  public static final class GetInvoiceResponse extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.GetInvoiceResponse)
      GetInvoiceResponseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GetInvoiceResponse.newBuilder() to construct.
    private GetInvoiceResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private GetInvoiceResponse() {
    }

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

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceResponse_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Builder.class);
    }

    public interface ErrorOrBuilder extends
        // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.GetInvoiceResponse.Error)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
       * @return Whether the validation field is set.
       */
      boolean hasValidation();
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
       * @return The validation.
       */
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError getValidation();
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
       */
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationErrorOrBuilder getValidationOrBuilder();

      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.ReasonCase getReasonCase();
    }
    /**
     * <pre>
     * Ошибка запроса
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.GetInvoiceResponse.Error}
     */
    public static final class Error extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.GetInvoiceResponse.Error)
        ErrorOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use Error.newBuilder() to construct.
      private Error(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private Error() {
      }

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

      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceResponse_Error_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceResponse_Error_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.Builder.class);
      }

      private int reasonCase_ = 0;
      @SuppressWarnings("serial")
      private java.lang.Object reason_;
      public enum ReasonCase
          implements com.google.protobuf.Internal.EnumLite,
              com.google.protobuf.AbstractMessage.InternalOneOfEnum {
        VALIDATION(1),
        REASON_NOT_SET(0);
        private final int value;
        private ReasonCase(int value) {
          this.value = value;
        }
        /**
         * @param value The number of the enum to look for.
         * @return The enum associated with the given number.
         * @deprecated Use {@link #forNumber(int)} instead.
         */
        @java.lang.Deprecated
        public static ReasonCase valueOf(int value) {
          return forNumber(value);
        }

        public static ReasonCase forNumber(int value) {
          switch (value) {
            case 1: return VALIDATION;
            case 0: return REASON_NOT_SET;
            default: return null;
          }
        }
        public int getNumber() {
          return this.value;
        }
      };

      public ReasonCase
      getReasonCase() {
        return ReasonCase.forNumber(
            reasonCase_);
      }

      public static final int VALIDATION_FIELD_NUMBER = 1;
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
       * @return Whether the validation field is set.
       */
      @java.lang.Override
      public boolean hasValidation() {
        return reasonCase_ == 1;
      }
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
       * @return The validation.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError getValidation() {
        if (reasonCase_ == 1) {
           return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_;
        }
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance();
      }
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationErrorOrBuilder getValidationOrBuilder() {
        if (reasonCase_ == 1) {
           return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_;
        }
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance();
      }

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

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (reasonCase_ == 1) {
          output.writeMessage(1, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_);
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (reasonCase_ == 1) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error)) {
          return super.equals(obj);
        }
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error) obj;

        if (!getReasonCase().equals(other.getReasonCase())) return false;
        switch (reasonCase_) {
          case 1:
            if (!getValidation()
                .equals(other.getValidation())) return false;
            break;
          case 0:
          default:
        }
        if (!getUnknownFields().equals(other.getUnknownFields())) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        switch (reasonCase_) {
          case 1:
            hash = (37 * hash) + VALIDATION_FIELD_NUMBER;
            hash = (53 * hash) + getValidation().hashCode();
            break;
          case 0:
          default:
        }
        hash = (29 * hash) + getUnknownFields().hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error 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;
      }
      /**
       * <pre>
       * Ошибка запроса
       * </pre>
       *
       * Protobuf type {@code keyapis.invoice.v1.GetInvoiceResponse.Error}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.GetInvoiceResponse.Error)
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.ErrorOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceResponse_Error_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceResponse_Error_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.Builder.class);
        }

        // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.newBuilder()
        private Builder() {

        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);

        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          bitField0_ = 0;
          if (validationBuilder_ != null) {
            validationBuilder_.clear();
          }
          reasonCase_ = 0;
          reason_ = null;
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceResponse_Error_descriptor;
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error getDefaultInstanceForType() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.getDefaultInstance();
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error build() {
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error buildPartial() {
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error(this);
          if (bitField0_ != 0) { buildPartial0(result); }
          buildPartialOneofs(result);
          onBuilt();
          return result;
        }

        private void buildPartial0(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error result) {
          int from_bitField0_ = bitField0_;
        }

        private void buildPartialOneofs(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error result) {
          result.reasonCase_ = reasonCase_;
          result.reason_ = this.reason_;
          if (reasonCase_ == 1 &&
              validationBuilder_ != null) {
            result.reason_ = validationBuilder_.build();
          }
        }

        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error) {
            return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error other) {
          if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.getDefaultInstance()) return this;
          switch (other.getReasonCase()) {
            case VALIDATION: {
              mergeValidation(other.getValidation());
              break;
            }
            case REASON_NOT_SET: {
              break;
            }
          }
          this.mergeUnknownFields(other.getUnknownFields());
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          if (extensionRegistry == null) {
            throw new java.lang.NullPointerException();
          }
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                case 10: {
                  input.readMessage(
                      getValidationFieldBuilder().getBuilder(),
                      extensionRegistry);
                  reasonCase_ = 1;
                  break;
                } // case 10
                default: {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
              } // switch (tag)
            } // while (!done)
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.unwrapIOException();
          } finally {
            onChanged();
          } // finally
          return this;
        }
        private int reasonCase_ = 0;
        private java.lang.Object reason_;
        public ReasonCase
            getReasonCase() {
          return ReasonCase.forNumber(
              reasonCase_);
        }

        public Builder clearReason() {
          reasonCase_ = 0;
          reason_ = null;
          onChanged();
          return this;
        }

        private int bitField0_;

        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationErrorOrBuilder> validationBuilder_;
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         * @return Whether the validation field is set.
         */
        @java.lang.Override
        public boolean hasValidation() {
          return reasonCase_ == 1;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         * @return The validation.
         */
        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError getValidation() {
          if (validationBuilder_ == null) {
            if (reasonCase_ == 1) {
              return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_;
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance();
          } else {
            if (reasonCase_ == 1) {
              return validationBuilder_.getMessage();
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        public Builder setValidation(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError value) {
          if (validationBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            reason_ = value;
            onChanged();
          } else {
            validationBuilder_.setMessage(value);
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        public Builder setValidation(
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.Builder builderForValue) {
          if (validationBuilder_ == null) {
            reason_ = builderForValue.build();
            onChanged();
          } else {
            validationBuilder_.setMessage(builderForValue.build());
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        public Builder mergeValidation(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError value) {
          if (validationBuilder_ == null) {
            if (reasonCase_ == 1 &&
                reason_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance()) {
              reason_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.newBuilder((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_)
                  .mergeFrom(value).buildPartial();
            } else {
              reason_ = value;
            }
            onChanged();
          } else {
            if (reasonCase_ == 1) {
              validationBuilder_.mergeFrom(value);
            } else {
              validationBuilder_.setMessage(value);
            }
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        public Builder clearValidation() {
          if (validationBuilder_ == null) {
            if (reasonCase_ == 1) {
              reasonCase_ = 0;
              reason_ = null;
              onChanged();
            }
          } else {
            if (reasonCase_ == 1) {
              reasonCase_ = 0;
              reason_ = null;
            }
            validationBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.Builder getValidationBuilder() {
          return getValidationFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationErrorOrBuilder getValidationOrBuilder() {
          if ((reasonCase_ == 1) && (validationBuilder_ != null)) {
            return validationBuilder_.getMessageOrBuilder();
          } else {
            if (reasonCase_ == 1) {
              return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_;
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationErrorOrBuilder> 
            getValidationFieldBuilder() {
          if (validationBuilder_ == null) {
            if (!(reasonCase_ == 1)) {
              reason_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance();
            }
            validationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationErrorOrBuilder>(
                    (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_,
                    getParentForChildren(),
                    isClean());
            reason_ = null;
          }
          reasonCase_ = 1;
          onChanged();
          return validationBuilder_;
        }
        @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:keyapis.invoice.v1.GetInvoiceResponse.Error)
      }

      // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.GetInvoiceResponse.Error)
      private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error();
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<Error>
          PARSER = new com.google.protobuf.AbstractParser<Error>() {
        @java.lang.Override
        public Error 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 (com.google.protobuf.UninitializedMessageException e) {
            throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(e)
                .setUnfinishedMessage(builder.buildPartial());
          }
          return builder.buildPartial();
        }
      };

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

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

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int typeCase_ = 0;
    @SuppressWarnings("serial")
    private java.lang.Object type_;
    public enum TypeCase
        implements com.google.protobuf.Internal.EnumLite,
            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
      ERROR(1),
      DATA(2),
      TYPE_NOT_SET(0);
      private final int value;
      private TypeCase(int value) {
        this.value = value;
      }
      /**
       * @param value The number of the enum to look for.
       * @return The enum associated with the given number.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static TypeCase valueOf(int value) {
        return forNumber(value);
      }

      public static TypeCase forNumber(int value) {
        switch (value) {
          case 1: return ERROR;
          case 2: return DATA;
          case 0: return TYPE_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public TypeCase
    getTypeCase() {
      return TypeCase.forNumber(
          typeCase_);
    }

    public static final int ERROR_FIELD_NUMBER = 1;
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.invoice.v1.GetInvoiceResponse.Error error = 1;</code>
     * @return Whether the error field is set.
     */
    @java.lang.Override
    public boolean hasError() {
      return typeCase_ == 1;
    }
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.invoice.v1.GetInvoiceResponse.Error error = 1;</code>
     * @return The error.
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error getError() {
      if (typeCase_ == 1) {
         return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error) type_;
      }
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.getDefaultInstance();
    }
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.invoice.v1.GetInvoiceResponse.Error error = 1;</code>
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.ErrorOrBuilder getErrorOrBuilder() {
      if (typeCase_ == 1) {
         return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error) type_;
      }
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.getDefaultInstance();
    }

    public static final int DATA_FIELD_NUMBER = 2;
    /**
     * <pre>
     * Платеж
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
     * @return Whether the data field is set.
     */
    @java.lang.Override
    public boolean hasData() {
      return typeCase_ == 2;
    }
    /**
     * <pre>
     * Платеж
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
     * @return The data.
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice getData() {
      if (typeCase_ == 2) {
         return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice) type_;
      }
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDefaultInstance();
    }
    /**
     * <pre>
     * Платеж
     * </pre>
     *
     * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder getDataOrBuilder() {
      if (typeCase_ == 2) {
         return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice) type_;
      }
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDefaultInstance();
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (typeCase_ == 1) {
        output.writeMessage(1, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error) type_);
      }
      if (typeCase_ == 2) {
        output.writeMessage(2, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice) type_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (typeCase_ == 1) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error) type_);
      }
      if (typeCase_ == 2) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice) type_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse)) {
        return super.equals(obj);
      }
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse) obj;

      if (!getTypeCase().equals(other.getTypeCase())) return false;
      switch (typeCase_) {
        case 1:
          if (!getError()
              .equals(other.getError())) return false;
          break;
        case 2:
          if (!getData()
              .equals(other.getData())) return false;
          break;
        case 0:
        default:
      }
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      switch (typeCase_) {
        case 1:
          hash = (37 * hash) + ERROR_FIELD_NUMBER;
          hash = (53 * hash) + getError().hashCode();
          break;
        case 2:
          hash = (37 * hash) + DATA_FIELD_NUMBER;
          hash = (53 * hash) + getData().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse 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;
    }
    /**
     * <pre>
     * Ответ на запрос получения платежа
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.GetInvoiceResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.GetInvoiceResponse)
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceResponse_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Builder.class);
      }

      // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        if (errorBuilder_ != null) {
          errorBuilder_.clear();
        }
        if (dataBuilder_ != null) {
          dataBuilder_.clear();
        }
        typeCase_ = 0;
        type_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceResponse_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse getDefaultInstanceForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse build() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse buildPartial() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse(this);
        if (bitField0_ != 0) { buildPartial0(result); }
        buildPartialOneofs(result);
        onBuilt();
        return result;
      }

      private void buildPartial0(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse result) {
        int from_bitField0_ = bitField0_;
      }

      private void buildPartialOneofs(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse result) {
        result.typeCase_ = typeCase_;
        result.type_ = this.type_;
        if (typeCase_ == 1 &&
            errorBuilder_ != null) {
          result.type_ = errorBuilder_.build();
        }
        if (typeCase_ == 2 &&
            dataBuilder_ != null) {
          result.type_ = dataBuilder_.build();
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse) {
          return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse other) {
        if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.getDefaultInstance()) return this;
        switch (other.getTypeCase()) {
          case ERROR: {
            mergeError(other.getError());
            break;
          }
          case DATA: {
            mergeData(other.getData());
            break;
          }
          case TYPE_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                input.readMessage(
                    getErrorFieldBuilder().getBuilder(),
                    extensionRegistry);
                typeCase_ = 1;
                break;
              } // case 10
              case 18: {
                input.readMessage(
                    getDataFieldBuilder().getBuilder(),
                    extensionRegistry);
                typeCase_ = 2;
                break;
              } // case 18
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int typeCase_ = 0;
      private java.lang.Object type_;
      public TypeCase
          getTypeCase() {
        return TypeCase.forNumber(
            typeCase_);
      }

      public Builder clearType() {
        typeCase_ = 0;
        type_ = null;
        onChanged();
        return this;
      }

      private int bitField0_;

      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.ErrorOrBuilder> errorBuilder_;
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.invoice.v1.GetInvoiceResponse.Error error = 1;</code>
       * @return Whether the error field is set.
       */
      @java.lang.Override
      public boolean hasError() {
        return typeCase_ == 1;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.invoice.v1.GetInvoiceResponse.Error error = 1;</code>
       * @return The error.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error getError() {
        if (errorBuilder_ == null) {
          if (typeCase_ == 1) {
            return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error) type_;
          }
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.getDefaultInstance();
        } else {
          if (typeCase_ == 1) {
            return errorBuilder_.getMessage();
          }
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.invoice.v1.GetInvoiceResponse.Error error = 1;</code>
       */
      public Builder setError(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error value) {
        if (errorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          type_ = value;
          onChanged();
        } else {
          errorBuilder_.setMessage(value);
        }
        typeCase_ = 1;
        return this;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.invoice.v1.GetInvoiceResponse.Error error = 1;</code>
       */
      public Builder setError(
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.Builder builderForValue) {
        if (errorBuilder_ == null) {
          type_ = builderForValue.build();
          onChanged();
        } else {
          errorBuilder_.setMessage(builderForValue.build());
        }
        typeCase_ = 1;
        return this;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.invoice.v1.GetInvoiceResponse.Error error = 1;</code>
       */
      public Builder mergeError(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error value) {
        if (errorBuilder_ == null) {
          if (typeCase_ == 1 &&
              type_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.getDefaultInstance()) {
            type_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.newBuilder((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error) type_)
                .mergeFrom(value).buildPartial();
          } else {
            type_ = value;
          }
          onChanged();
        } else {
          if (typeCase_ == 1) {
            errorBuilder_.mergeFrom(value);
          } else {
            errorBuilder_.setMessage(value);
          }
        }
        typeCase_ = 1;
        return this;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.invoice.v1.GetInvoiceResponse.Error error = 1;</code>
       */
      public Builder clearError() {
        if (errorBuilder_ == null) {
          if (typeCase_ == 1) {
            typeCase_ = 0;
            type_ = null;
            onChanged();
          }
        } else {
          if (typeCase_ == 1) {
            typeCase_ = 0;
            type_ = null;
          }
          errorBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.invoice.v1.GetInvoiceResponse.Error error = 1;</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.Builder getErrorBuilder() {
        return getErrorFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.invoice.v1.GetInvoiceResponse.Error error = 1;</code>
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.ErrorOrBuilder getErrorOrBuilder() {
        if ((typeCase_ == 1) && (errorBuilder_ != null)) {
          return errorBuilder_.getMessageOrBuilder();
        } else {
          if (typeCase_ == 1) {
            return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error) type_;
          }
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.invoice.v1.GetInvoiceResponse.Error error = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.ErrorOrBuilder> 
          getErrorFieldBuilder() {
        if (errorBuilder_ == null) {
          if (!(typeCase_ == 1)) {
            type_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.getDefaultInstance();
          }
          errorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.ErrorOrBuilder>(
                  (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse.Error) type_,
                  getParentForChildren(),
                  isClean());
          type_ = null;
        }
        typeCase_ = 1;
        onChanged();
        return errorBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder> dataBuilder_;
      /**
       * <pre>
       * Платеж
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
       * @return Whether the data field is set.
       */
      @java.lang.Override
      public boolean hasData() {
        return typeCase_ == 2;
      }
      /**
       * <pre>
       * Платеж
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
       * @return The data.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice getData() {
        if (dataBuilder_ == null) {
          if (typeCase_ == 2) {
            return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice) type_;
          }
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDefaultInstance();
        } else {
          if (typeCase_ == 2) {
            return dataBuilder_.getMessage();
          }
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Платеж
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
       */
      public Builder setData(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice value) {
        if (dataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          type_ = value;
          onChanged();
        } else {
          dataBuilder_.setMessage(value);
        }
        typeCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * Платеж
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
       */
      public Builder setData(
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder builderForValue) {
        if (dataBuilder_ == null) {
          type_ = builderForValue.build();
          onChanged();
        } else {
          dataBuilder_.setMessage(builderForValue.build());
        }
        typeCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * Платеж
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
       */
      public Builder mergeData(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice value) {
        if (dataBuilder_ == null) {
          if (typeCase_ == 2 &&
              type_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDefaultInstance()) {
            type_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.newBuilder((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice) type_)
                .mergeFrom(value).buildPartial();
          } else {
            type_ = value;
          }
          onChanged();
        } else {
          if (typeCase_ == 2) {
            dataBuilder_.mergeFrom(value);
          } else {
            dataBuilder_.setMessage(value);
          }
        }
        typeCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * Платеж
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
       */
      public Builder clearData() {
        if (dataBuilder_ == null) {
          if (typeCase_ == 2) {
            typeCase_ = 0;
            type_ = null;
            onChanged();
          }
        } else {
          if (typeCase_ == 2) {
            typeCase_ = 0;
            type_ = null;
          }
          dataBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Платеж
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder getDataBuilder() {
        return getDataFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Платеж
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder getDataOrBuilder() {
        if ((typeCase_ == 2) && (dataBuilder_ != null)) {
          return dataBuilder_.getMessageOrBuilder();
        } else {
          if (typeCase_ == 2) {
            return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice) type_;
          }
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Платеж
       * </pre>
       *
       * <code>.keyapis.invoice.v1.Invoice data = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder> 
          getDataFieldBuilder() {
        if (dataBuilder_ == null) {
          if (!(typeCase_ == 2)) {
            type_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDefaultInstance();
          }
          dataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder>(
                  (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice) type_,
                  getParentForChildren(),
                  isClean());
          type_ = null;
        }
        typeCase_ = 2;
        onChanged();
        return dataBuilder_;
      }
      @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:keyapis.invoice.v1.GetInvoiceResponse)
    }

    // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.GetInvoiceResponse)
    private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse();
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<GetInvoiceResponse>
        PARSER = new com.google.protobuf.AbstractParser<GetInvoiceResponse>() {
      @java.lang.Override
      public GetInvoiceResponse 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 (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceResponse getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface PostInvoiceConfirmRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.PostInvoiceConfirmRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Идентификатор платежа в Ключе
     * </pre>
     *
     * <code>string src_pay_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The srcPayId.
     */
    java.lang.String getSrcPayId();
    /**
     * <pre>
     * Идентификатор платежа в Ключе
     * </pre>
     *
     * <code>string src_pay_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for srcPayId.
     */
    com.google.protobuf.ByteString
        getSrcPayIdBytes();

    /**
     * <pre>
     * Идентификатор платежа во внешней системе
     * </pre>
     *
     * <code>string espp_pay_id = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The esppPayId.
     */
    java.lang.String getEsppPayId();
    /**
     * <pre>
     * Идентификатор платежа во внешней системе
     * </pre>
     *
     * <code>string espp_pay_id = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for esppPayId.
     */
    com.google.protobuf.ByteString
        getEsppPayIdBytes();

    /**
     * <pre>
     * Статус платежа из внешней системы
     * </pre>
     *
     * <code>int32 pay_status = 3 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The payStatus.
     */
    int getPayStatus();

    /**
     * <pre>
     * Тип запроса.
     * Должно иметь значение "confirmPayment"
     * </pre>
     *
     * <code>string req_type = 4 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The reqType.
     */
    java.lang.String getReqType();
    /**
     * <pre>
     * Тип запроса.
     * Должно иметь значение "confirmPayment"
     * </pre>
     *
     * <code>string req_type = 4 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for reqType.
     */
    com.google.protobuf.ByteString
        getReqTypeBytes();

    /**
     * <pre>
     * Сумма платежа в минимальных единицах валюты
     * </pre>
     *
     * <code>float amount = 5;</code>
     * @return The amount.
     */
    float getAmount();

    /**
     * <pre>
     * Код валюты платежа
     * </pre>
     *
     * <code>string currency = 6;</code>
     * @return The currency.
     */
    java.lang.String getCurrency();
    /**
     * <pre>
     * Код валюты платежа
     * </pre>
     *
     * <code>string currency = 6;</code>
     * @return The bytes for currency.
     */
    com.google.protobuf.ByteString
        getCurrencyBytes();

    /**
     * <pre>
     * Код способа оплаты
     * </pre>
     *
     * <code>string pay_method = 7;</code>
     * @return The payMethod.
     */
    java.lang.String getPayMethod();
    /**
     * <pre>
     * Код способа оплаты
     * </pre>
     *
     * <code>string pay_method = 7;</code>
     * @return The bytes for payMethod.
     */
    com.google.protobuf.ByteString
        getPayMethodBytes();

    /**
     * <pre>
     * Дата регистрации платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp create_time_at = 8 [json_name = "createTime"];</code>
     * @return Whether the createTimeAt field is set.
     */
    boolean hasCreateTimeAt();
    /**
     * <pre>
     * Дата регистрации платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp create_time_at = 8 [json_name = "createTime"];</code>
     * @return The createTimeAt.
     */
    com.google.protobuf.Timestamp getCreateTimeAt();
    /**
     * <pre>
     * Дата регистрации платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp create_time_at = 8 [json_name = "createTime"];</code>
     */
    com.google.protobuf.TimestampOrBuilder getCreateTimeAtOrBuilder();

    /**
     * <pre>
     * Комментарий или сообщение об ошибке
     * </pre>
     *
     * <code>string req_note = 9;</code>
     * @return The reqNote.
     */
    java.lang.String getReqNote();
    /**
     * <pre>
     * Комментарий или сообщение об ошибке
     * </pre>
     *
     * <code>string req_note = 9;</code>
     * @return The bytes for reqNote.
     */
    com.google.protobuf.ByteString
        getReqNoteBytes();

    /**
     * <pre>
     * Сообщение, отображаемое пользователю
     * </pre>
     *
     * <code>string req_user_msg = 10;</code>
     * @return The reqUserMsg.
     */
    java.lang.String getReqUserMsg();
    /**
     * <pre>
     * Сообщение, отображаемое пользователю
     * </pre>
     *
     * <code>string req_user_msg = 10;</code>
     * @return The bytes for reqUserMsg.
     */
    com.google.protobuf.ByteString
        getReqUserMsgBytes();

    /**
     * <pre>
     * Время фактической оплаты. Время фактической оплаты на стороне Процессинга. Возвращается, если оплата состоялась
     * </pre>
     *
     * <code>.google.protobuf.Timestamp pay_time_at = 11 [json_name = "payTime"];</code>
     * @return Whether the payTimeAt field is set.
     */
    boolean hasPayTimeAt();
    /**
     * <pre>
     * Время фактической оплаты. Время фактической оплаты на стороне Процессинга. Возвращается, если оплата состоялась
     * </pre>
     *
     * <code>.google.protobuf.Timestamp pay_time_at = 11 [json_name = "payTime"];</code>
     * @return The payTimeAt.
     */
    com.google.protobuf.Timestamp getPayTimeAt();
    /**
     * <pre>
     * Время фактической оплаты. Время фактической оплаты на стороне Процессинга. Возвращается, если оплата состоялась
     * </pre>
     *
     * <code>.google.protobuf.Timestamp pay_time_at = 11 [json_name = "payTime"];</code>
     */
    com.google.protobuf.TimestampOrBuilder getPayTimeAtOrBuilder();

    /**
     * <pre>
     * Время фактической отмены оплаты.
     * Время фактической отмены оплаты на стороне Процессинга.
     * Возвращается, если отмена оплаты состоялась
     * </pre>
     *
     * <code>.google.protobuf.Timestamp abandon_time_at = 12 [json_name = "abandonTime"];</code>
     * @return Whether the abandonTimeAt field is set.
     */
    boolean hasAbandonTimeAt();
    /**
     * <pre>
     * Время фактической отмены оплаты.
     * Время фактической отмены оплаты на стороне Процессинга.
     * Возвращается, если отмена оплаты состоялась
     * </pre>
     *
     * <code>.google.protobuf.Timestamp abandon_time_at = 12 [json_name = "abandonTime"];</code>
     * @return The abandonTimeAt.
     */
    com.google.protobuf.Timestamp getAbandonTimeAt();
    /**
     * <pre>
     * Время фактической отмены оплаты.
     * Время фактической отмены оплаты на стороне Процессинга.
     * Возвращается, если отмена оплаты состоялась
     * </pre>
     *
     * <code>.google.protobuf.Timestamp abandon_time_at = 12 [json_name = "abandonTime"];</code>
     */
    com.google.protobuf.TimestampOrBuilder getAbandonTimeAtOrBuilder();

    /**
     * <pre>
     * Структура с информацией о карте плательщика.
     * Передаётся только при успешном платеже и если указаны способы оплаты payMethod = StoredBankCard либо BankCard
     * </pre>
     *
     * <code>.keyapis.invoice.v1.PostInvoiceConfirmRequest.Card card = 13;</code>
     * @return Whether the card field is set.
     */
    boolean hasCard();
    /**
     * <pre>
     * Структура с информацией о карте плательщика.
     * Передаётся только при успешном платеже и если указаны способы оплаты payMethod = StoredBankCard либо BankCard
     * </pre>
     *
     * <code>.keyapis.invoice.v1.PostInvoiceConfirmRequest.Card card = 13;</code>
     * @return The card.
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card getCard();
    /**
     * <pre>
     * Структура с информацией о карте плательщика.
     * Передаётся только при успешном платеже и если указаны способы оплаты payMethod = StoredBankCard либо BankCard
     * </pre>
     *
     * <code>.keyapis.invoice.v1.PostInvoiceConfirmRequest.Card card = 13;</code>
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.CardOrBuilder getCardOrBuilder();
  }
  /**
   * <pre>
   * Запрос на подтверждение платежа
   * </pre>
   *
   * Protobuf type {@code keyapis.invoice.v1.PostInvoiceConfirmRequest}
   */
  public static final class PostInvoiceConfirmRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.PostInvoiceConfirmRequest)
      PostInvoiceConfirmRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use PostInvoiceConfirmRequest.newBuilder() to construct.
    private PostInvoiceConfirmRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private PostInvoiceConfirmRequest() {
      srcPayId_ = "";
      esppPayId_ = "";
      reqType_ = "";
      currency_ = "";
      payMethod_ = "";
      reqNote_ = "";
      reqUserMsg_ = "";
    }

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

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Builder.class);
    }

    public interface CardOrBuilder extends
        // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.PostInvoiceConfirmRequest.Card)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * Идентификатор платежного средства во внешней системы.
       * Возвращается в случае успешной привязки БК к УЗ
       * </pre>
       *
       * <code>int32 espp_card_id = 1;</code>
       * @return The esppCardId.
       */
      int getEsppCardId();

      /**
       * <pre>
       * Номер платежного средства.
       * Маскированный номер карты. Например: 123456******7890
       * </pre>
       *
       * <code>string card_num = 2;</code>
       * @return The cardNum.
       */
      java.lang.String getCardNum();
      /**
       * <pre>
       * Номер платежного средства.
       * Маскированный номер карты. Например: 123456******7890
       * </pre>
       *
       * <code>string card_num = 2;</code>
       * @return The bytes for cardNum.
       */
      com.google.protobuf.ByteString
          getCardNumBytes();

      /**
       * <pre>
       * Тип банковской карты
       * </pre>
       *
       * <code>string card_kind = 3 [json_name = "cardType"];</code>
       * @return The cardKind.
       */
      java.lang.String getCardKind();
      /**
       * <pre>
       * Тип банковской карты
       * </pre>
       *
       * <code>string card_kind = 3 [json_name = "cardType"];</code>
       * @return The bytes for cardKind.
       */
      com.google.protobuf.ByteString
          getCardKindBytes();

      /**
       * <pre>
       * Банк-эмитент.
       * Наименование банка-эмитента. Процессинг может вернуть значение "НЕ ЗАДАВАЛСЯ".
       * В этом случае рекомендуется не отображать эту информацию для пользователя
       * </pre>
       *
       * <code>string bank_name = 4;</code>
       * @return The bankName.
       */
      java.lang.String getBankName();
      /**
       * <pre>
       * Банк-эмитент.
       * Наименование банка-эмитента. Процессинг может вернуть значение "НЕ ЗАДАВАЛСЯ".
       * В этом случае рекомендуется не отображать эту информацию для пользователя
       * </pre>
       *
       * <code>string bank_name = 4;</code>
       * @return The bytes for bankName.
       */
      com.google.protobuf.ByteString
          getBankNameBytes();
    }
    /**
     * <pre>
     * Структура с информацией о карте плательщика
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.PostInvoiceConfirmRequest.Card}
     */
    public static final class Card extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.PostInvoiceConfirmRequest.Card)
        CardOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use Card.newBuilder() to construct.
      private Card(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private Card() {
        cardNum_ = "";
        cardKind_ = "";
        bankName_ = "";
      }

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

      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_Card_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_Card_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card.Builder.class);
      }

      public static final int ESPP_CARD_ID_FIELD_NUMBER = 1;
      private int esppCardId_ = 0;
      /**
       * <pre>
       * Идентификатор платежного средства во внешней системы.
       * Возвращается в случае успешной привязки БК к УЗ
       * </pre>
       *
       * <code>int32 espp_card_id = 1;</code>
       * @return The esppCardId.
       */
      @java.lang.Override
      public int getEsppCardId() {
        return esppCardId_;
      }

      public static final int CARD_NUM_FIELD_NUMBER = 2;
      @SuppressWarnings("serial")
      private volatile java.lang.Object cardNum_ = "";
      /**
       * <pre>
       * Номер платежного средства.
       * Маскированный номер карты. Например: 123456******7890
       * </pre>
       *
       * <code>string card_num = 2;</code>
       * @return The cardNum.
       */
      @java.lang.Override
      public java.lang.String getCardNum() {
        java.lang.Object ref = cardNum_;
        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();
          cardNum_ = s;
          return s;
        }
      }
      /**
       * <pre>
       * Номер платежного средства.
       * Маскированный номер карты. Например: 123456******7890
       * </pre>
       *
       * <code>string card_num = 2;</code>
       * @return The bytes for cardNum.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getCardNumBytes() {
        java.lang.Object ref = cardNum_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          cardNum_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int CARD_KIND_FIELD_NUMBER = 3;
      @SuppressWarnings("serial")
      private volatile java.lang.Object cardKind_ = "";
      /**
       * <pre>
       * Тип банковской карты
       * </pre>
       *
       * <code>string card_kind = 3 [json_name = "cardType"];</code>
       * @return The cardKind.
       */
      @java.lang.Override
      public java.lang.String getCardKind() {
        java.lang.Object ref = cardKind_;
        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();
          cardKind_ = s;
          return s;
        }
      }
      /**
       * <pre>
       * Тип банковской карты
       * </pre>
       *
       * <code>string card_kind = 3 [json_name = "cardType"];</code>
       * @return The bytes for cardKind.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getCardKindBytes() {
        java.lang.Object ref = cardKind_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          cardKind_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int BANK_NAME_FIELD_NUMBER = 4;
      @SuppressWarnings("serial")
      private volatile java.lang.Object bankName_ = "";
      /**
       * <pre>
       * Банк-эмитент.
       * Наименование банка-эмитента. Процессинг может вернуть значение "НЕ ЗАДАВАЛСЯ".
       * В этом случае рекомендуется не отображать эту информацию для пользователя
       * </pre>
       *
       * <code>string bank_name = 4;</code>
       * @return The bankName.
       */
      @java.lang.Override
      public java.lang.String getBankName() {
        java.lang.Object ref = bankName_;
        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();
          bankName_ = s;
          return s;
        }
      }
      /**
       * <pre>
       * Банк-эмитент.
       * Наименование банка-эмитента. Процессинг может вернуть значение "НЕ ЗАДАВАЛСЯ".
       * В этом случае рекомендуется не отображать эту информацию для пользователя
       * </pre>
       *
       * <code>string bank_name = 4;</code>
       * @return The bytes for bankName.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getBankNameBytes() {
        java.lang.Object ref = bankName_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          bankName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

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

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (esppCardId_ != 0) {
          output.writeInt32(1, esppCardId_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(cardNum_)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 2, cardNum_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(cardKind_)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 3, cardKind_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(bankName_)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 4, bankName_);
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (esppCardId_ != 0) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(1, esppCardId_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(cardNum_)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, cardNum_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(cardKind_)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, cardKind_);
        }
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(bankName_)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, bankName_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card)) {
          return super.equals(obj);
        }
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card) obj;

        if (getEsppCardId()
            != other.getEsppCardId()) return false;
        if (!getCardNum()
            .equals(other.getCardNum())) return false;
        if (!getCardKind()
            .equals(other.getCardKind())) return false;
        if (!getBankName()
            .equals(other.getBankName())) return false;
        if (!getUnknownFields().equals(other.getUnknownFields())) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        hash = (37 * hash) + ESPP_CARD_ID_FIELD_NUMBER;
        hash = (53 * hash) + getEsppCardId();
        hash = (37 * hash) + CARD_NUM_FIELD_NUMBER;
        hash = (53 * hash) + getCardNum().hashCode();
        hash = (37 * hash) + CARD_KIND_FIELD_NUMBER;
        hash = (53 * hash) + getCardKind().hashCode();
        hash = (37 * hash) + BANK_NAME_FIELD_NUMBER;
        hash = (53 * hash) + getBankName().hashCode();
        hash = (29 * hash) + getUnknownFields().hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card 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;
      }
      /**
       * <pre>
       * Структура с информацией о карте плательщика
       * </pre>
       *
       * Protobuf type {@code keyapis.invoice.v1.PostInvoiceConfirmRequest.Card}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.PostInvoiceConfirmRequest.Card)
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.CardOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_Card_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_Card_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card.Builder.class);
        }

        // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card.newBuilder()
        private Builder() {

        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);

        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          bitField0_ = 0;
          esppCardId_ = 0;
          cardNum_ = "";
          cardKind_ = "";
          bankName_ = "";
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_Card_descriptor;
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card getDefaultInstanceForType() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card.getDefaultInstance();
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card build() {
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card buildPartial() {
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card(this);
          if (bitField0_ != 0) { buildPartial0(result); }
          onBuilt();
          return result;
        }

        private void buildPartial0(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card result) {
          int from_bitField0_ = bitField0_;
          if (((from_bitField0_ & 0x00000001) != 0)) {
            result.esppCardId_ = esppCardId_;
          }
          if (((from_bitField0_ & 0x00000002) != 0)) {
            result.cardNum_ = cardNum_;
          }
          if (((from_bitField0_ & 0x00000004) != 0)) {
            result.cardKind_ = cardKind_;
          }
          if (((from_bitField0_ & 0x00000008) != 0)) {
            result.bankName_ = bankName_;
          }
        }

        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card) {
            return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card other) {
          if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card.getDefaultInstance()) return this;
          if (other.getEsppCardId() != 0) {
            setEsppCardId(other.getEsppCardId());
          }
          if (!other.getCardNum().isEmpty()) {
            cardNum_ = other.cardNum_;
            bitField0_ |= 0x00000002;
            onChanged();
          }
          if (!other.getCardKind().isEmpty()) {
            cardKind_ = other.cardKind_;
            bitField0_ |= 0x00000004;
            onChanged();
          }
          if (!other.getBankName().isEmpty()) {
            bankName_ = other.bankName_;
            bitField0_ |= 0x00000008;
            onChanged();
          }
          this.mergeUnknownFields(other.getUnknownFields());
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          if (extensionRegistry == null) {
            throw new java.lang.NullPointerException();
          }
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                case 8: {
                  esppCardId_ = input.readInt32();
                  bitField0_ |= 0x00000001;
                  break;
                } // case 8
                case 18: {
                  cardNum_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000002;
                  break;
                } // case 18
                case 26: {
                  cardKind_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000004;
                  break;
                } // case 26
                case 34: {
                  bankName_ = input.readStringRequireUtf8();
                  bitField0_ |= 0x00000008;
                  break;
                } // case 34
                default: {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
              } // switch (tag)
            } // while (!done)
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.unwrapIOException();
          } finally {
            onChanged();
          } // finally
          return this;
        }
        private int bitField0_;

        private int esppCardId_ ;
        /**
         * <pre>
         * Идентификатор платежного средства во внешней системы.
         * Возвращается в случае успешной привязки БК к УЗ
         * </pre>
         *
         * <code>int32 espp_card_id = 1;</code>
         * @return The esppCardId.
         */
        @java.lang.Override
        public int getEsppCardId() {
          return esppCardId_;
        }
        /**
         * <pre>
         * Идентификатор платежного средства во внешней системы.
         * Возвращается в случае успешной привязки БК к УЗ
         * </pre>
         *
         * <code>int32 espp_card_id = 1;</code>
         * @param value The esppCardId to set.
         * @return This builder for chaining.
         */
        public Builder setEsppCardId(int value) {

          esppCardId_ = value;
          bitField0_ |= 0x00000001;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Идентификатор платежного средства во внешней системы.
         * Возвращается в случае успешной привязки БК к УЗ
         * </pre>
         *
         * <code>int32 espp_card_id = 1;</code>
         * @return This builder for chaining.
         */
        public Builder clearEsppCardId() {
          bitField0_ = (bitField0_ & ~0x00000001);
          esppCardId_ = 0;
          onChanged();
          return this;
        }

        private java.lang.Object cardNum_ = "";
        /**
         * <pre>
         * Номер платежного средства.
         * Маскированный номер карты. Например: 123456******7890
         * </pre>
         *
         * <code>string card_num = 2;</code>
         * @return The cardNum.
         */
        public java.lang.String getCardNum() {
          java.lang.Object ref = cardNum_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            cardNum_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * Номер платежного средства.
         * Маскированный номер карты. Например: 123456******7890
         * </pre>
         *
         * <code>string card_num = 2;</code>
         * @return The bytes for cardNum.
         */
        public com.google.protobuf.ByteString
            getCardNumBytes() {
          java.lang.Object ref = cardNum_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            cardNum_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * Номер платежного средства.
         * Маскированный номер карты. Например: 123456******7890
         * </pre>
         *
         * <code>string card_num = 2;</code>
         * @param value The cardNum to set.
         * @return This builder for chaining.
         */
        public Builder setCardNum(
            java.lang.String value) {
          if (value == null) { throw new NullPointerException(); }
          cardNum_ = value;
          bitField0_ |= 0x00000002;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Номер платежного средства.
         * Маскированный номер карты. Например: 123456******7890
         * </pre>
         *
         * <code>string card_num = 2;</code>
         * @return This builder for chaining.
         */
        public Builder clearCardNum() {
          cardNum_ = getDefaultInstance().getCardNum();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Номер платежного средства.
         * Маскированный номер карты. Например: 123456******7890
         * </pre>
         *
         * <code>string card_num = 2;</code>
         * @param value The bytes for cardNum to set.
         * @return This builder for chaining.
         */
        public Builder setCardNumBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) { throw new NullPointerException(); }
          checkByteStringIsUtf8(value);
          cardNum_ = value;
          bitField0_ |= 0x00000002;
          onChanged();
          return this;
        }

        private java.lang.Object cardKind_ = "";
        /**
         * <pre>
         * Тип банковской карты
         * </pre>
         *
         * <code>string card_kind = 3 [json_name = "cardType"];</code>
         * @return The cardKind.
         */
        public java.lang.String getCardKind() {
          java.lang.Object ref = cardKind_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            cardKind_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * Тип банковской карты
         * </pre>
         *
         * <code>string card_kind = 3 [json_name = "cardType"];</code>
         * @return The bytes for cardKind.
         */
        public com.google.protobuf.ByteString
            getCardKindBytes() {
          java.lang.Object ref = cardKind_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            cardKind_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * Тип банковской карты
         * </pre>
         *
         * <code>string card_kind = 3 [json_name = "cardType"];</code>
         * @param value The cardKind to set.
         * @return This builder for chaining.
         */
        public Builder setCardKind(
            java.lang.String value) {
          if (value == null) { throw new NullPointerException(); }
          cardKind_ = value;
          bitField0_ |= 0x00000004;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Тип банковской карты
         * </pre>
         *
         * <code>string card_kind = 3 [json_name = "cardType"];</code>
         * @return This builder for chaining.
         */
        public Builder clearCardKind() {
          cardKind_ = getDefaultInstance().getCardKind();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Тип банковской карты
         * </pre>
         *
         * <code>string card_kind = 3 [json_name = "cardType"];</code>
         * @param value The bytes for cardKind to set.
         * @return This builder for chaining.
         */
        public Builder setCardKindBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) { throw new NullPointerException(); }
          checkByteStringIsUtf8(value);
          cardKind_ = value;
          bitField0_ |= 0x00000004;
          onChanged();
          return this;
        }

        private java.lang.Object bankName_ = "";
        /**
         * <pre>
         * Банк-эмитент.
         * Наименование банка-эмитента. Процессинг может вернуть значение "НЕ ЗАДАВАЛСЯ".
         * В этом случае рекомендуется не отображать эту информацию для пользователя
         * </pre>
         *
         * <code>string bank_name = 4;</code>
         * @return The bankName.
         */
        public java.lang.String getBankName() {
          java.lang.Object ref = bankName_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            bankName_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * Банк-эмитент.
         * Наименование банка-эмитента. Процессинг может вернуть значение "НЕ ЗАДАВАЛСЯ".
         * В этом случае рекомендуется не отображать эту информацию для пользователя
         * </pre>
         *
         * <code>string bank_name = 4;</code>
         * @return The bytes for bankName.
         */
        public com.google.protobuf.ByteString
            getBankNameBytes() {
          java.lang.Object ref = bankName_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            bankName_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * Банк-эмитент.
         * Наименование банка-эмитента. Процессинг может вернуть значение "НЕ ЗАДАВАЛСЯ".
         * В этом случае рекомендуется не отображать эту информацию для пользователя
         * </pre>
         *
         * <code>string bank_name = 4;</code>
         * @param value The bankName to set.
         * @return This builder for chaining.
         */
        public Builder setBankName(
            java.lang.String value) {
          if (value == null) { throw new NullPointerException(); }
          bankName_ = value;
          bitField0_ |= 0x00000008;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Банк-эмитент.
         * Наименование банка-эмитента. Процессинг может вернуть значение "НЕ ЗАДАВАЛСЯ".
         * В этом случае рекомендуется не отображать эту информацию для пользователя
         * </pre>
         *
         * <code>string bank_name = 4;</code>
         * @return This builder for chaining.
         */
        public Builder clearBankName() {
          bankName_ = getDefaultInstance().getBankName();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Банк-эмитент.
         * Наименование банка-эмитента. Процессинг может вернуть значение "НЕ ЗАДАВАЛСЯ".
         * В этом случае рекомендуется не отображать эту информацию для пользователя
         * </pre>
         *
         * <code>string bank_name = 4;</code>
         * @param value The bytes for bankName to set.
         * @return This builder for chaining.
         */
        public Builder setBankNameBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) { throw new NullPointerException(); }
          checkByteStringIsUtf8(value);
          bankName_ = value;
          bitField0_ |= 0x00000008;
          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:keyapis.invoice.v1.PostInvoiceConfirmRequest.Card)
      }

      // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.PostInvoiceConfirmRequest.Card)
      private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card();
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<Card>
          PARSER = new com.google.protobuf.AbstractParser<Card>() {
        @java.lang.Override
        public Card 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 (com.google.protobuf.UninitializedMessageException e) {
            throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(e)
                .setUnfinishedMessage(builder.buildPartial());
          }
          return builder.buildPartial();
        }
      };

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

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

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public static final int SRC_PAY_ID_FIELD_NUMBER = 1;
    @SuppressWarnings("serial")
    private volatile java.lang.Object srcPayId_ = "";
    /**
     * <pre>
     * Идентификатор платежа в Ключе
     * </pre>
     *
     * <code>string src_pay_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The srcPayId.
     */
    @java.lang.Override
    public java.lang.String getSrcPayId() {
      java.lang.Object ref = srcPayId_;
      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();
        srcPayId_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Идентификатор платежа в Ключе
     * </pre>
     *
     * <code>string src_pay_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for srcPayId.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getSrcPayIdBytes() {
      java.lang.Object ref = srcPayId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        srcPayId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ESPP_PAY_ID_FIELD_NUMBER = 2;
    @SuppressWarnings("serial")
    private volatile java.lang.Object esppPayId_ = "";
    /**
     * <pre>
     * Идентификатор платежа во внешней системе
     * </pre>
     *
     * <code>string espp_pay_id = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The esppPayId.
     */
    @java.lang.Override
    public java.lang.String getEsppPayId() {
      java.lang.Object ref = esppPayId_;
      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();
        esppPayId_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Идентификатор платежа во внешней системе
     * </pre>
     *
     * <code>string espp_pay_id = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for esppPayId.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getEsppPayIdBytes() {
      java.lang.Object ref = esppPayId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        esppPayId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PAY_STATUS_FIELD_NUMBER = 3;
    private int payStatus_ = 0;
    /**
     * <pre>
     * Статус платежа из внешней системы
     * </pre>
     *
     * <code>int32 pay_status = 3 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The payStatus.
     */
    @java.lang.Override
    public int getPayStatus() {
      return payStatus_;
    }

    public static final int REQ_TYPE_FIELD_NUMBER = 4;
    @SuppressWarnings("serial")
    private volatile java.lang.Object reqType_ = "";
    /**
     * <pre>
     * Тип запроса.
     * Должно иметь значение "confirmPayment"
     * </pre>
     *
     * <code>string req_type = 4 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The reqType.
     */
    @java.lang.Override
    public java.lang.String getReqType() {
      java.lang.Object ref = reqType_;
      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();
        reqType_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Тип запроса.
     * Должно иметь значение "confirmPayment"
     * </pre>
     *
     * <code>string req_type = 4 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The bytes for reqType.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getReqTypeBytes() {
      java.lang.Object ref = reqType_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        reqType_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int AMOUNT_FIELD_NUMBER = 5;
    private float amount_ = 0F;
    /**
     * <pre>
     * Сумма платежа в минимальных единицах валюты
     * </pre>
     *
     * <code>float amount = 5;</code>
     * @return The amount.
     */
    @java.lang.Override
    public float getAmount() {
      return amount_;
    }

    public static final int CURRENCY_FIELD_NUMBER = 6;
    @SuppressWarnings("serial")
    private volatile java.lang.Object currency_ = "";
    /**
     * <pre>
     * Код валюты платежа
     * </pre>
     *
     * <code>string currency = 6;</code>
     * @return The currency.
     */
    @java.lang.Override
    public java.lang.String getCurrency() {
      java.lang.Object ref = currency_;
      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();
        currency_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Код валюты платежа
     * </pre>
     *
     * <code>string currency = 6;</code>
     * @return The bytes for currency.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getCurrencyBytes() {
      java.lang.Object ref = currency_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        currency_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PAY_METHOD_FIELD_NUMBER = 7;
    @SuppressWarnings("serial")
    private volatile java.lang.Object payMethod_ = "";
    /**
     * <pre>
     * Код способа оплаты
     * </pre>
     *
     * <code>string pay_method = 7;</code>
     * @return The payMethod.
     */
    @java.lang.Override
    public java.lang.String getPayMethod() {
      java.lang.Object ref = payMethod_;
      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();
        payMethod_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Код способа оплаты
     * </pre>
     *
     * <code>string pay_method = 7;</code>
     * @return The bytes for payMethod.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getPayMethodBytes() {
      java.lang.Object ref = payMethod_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        payMethod_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CREATE_TIME_AT_FIELD_NUMBER = 8;
    private com.google.protobuf.Timestamp createTimeAt_;
    /**
     * <pre>
     * Дата регистрации платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp create_time_at = 8 [json_name = "createTime"];</code>
     * @return Whether the createTimeAt field is set.
     */
    @java.lang.Override
    public boolean hasCreateTimeAt() {
      return createTimeAt_ != null;
    }
    /**
     * <pre>
     * Дата регистрации платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp create_time_at = 8 [json_name = "createTime"];</code>
     * @return The createTimeAt.
     */
    @java.lang.Override
    public com.google.protobuf.Timestamp getCreateTimeAt() {
      return createTimeAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createTimeAt_;
    }
    /**
     * <pre>
     * Дата регистрации платежа.
     * # Тип: DateTime
     * </pre>
     *
     * <code>.google.protobuf.Timestamp create_time_at = 8 [json_name = "createTime"];</code>
     */
    @java.lang.Override
    public com.google.protobuf.TimestampOrBuilder getCreateTimeAtOrBuilder() {
      return createTimeAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createTimeAt_;
    }

    public static final int REQ_NOTE_FIELD_NUMBER = 9;
    @SuppressWarnings("serial")
    private volatile java.lang.Object reqNote_ = "";
    /**
     * <pre>
     * Комментарий или сообщение об ошибке
     * </pre>
     *
     * <code>string req_note = 9;</code>
     * @return The reqNote.
     */
    @java.lang.Override
    public java.lang.String getReqNote() {
      java.lang.Object ref = reqNote_;
      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();
        reqNote_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Комментарий или сообщение об ошибке
     * </pre>
     *
     * <code>string req_note = 9;</code>
     * @return The bytes for reqNote.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getReqNoteBytes() {
      java.lang.Object ref = reqNote_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        reqNote_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int REQ_USER_MSG_FIELD_NUMBER = 10;
    @SuppressWarnings("serial")
    private volatile java.lang.Object reqUserMsg_ = "";
    /**
     * <pre>
     * Сообщение, отображаемое пользователю
     * </pre>
     *
     * <code>string req_user_msg = 10;</code>
     * @return The reqUserMsg.
     */
    @java.lang.Override
    public java.lang.String getReqUserMsg() {
      java.lang.Object ref = reqUserMsg_;
      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();
        reqUserMsg_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Сообщение, отображаемое пользователю
     * </pre>
     *
     * <code>string req_user_msg = 10;</code>
     * @return The bytes for reqUserMsg.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getReqUserMsgBytes() {
      java.lang.Object ref = reqUserMsg_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        reqUserMsg_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PAY_TIME_AT_FIELD_NUMBER = 11;
    private com.google.protobuf.Timestamp payTimeAt_;
    /**
     * <pre>
     * Время фактической оплаты. Время фактической оплаты на стороне Процессинга. Возвращается, если оплата состоялась
     * </pre>
     *
     * <code>.google.protobuf.Timestamp pay_time_at = 11 [json_name = "payTime"];</code>
     * @return Whether the payTimeAt field is set.
     */
    @java.lang.Override
    public boolean hasPayTimeAt() {
      return payTimeAt_ != null;
    }
    /**
     * <pre>
     * Время фактической оплаты. Время фактической оплаты на стороне Процессинга. Возвращается, если оплата состоялась
     * </pre>
     *
     * <code>.google.protobuf.Timestamp pay_time_at = 11 [json_name = "payTime"];</code>
     * @return The payTimeAt.
     */
    @java.lang.Override
    public com.google.protobuf.Timestamp getPayTimeAt() {
      return payTimeAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : payTimeAt_;
    }
    /**
     * <pre>
     * Время фактической оплаты. Время фактической оплаты на стороне Процессинга. Возвращается, если оплата состоялась
     * </pre>
     *
     * <code>.google.protobuf.Timestamp pay_time_at = 11 [json_name = "payTime"];</code>
     */
    @java.lang.Override
    public com.google.protobuf.TimestampOrBuilder getPayTimeAtOrBuilder() {
      return payTimeAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : payTimeAt_;
    }

    public static final int ABANDON_TIME_AT_FIELD_NUMBER = 12;
    private com.google.protobuf.Timestamp abandonTimeAt_;
    /**
     * <pre>
     * Время фактической отмены оплаты.
     * Время фактической отмены оплаты на стороне Процессинга.
     * Возвращается, если отмена оплаты состоялась
     * </pre>
     *
     * <code>.google.protobuf.Timestamp abandon_time_at = 12 [json_name = "abandonTime"];</code>
     * @return Whether the abandonTimeAt field is set.
     */
    @java.lang.Override
    public boolean hasAbandonTimeAt() {
      return abandonTimeAt_ != null;
    }
    /**
     * <pre>
     * Время фактической отмены оплаты.
     * Время фактической отмены оплаты на стороне Процессинга.
     * Возвращается, если отмена оплаты состоялась
     * </pre>
     *
     * <code>.google.protobuf.Timestamp abandon_time_at = 12 [json_name = "abandonTime"];</code>
     * @return The abandonTimeAt.
     */
    @java.lang.Override
    public com.google.protobuf.Timestamp getAbandonTimeAt() {
      return abandonTimeAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : abandonTimeAt_;
    }
    /**
     * <pre>
     * Время фактической отмены оплаты.
     * Время фактической отмены оплаты на стороне Процессинга.
     * Возвращается, если отмена оплаты состоялась
     * </pre>
     *
     * <code>.google.protobuf.Timestamp abandon_time_at = 12 [json_name = "abandonTime"];</code>
     */
    @java.lang.Override
    public com.google.protobuf.TimestampOrBuilder getAbandonTimeAtOrBuilder() {
      return abandonTimeAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : abandonTimeAt_;
    }

    public static final int CARD_FIELD_NUMBER = 13;
    private ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card card_;
    /**
     * <pre>
     * Структура с информацией о карте плательщика.
     * Передаётся только при успешном платеже и если указаны способы оплаты payMethod = StoredBankCard либо BankCard
     * </pre>
     *
     * <code>.keyapis.invoice.v1.PostInvoiceConfirmRequest.Card card = 13;</code>
     * @return Whether the card field is set.
     */
    @java.lang.Override
    public boolean hasCard() {
      return card_ != null;
    }
    /**
     * <pre>
     * Структура с информацией о карте плательщика.
     * Передаётся только при успешном платеже и если указаны способы оплаты payMethod = StoredBankCard либо BankCard
     * </pre>
     *
     * <code>.keyapis.invoice.v1.PostInvoiceConfirmRequest.Card card = 13;</code>
     * @return The card.
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card getCard() {
      return card_ == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card.getDefaultInstance() : card_;
    }
    /**
     * <pre>
     * Структура с информацией о карте плательщика.
     * Передаётся только при успешном платеже и если указаны способы оплаты payMethod = StoredBankCard либо BankCard
     * </pre>
     *
     * <code>.keyapis.invoice.v1.PostInvoiceConfirmRequest.Card card = 13;</code>
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.CardOrBuilder getCardOrBuilder() {
      return card_ == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card.getDefaultInstance() : card_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(srcPayId_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcPayId_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(esppPayId_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, esppPayId_);
      }
      if (payStatus_ != 0) {
        output.writeInt32(3, payStatus_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(reqType_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, reqType_);
      }
      if (java.lang.Float.floatToRawIntBits(amount_) != 0) {
        output.writeFloat(5, amount_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(currency_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, currency_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(payMethod_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, payMethod_);
      }
      if (createTimeAt_ != null) {
        output.writeMessage(8, getCreateTimeAt());
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(reqNote_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 9, reqNote_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(reqUserMsg_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 10, reqUserMsg_);
      }
      if (payTimeAt_ != null) {
        output.writeMessage(11, getPayTimeAt());
      }
      if (abandonTimeAt_ != null) {
        output.writeMessage(12, getAbandonTimeAt());
      }
      if (card_ != null) {
        output.writeMessage(13, getCard());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(srcPayId_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcPayId_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(esppPayId_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, esppPayId_);
      }
      if (payStatus_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, payStatus_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(reqType_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, reqType_);
      }
      if (java.lang.Float.floatToRawIntBits(amount_) != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(5, amount_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(currency_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, currency_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(payMethod_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, payMethod_);
      }
      if (createTimeAt_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, getCreateTimeAt());
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(reqNote_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(9, reqNote_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(reqUserMsg_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(10, reqUserMsg_);
      }
      if (payTimeAt_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(11, getPayTimeAt());
      }
      if (abandonTimeAt_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, getAbandonTimeAt());
      }
      if (card_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(13, getCard());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest)) {
        return super.equals(obj);
      }
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest) obj;

      if (!getSrcPayId()
          .equals(other.getSrcPayId())) return false;
      if (!getEsppPayId()
          .equals(other.getEsppPayId())) return false;
      if (getPayStatus()
          != other.getPayStatus()) return false;
      if (!getReqType()
          .equals(other.getReqType())) return false;
      if (java.lang.Float.floatToIntBits(getAmount())
          != java.lang.Float.floatToIntBits(
              other.getAmount())) return false;
      if (!getCurrency()
          .equals(other.getCurrency())) return false;
      if (!getPayMethod()
          .equals(other.getPayMethod())) return false;
      if (hasCreateTimeAt() != other.hasCreateTimeAt()) return false;
      if (hasCreateTimeAt()) {
        if (!getCreateTimeAt()
            .equals(other.getCreateTimeAt())) return false;
      }
      if (!getReqNote()
          .equals(other.getReqNote())) return false;
      if (!getReqUserMsg()
          .equals(other.getReqUserMsg())) return false;
      if (hasPayTimeAt() != other.hasPayTimeAt()) return false;
      if (hasPayTimeAt()) {
        if (!getPayTimeAt()
            .equals(other.getPayTimeAt())) return false;
      }
      if (hasAbandonTimeAt() != other.hasAbandonTimeAt()) return false;
      if (hasAbandonTimeAt()) {
        if (!getAbandonTimeAt()
            .equals(other.getAbandonTimeAt())) return false;
      }
      if (hasCard() != other.hasCard()) return false;
      if (hasCard()) {
        if (!getCard()
            .equals(other.getCard())) return false;
      }
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + SRC_PAY_ID_FIELD_NUMBER;
      hash = (53 * hash) + getSrcPayId().hashCode();
      hash = (37 * hash) + ESPP_PAY_ID_FIELD_NUMBER;
      hash = (53 * hash) + getEsppPayId().hashCode();
      hash = (37 * hash) + PAY_STATUS_FIELD_NUMBER;
      hash = (53 * hash) + getPayStatus();
      hash = (37 * hash) + REQ_TYPE_FIELD_NUMBER;
      hash = (53 * hash) + getReqType().hashCode();
      hash = (37 * hash) + AMOUNT_FIELD_NUMBER;
      hash = (53 * hash) + java.lang.Float.floatToIntBits(
          getAmount());
      hash = (37 * hash) + CURRENCY_FIELD_NUMBER;
      hash = (53 * hash) + getCurrency().hashCode();
      hash = (37 * hash) + PAY_METHOD_FIELD_NUMBER;
      hash = (53 * hash) + getPayMethod().hashCode();
      if (hasCreateTimeAt()) {
        hash = (37 * hash) + CREATE_TIME_AT_FIELD_NUMBER;
        hash = (53 * hash) + getCreateTimeAt().hashCode();
      }
      hash = (37 * hash) + REQ_NOTE_FIELD_NUMBER;
      hash = (53 * hash) + getReqNote().hashCode();
      hash = (37 * hash) + REQ_USER_MSG_FIELD_NUMBER;
      hash = (53 * hash) + getReqUserMsg().hashCode();
      if (hasPayTimeAt()) {
        hash = (37 * hash) + PAY_TIME_AT_FIELD_NUMBER;
        hash = (53 * hash) + getPayTimeAt().hashCode();
      }
      if (hasAbandonTimeAt()) {
        hash = (37 * hash) + ABANDON_TIME_AT_FIELD_NUMBER;
        hash = (53 * hash) + getAbandonTimeAt().hashCode();
      }
      if (hasCard()) {
        hash = (37 * hash) + CARD_FIELD_NUMBER;
        hash = (53 * hash) + getCard().hashCode();
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest 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;
    }
    /**
     * <pre>
     * Запрос на подтверждение платежа
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.PostInvoiceConfirmRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.PostInvoiceConfirmRequest)
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Builder.class);
      }

      // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        srcPayId_ = "";
        esppPayId_ = "";
        payStatus_ = 0;
        reqType_ = "";
        amount_ = 0F;
        currency_ = "";
        payMethod_ = "";
        createTimeAt_ = null;
        if (createTimeAtBuilder_ != null) {
          createTimeAtBuilder_.dispose();
          createTimeAtBuilder_ = null;
        }
        reqNote_ = "";
        reqUserMsg_ = "";
        payTimeAt_ = null;
        if (payTimeAtBuilder_ != null) {
          payTimeAtBuilder_.dispose();
          payTimeAtBuilder_ = null;
        }
        abandonTimeAt_ = null;
        if (abandonTimeAtBuilder_ != null) {
          abandonTimeAtBuilder_.dispose();
          abandonTimeAtBuilder_ = null;
        }
        card_ = null;
        if (cardBuilder_ != null) {
          cardBuilder_.dispose();
          cardBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest getDefaultInstanceForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest build() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest buildPartial() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest(this);
        if (bitField0_ != 0) { buildPartial0(result); }
        onBuilt();
        return result;
      }

      private void buildPartial0(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.srcPayId_ = srcPayId_;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.esppPayId_ = esppPayId_;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.payStatus_ = payStatus_;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.reqType_ = reqType_;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          result.amount_ = amount_;
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          result.currency_ = currency_;
        }
        if (((from_bitField0_ & 0x00000040) != 0)) {
          result.payMethod_ = payMethod_;
        }
        if (((from_bitField0_ & 0x00000080) != 0)) {
          result.createTimeAt_ = createTimeAtBuilder_ == null
              ? createTimeAt_
              : createTimeAtBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000100) != 0)) {
          result.reqNote_ = reqNote_;
        }
        if (((from_bitField0_ & 0x00000200) != 0)) {
          result.reqUserMsg_ = reqUserMsg_;
        }
        if (((from_bitField0_ & 0x00000400) != 0)) {
          result.payTimeAt_ = payTimeAtBuilder_ == null
              ? payTimeAt_
              : payTimeAtBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000800) != 0)) {
          result.abandonTimeAt_ = abandonTimeAtBuilder_ == null
              ? abandonTimeAt_
              : abandonTimeAtBuilder_.build();
        }
        if (((from_bitField0_ & 0x00001000) != 0)) {
          result.card_ = cardBuilder_ == null
              ? card_
              : cardBuilder_.build();
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest) {
          return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest other) {
        if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.getDefaultInstance()) return this;
        if (!other.getSrcPayId().isEmpty()) {
          srcPayId_ = other.srcPayId_;
          bitField0_ |= 0x00000001;
          onChanged();
        }
        if (!other.getEsppPayId().isEmpty()) {
          esppPayId_ = other.esppPayId_;
          bitField0_ |= 0x00000002;
          onChanged();
        }
        if (other.getPayStatus() != 0) {
          setPayStatus(other.getPayStatus());
        }
        if (!other.getReqType().isEmpty()) {
          reqType_ = other.reqType_;
          bitField0_ |= 0x00000008;
          onChanged();
        }
        if (other.getAmount() != 0F) {
          setAmount(other.getAmount());
        }
        if (!other.getCurrency().isEmpty()) {
          currency_ = other.currency_;
          bitField0_ |= 0x00000020;
          onChanged();
        }
        if (!other.getPayMethod().isEmpty()) {
          payMethod_ = other.payMethod_;
          bitField0_ |= 0x00000040;
          onChanged();
        }
        if (other.hasCreateTimeAt()) {
          mergeCreateTimeAt(other.getCreateTimeAt());
        }
        if (!other.getReqNote().isEmpty()) {
          reqNote_ = other.reqNote_;
          bitField0_ |= 0x00000100;
          onChanged();
        }
        if (!other.getReqUserMsg().isEmpty()) {
          reqUserMsg_ = other.reqUserMsg_;
          bitField0_ |= 0x00000200;
          onChanged();
        }
        if (other.hasPayTimeAt()) {
          mergePayTimeAt(other.getPayTimeAt());
        }
        if (other.hasAbandonTimeAt()) {
          mergeAbandonTimeAt(other.getAbandonTimeAt());
        }
        if (other.hasCard()) {
          mergeCard(other.getCard());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                srcPayId_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000001;
                break;
              } // case 10
              case 18: {
                esppPayId_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000002;
                break;
              } // case 18
              case 24: {
                payStatus_ = input.readInt32();
                bitField0_ |= 0x00000004;
                break;
              } // case 24
              case 34: {
                reqType_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000008;
                break;
              } // case 34
              case 45: {
                amount_ = input.readFloat();
                bitField0_ |= 0x00000010;
                break;
              } // case 45
              case 50: {
                currency_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000020;
                break;
              } // case 50
              case 58: {
                payMethod_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000040;
                break;
              } // case 58
              case 66: {
                input.readMessage(
                    getCreateTimeAtFieldBuilder().getBuilder(),
                    extensionRegistry);
                bitField0_ |= 0x00000080;
                break;
              } // case 66
              case 74: {
                reqNote_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000100;
                break;
              } // case 74
              case 82: {
                reqUserMsg_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000200;
                break;
              } // case 82
              case 90: {
                input.readMessage(
                    getPayTimeAtFieldBuilder().getBuilder(),
                    extensionRegistry);
                bitField0_ |= 0x00000400;
                break;
              } // case 90
              case 98: {
                input.readMessage(
                    getAbandonTimeAtFieldBuilder().getBuilder(),
                    extensionRegistry);
                bitField0_ |= 0x00000800;
                break;
              } // case 98
              case 106: {
                input.readMessage(
                    getCardFieldBuilder().getBuilder(),
                    extensionRegistry);
                bitField0_ |= 0x00001000;
                break;
              } // case 106
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private java.lang.Object srcPayId_ = "";
      /**
       * <pre>
       * Идентификатор платежа в Ключе
       * </pre>
       *
       * <code>string src_pay_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The srcPayId.
       */
      public java.lang.String getSrcPayId() {
        java.lang.Object ref = srcPayId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          srcPayId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Идентификатор платежа в Ключе
       * </pre>
       *
       * <code>string src_pay_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for srcPayId.
       */
      public com.google.protobuf.ByteString
          getSrcPayIdBytes() {
        java.lang.Object ref = srcPayId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          srcPayId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Идентификатор платежа в Ключе
       * </pre>
       *
       * <code>string src_pay_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The srcPayId to set.
       * @return This builder for chaining.
       */
      public Builder setSrcPayId(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        srcPayId_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Идентификатор платежа в Ключе
       * </pre>
       *
       * <code>string src_pay_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return This builder for chaining.
       */
      public Builder clearSrcPayId() {
        srcPayId_ = getDefaultInstance().getSrcPayId();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Идентификатор платежа в Ключе
       * </pre>
       *
       * <code>string src_pay_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The bytes for srcPayId to set.
       * @return This builder for chaining.
       */
      public Builder setSrcPayIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        srcPayId_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }

      private java.lang.Object esppPayId_ = "";
      /**
       * <pre>
       * Идентификатор платежа во внешней системе
       * </pre>
       *
       * <code>string espp_pay_id = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The esppPayId.
       */
      public java.lang.String getEsppPayId() {
        java.lang.Object ref = esppPayId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          esppPayId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Идентификатор платежа во внешней системе
       * </pre>
       *
       * <code>string espp_pay_id = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for esppPayId.
       */
      public com.google.protobuf.ByteString
          getEsppPayIdBytes() {
        java.lang.Object ref = esppPayId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          esppPayId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Идентификатор платежа во внешней системе
       * </pre>
       *
       * <code>string espp_pay_id = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The esppPayId to set.
       * @return This builder for chaining.
       */
      public Builder setEsppPayId(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        esppPayId_ = value;
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Идентификатор платежа во внешней системе
       * </pre>
       *
       * <code>string espp_pay_id = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return This builder for chaining.
       */
      public Builder clearEsppPayId() {
        esppPayId_ = getDefaultInstance().getEsppPayId();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Идентификатор платежа во внешней системе
       * </pre>
       *
       * <code>string espp_pay_id = 2 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The bytes for esppPayId to set.
       * @return This builder for chaining.
       */
      public Builder setEsppPayIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        esppPayId_ = value;
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }

      private int payStatus_ ;
      /**
       * <pre>
       * Статус платежа из внешней системы
       * </pre>
       *
       * <code>int32 pay_status = 3 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The payStatus.
       */
      @java.lang.Override
      public int getPayStatus() {
        return payStatus_;
      }
      /**
       * <pre>
       * Статус платежа из внешней системы
       * </pre>
       *
       * <code>int32 pay_status = 3 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The payStatus to set.
       * @return This builder for chaining.
       */
      public Builder setPayStatus(int value) {

        payStatus_ = value;
        bitField0_ |= 0x00000004;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Статус платежа из внешней системы
       * </pre>
       *
       * <code>int32 pay_status = 3 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return This builder for chaining.
       */
      public Builder clearPayStatus() {
        bitField0_ = (bitField0_ & ~0x00000004);
        payStatus_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object reqType_ = "";
      /**
       * <pre>
       * Тип запроса.
       * Должно иметь значение "confirmPayment"
       * </pre>
       *
       * <code>string req_type = 4 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The reqType.
       */
      public java.lang.String getReqType() {
        java.lang.Object ref = reqType_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          reqType_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Тип запроса.
       * Должно иметь значение "confirmPayment"
       * </pre>
       *
       * <code>string req_type = 4 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The bytes for reqType.
       */
      public com.google.protobuf.ByteString
          getReqTypeBytes() {
        java.lang.Object ref = reqType_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          reqType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Тип запроса.
       * Должно иметь значение "confirmPayment"
       * </pre>
       *
       * <code>string req_type = 4 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The reqType to set.
       * @return This builder for chaining.
       */
      public Builder setReqType(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        reqType_ = value;
        bitField0_ |= 0x00000008;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Тип запроса.
       * Должно иметь значение "confirmPayment"
       * </pre>
       *
       * <code>string req_type = 4 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return This builder for chaining.
       */
      public Builder clearReqType() {
        reqType_ = getDefaultInstance().getReqType();
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Тип запроса.
       * Должно иметь значение "confirmPayment"
       * </pre>
       *
       * <code>string req_type = 4 [(.google.api.field_behavior) = REQUIRED];</code>
       * @param value The bytes for reqType to set.
       * @return This builder for chaining.
       */
      public Builder setReqTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        reqType_ = value;
        bitField0_ |= 0x00000008;
        onChanged();
        return this;
      }

      private float amount_ ;
      /**
       * <pre>
       * Сумма платежа в минимальных единицах валюты
       * </pre>
       *
       * <code>float amount = 5;</code>
       * @return The amount.
       */
      @java.lang.Override
      public float getAmount() {
        return amount_;
      }
      /**
       * <pre>
       * Сумма платежа в минимальных единицах валюты
       * </pre>
       *
       * <code>float amount = 5;</code>
       * @param value The amount to set.
       * @return This builder for chaining.
       */
      public Builder setAmount(float value) {

        amount_ = value;
        bitField0_ |= 0x00000010;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Сумма платежа в минимальных единицах валюты
       * </pre>
       *
       * <code>float amount = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearAmount() {
        bitField0_ = (bitField0_ & ~0x00000010);
        amount_ = 0F;
        onChanged();
        return this;
      }

      private java.lang.Object currency_ = "";
      /**
       * <pre>
       * Код валюты платежа
       * </pre>
       *
       * <code>string currency = 6;</code>
       * @return The currency.
       */
      public java.lang.String getCurrency() {
        java.lang.Object ref = currency_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          currency_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Код валюты платежа
       * </pre>
       *
       * <code>string currency = 6;</code>
       * @return The bytes for currency.
       */
      public com.google.protobuf.ByteString
          getCurrencyBytes() {
        java.lang.Object ref = currency_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          currency_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Код валюты платежа
       * </pre>
       *
       * <code>string currency = 6;</code>
       * @param value The currency to set.
       * @return This builder for chaining.
       */
      public Builder setCurrency(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        currency_ = value;
        bitField0_ |= 0x00000020;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Код валюты платежа
       * </pre>
       *
       * <code>string currency = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearCurrency() {
        currency_ = getDefaultInstance().getCurrency();
        bitField0_ = (bitField0_ & ~0x00000020);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Код валюты платежа
       * </pre>
       *
       * <code>string currency = 6;</code>
       * @param value The bytes for currency to set.
       * @return This builder for chaining.
       */
      public Builder setCurrencyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        currency_ = value;
        bitField0_ |= 0x00000020;
        onChanged();
        return this;
      }

      private java.lang.Object payMethod_ = "";
      /**
       * <pre>
       * Код способа оплаты
       * </pre>
       *
       * <code>string pay_method = 7;</code>
       * @return The payMethod.
       */
      public java.lang.String getPayMethod() {
        java.lang.Object ref = payMethod_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          payMethod_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Код способа оплаты
       * </pre>
       *
       * <code>string pay_method = 7;</code>
       * @return The bytes for payMethod.
       */
      public com.google.protobuf.ByteString
          getPayMethodBytes() {
        java.lang.Object ref = payMethod_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          payMethod_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Код способа оплаты
       * </pre>
       *
       * <code>string pay_method = 7;</code>
       * @param value The payMethod to set.
       * @return This builder for chaining.
       */
      public Builder setPayMethod(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        payMethod_ = value;
        bitField0_ |= 0x00000040;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Код способа оплаты
       * </pre>
       *
       * <code>string pay_method = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearPayMethod() {
        payMethod_ = getDefaultInstance().getPayMethod();
        bitField0_ = (bitField0_ & ~0x00000040);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Код способа оплаты
       * </pre>
       *
       * <code>string pay_method = 7;</code>
       * @param value The bytes for payMethod to set.
       * @return This builder for chaining.
       */
      public Builder setPayMethodBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        payMethod_ = value;
        bitField0_ |= 0x00000040;
        onChanged();
        return this;
      }

      private com.google.protobuf.Timestamp createTimeAt_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> createTimeAtBuilder_;
      /**
       * <pre>
       * Дата регистрации платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp create_time_at = 8 [json_name = "createTime"];</code>
       * @return Whether the createTimeAt field is set.
       */
      public boolean hasCreateTimeAt() {
        return ((bitField0_ & 0x00000080) != 0);
      }
      /**
       * <pre>
       * Дата регистрации платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp create_time_at = 8 [json_name = "createTime"];</code>
       * @return The createTimeAt.
       */
      public com.google.protobuf.Timestamp getCreateTimeAt() {
        if (createTimeAtBuilder_ == null) {
          return createTimeAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createTimeAt_;
        } else {
          return createTimeAtBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Дата регистрации платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp create_time_at = 8 [json_name = "createTime"];</code>
       */
      public Builder setCreateTimeAt(com.google.protobuf.Timestamp value) {
        if (createTimeAtBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          createTimeAt_ = value;
        } else {
          createTimeAtBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата регистрации платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp create_time_at = 8 [json_name = "createTime"];</code>
       */
      public Builder setCreateTimeAt(
          com.google.protobuf.Timestamp.Builder builderForValue) {
        if (createTimeAtBuilder_ == null) {
          createTimeAt_ = builderForValue.build();
        } else {
          createTimeAtBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата регистрации платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp create_time_at = 8 [json_name = "createTime"];</code>
       */
      public Builder mergeCreateTimeAt(com.google.protobuf.Timestamp value) {
        if (createTimeAtBuilder_ == null) {
          if (((bitField0_ & 0x00000080) != 0) &&
            createTimeAt_ != null &&
            createTimeAt_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
            getCreateTimeAtBuilder().mergeFrom(value);
          } else {
            createTimeAt_ = value;
          }
        } else {
          createTimeAtBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата регистрации платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp create_time_at = 8 [json_name = "createTime"];</code>
       */
      public Builder clearCreateTimeAt() {
        bitField0_ = (bitField0_ & ~0x00000080);
        createTimeAt_ = null;
        if (createTimeAtBuilder_ != null) {
          createTimeAtBuilder_.dispose();
          createTimeAtBuilder_ = null;
        }
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Дата регистрации платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp create_time_at = 8 [json_name = "createTime"];</code>
       */
      public com.google.protobuf.Timestamp.Builder getCreateTimeAtBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getCreateTimeAtFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Дата регистрации платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp create_time_at = 8 [json_name = "createTime"];</code>
       */
      public com.google.protobuf.TimestampOrBuilder getCreateTimeAtOrBuilder() {
        if (createTimeAtBuilder_ != null) {
          return createTimeAtBuilder_.getMessageOrBuilder();
        } else {
          return createTimeAt_ == null ?
              com.google.protobuf.Timestamp.getDefaultInstance() : createTimeAt_;
        }
      }
      /**
       * <pre>
       * Дата регистрации платежа.
       * # Тип: DateTime
       * </pre>
       *
       * <code>.google.protobuf.Timestamp create_time_at = 8 [json_name = "createTime"];</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
          getCreateTimeAtFieldBuilder() {
        if (createTimeAtBuilder_ == null) {
          createTimeAtBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
                  getCreateTimeAt(),
                  getParentForChildren(),
                  isClean());
          createTimeAt_ = null;
        }
        return createTimeAtBuilder_;
      }

      private java.lang.Object reqNote_ = "";
      /**
       * <pre>
       * Комментарий или сообщение об ошибке
       * </pre>
       *
       * <code>string req_note = 9;</code>
       * @return The reqNote.
       */
      public java.lang.String getReqNote() {
        java.lang.Object ref = reqNote_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          reqNote_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Комментарий или сообщение об ошибке
       * </pre>
       *
       * <code>string req_note = 9;</code>
       * @return The bytes for reqNote.
       */
      public com.google.protobuf.ByteString
          getReqNoteBytes() {
        java.lang.Object ref = reqNote_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          reqNote_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Комментарий или сообщение об ошибке
       * </pre>
       *
       * <code>string req_note = 9;</code>
       * @param value The reqNote to set.
       * @return This builder for chaining.
       */
      public Builder setReqNote(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        reqNote_ = value;
        bitField0_ |= 0x00000100;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Комментарий или сообщение об ошибке
       * </pre>
       *
       * <code>string req_note = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearReqNote() {
        reqNote_ = getDefaultInstance().getReqNote();
        bitField0_ = (bitField0_ & ~0x00000100);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Комментарий или сообщение об ошибке
       * </pre>
       *
       * <code>string req_note = 9;</code>
       * @param value The bytes for reqNote to set.
       * @return This builder for chaining.
       */
      public Builder setReqNoteBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        reqNote_ = value;
        bitField0_ |= 0x00000100;
        onChanged();
        return this;
      }

      private java.lang.Object reqUserMsg_ = "";
      /**
       * <pre>
       * Сообщение, отображаемое пользователю
       * </pre>
       *
       * <code>string req_user_msg = 10;</code>
       * @return The reqUserMsg.
       */
      public java.lang.String getReqUserMsg() {
        java.lang.Object ref = reqUserMsg_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          reqUserMsg_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Сообщение, отображаемое пользователю
       * </pre>
       *
       * <code>string req_user_msg = 10;</code>
       * @return The bytes for reqUserMsg.
       */
      public com.google.protobuf.ByteString
          getReqUserMsgBytes() {
        java.lang.Object ref = reqUserMsg_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          reqUserMsg_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Сообщение, отображаемое пользователю
       * </pre>
       *
       * <code>string req_user_msg = 10;</code>
       * @param value The reqUserMsg to set.
       * @return This builder for chaining.
       */
      public Builder setReqUserMsg(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        reqUserMsg_ = value;
        bitField0_ |= 0x00000200;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Сообщение, отображаемое пользователю
       * </pre>
       *
       * <code>string req_user_msg = 10;</code>
       * @return This builder for chaining.
       */
      public Builder clearReqUserMsg() {
        reqUserMsg_ = getDefaultInstance().getReqUserMsg();
        bitField0_ = (bitField0_ & ~0x00000200);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Сообщение, отображаемое пользователю
       * </pre>
       *
       * <code>string req_user_msg = 10;</code>
       * @param value The bytes for reqUserMsg to set.
       * @return This builder for chaining.
       */
      public Builder setReqUserMsgBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        reqUserMsg_ = value;
        bitField0_ |= 0x00000200;
        onChanged();
        return this;
      }

      private com.google.protobuf.Timestamp payTimeAt_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> payTimeAtBuilder_;
      /**
       * <pre>
       * Время фактической оплаты. Время фактической оплаты на стороне Процессинга. Возвращается, если оплата состоялась
       * </pre>
       *
       * <code>.google.protobuf.Timestamp pay_time_at = 11 [json_name = "payTime"];</code>
       * @return Whether the payTimeAt field is set.
       */
      public boolean hasPayTimeAt() {
        return ((bitField0_ & 0x00000400) != 0);
      }
      /**
       * <pre>
       * Время фактической оплаты. Время фактической оплаты на стороне Процессинга. Возвращается, если оплата состоялась
       * </pre>
       *
       * <code>.google.protobuf.Timestamp pay_time_at = 11 [json_name = "payTime"];</code>
       * @return The payTimeAt.
       */
      public com.google.protobuf.Timestamp getPayTimeAt() {
        if (payTimeAtBuilder_ == null) {
          return payTimeAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : payTimeAt_;
        } else {
          return payTimeAtBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Время фактической оплаты. Время фактической оплаты на стороне Процессинга. Возвращается, если оплата состоялась
       * </pre>
       *
       * <code>.google.protobuf.Timestamp pay_time_at = 11 [json_name = "payTime"];</code>
       */
      public Builder setPayTimeAt(com.google.protobuf.Timestamp value) {
        if (payTimeAtBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          payTimeAt_ = value;
        } else {
          payTimeAtBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000400;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Время фактической оплаты. Время фактической оплаты на стороне Процессинга. Возвращается, если оплата состоялась
       * </pre>
       *
       * <code>.google.protobuf.Timestamp pay_time_at = 11 [json_name = "payTime"];</code>
       */
      public Builder setPayTimeAt(
          com.google.protobuf.Timestamp.Builder builderForValue) {
        if (payTimeAtBuilder_ == null) {
          payTimeAt_ = builderForValue.build();
        } else {
          payTimeAtBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000400;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Время фактической оплаты. Время фактической оплаты на стороне Процессинга. Возвращается, если оплата состоялась
       * </pre>
       *
       * <code>.google.protobuf.Timestamp pay_time_at = 11 [json_name = "payTime"];</code>
       */
      public Builder mergePayTimeAt(com.google.protobuf.Timestamp value) {
        if (payTimeAtBuilder_ == null) {
          if (((bitField0_ & 0x00000400) != 0) &&
            payTimeAt_ != null &&
            payTimeAt_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
            getPayTimeAtBuilder().mergeFrom(value);
          } else {
            payTimeAt_ = value;
          }
        } else {
          payTimeAtBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000400;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Время фактической оплаты. Время фактической оплаты на стороне Процессинга. Возвращается, если оплата состоялась
       * </pre>
       *
       * <code>.google.protobuf.Timestamp pay_time_at = 11 [json_name = "payTime"];</code>
       */
      public Builder clearPayTimeAt() {
        bitField0_ = (bitField0_ & ~0x00000400);
        payTimeAt_ = null;
        if (payTimeAtBuilder_ != null) {
          payTimeAtBuilder_.dispose();
          payTimeAtBuilder_ = null;
        }
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Время фактической оплаты. Время фактической оплаты на стороне Процессинга. Возвращается, если оплата состоялась
       * </pre>
       *
       * <code>.google.protobuf.Timestamp pay_time_at = 11 [json_name = "payTime"];</code>
       */
      public com.google.protobuf.Timestamp.Builder getPayTimeAtBuilder() {
        bitField0_ |= 0x00000400;
        onChanged();
        return getPayTimeAtFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Время фактической оплаты. Время фактической оплаты на стороне Процессинга. Возвращается, если оплата состоялась
       * </pre>
       *
       * <code>.google.protobuf.Timestamp pay_time_at = 11 [json_name = "payTime"];</code>
       */
      public com.google.protobuf.TimestampOrBuilder getPayTimeAtOrBuilder() {
        if (payTimeAtBuilder_ != null) {
          return payTimeAtBuilder_.getMessageOrBuilder();
        } else {
          return payTimeAt_ == null ?
              com.google.protobuf.Timestamp.getDefaultInstance() : payTimeAt_;
        }
      }
      /**
       * <pre>
       * Время фактической оплаты. Время фактической оплаты на стороне Процессинга. Возвращается, если оплата состоялась
       * </pre>
       *
       * <code>.google.protobuf.Timestamp pay_time_at = 11 [json_name = "payTime"];</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
          getPayTimeAtFieldBuilder() {
        if (payTimeAtBuilder_ == null) {
          payTimeAtBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
                  getPayTimeAt(),
                  getParentForChildren(),
                  isClean());
          payTimeAt_ = null;
        }
        return payTimeAtBuilder_;
      }

      private com.google.protobuf.Timestamp abandonTimeAt_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> abandonTimeAtBuilder_;
      /**
       * <pre>
       * Время фактической отмены оплаты.
       * Время фактической отмены оплаты на стороне Процессинга.
       * Возвращается, если отмена оплаты состоялась
       * </pre>
       *
       * <code>.google.protobuf.Timestamp abandon_time_at = 12 [json_name = "abandonTime"];</code>
       * @return Whether the abandonTimeAt field is set.
       */
      public boolean hasAbandonTimeAt() {
        return ((bitField0_ & 0x00000800) != 0);
      }
      /**
       * <pre>
       * Время фактической отмены оплаты.
       * Время фактической отмены оплаты на стороне Процессинга.
       * Возвращается, если отмена оплаты состоялась
       * </pre>
       *
       * <code>.google.protobuf.Timestamp abandon_time_at = 12 [json_name = "abandonTime"];</code>
       * @return The abandonTimeAt.
       */
      public com.google.protobuf.Timestamp getAbandonTimeAt() {
        if (abandonTimeAtBuilder_ == null) {
          return abandonTimeAt_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : abandonTimeAt_;
        } else {
          return abandonTimeAtBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Время фактической отмены оплаты.
       * Время фактической отмены оплаты на стороне Процессинга.
       * Возвращается, если отмена оплаты состоялась
       * </pre>
       *
       * <code>.google.protobuf.Timestamp abandon_time_at = 12 [json_name = "abandonTime"];</code>
       */
      public Builder setAbandonTimeAt(com.google.protobuf.Timestamp value) {
        if (abandonTimeAtBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          abandonTimeAt_ = value;
        } else {
          abandonTimeAtBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000800;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Время фактической отмены оплаты.
       * Время фактической отмены оплаты на стороне Процессинга.
       * Возвращается, если отмена оплаты состоялась
       * </pre>
       *
       * <code>.google.protobuf.Timestamp abandon_time_at = 12 [json_name = "abandonTime"];</code>
       */
      public Builder setAbandonTimeAt(
          com.google.protobuf.Timestamp.Builder builderForValue) {
        if (abandonTimeAtBuilder_ == null) {
          abandonTimeAt_ = builderForValue.build();
        } else {
          abandonTimeAtBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000800;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Время фактической отмены оплаты.
       * Время фактической отмены оплаты на стороне Процессинга.
       * Возвращается, если отмена оплаты состоялась
       * </pre>
       *
       * <code>.google.protobuf.Timestamp abandon_time_at = 12 [json_name = "abandonTime"];</code>
       */
      public Builder mergeAbandonTimeAt(com.google.protobuf.Timestamp value) {
        if (abandonTimeAtBuilder_ == null) {
          if (((bitField0_ & 0x00000800) != 0) &&
            abandonTimeAt_ != null &&
            abandonTimeAt_ != com.google.protobuf.Timestamp.getDefaultInstance()) {
            getAbandonTimeAtBuilder().mergeFrom(value);
          } else {
            abandonTimeAt_ = value;
          }
        } else {
          abandonTimeAtBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000800;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Время фактической отмены оплаты.
       * Время фактической отмены оплаты на стороне Процессинга.
       * Возвращается, если отмена оплаты состоялась
       * </pre>
       *
       * <code>.google.protobuf.Timestamp abandon_time_at = 12 [json_name = "abandonTime"];</code>
       */
      public Builder clearAbandonTimeAt() {
        bitField0_ = (bitField0_ & ~0x00000800);
        abandonTimeAt_ = null;
        if (abandonTimeAtBuilder_ != null) {
          abandonTimeAtBuilder_.dispose();
          abandonTimeAtBuilder_ = null;
        }
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Время фактической отмены оплаты.
       * Время фактической отмены оплаты на стороне Процессинга.
       * Возвращается, если отмена оплаты состоялась
       * </pre>
       *
       * <code>.google.protobuf.Timestamp abandon_time_at = 12 [json_name = "abandonTime"];</code>
       */
      public com.google.protobuf.Timestamp.Builder getAbandonTimeAtBuilder() {
        bitField0_ |= 0x00000800;
        onChanged();
        return getAbandonTimeAtFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Время фактической отмены оплаты.
       * Время фактической отмены оплаты на стороне Процессинга.
       * Возвращается, если отмена оплаты состоялась
       * </pre>
       *
       * <code>.google.protobuf.Timestamp abandon_time_at = 12 [json_name = "abandonTime"];</code>
       */
      public com.google.protobuf.TimestampOrBuilder getAbandonTimeAtOrBuilder() {
        if (abandonTimeAtBuilder_ != null) {
          return abandonTimeAtBuilder_.getMessageOrBuilder();
        } else {
          return abandonTimeAt_ == null ?
              com.google.protobuf.Timestamp.getDefaultInstance() : abandonTimeAt_;
        }
      }
      /**
       * <pre>
       * Время фактической отмены оплаты.
       * Время фактической отмены оплаты на стороне Процессинга.
       * Возвращается, если отмена оплаты состоялась
       * </pre>
       *
       * <code>.google.protobuf.Timestamp abandon_time_at = 12 [json_name = "abandonTime"];</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> 
          getAbandonTimeAtFieldBuilder() {
        if (abandonTimeAtBuilder_ == null) {
          abandonTimeAtBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Timestamp, com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder>(
                  getAbandonTimeAt(),
                  getParentForChildren(),
                  isClean());
          abandonTimeAt_ = null;
        }
        return abandonTimeAtBuilder_;
      }

      private ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card card_;
      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.CardOrBuilder> cardBuilder_;
      /**
       * <pre>
       * Структура с информацией о карте плательщика.
       * Передаётся только при успешном платеже и если указаны способы оплаты payMethod = StoredBankCard либо BankCard
       * </pre>
       *
       * <code>.keyapis.invoice.v1.PostInvoiceConfirmRequest.Card card = 13;</code>
       * @return Whether the card field is set.
       */
      public boolean hasCard() {
        return ((bitField0_ & 0x00001000) != 0);
      }
      /**
       * <pre>
       * Структура с информацией о карте плательщика.
       * Передаётся только при успешном платеже и если указаны способы оплаты payMethod = StoredBankCard либо BankCard
       * </pre>
       *
       * <code>.keyapis.invoice.v1.PostInvoiceConfirmRequest.Card card = 13;</code>
       * @return The card.
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card getCard() {
        if (cardBuilder_ == null) {
          return card_ == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card.getDefaultInstance() : card_;
        } else {
          return cardBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Структура с информацией о карте плательщика.
       * Передаётся только при успешном платеже и если указаны способы оплаты payMethod = StoredBankCard либо BankCard
       * </pre>
       *
       * <code>.keyapis.invoice.v1.PostInvoiceConfirmRequest.Card card = 13;</code>
       */
      public Builder setCard(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card value) {
        if (cardBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          card_ = value;
        } else {
          cardBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00001000;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Структура с информацией о карте плательщика.
       * Передаётся только при успешном платеже и если указаны способы оплаты payMethod = StoredBankCard либо BankCard
       * </pre>
       *
       * <code>.keyapis.invoice.v1.PostInvoiceConfirmRequest.Card card = 13;</code>
       */
      public Builder setCard(
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card.Builder builderForValue) {
        if (cardBuilder_ == null) {
          card_ = builderForValue.build();
        } else {
          cardBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00001000;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Структура с информацией о карте плательщика.
       * Передаётся только при успешном платеже и если указаны способы оплаты payMethod = StoredBankCard либо BankCard
       * </pre>
       *
       * <code>.keyapis.invoice.v1.PostInvoiceConfirmRequest.Card card = 13;</code>
       */
      public Builder mergeCard(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card value) {
        if (cardBuilder_ == null) {
          if (((bitField0_ & 0x00001000) != 0) &&
            card_ != null &&
            card_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card.getDefaultInstance()) {
            getCardBuilder().mergeFrom(value);
          } else {
            card_ = value;
          }
        } else {
          cardBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00001000;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Структура с информацией о карте плательщика.
       * Передаётся только при успешном платеже и если указаны способы оплаты payMethod = StoredBankCard либо BankCard
       * </pre>
       *
       * <code>.keyapis.invoice.v1.PostInvoiceConfirmRequest.Card card = 13;</code>
       */
      public Builder clearCard() {
        bitField0_ = (bitField0_ & ~0x00001000);
        card_ = null;
        if (cardBuilder_ != null) {
          cardBuilder_.dispose();
          cardBuilder_ = null;
        }
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Структура с информацией о карте плательщика.
       * Передаётся только при успешном платеже и если указаны способы оплаты payMethod = StoredBankCard либо BankCard
       * </pre>
       *
       * <code>.keyapis.invoice.v1.PostInvoiceConfirmRequest.Card card = 13;</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card.Builder getCardBuilder() {
        bitField0_ |= 0x00001000;
        onChanged();
        return getCardFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Структура с информацией о карте плательщика.
       * Передаётся только при успешном платеже и если указаны способы оплаты payMethod = StoredBankCard либо BankCard
       * </pre>
       *
       * <code>.keyapis.invoice.v1.PostInvoiceConfirmRequest.Card card = 13;</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.CardOrBuilder getCardOrBuilder() {
        if (cardBuilder_ != null) {
          return cardBuilder_.getMessageOrBuilder();
        } else {
          return card_ == null ?
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card.getDefaultInstance() : card_;
        }
      }
      /**
       * <pre>
       * Структура с информацией о карте плательщика.
       * Передаётся только при успешном платеже и если указаны способы оплаты payMethod = StoredBankCard либо BankCard
       * </pre>
       *
       * <code>.keyapis.invoice.v1.PostInvoiceConfirmRequest.Card card = 13;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.CardOrBuilder> 
          getCardFieldBuilder() {
        if (cardBuilder_ == null) {
          cardBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.Card.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest.CardOrBuilder>(
                  getCard(),
                  getParentForChildren(),
                  isClean());
          card_ = null;
        }
        return cardBuilder_;
      }
      @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:keyapis.invoice.v1.PostInvoiceConfirmRequest)
    }

    // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.PostInvoiceConfirmRequest)
    private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest();
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<PostInvoiceConfirmRequest>
        PARSER = new com.google.protobuf.AbstractParser<PostInvoiceConfirmRequest>() {
      @java.lang.Override
      public PostInvoiceConfirmRequest 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 (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface PostInvoiceConfirmResponseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.PostInvoiceConfirmResponse)
      com.google.protobuf.MessageOrBuilder {
  }
  /**
   * <pre>
   * Ответ на запрос подтверждения платежа
   * </pre>
   *
   * Protobuf type {@code keyapis.invoice.v1.PostInvoiceConfirmResponse}
   */
  public static final class PostInvoiceConfirmResponse extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.PostInvoiceConfirmResponse)
      PostInvoiceConfirmResponseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use PostInvoiceConfirmResponse.newBuilder() to construct.
    private PostInvoiceConfirmResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private PostInvoiceConfirmResponse() {
    }

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

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_PostInvoiceConfirmResponse_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_PostInvoiceConfirmResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse.Builder.class);
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse)) {
        return super.equals(obj);
      }
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse) obj;

      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse 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;
    }
    /**
     * <pre>
     * Ответ на запрос подтверждения платежа
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.PostInvoiceConfirmResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.PostInvoiceConfirmResponse)
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_PostInvoiceConfirmResponse_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_PostInvoiceConfirmResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse.Builder.class);
      }

      // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_PostInvoiceConfirmResponse_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse getDefaultInstanceForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse build() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse buildPartial() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse(this);
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse) {
          return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse other) {
        if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse.getDefaultInstance()) return this;
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        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:keyapis.invoice.v1.PostInvoiceConfirmResponse)
    }

    // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.PostInvoiceConfirmResponse)
    private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse();
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<PostInvoiceConfirmResponse>
        PARSER = new com.google.protobuf.AbstractParser<PostInvoiceConfirmResponse>() {
      @java.lang.Override
      public PostInvoiceConfirmResponse 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 (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.PostInvoiceConfirmResponse getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface GetInvoiceListRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.GetInvoiceListRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Фильтр
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1;</code>
     * @return Whether the filter field is set.
     */
    boolean hasFilter();
    /**
     * <pre>
     * Фильтр
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1;</code>
     * @return The filter.
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter getFilter();
    /**
     * <pre>
     * Фильтр
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1;</code>
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilterOrBuilder getFilterOrBuilder();

    /**
     * <pre>
     * Пагинация
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoicePaging paging = 2;</code>
     * @return Whether the paging field is set.
     */
    boolean hasPaging();
    /**
     * <pre>
     * Пагинация
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoicePaging paging = 2;</code>
     * @return The paging.
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging getPaging();
    /**
     * <pre>
     * Пагинация
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoicePaging paging = 2;</code>
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePagingOrBuilder getPagingOrBuilder();

    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest.PaginationCase getPaginationCase();
  }
  /**
   * <pre>
   * Запрос на получение списка платежей
   * </pre>
   *
   * Protobuf type {@code keyapis.invoice.v1.GetInvoiceListRequest}
   */
  public static final class GetInvoiceListRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.GetInvoiceListRequest)
      GetInvoiceListRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GetInvoiceListRequest.newBuilder() to construct.
    private GetInvoiceListRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private GetInvoiceListRequest() {
    }

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

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceListRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceListRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest.Builder.class);
    }

    private int paginationCase_ = 0;
    @SuppressWarnings("serial")
    private java.lang.Object pagination_;
    public enum PaginationCase
        implements com.google.protobuf.Internal.EnumLite,
            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
      PAGING(2),
      PAGINATION_NOT_SET(0);
      private final int value;
      private PaginationCase(int value) {
        this.value = value;
      }
      /**
       * @param value The number of the enum to look for.
       * @return The enum associated with the given number.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static PaginationCase valueOf(int value) {
        return forNumber(value);
      }

      public static PaginationCase forNumber(int value) {
        switch (value) {
          case 2: return PAGING;
          case 0: return PAGINATION_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public PaginationCase
    getPaginationCase() {
      return PaginationCase.forNumber(
          paginationCase_);
    }

    public static final int FILTER_FIELD_NUMBER = 1;
    private ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter filter_;
    /**
     * <pre>
     * Фильтр
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1;</code>
     * @return Whether the filter field is set.
     */
    @java.lang.Override
    public boolean hasFilter() {
      return filter_ != null;
    }
    /**
     * <pre>
     * Фильтр
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1;</code>
     * @return The filter.
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter getFilter() {
      return filter_ == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.getDefaultInstance() : filter_;
    }
    /**
     * <pre>
     * Фильтр
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1;</code>
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilterOrBuilder getFilterOrBuilder() {
      return filter_ == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.getDefaultInstance() : filter_;
    }

    public static final int PAGING_FIELD_NUMBER = 2;
    /**
     * <pre>
     * Пагинация
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoicePaging paging = 2;</code>
     * @return Whether the paging field is set.
     */
    @java.lang.Override
    public boolean hasPaging() {
      return paginationCase_ == 2;
    }
    /**
     * <pre>
     * Пагинация
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoicePaging paging = 2;</code>
     * @return The paging.
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging getPaging() {
      if (paginationCase_ == 2) {
         return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging) pagination_;
      }
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.getDefaultInstance();
    }
    /**
     * <pre>
     * Пагинация
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoicePaging paging = 2;</code>
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePagingOrBuilder getPagingOrBuilder() {
      if (paginationCase_ == 2) {
         return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging) pagination_;
      }
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.getDefaultInstance();
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (filter_ != null) {
        output.writeMessage(1, getFilter());
      }
      if (paginationCase_ == 2) {
        output.writeMessage(2, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging) pagination_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (filter_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getFilter());
      }
      if (paginationCase_ == 2) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging) pagination_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest)) {
        return super.equals(obj);
      }
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest) obj;

      if (hasFilter() != other.hasFilter()) return false;
      if (hasFilter()) {
        if (!getFilter()
            .equals(other.getFilter())) return false;
      }
      if (!getPaginationCase().equals(other.getPaginationCase())) return false;
      switch (paginationCase_) {
        case 2:
          if (!getPaging()
              .equals(other.getPaging())) return false;
          break;
        case 0:
        default:
      }
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasFilter()) {
        hash = (37 * hash) + FILTER_FIELD_NUMBER;
        hash = (53 * hash) + getFilter().hashCode();
      }
      switch (paginationCase_) {
        case 2:
          hash = (37 * hash) + PAGING_FIELD_NUMBER;
          hash = (53 * hash) + getPaging().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest 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;
    }
    /**
     * <pre>
     * Запрос на получение списка платежей
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.GetInvoiceListRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.GetInvoiceListRequest)
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceListRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceListRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest.Builder.class);
      }

      // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        filter_ = null;
        if (filterBuilder_ != null) {
          filterBuilder_.dispose();
          filterBuilder_ = null;
        }
        if (pagingBuilder_ != null) {
          pagingBuilder_.clear();
        }
        paginationCase_ = 0;
        pagination_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceListRequest_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest getDefaultInstanceForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest build() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest buildPartial() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest(this);
        if (bitField0_ != 0) { buildPartial0(result); }
        buildPartialOneofs(result);
        onBuilt();
        return result;
      }

      private void buildPartial0(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.filter_ = filterBuilder_ == null
              ? filter_
              : filterBuilder_.build();
        }
      }

      private void buildPartialOneofs(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest result) {
        result.paginationCase_ = paginationCase_;
        result.pagination_ = this.pagination_;
        if (paginationCase_ == 2 &&
            pagingBuilder_ != null) {
          result.pagination_ = pagingBuilder_.build();
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest) {
          return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest other) {
        if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest.getDefaultInstance()) return this;
        if (other.hasFilter()) {
          mergeFilter(other.getFilter());
        }
        switch (other.getPaginationCase()) {
          case PAGING: {
            mergePaging(other.getPaging());
            break;
          }
          case PAGINATION_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                input.readMessage(
                    getFilterFieldBuilder().getBuilder(),
                    extensionRegistry);
                bitField0_ |= 0x00000001;
                break;
              } // case 10
              case 18: {
                input.readMessage(
                    getPagingFieldBuilder().getBuilder(),
                    extensionRegistry);
                paginationCase_ = 2;
                break;
              } // case 18
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int paginationCase_ = 0;
      private java.lang.Object pagination_;
      public PaginationCase
          getPaginationCase() {
        return PaginationCase.forNumber(
            paginationCase_);
      }

      public Builder clearPagination() {
        paginationCase_ = 0;
        pagination_ = null;
        onChanged();
        return this;
      }

      private int bitField0_;

      private ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter filter_;
      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilterOrBuilder> filterBuilder_;
      /**
       * <pre>
       * Фильтр
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1;</code>
       * @return Whether the filter field is set.
       */
      public boolean hasFilter() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <pre>
       * Фильтр
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1;</code>
       * @return The filter.
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter getFilter() {
        if (filterBuilder_ == null) {
          return filter_ == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.getDefaultInstance() : filter_;
        } else {
          return filterBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Фильтр
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1;</code>
       */
      public Builder setFilter(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter value) {
        if (filterBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          filter_ = value;
        } else {
          filterBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Фильтр
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1;</code>
       */
      public Builder setFilter(
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.Builder builderForValue) {
        if (filterBuilder_ == null) {
          filter_ = builderForValue.build();
        } else {
          filterBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Фильтр
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1;</code>
       */
      public Builder mergeFilter(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter value) {
        if (filterBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0) &&
            filter_ != null &&
            filter_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.getDefaultInstance()) {
            getFilterBuilder().mergeFrom(value);
          } else {
            filter_ = value;
          }
        } else {
          filterBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Фильтр
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1;</code>
       */
      public Builder clearFilter() {
        bitField0_ = (bitField0_ & ~0x00000001);
        filter_ = null;
        if (filterBuilder_ != null) {
          filterBuilder_.dispose();
          filterBuilder_ = null;
        }
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Фильтр
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1;</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.Builder getFilterBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getFilterFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Фильтр
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1;</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilterOrBuilder getFilterOrBuilder() {
        if (filterBuilder_ != null) {
          return filterBuilder_.getMessageOrBuilder();
        } else {
          return filter_ == null ?
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.getDefaultInstance() : filter_;
        }
      }
      /**
       * <pre>
       * Фильтр
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilterOrBuilder> 
          getFilterFieldBuilder() {
        if (filterBuilder_ == null) {
          filterBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilterOrBuilder>(
                  getFilter(),
                  getParentForChildren(),
                  isClean());
          filter_ = null;
        }
        return filterBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePagingOrBuilder> pagingBuilder_;
      /**
       * <pre>
       * Пагинация
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoicePaging paging = 2;</code>
       * @return Whether the paging field is set.
       */
      @java.lang.Override
      public boolean hasPaging() {
        return paginationCase_ == 2;
      }
      /**
       * <pre>
       * Пагинация
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoicePaging paging = 2;</code>
       * @return The paging.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging getPaging() {
        if (pagingBuilder_ == null) {
          if (paginationCase_ == 2) {
            return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging) pagination_;
          }
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.getDefaultInstance();
        } else {
          if (paginationCase_ == 2) {
            return pagingBuilder_.getMessage();
          }
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Пагинация
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoicePaging paging = 2;</code>
       */
      public Builder setPaging(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging value) {
        if (pagingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          pagination_ = value;
          onChanged();
        } else {
          pagingBuilder_.setMessage(value);
        }
        paginationCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * Пагинация
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoicePaging paging = 2;</code>
       */
      public Builder setPaging(
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.Builder builderForValue) {
        if (pagingBuilder_ == null) {
          pagination_ = builderForValue.build();
          onChanged();
        } else {
          pagingBuilder_.setMessage(builderForValue.build());
        }
        paginationCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * Пагинация
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoicePaging paging = 2;</code>
       */
      public Builder mergePaging(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging value) {
        if (pagingBuilder_ == null) {
          if (paginationCase_ == 2 &&
              pagination_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.getDefaultInstance()) {
            pagination_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.newBuilder((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging) pagination_)
                .mergeFrom(value).buildPartial();
          } else {
            pagination_ = value;
          }
          onChanged();
        } else {
          if (paginationCase_ == 2) {
            pagingBuilder_.mergeFrom(value);
          } else {
            pagingBuilder_.setMessage(value);
          }
        }
        paginationCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * Пагинация
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoicePaging paging = 2;</code>
       */
      public Builder clearPaging() {
        if (pagingBuilder_ == null) {
          if (paginationCase_ == 2) {
            paginationCase_ = 0;
            pagination_ = null;
            onChanged();
          }
        } else {
          if (paginationCase_ == 2) {
            paginationCase_ = 0;
            pagination_ = null;
          }
          pagingBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Пагинация
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoicePaging paging = 2;</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.Builder getPagingBuilder() {
        return getPagingFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Пагинация
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoicePaging paging = 2;</code>
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePagingOrBuilder getPagingOrBuilder() {
        if ((paginationCase_ == 2) && (pagingBuilder_ != null)) {
          return pagingBuilder_.getMessageOrBuilder();
        } else {
          if (paginationCase_ == 2) {
            return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging) pagination_;
          }
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Пагинация
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoicePaging paging = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePagingOrBuilder> 
          getPagingFieldBuilder() {
        if (pagingBuilder_ == null) {
          if (!(paginationCase_ == 2)) {
            pagination_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.getDefaultInstance();
          }
          pagingBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePagingOrBuilder>(
                  (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoicePaging) pagination_,
                  getParentForChildren(),
                  isClean());
          pagination_ = null;
        }
        paginationCase_ = 2;
        onChanged();
        return pagingBuilder_;
      }
      @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:keyapis.invoice.v1.GetInvoiceListRequest)
    }

    // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.GetInvoiceListRequest)
    private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest();
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<GetInvoiceListRequest>
        PARSER = new com.google.protobuf.AbstractParser<GetInvoiceListRequest>() {
      @java.lang.Override
      public GetInvoiceListRequest 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 (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface GetInvoiceListResponseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.GetInvoiceListResponse)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Платежи
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
     */
    java.util.List<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice> 
        getDataList();
    /**
     * <pre>
     * Платежи
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice getData(int index);
    /**
     * <pre>
     * Платежи
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
     */
    int getDataCount();
    /**
     * <pre>
     * Платежи
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
     */
    java.util.List<? extends ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder> 
        getDataOrBuilderList();
    /**
     * <pre>
     * Платежи
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder getDataOrBuilder(
        int index);

    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.invoice.v1.GetInvoiceListResponse.Error error = 2;</code>
     * @return Whether the error field is set.
     */
    boolean hasError();
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.invoice.v1.GetInvoiceListResponse.Error error = 2;</code>
     * @return The error.
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error getError();
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.invoice.v1.GetInvoiceListResponse.Error error = 2;</code>
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.ErrorOrBuilder getErrorOrBuilder();
  }
  /**
   * <pre>
   * Ответ на запрос получения списка платежей
   * </pre>
   *
   * Protobuf type {@code keyapis.invoice.v1.GetInvoiceListResponse}
   */
  public static final class GetInvoiceListResponse extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.GetInvoiceListResponse)
      GetInvoiceListResponseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GetInvoiceListResponse.newBuilder() to construct.
    private GetInvoiceListResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private GetInvoiceListResponse() {
      data_ = java.util.Collections.emptyList();
    }

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

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceListResponse_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceListResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Builder.class);
    }

    public interface ErrorOrBuilder extends
        // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.GetInvoiceListResponse.Error)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
       * @return Whether the validation field is set.
       */
      boolean hasValidation();
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
       * @return The validation.
       */
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError getValidation();
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
       */
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationErrorOrBuilder getValidationOrBuilder();

      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error.ReasonCase getReasonCase();
    }
    /**
     * <pre>
     * Ошибка запроса на получение списка платежей
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.GetInvoiceListResponse.Error}
     */
    public static final class Error extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.GetInvoiceListResponse.Error)
        ErrorOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use Error.newBuilder() to construct.
      private Error(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private Error() {
      }

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

      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceListResponse_Error_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceListResponse_Error_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error.Builder.class);
      }

      private int reasonCase_ = 0;
      @SuppressWarnings("serial")
      private java.lang.Object reason_;
      public enum ReasonCase
          implements com.google.protobuf.Internal.EnumLite,
              com.google.protobuf.AbstractMessage.InternalOneOfEnum {
        VALIDATION(1),
        REASON_NOT_SET(0);
        private final int value;
        private ReasonCase(int value) {
          this.value = value;
        }
        /**
         * @param value The number of the enum to look for.
         * @return The enum associated with the given number.
         * @deprecated Use {@link #forNumber(int)} instead.
         */
        @java.lang.Deprecated
        public static ReasonCase valueOf(int value) {
          return forNumber(value);
        }

        public static ReasonCase forNumber(int value) {
          switch (value) {
            case 1: return VALIDATION;
            case 0: return REASON_NOT_SET;
            default: return null;
          }
        }
        public int getNumber() {
          return this.value;
        }
      };

      public ReasonCase
      getReasonCase() {
        return ReasonCase.forNumber(
            reasonCase_);
      }

      public static final int VALIDATION_FIELD_NUMBER = 1;
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
       * @return Whether the validation field is set.
       */
      @java.lang.Override
      public boolean hasValidation() {
        return reasonCase_ == 1;
      }
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
       * @return The validation.
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError getValidation() {
        if (reasonCase_ == 1) {
           return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_;
        }
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance();
      }
      /**
       * <pre>
       * Ошибка валидации
       * </pre>
       *
       * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
       */
      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationErrorOrBuilder getValidationOrBuilder() {
        if (reasonCase_ == 1) {
           return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_;
        }
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance();
      }

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

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (reasonCase_ == 1) {
          output.writeMessage(1, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_);
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (reasonCase_ == 1) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error)) {
          return super.equals(obj);
        }
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error) obj;

        if (!getReasonCase().equals(other.getReasonCase())) return false;
        switch (reasonCase_) {
          case 1:
            if (!getValidation()
                .equals(other.getValidation())) return false;
            break;
          case 0:
          default:
        }
        if (!getUnknownFields().equals(other.getUnknownFields())) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        switch (reasonCase_) {
          case 1:
            hash = (37 * hash) + VALIDATION_FIELD_NUMBER;
            hash = (53 * hash) + getValidation().hashCode();
            break;
          case 0:
          default:
        }
        hash = (29 * hash) + getUnknownFields().hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error 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;
      }
      /**
       * <pre>
       * Ошибка запроса на получение списка платежей
       * </pre>
       *
       * Protobuf type {@code keyapis.invoice.v1.GetInvoiceListResponse.Error}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.GetInvoiceListResponse.Error)
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.ErrorOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceListResponse_Error_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceListResponse_Error_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error.Builder.class);
        }

        // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error.newBuilder()
        private Builder() {

        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);

        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          bitField0_ = 0;
          if (validationBuilder_ != null) {
            validationBuilder_.clear();
          }
          reasonCase_ = 0;
          reason_ = null;
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceListResponse_Error_descriptor;
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error getDefaultInstanceForType() {
          return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error.getDefaultInstance();
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error build() {
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error buildPartial() {
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error(this);
          if (bitField0_ != 0) { buildPartial0(result); }
          buildPartialOneofs(result);
          onBuilt();
          return result;
        }

        private void buildPartial0(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error result) {
          int from_bitField0_ = bitField0_;
        }

        private void buildPartialOneofs(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error result) {
          result.reasonCase_ = reasonCase_;
          result.reason_ = this.reason_;
          if (reasonCase_ == 1 &&
              validationBuilder_ != null) {
            result.reason_ = validationBuilder_.build();
          }
        }

        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error) {
            return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error other) {
          if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error.getDefaultInstance()) return this;
          switch (other.getReasonCase()) {
            case VALIDATION: {
              mergeValidation(other.getValidation());
              break;
            }
            case REASON_NOT_SET: {
              break;
            }
          }
          this.mergeUnknownFields(other.getUnknownFields());
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          if (extensionRegistry == null) {
            throw new java.lang.NullPointerException();
          }
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                case 10: {
                  input.readMessage(
                      getValidationFieldBuilder().getBuilder(),
                      extensionRegistry);
                  reasonCase_ = 1;
                  break;
                } // case 10
                default: {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
              } // switch (tag)
            } // while (!done)
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.unwrapIOException();
          } finally {
            onChanged();
          } // finally
          return this;
        }
        private int reasonCase_ = 0;
        private java.lang.Object reason_;
        public ReasonCase
            getReasonCase() {
          return ReasonCase.forNumber(
              reasonCase_);
        }

        public Builder clearReason() {
          reasonCase_ = 0;
          reason_ = null;
          onChanged();
          return this;
        }

        private int bitField0_;

        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationErrorOrBuilder> validationBuilder_;
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         * @return Whether the validation field is set.
         */
        @java.lang.Override
        public boolean hasValidation() {
          return reasonCase_ == 1;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         * @return The validation.
         */
        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError getValidation() {
          if (validationBuilder_ == null) {
            if (reasonCase_ == 1) {
              return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_;
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance();
          } else {
            if (reasonCase_ == 1) {
              return validationBuilder_.getMessage();
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        public Builder setValidation(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError value) {
          if (validationBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            reason_ = value;
            onChanged();
          } else {
            validationBuilder_.setMessage(value);
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        public Builder setValidation(
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.Builder builderForValue) {
          if (validationBuilder_ == null) {
            reason_ = builderForValue.build();
            onChanged();
          } else {
            validationBuilder_.setMessage(builderForValue.build());
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        public Builder mergeValidation(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError value) {
          if (validationBuilder_ == null) {
            if (reasonCase_ == 1 &&
                reason_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance()) {
              reason_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.newBuilder((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_)
                  .mergeFrom(value).buildPartial();
            } else {
              reason_ = value;
            }
            onChanged();
          } else {
            if (reasonCase_ == 1) {
              validationBuilder_.mergeFrom(value);
            } else {
              validationBuilder_.setMessage(value);
            }
          }
          reasonCase_ = 1;
          return this;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        public Builder clearValidation() {
          if (validationBuilder_ == null) {
            if (reasonCase_ == 1) {
              reasonCase_ = 0;
              reason_ = null;
              onChanged();
            }
          } else {
            if (reasonCase_ == 1) {
              reasonCase_ = 0;
              reason_ = null;
            }
            validationBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.Builder getValidationBuilder() {
          return getValidationFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        @java.lang.Override
        public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationErrorOrBuilder getValidationOrBuilder() {
          if ((reasonCase_ == 1) && (validationBuilder_ != null)) {
            return validationBuilder_.getMessageOrBuilder();
          } else {
            if (reasonCase_ == 1) {
              return (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_;
            }
            return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance();
          }
        }
        /**
         * <pre>
         * Ошибка валидации
         * </pre>
         *
         * <code>.keyapis.invoice.v1.ValidationError validation = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationErrorOrBuilder> 
            getValidationFieldBuilder() {
          if (validationBuilder_ == null) {
            if (!(reasonCase_ == 1)) {
              reason_ = ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.getDefaultInstance();
            }
            validationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationErrorOrBuilder>(
                    (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.ValidationError) reason_,
                    getParentForChildren(),
                    isClean());
            reason_ = null;
          }
          reasonCase_ = 1;
          onChanged();
          return validationBuilder_;
        }
        @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:keyapis.invoice.v1.GetInvoiceListResponse.Error)
      }

      // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.GetInvoiceListResponse.Error)
      private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error();
      }

      public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<Error>
          PARSER = new com.google.protobuf.AbstractParser<Error>() {
        @java.lang.Override
        public Error 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 (com.google.protobuf.UninitializedMessageException e) {
            throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(e)
                .setUnfinishedMessage(builder.buildPartial());
          }
          return builder.buildPartial();
        }
      };

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

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

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public static final int DATA_FIELD_NUMBER = 1;
    @SuppressWarnings("serial")
    private java.util.List<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice> data_;
    /**
     * <pre>
     * Платежи
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
     */
    @java.lang.Override
    public java.util.List<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice> getDataList() {
      return data_;
    }
    /**
     * <pre>
     * Платежи
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
     */
    @java.lang.Override
    public java.util.List<? extends ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder> 
        getDataOrBuilderList() {
      return data_;
    }
    /**
     * <pre>
     * Платежи
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
     */
    @java.lang.Override
    public int getDataCount() {
      return data_.size();
    }
    /**
     * <pre>
     * Платежи
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice getData(int index) {
      return data_.get(index);
    }
    /**
     * <pre>
     * Платежи
     * </pre>
     *
     * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder getDataOrBuilder(
        int index) {
      return data_.get(index);
    }

    public static final int ERROR_FIELD_NUMBER = 2;
    private ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error error_;
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.invoice.v1.GetInvoiceListResponse.Error error = 2;</code>
     * @return Whether the error field is set.
     */
    @java.lang.Override
    public boolean hasError() {
      return error_ != null;
    }
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.invoice.v1.GetInvoiceListResponse.Error error = 2;</code>
     * @return The error.
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error getError() {
      return error_ == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error.getDefaultInstance() : error_;
    }
    /**
     * <pre>
     * Ошибка
     * </pre>
     *
     * <code>.keyapis.invoice.v1.GetInvoiceListResponse.Error error = 2;</code>
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.ErrorOrBuilder getErrorOrBuilder() {
      return error_ == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error.getDefaultInstance() : error_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      for (int i = 0; i < data_.size(); i++) {
        output.writeMessage(1, data_.get(i));
      }
      if (error_ != null) {
        output.writeMessage(2, getError());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < data_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, data_.get(i));
      }
      if (error_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getError());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse)) {
        return super.equals(obj);
      }
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse) obj;

      if (!getDataList()
          .equals(other.getDataList())) return false;
      if (hasError() != other.hasError()) return false;
      if (hasError()) {
        if (!getError()
            .equals(other.getError())) return false;
      }
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getDataCount() > 0) {
        hash = (37 * hash) + DATA_FIELD_NUMBER;
        hash = (53 * hash) + getDataList().hashCode();
      }
      if (hasError()) {
        hash = (37 * hash) + ERROR_FIELD_NUMBER;
        hash = (53 * hash) + getError().hashCode();
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse 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;
    }
    /**
     * <pre>
     * Ответ на запрос получения списка платежей
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.GetInvoiceListResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.GetInvoiceListResponse)
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceListResponse_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceListResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Builder.class);
      }

      // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        if (dataBuilder_ == null) {
          data_ = java.util.Collections.emptyList();
        } else {
          data_ = null;
          dataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        error_ = null;
        if (errorBuilder_ != null) {
          errorBuilder_.dispose();
          errorBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceListResponse_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse getDefaultInstanceForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse build() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse buildPartial() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse(this);
        buildPartialRepeatedFields(result);
        if (bitField0_ != 0) { buildPartial0(result); }
        onBuilt();
        return result;
      }

      private void buildPartialRepeatedFields(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse result) {
        if (dataBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            data_ = java.util.Collections.unmodifiableList(data_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.data_ = data_;
        } else {
          result.data_ = dataBuilder_.build();
        }
      }

      private void buildPartial0(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.error_ = errorBuilder_ == null
              ? error_
              : errorBuilder_.build();
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse) {
          return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse other) {
        if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.getDefaultInstance()) return this;
        if (dataBuilder_ == null) {
          if (!other.data_.isEmpty()) {
            if (data_.isEmpty()) {
              data_ = other.data_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureDataIsMutable();
              data_.addAll(other.data_);
            }
            onChanged();
          }
        } else {
          if (!other.data_.isEmpty()) {
            if (dataBuilder_.isEmpty()) {
              dataBuilder_.dispose();
              dataBuilder_ = null;
              data_ = other.data_;
              bitField0_ = (bitField0_ & ~0x00000001);
              dataBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getDataFieldBuilder() : null;
            } else {
              dataBuilder_.addAllMessages(other.data_);
            }
          }
        }
        if (other.hasError()) {
          mergeError(other.getError());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice m =
                    input.readMessage(
                        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.parser(),
                        extensionRegistry);
                if (dataBuilder_ == null) {
                  ensureDataIsMutable();
                  data_.add(m);
                } else {
                  dataBuilder_.addMessage(m);
                }
                break;
              } // case 10
              case 18: {
                input.readMessage(
                    getErrorFieldBuilder().getBuilder(),
                    extensionRegistry);
                bitField0_ |= 0x00000002;
                break;
              } // case 18
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private java.util.List<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice> data_ =
        java.util.Collections.emptyList();
      private void ensureDataIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          data_ = new java.util.ArrayList<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice>(data_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder> dataBuilder_;

      /**
       * <pre>
       * Платежи
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
       */
      public java.util.List<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice> getDataList() {
        if (dataBuilder_ == null) {
          return java.util.Collections.unmodifiableList(data_);
        } else {
          return dataBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Платежи
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
       */
      public int getDataCount() {
        if (dataBuilder_ == null) {
          return data_.size();
        } else {
          return dataBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Платежи
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice getData(int index) {
        if (dataBuilder_ == null) {
          return data_.get(index);
        } else {
          return dataBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Платежи
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
       */
      public Builder setData(
          int index, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice value) {
        if (dataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDataIsMutable();
          data_.set(index, value);
          onChanged();
        } else {
          dataBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Платежи
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
       */
      public Builder setData(
          int index, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder builderForValue) {
        if (dataBuilder_ == null) {
          ensureDataIsMutable();
          data_.set(index, builderForValue.build());
          onChanged();
        } else {
          dataBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Платежи
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
       */
      public Builder addData(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice value) {
        if (dataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDataIsMutable();
          data_.add(value);
          onChanged();
        } else {
          dataBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Платежи
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
       */
      public Builder addData(
          int index, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice value) {
        if (dataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDataIsMutable();
          data_.add(index, value);
          onChanged();
        } else {
          dataBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Платежи
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
       */
      public Builder addData(
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder builderForValue) {
        if (dataBuilder_ == null) {
          ensureDataIsMutable();
          data_.add(builderForValue.build());
          onChanged();
        } else {
          dataBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Платежи
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
       */
      public Builder addData(
          int index, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder builderForValue) {
        if (dataBuilder_ == null) {
          ensureDataIsMutable();
          data_.add(index, builderForValue.build());
          onChanged();
        } else {
          dataBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Платежи
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
       */
      public Builder addAllData(
          java.lang.Iterable<? extends ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice> values) {
        if (dataBuilder_ == null) {
          ensureDataIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, data_);
          onChanged();
        } else {
          dataBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Платежи
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
       */
      public Builder clearData() {
        if (dataBuilder_ == null) {
          data_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          dataBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Платежи
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
       */
      public Builder removeData(int index) {
        if (dataBuilder_ == null) {
          ensureDataIsMutable();
          data_.remove(index);
          onChanged();
        } else {
          dataBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Платежи
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder getDataBuilder(
          int index) {
        return getDataFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Платежи
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder getDataOrBuilder(
          int index) {
        if (dataBuilder_ == null) {
          return data_.get(index);  } else {
          return dataBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Платежи
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
       */
      public java.util.List<? extends ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder> 
           getDataOrBuilderList() {
        if (dataBuilder_ != null) {
          return dataBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(data_);
        }
      }
      /**
       * <pre>
       * Платежи
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder addDataBuilder() {
        return getDataFieldBuilder().addBuilder(
            ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDefaultInstance());
      }
      /**
       * <pre>
       * Платежи
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder addDataBuilder(
          int index) {
        return getDataFieldBuilder().addBuilder(
            index, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.getDefaultInstance());
      }
      /**
       * <pre>
       * Платежи
       * </pre>
       *
       * <code>repeated .keyapis.invoice.v1.Invoice data = 1;</code>
       */
      public java.util.List<ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder> 
           getDataBuilderList() {
        return getDataFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder> 
          getDataFieldBuilder() {
        if (dataBuilder_ == null) {
          dataBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.Invoice.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceOrBuilder>(
                  data_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          data_ = null;
        }
        return dataBuilder_;
      }

      private ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error error_;
      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.ErrorOrBuilder> errorBuilder_;
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.invoice.v1.GetInvoiceListResponse.Error error = 2;</code>
       * @return Whether the error field is set.
       */
      public boolean hasError() {
        return ((bitField0_ & 0x00000002) != 0);
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.invoice.v1.GetInvoiceListResponse.Error error = 2;</code>
       * @return The error.
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error getError() {
        if (errorBuilder_ == null) {
          return error_ == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error.getDefaultInstance() : error_;
        } else {
          return errorBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.invoice.v1.GetInvoiceListResponse.Error error = 2;</code>
       */
      public Builder setError(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error value) {
        if (errorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          error_ = value;
        } else {
          errorBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.invoice.v1.GetInvoiceListResponse.Error error = 2;</code>
       */
      public Builder setError(
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error.Builder builderForValue) {
        if (errorBuilder_ == null) {
          error_ = builderForValue.build();
        } else {
          errorBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.invoice.v1.GetInvoiceListResponse.Error error = 2;</code>
       */
      public Builder mergeError(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error value) {
        if (errorBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0) &&
            error_ != null &&
            error_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error.getDefaultInstance()) {
            getErrorBuilder().mergeFrom(value);
          } else {
            error_ = value;
          }
        } else {
          errorBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.invoice.v1.GetInvoiceListResponse.Error error = 2;</code>
       */
      public Builder clearError() {
        bitField0_ = (bitField0_ & ~0x00000002);
        error_ = null;
        if (errorBuilder_ != null) {
          errorBuilder_.dispose();
          errorBuilder_ = null;
        }
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.invoice.v1.GetInvoiceListResponse.Error error = 2;</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error.Builder getErrorBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getErrorFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.invoice.v1.GetInvoiceListResponse.Error error = 2;</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.ErrorOrBuilder getErrorOrBuilder() {
        if (errorBuilder_ != null) {
          return errorBuilder_.getMessageOrBuilder();
        } else {
          return error_ == null ?
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error.getDefaultInstance() : error_;
        }
      }
      /**
       * <pre>
       * Ошибка
       * </pre>
       *
       * <code>.keyapis.invoice.v1.GetInvoiceListResponse.Error error = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.ErrorOrBuilder> 
          getErrorFieldBuilder() {
        if (errorBuilder_ == null) {
          errorBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.Error.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse.ErrorOrBuilder>(
                  getError(),
                  getParentForChildren(),
                  isClean());
          error_ = null;
        }
        return errorBuilder_;
      }
      @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:keyapis.invoice.v1.GetInvoiceListResponse)
    }

    // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.GetInvoiceListResponse)
    private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse();
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<GetInvoiceListResponse>
        PARSER = new com.google.protobuf.AbstractParser<GetInvoiceListResponse>() {
      @java.lang.Override
      public GetInvoiceListResponse 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 (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceListResponse getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface GetInvoiceCountRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.GetInvoiceCountRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Фильтр
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return Whether the filter field is set.
     */
    boolean hasFilter();
    /**
     * <pre>
     * Фильтр
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The filter.
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter getFilter();
    /**
     * <pre>
     * Фильтр
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilterOrBuilder getFilterOrBuilder();
  }
  /**
   * <pre>
   * Запрос на получение количества платежей
   * </pre>
   *
   * Protobuf type {@code keyapis.invoice.v1.GetInvoiceCountRequest}
   */
  public static final class GetInvoiceCountRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.GetInvoiceCountRequest)
      GetInvoiceCountRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GetInvoiceCountRequest.newBuilder() to construct.
    private GetInvoiceCountRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private GetInvoiceCountRequest() {
    }

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

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceCountRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceCountRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest.Builder.class);
    }

    public static final int FILTER_FIELD_NUMBER = 1;
    private ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter filter_;
    /**
     * <pre>
     * Фильтр
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return Whether the filter field is set.
     */
    @java.lang.Override
    public boolean hasFilter() {
      return filter_ != null;
    }
    /**
     * <pre>
     * Фильтр
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     * @return The filter.
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter getFilter() {
      return filter_ == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.getDefaultInstance() : filter_;
    }
    /**
     * <pre>
     * Фильтр
     * </pre>
     *
     * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilterOrBuilder getFilterOrBuilder() {
      return filter_ == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.getDefaultInstance() : filter_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (filter_ != null) {
        output.writeMessage(1, getFilter());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (filter_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getFilter());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest)) {
        return super.equals(obj);
      }
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest) obj;

      if (hasFilter() != other.hasFilter()) return false;
      if (hasFilter()) {
        if (!getFilter()
            .equals(other.getFilter())) return false;
      }
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasFilter()) {
        hash = (37 * hash) + FILTER_FIELD_NUMBER;
        hash = (53 * hash) + getFilter().hashCode();
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest 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;
    }
    /**
     * <pre>
     * Запрос на получение количества платежей
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.GetInvoiceCountRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.GetInvoiceCountRequest)
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceCountRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceCountRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest.Builder.class);
      }

      // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        filter_ = null;
        if (filterBuilder_ != null) {
          filterBuilder_.dispose();
          filterBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceCountRequest_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest getDefaultInstanceForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest build() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest buildPartial() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest(this);
        if (bitField0_ != 0) { buildPartial0(result); }
        onBuilt();
        return result;
      }

      private void buildPartial0(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.filter_ = filterBuilder_ == null
              ? filter_
              : filterBuilder_.build();
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest) {
          return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest other) {
        if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest.getDefaultInstance()) return this;
        if (other.hasFilter()) {
          mergeFilter(other.getFilter());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                input.readMessage(
                    getFilterFieldBuilder().getBuilder(),
                    extensionRegistry);
                bitField0_ |= 0x00000001;
                break;
              } // case 10
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter filter_;
      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilterOrBuilder> filterBuilder_;
      /**
       * <pre>
       * Фильтр
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return Whether the filter field is set.
       */
      public boolean hasFilter() {
        return ((bitField0_ & 0x00000001) != 0);
      }
      /**
       * <pre>
       * Фильтр
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       * @return The filter.
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter getFilter() {
        if (filterBuilder_ == null) {
          return filter_ == null ? ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.getDefaultInstance() : filter_;
        } else {
          return filterBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Фильтр
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder setFilter(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter value) {
        if (filterBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          filter_ = value;
        } else {
          filterBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Фильтр
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder setFilter(
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.Builder builderForValue) {
        if (filterBuilder_ == null) {
          filter_ = builderForValue.build();
        } else {
          filterBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Фильтр
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder mergeFilter(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter value) {
        if (filterBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0) &&
            filter_ != null &&
            filter_ != ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.getDefaultInstance()) {
            getFilterBuilder().mergeFrom(value);
          } else {
            filter_ = value;
          }
        } else {
          filterBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Фильтр
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public Builder clearFilter() {
        bitField0_ = (bitField0_ & ~0x00000001);
        filter_ = null;
        if (filterBuilder_ != null) {
          filterBuilder_.dispose();
          filterBuilder_ = null;
        }
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Фильтр
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.Builder getFilterBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getFilterFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Фильтр
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilterOrBuilder getFilterOrBuilder() {
        if (filterBuilder_ != null) {
          return filterBuilder_.getMessageOrBuilder();
        } else {
          return filter_ == null ?
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.getDefaultInstance() : filter_;
        }
      }
      /**
       * <pre>
       * Фильтр
       * </pre>
       *
       * <code>.keyapis.invoice.v1.InvoiceFilter filter = 1 [(.google.api.field_behavior) = REQUIRED];</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilterOrBuilder> 
          getFilterFieldBuilder() {
        if (filterBuilder_ == null) {
          filterBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilter.Builder, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.InvoiceFilterOrBuilder>(
                  getFilter(),
                  getParentForChildren(),
                  isClean());
          filter_ = null;
        }
        return filterBuilder_;
      }
      @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:keyapis.invoice.v1.GetInvoiceCountRequest)
    }

    // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.GetInvoiceCountRequest)
    private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest();
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<GetInvoiceCountRequest>
        PARSER = new com.google.protobuf.AbstractParser<GetInvoiceCountRequest>() {
      @java.lang.Override
      public GetInvoiceCountRequest 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 (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface GetInvoiceCountResponseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:keyapis.invoice.v1.GetInvoiceCountResponse)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Количество
     * </pre>
     *
     * <code>int32 data = 1;</code>
     * @return Whether the data field is set.
     */
    boolean hasData();
    /**
     * <pre>
     * Количество
     * </pre>
     *
     * <code>int32 data = 1;</code>
     * @return The data.
     */
    int getData();

    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse.TypeCase getTypeCase();
  }
  /**
   * <pre>
   * Ответ на запрос получения количества платежей
   * </pre>
   *
   * Protobuf type {@code keyapis.invoice.v1.GetInvoiceCountResponse}
   */
  public static final class GetInvoiceCountResponse extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:keyapis.invoice.v1.GetInvoiceCountResponse)
      GetInvoiceCountResponseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GetInvoiceCountResponse.newBuilder() to construct.
    private GetInvoiceCountResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private GetInvoiceCountResponse() {
    }

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

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceCountResponse_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceCountResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse.Builder.class);
    }

    private int typeCase_ = 0;
    @SuppressWarnings("serial")
    private java.lang.Object type_;
    public enum TypeCase
        implements com.google.protobuf.Internal.EnumLite,
            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
      DATA(1),
      TYPE_NOT_SET(0);
      private final int value;
      private TypeCase(int value) {
        this.value = value;
      }
      /**
       * @param value The number of the enum to look for.
       * @return The enum associated with the given number.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static TypeCase valueOf(int value) {
        return forNumber(value);
      }

      public static TypeCase forNumber(int value) {
        switch (value) {
          case 1: return DATA;
          case 0: return TYPE_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public TypeCase
    getTypeCase() {
      return TypeCase.forNumber(
          typeCase_);
    }

    public static final int DATA_FIELD_NUMBER = 1;
    /**
     * <pre>
     * Количество
     * </pre>
     *
     * <code>int32 data = 1;</code>
     * @return Whether the data field is set.
     */
    @java.lang.Override
    public boolean hasData() {
      return typeCase_ == 1;
    }
    /**
     * <pre>
     * Количество
     * </pre>
     *
     * <code>int32 data = 1;</code>
     * @return The data.
     */
    @java.lang.Override
    public int getData() {
      if (typeCase_ == 1) {
        return (java.lang.Integer) type_;
      }
      return 0;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (typeCase_ == 1) {
        output.writeInt32(
            1, (int)((java.lang.Integer) type_));
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (typeCase_ == 1) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(
              1, (int)((java.lang.Integer) type_));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse)) {
        return super.equals(obj);
      }
      ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse other = (ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse) obj;

      if (!getTypeCase().equals(other.getTypeCase())) return false;
      switch (typeCase_) {
        case 1:
          if (getData()
              != other.getData()) return false;
          break;
        case 0:
        default:
      }
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      switch (typeCase_) {
        case 1:
          hash = (37 * hash) + DATA_FIELD_NUMBER;
          hash = (53 * hash) + getData();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse 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 ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse 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(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse 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;
    }
    /**
     * <pre>
     * Ответ на запрос получения количества платежей
     * </pre>
     *
     * Protobuf type {@code keyapis.invoice.v1.GetInvoiceCountResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:keyapis.invoice.v1.GetInvoiceCountResponse)
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceCountResponse_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceCountResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse.class, ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse.Builder.class);
      }

      // Construct using ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        typeCase_ = 0;
        type_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.internal_static_keyapis_invoice_v1_GetInvoiceCountResponse_descriptor;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse getDefaultInstanceForType() {
        return ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse.getDefaultInstance();
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse build() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse buildPartial() {
        ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse result = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse(this);
        if (bitField0_ != 0) { buildPartial0(result); }
        buildPartialOneofs(result);
        onBuilt();
        return result;
      }

      private void buildPartial0(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse result) {
        int from_bitField0_ = bitField0_;
      }

      private void buildPartialOneofs(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse result) {
        result.typeCase_ = typeCase_;
        result.type_ = this.type_;
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse) {
          return mergeFrom((ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse other) {
        if (other == ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse.getDefaultInstance()) return this;
        switch (other.getTypeCase()) {
          case DATA: {
            setData(other.getData());
            break;
          }
          case TYPE_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 8: {
                type_ = input.readInt32();
                typeCase_ = 1;
                break;
              } // case 8
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int typeCase_ = 0;
      private java.lang.Object type_;
      public TypeCase
          getTypeCase() {
        return TypeCase.forNumber(
            typeCase_);
      }

      public Builder clearType() {
        typeCase_ = 0;
        type_ = null;
        onChanged();
        return this;
      }

      private int bitField0_;

      /**
       * <pre>
       * Количество
       * </pre>
       *
       * <code>int32 data = 1;</code>
       * @return Whether the data field is set.
       */
      public boolean hasData() {
        return typeCase_ == 1;
      }
      /**
       * <pre>
       * Количество
       * </pre>
       *
       * <code>int32 data = 1;</code>
       * @return The data.
       */
      public int getData() {
        if (typeCase_ == 1) {
          return (java.lang.Integer) type_;
        }
        return 0;
      }
      /**
       * <pre>
       * Количество
       * </pre>
       *
       * <code>int32 data = 1;</code>
       * @param value The data to set.
       * @return This builder for chaining.
       */
      public Builder setData(int value) {

        typeCase_ = 1;
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Количество
       * </pre>
       *
       * <code>int32 data = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearData() {
        if (typeCase_ == 1) {
          typeCase_ = 0;
          type_ = null;
          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:keyapis.invoice.v1.GetInvoiceCountResponse)
    }

    // @@protoc_insertion_point(class_scope:keyapis.invoice.v1.GetInvoiceCountResponse)
    private static final ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse();
    }

    public static ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<GetInvoiceCountResponse>
        PARSER = new com.google.protobuf.AbstractParser<GetInvoiceCountResponse>() {
      @java.lang.Override
      public GetInvoiceCountResponse 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 (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

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

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

    @java.lang.Override
    public ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.GetInvoiceCountResponse getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_Invoice_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_Invoice_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_Invoice_ExternalError_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_Invoice_ExternalError_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_Invoice_ExternalError_ExternalSystemError_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_Invoice_ExternalError_ExternalSystemError_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_Invoice_Position_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_Invoice_Position_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_Invoice_SavingError_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_Invoice_SavingError_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_Invoice_SavingError_InvoiceAlreadyExists_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_Invoice_SavingError_InvoiceAlreadyExists_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_InvoiceFilter_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_InvoiceFilter_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_InvoicePaging_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_InvoicePaging_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_CreateInvoiceRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_CreateInvoiceRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_CreateInvoiceResponse_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_CreateInvoiceResponse_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_MissingUserContacts_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_MissingUserContacts_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_GetInvoiceRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_GetInvoiceRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_GetInvoiceResponse_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_GetInvoiceResponse_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_GetInvoiceResponse_Error_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_GetInvoiceResponse_Error_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_Card_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_Card_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_PostInvoiceConfirmResponse_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_PostInvoiceConfirmResponse_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_GetInvoiceListRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_GetInvoiceListRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_GetInvoiceListResponse_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_GetInvoiceListResponse_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_GetInvoiceListResponse_Error_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_GetInvoiceListResponse_Error_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_GetInvoiceCountRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_GetInvoiceCountRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_keyapis_invoice_v1_GetInvoiceCountResponse_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_keyapis_invoice_v1_GetInvoiceCountResponse_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n3keyapis/invoice/v1/keyapis_invoice_inv" +
      "oice_v1.proto\022\022keyapis.invoice.v1\032\037googl" +
      "e/protobuf/timestamp.proto\032\034google/api/a" +
      "nnotations.proto\032\037google/api/field_behav" +
      "ior.proto\0325keyapis/invoice/v1/keyapis_in" +
      "voice_paymethod_v1.proto\032\036google/protobu" +
      "f/wrappers.proto\"\274\016\n\007Invoice\022\017\n\002id\030\001 \001(\t" +
      "B\003\340A\002\022\022\n\005title\030\002 \001(\tB\003\340A\002\022\024\n\007user_id\030\003 \001" +
      "(\005B\003\340A\002\022O\n\023invoice_status_type\030\004 \001(\0162-.k" +
      "eyapis.invoice.v1.Invoice.InvoiceStatusT" +
      "ypeB\003\340A\002\0223\n\ncreated_at\030\005 \001(\0132\032.google.pr" +
      "otobuf.TimestampB\003\340A\002\0223\n\nupdated_at\030\006 \001(" +
      "\0132\032.google.protobuf.TimestampB\003\340A\002\022<\n\tpo" +
      "sitions\030\007 \003(\0132$.keyapis.invoice.v1.Invoi" +
      "ce.PositionB\003\340A\002\022H\n\022pay_interface_type\030\010" +
      " \001(\0162,.keyapis.invoice.v1.Invoice.PayInt" +
      "erfaceType\022;\n\013payway_type\030\t \001(\0162&.keyapi" +
      "s.invoice.v1.Invoice.PaywayType\0225\n\021statu" +
      "s_changed_at\030\n \001(\0132\032.google.protobuf.Tim" +
      "estamp\022+\n\007paid_at\030\013 \001(\0132\032.google.protobu" +
      "f.Timestamp\022\017\n\007pay_url\030\014 \001(\t\022\033\n\023paid_by_" +
      "card_masked\030\r \001(\t\022\034\n\024paid_by_card_espp_i" +
      "d\030\016 \001(\t\0227\n\tcard_type\030\017 \001(\0162$.keyapis.inv" +
      "oice.v1.Invoice.CardType\022\027\n\017espp_req_sta" +
      "tus\030\020 \001(\005\022\031\n\021espp_req_user_msg\030\021 \001(\t\022\027\n\017" +
      "espp_invoice_id\030\022 \001(\t\022\024\n\014phone_number\030\023 " +
      "\001(\t\022\r\n\005email\030\024 \001(\t\032\220\001\n\rExternalError\022^\n\025" +
      "external_system_error\030\001 \001(\0132=.keyapis.in" +
      "voice.v1.Invoice.ExternalError.ExternalS" +
      "ystemErrorH\000\032\025\n\023ExternalSystemErrorB\010\n\006r" +
      "eason\032\221\003\n\010Position\022\n\n\002id\030\001 \001(\t\022\027\n\ninvoic" +
      "e_id\030\002 \001(\tB\003\340A\002\022\022\n\005title\030\003 \001(\tB\003\340A\002\022\025\n\010c" +
      "ategory\030\004 \001(\tB\003\340A\002\022\023\n\006amount\030\005 \001(\002B\003\340A\002\022" +
      "3\n\ncreated_at\030\006 \001(\0132\032.google.protobuf.Ti" +
      "mestampB\003\340A\003\0223\n\nupdated_at\030\007 \001(\0132\032.googl" +
      "e.protobuf.TimestampB\003\340A\003\022\023\n\006mrf_id\030\010 \001(" +
      "\005B\003\340A\002\022\022\n\005rf_id\030\t \001(\005B\003\340A\002\022\030\n\013instance_i" +
      "d\030\n \001(\tB\003\340A\002\022\030\n\013offering_id\030\013 \001(\005B\003\340A\002\022/" +
      "\n\013due_date_at\030\014 \001(\0132\032.google.protobuf.Ti" +
      "mestamp\022\023\n\013svc_type_id\030\r \001(\t\022\023\n\013is_disco" +
      "unt\030\016 \001(\010\032\217\001\n\013SavingError\022^\n\026invoice_alr" +
      "eady_exists\030\001 \001(\0132<.keyapis.invoice.v1.I" +
      "nvoice.SavingError.InvoiceAlreadyExistsH" +
      "\000\032\026\n\024InvoiceAlreadyExistsB\010\n\006reason\"r\n\021I" +
      "nvoiceStatusType\022\037\n\033INVOICE_STATUS_TYPE_" +
      "UNKNOWN\020\000\022\013\n\007PLANNED\020\001\022\013\n\007PENDING\020\002\022\t\n\005E" +
      "RROR\020\003\022\010\n\004PAID\020\004\022\r\n\tCANCELLED\020\005\"[\n\010CardT" +
      "ype\022\025\n\021CARD_TYPE_UNKNOWN\020\000\022\010\n\004VISA\020\001\022\t\n\005" +
      "EC_MC\020\002\022\007\n\003DCL\020\003\022\007\n\003JCB\020\004\022\010\n\004AMEX\020\005\022\007\n\003M" +
      "IR\020\006\"D\n\020PayInterfaceType\022\036\n\032PAY_INTERFAC" +
      "E_TYPE_UNKNOWN\020\000\022\007\n\003GUI\020\001\022\007\n\003M2M\020\002\"K\n\nPa" +
      "ywayType\022\027\n\023PAYWAY_TYPE_UNKNOWN\020\000\022\r\n\tBAN" +
      "K_CARD\020\001\022\007\n\003SBP\020\002\022\014\n\010SBER_PAY\020\003\"l\n\rInvoi" +
      "ceFilter\022\017\n\007user_id\030\001 \001(\005\022J\n\023invoice_sta" +
      "tus_type\030\002 \001(\0162-.keyapis.invoice.v1.Invo" +
      "ice.InvoiceStatusType\"\314\002\n\rInvoicePaging\022" +
      "D\n\rorder_by_type\030\001 \001(\0162-.keyapis.invoice" +
      ".v1.InvoicePaging.OrderByType\022G\n\016directi" +
      "on_type\030\002 \001(\0162/.keyapis.invoice.v1.Invoi" +
      "cePaging.DirectionType\022\r\n\005limit\030\003 \001(\005\022\016\n" +
      "\006offset\030\004 \001(\005\"M\n\013OrderByType\022\031\n\025ORDER_BY" +
      "_TYPE_UNKNOWN\020\000\022\006\n\002ID\020\001\022\013\n\007PAID_AT\020\002\022\016\n\n" +
      "CREATED_AT\020\003\">\n\rDirectionType\022\032\n\026DIRECTI" +
      "ON_TYPE_UNKNOWN\020\000\022\010\n\004DESC\020\001\022\007\n\003ASC\020\002\"\276\002\n" +
      "\024CreateInvoiceRequest\022\024\n\007user_id\030\001 \001(\005B\003" +
      "\340A\002\022<\n\tpositions\030\002 \003(\0132$.keyapis.invoice" +
      ".v1.Invoice.PositionB\003\340A\002\022M\n\022pay_interfa" +
      "ce_type\030\003 \001(\0162,.keyapis.invoice.v1.Invoi" +
      "ce.PayInterfaceTypeB\003\340A\002\022;\n\013payway_type\030" +
      "\004 \001(\0162&.keyapis.invoice.v1.Invoice.Paywa" +
      "yType\022\022\n\nreturn_url\030\005 \001(\t\022\024\n\014phone_numbe" +
      "r\030\006 \001(\t\022\r\n\005email\030\007 \001(\t\022\r\n\005title\030\010 \001(\t\"\324\003" +
      "\n\025CreateInvoiceResponse\022@\n\005error\030\001 \001(\0132/" +
      ".keyapis.invoice.v1.CreateInvoiceRespons" +
      "e.ErrorH\000\022+\n\004data\030\002 \001(\0132\033.keyapis.invoic" +
      "e.v1.InvoiceH\000\032\303\002\n\005Error\0229\n\nvalidation\030\001" +
      " \001(\0132#.keyapis.invoice.v1.ValidationErro" +
      "rH\000\022d\n\025missing_user_contacts\030\002 \001(\0132C.key" +
      "apis.invoice.v1.CreateInvoiceResponse.Er" +
      "ror.MissingUserContactsH\000\022=\n\010external\030\003 " +
      "\001(\0132).keyapis.invoice.v1.Invoice.Externa" +
      "lErrorH\000\0229\n\006saving\030\004 \001(\0132\'.keyapis.invoi" +
      "ce.v1.Invoice.SavingErrorH\000\032\025\n\023MissingUs" +
      "erContactsB\010\n\006reasonB\006\n\004type\",\n\021GetInvoi" +
      "ceRequest\022\027\n\ninvoice_id\030\001 \001(\tB\003\340A\002\"\326\001\n\022G" +
      "etInvoiceResponse\022=\n\005error\030\001 \001(\0132,.keyap" +
      "is.invoice.v1.GetInvoiceResponse.ErrorH\000" +
      "\022+\n\004data\030\002 \001(\0132\033.keyapis.invoice.v1.Invo" +
      "iceH\000\032L\n\005Error\0229\n\nvalidation\030\001 \001(\0132#.key" +
      "apis.invoice.v1.ValidationErrorH\000B\010\n\006rea" +
      "sonB\006\n\004type\"\272\004\n\031PostInvoiceConfirmReques" +
      "t\022\027\n\nsrc_pay_id\030\001 \001(\tB\003\340A\002\022\030\n\013espp_pay_i" +
      "d\030\002 \001(\tB\003\340A\002\022\027\n\npay_status\030\003 \001(\005B\003\340A\002\022\025\n" +
      "\010req_type\030\004 \001(\tB\003\340A\002\022\016\n\006amount\030\005 \001(\002\022\020\n\010" +
      "currency\030\006 \001(\t\022\022\n\npay_method\030\007 \001(\t\022>\n\016cr" +
      "eate_time_at\030\010 \001(\0132\032.google.protobuf.Tim" +
      "estampR\ncreateTime\022\020\n\010req_note\030\t \001(\t\022\024\n\014" +
      "req_user_msg\030\n \001(\t\0228\n\013pay_time_at\030\013 \001(\0132" +
      "\032.google.protobuf.TimestampR\007payTime\022@\n\017" +
      "abandon_time_at\030\014 \001(\0132\032.google.protobuf." +
      "TimestampR\013abandonTime\022@\n\004card\030\r \001(\01322.k" +
      "eyapis.invoice.v1.PostInvoiceConfirmRequ" +
      "est.Card\032^\n\004Card\022\024\n\014espp_card_id\030\001 \001(\005\022\020" +
      "\n\010card_num\030\002 \001(\t\022\033\n\tcard_kind\030\003 \001(\tR\010car" +
      "dType\022\021\n\tbank_name\030\004 \001(\t\"\034\n\032PostInvoiceC" +
      "onfirmResponse\"\215\001\n\025GetInvoiceListRequest" +
      "\0221\n\006filter\030\001 \001(\0132!.keyapis.invoice.v1.In" +
      "voiceFilter\0223\n\006paging\030\002 \001(\0132!.keyapis.in" +
      "voice.v1.InvoicePagingH\000B\014\n\npagination\"\322" +
      "\001\n\026GetInvoiceListResponse\022)\n\004data\030\001 \003(\0132" +
      "\033.keyapis.invoice.v1.Invoice\022?\n\005error\030\002 " +
      "\001(\01320.keyapis.invoice.v1.GetInvoiceListR" +
      "esponse.Error\032L\n\005Error\0229\n\nvalidation\030\001 \001" +
      "(\0132#.keyapis.invoice.v1.ValidationErrorH" +
      "\000B\010\n\006reason\"P\n\026GetInvoiceCountRequest\0226\n" +
      "\006filter\030\001 \001(\0132!.keyapis.invoice.v1.Invoi" +
      "ceFilterB\003\340A\002\"1\n\027GetInvoiceCountResponse" +
      "\022\016\n\004data\030\001 \001(\005H\000B\006\n\004type2\366\005\n\016InvoiceServ" +
      "ice\022\210\001\n\rCreateInvoice\022(.keyapis.invoice." +
      "v1.CreateInvoiceRequest\032).keyapis.invoic" +
      "e.v1.CreateInvoiceResponse\"\"\202\323\344\223\002\034\"\027/inv" +
      "oice/api/v1/invoice:\001*\022\211\001\n\nGetInvoice\022%." +
      "keyapis.invoice.v1.GetInvoiceRequest\032&.k" +
      "eyapis.invoice.v1.GetInvoiceResponse\",\202\323" +
      "\344\223\002&\022$/invoice/api/v1/invoice/{invoice_i" +
      "d}\022\250\001\n\022PostInvoiceConfirm\022-.keyapis.invo" +
      "ice.v1.PostInvoiceConfirmRequest\032..keyap" +
      "is.invoice.v1.PostInvoiceConfirmResponse" +
      "\"3\202\323\344\223\002-\"(/invoice/internal/api/v1/invoi" +
      "ce/confirm:\001*\022\215\001\n\016GetInvoiceList\022).keyap" +
      "is.invoice.v1.GetInvoiceListRequest\032*.ke" +
      "yapis.invoice.v1.GetInvoiceListResponse\"" +
      "$\202\323\344\223\002\036\022\034/invoice/api/v1/invoice/list\022\221\001" +
      "\n\017GetInvoiceCount\022*.keyapis.invoice.v1.G" +
      "etInvoiceCountRequest\032+.keyapis.invoice." +
      "v1.GetInvoiceCountResponse\"%\202\323\344\223\002\037\022\035/inv" +
      "oice/api/v1/invoice/countB\241\001\n\025ru.keyapis" +
      ".invoice.v1B\025KeyapisInvoiceV1ProtoH\003P\000Z\023" +
      "/keyapis_invoice_v1\330\001\001\370\001\001\242\002\020KEYAPISINVOI" +
      "CEV1\252\002\022Keyapis.Invoice.V1\312\002\022Keyapis\\Invo" +
      "ice\\V1\352\002\024Keyapis::Invoice::V1b\006proto3"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
          com.google.protobuf.TimestampProto.getDescriptor(),
          com.google.api.AnnotationsProto.getDescriptor(),
          com.google.api.FieldBehaviorProto.getDescriptor(),
          ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.getDescriptor(),
          com.google.protobuf.WrappersProto.getDescriptor(),
        });
    internal_static_keyapis_invoice_v1_Invoice_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_keyapis_invoice_v1_Invoice_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_Invoice_descriptor,
        new java.lang.String[] { "Id", "Title", "UserId", "InvoiceStatusType", "CreatedAt", "UpdatedAt", "Positions", "PayInterfaceType", "PaywayType", "StatusChangedAt", "PaidAt", "PayUrl", "PaidByCardMasked", "PaidByCardEsppId", "CardType", "EsppReqStatus", "EsppReqUserMsg", "EsppInvoiceId", "PhoneNumber", "Email", });
    internal_static_keyapis_invoice_v1_Invoice_ExternalError_descriptor =
      internal_static_keyapis_invoice_v1_Invoice_descriptor.getNestedTypes().get(0);
    internal_static_keyapis_invoice_v1_Invoice_ExternalError_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_Invoice_ExternalError_descriptor,
        new java.lang.String[] { "ExternalSystemError", "Reason", });
    internal_static_keyapis_invoice_v1_Invoice_ExternalError_ExternalSystemError_descriptor =
      internal_static_keyapis_invoice_v1_Invoice_ExternalError_descriptor.getNestedTypes().get(0);
    internal_static_keyapis_invoice_v1_Invoice_ExternalError_ExternalSystemError_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_Invoice_ExternalError_ExternalSystemError_descriptor,
        new java.lang.String[] { });
    internal_static_keyapis_invoice_v1_Invoice_Position_descriptor =
      internal_static_keyapis_invoice_v1_Invoice_descriptor.getNestedTypes().get(1);
    internal_static_keyapis_invoice_v1_Invoice_Position_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_Invoice_Position_descriptor,
        new java.lang.String[] { "Id", "InvoiceId", "Title", "Category", "Amount", "CreatedAt", "UpdatedAt", "MrfId", "RfId", "InstanceId", "OfferingId", "DueDateAt", "SvcTypeId", "IsDiscount", });
    internal_static_keyapis_invoice_v1_Invoice_SavingError_descriptor =
      internal_static_keyapis_invoice_v1_Invoice_descriptor.getNestedTypes().get(2);
    internal_static_keyapis_invoice_v1_Invoice_SavingError_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_Invoice_SavingError_descriptor,
        new java.lang.String[] { "InvoiceAlreadyExists", "Reason", });
    internal_static_keyapis_invoice_v1_Invoice_SavingError_InvoiceAlreadyExists_descriptor =
      internal_static_keyapis_invoice_v1_Invoice_SavingError_descriptor.getNestedTypes().get(0);
    internal_static_keyapis_invoice_v1_Invoice_SavingError_InvoiceAlreadyExists_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_Invoice_SavingError_InvoiceAlreadyExists_descriptor,
        new java.lang.String[] { });
    internal_static_keyapis_invoice_v1_InvoiceFilter_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_keyapis_invoice_v1_InvoiceFilter_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_InvoiceFilter_descriptor,
        new java.lang.String[] { "UserId", "InvoiceStatusType", });
    internal_static_keyapis_invoice_v1_InvoicePaging_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_keyapis_invoice_v1_InvoicePaging_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_InvoicePaging_descriptor,
        new java.lang.String[] { "OrderByType", "DirectionType", "Limit", "Offset", });
    internal_static_keyapis_invoice_v1_CreateInvoiceRequest_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_keyapis_invoice_v1_CreateInvoiceRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_CreateInvoiceRequest_descriptor,
        new java.lang.String[] { "UserId", "Positions", "PayInterfaceType", "PaywayType", "ReturnUrl", "PhoneNumber", "Email", "Title", });
    internal_static_keyapis_invoice_v1_CreateInvoiceResponse_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_keyapis_invoice_v1_CreateInvoiceResponse_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_CreateInvoiceResponse_descriptor,
        new java.lang.String[] { "Error", "Data", "Type", });
    internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_descriptor =
      internal_static_keyapis_invoice_v1_CreateInvoiceResponse_descriptor.getNestedTypes().get(0);
    internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_descriptor,
        new java.lang.String[] { "Validation", "MissingUserContacts", "External", "Saving", "Reason", });
    internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_MissingUserContacts_descriptor =
      internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_descriptor.getNestedTypes().get(0);
    internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_MissingUserContacts_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_CreateInvoiceResponse_Error_MissingUserContacts_descriptor,
        new java.lang.String[] { });
    internal_static_keyapis_invoice_v1_GetInvoiceRequest_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_keyapis_invoice_v1_GetInvoiceRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_GetInvoiceRequest_descriptor,
        new java.lang.String[] { "InvoiceId", });
    internal_static_keyapis_invoice_v1_GetInvoiceResponse_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_keyapis_invoice_v1_GetInvoiceResponse_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_GetInvoiceResponse_descriptor,
        new java.lang.String[] { "Error", "Data", "Type", });
    internal_static_keyapis_invoice_v1_GetInvoiceResponse_Error_descriptor =
      internal_static_keyapis_invoice_v1_GetInvoiceResponse_descriptor.getNestedTypes().get(0);
    internal_static_keyapis_invoice_v1_GetInvoiceResponse_Error_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_GetInvoiceResponse_Error_descriptor,
        new java.lang.String[] { "Validation", "Reason", });
    internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_descriptor,
        new java.lang.String[] { "SrcPayId", "EsppPayId", "PayStatus", "ReqType", "Amount", "Currency", "PayMethod", "CreateTimeAt", "ReqNote", "ReqUserMsg", "PayTimeAt", "AbandonTimeAt", "Card", });
    internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_Card_descriptor =
      internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_descriptor.getNestedTypes().get(0);
    internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_Card_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_PostInvoiceConfirmRequest_Card_descriptor,
        new java.lang.String[] { "EsppCardId", "CardNum", "CardKind", "BankName", });
    internal_static_keyapis_invoice_v1_PostInvoiceConfirmResponse_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_keyapis_invoice_v1_PostInvoiceConfirmResponse_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_PostInvoiceConfirmResponse_descriptor,
        new java.lang.String[] { });
    internal_static_keyapis_invoice_v1_GetInvoiceListRequest_descriptor =
      getDescriptor().getMessageTypes().get(9);
    internal_static_keyapis_invoice_v1_GetInvoiceListRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_GetInvoiceListRequest_descriptor,
        new java.lang.String[] { "Filter", "Paging", "Pagination", });
    internal_static_keyapis_invoice_v1_GetInvoiceListResponse_descriptor =
      getDescriptor().getMessageTypes().get(10);
    internal_static_keyapis_invoice_v1_GetInvoiceListResponse_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_GetInvoiceListResponse_descriptor,
        new java.lang.String[] { "Data", "Error", });
    internal_static_keyapis_invoice_v1_GetInvoiceListResponse_Error_descriptor =
      internal_static_keyapis_invoice_v1_GetInvoiceListResponse_descriptor.getNestedTypes().get(0);
    internal_static_keyapis_invoice_v1_GetInvoiceListResponse_Error_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_GetInvoiceListResponse_Error_descriptor,
        new java.lang.String[] { "Validation", "Reason", });
    internal_static_keyapis_invoice_v1_GetInvoiceCountRequest_descriptor =
      getDescriptor().getMessageTypes().get(11);
    internal_static_keyapis_invoice_v1_GetInvoiceCountRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_GetInvoiceCountRequest_descriptor,
        new java.lang.String[] { "Filter", });
    internal_static_keyapis_invoice_v1_GetInvoiceCountResponse_descriptor =
      getDescriptor().getMessageTypes().get(12);
    internal_static_keyapis_invoice_v1_GetInvoiceCountResponse_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_keyapis_invoice_v1_GetInvoiceCountResponse_descriptor,
        new java.lang.String[] { "Data", "Type", });
    com.google.protobuf.ExtensionRegistry registry =
        com.google.protobuf.ExtensionRegistry.newInstance();
    registry.add(com.google.api.FieldBehaviorProto.fieldBehavior);
    registry.add(com.google.api.AnnotationsProto.http);
    com.google.protobuf.Descriptors.FileDescriptor
        .internalUpdateFileDescriptor(descriptor, registry);
    com.google.protobuf.TimestampProto.getDescriptor();
    com.google.api.AnnotationsProto.getDescriptor();
    com.google.api.FieldBehaviorProto.getDescriptor();
    ru.keyapis.invoice.v1.KeyapisInvoiceV1Proto.getDescriptor();
    com.google.protobuf.WrappersProto.getDescriptor();
  }

  // @@protoc_insertion_point(outer_class_scope)
}
