text: // Generated by the protocol buffer compiler.  DO NOT EDIT!
  // source: echo.proto
  
  #include "echo.pb.h"
  
  #include <algorithm>
  
  #include <google/protobuf/io/coded_stream.h>
  #include <google/protobuf/extension_set.h>
  #include <google/protobuf/wire_format_lite.h>
  #include <google/protobuf/descriptor.h>
  #include <google/protobuf/generated_message_reflection.h>
  #include <google/protobuf/reflection_ops.h>
  #include <google/protobuf/wire_format.h>
  // @@protoc_insertion_point(includes)
  #include <google/protobuf/port_def.inc>
  
  PROTOBUF_PRAGMA_INIT_SEG
  namespace echo {
  constexpr EchoRequest::EchoRequest(
    ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized)
    : payload_(&::PROTOBUF_NAMESPACE_ID::internal::fixed_address_empty_string){}
  struct EchoRequestDefaultTypeInternal {
    constexpr EchoRequestDefaultTypeInternal()
      : _instance(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized{}) {}
    ~EchoRequestDefaultTypeInternal() {}
    union {
      EchoRequest _instance;
    };
  };
  PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT EchoRequestDefaultTypeInternal _EchoRequest_default_instance_;
  constexpr EchoResponse::EchoResponse(
    ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized)
    : payload_(&::PROTOBUF_NAMESPACE_ID::internal::fixed_address_empty_string){}
  struct EchoResponseDefaultTypeInternal {
    constexpr EchoResponseDefaultTypeInternal()
      : _instance(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized{}) {}
    ~EchoResponseDefaultTypeInternal() {}
    union {
      EchoResponse _instance;
    };
  };
  PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT EchoResponseDefaultTypeInternal _EchoResponse_default_instance_;
  }  // namespace echo
  static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_echo_2eproto[2];
  static constexpr ::PROTOBUF_NAMESPACE_ID::EnumDescriptor const** file_level_enum_descriptors_echo_2eproto = nullptr;
  static const ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor* file_level_service_descriptors_echo_2eproto[1];
  
  const uint32_t TableStruct_echo_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
    PROTOBUF_FIELD_OFFSET(::echo::EchoRequest, _has_bits_),
    PROTOBUF_FIELD_OFFSET(::echo::EchoRequest, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    ~0u,  // no _inlined_string_donated_
    PROTOBUF_FIELD_OFFSET(::echo::EchoRequest, payload_),
    0,
    PROTOBUF_FIELD_OFFSET(::echo::EchoResponse, _has_bits_),
    PROTOBUF_FIELD_OFFSET(::echo::EchoResponse, _internal_metadata_),
    ~0u,  // no _extensions_
    ~0u,  // no _oneof_case_
    ~0u,  // no _weak_field_map_
    ~0u,  // no _inlined_string_donated_
    PROTOBUF_FIELD_OFFSET(::echo::EchoResponse, payload_),
    0,
  };
  static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
    { 0, 7, -1, sizeof(::echo::EchoRequest)},
    { 8, 15, -1, sizeof(::echo::EchoResponse)},
  };
  
  static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = {
    reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::echo::_EchoRequest_default_instance_),
    reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::echo::_EchoResponse_default_instance_),
  };
  
  const char descriptor_table_protodef_echo_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) =
    "\n\necho.proto\022\004echo\"\036\n\013EchoRequest\022\017\n\007pay"
    "load\030\001 \002(\t\"\037\n\014EchoResponse\022\017\n\007payload\030\002 "
    "\002(\t2<\n\013EchoService\022-\n\004Echo\022\021.echo.EchoRe"
    "quest\032\022.echo.EchoResponseB\003\200\001\001"
    ;
  static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_echo_2eproto_once;
  const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_echo_2eproto = {
    false, false, 150, descriptor_table_protodef_echo_2eproto, "echo.proto", 
    &descriptor_table_echo_2eproto_once, nullptr, 0, 2,
    schemas, file_default_instances, TableStruct_echo_2eproto::offsets,
    file_level_metadata_echo_2eproto, file_level_enum_descriptors_echo_2eproto, file_level_service_descriptors_echo_2eproto,
  };
  PROTOBUF_ATTRIBUTE_WEAK const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable* descriptor_table_echo_2eproto_getter() {
    return &descriptor_table_echo_2eproto;
  }
  
  // Force running AddDescriptors() at dynamic initialization time.
  PROTOBUF_ATTRIBUTE_INIT_PRIORITY static ::PROTOBUF_NAMESPACE_ID::internal::AddDescriptorsRunner dynamic_init_dummy_echo_2eproto(&descriptor_table_echo_2eproto);
  namespace echo {
  
  // ===================================================================
  
  class EchoRequest::_Internal {
   public:
    using HasBits = decltype(std::declval<EchoRequest>()._has_bits_);
    static void set_has_payload(HasBits* has_bits) {
      (*has_bits)[0] |= 1u;
    }
    static bool MissingRequiredFields(const HasBits& has_bits) {
      return ((has_bits[0] & 0x00000001) ^ 0x00000001) != 0;
    }
  };
  
  EchoRequest::EchoRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                           bool is_message_owned)
    : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
    SharedCtor();
    if (!is_message_owned) {
      RegisterArenaDtor(arena);
    }
    // @@protoc_insertion_point(arena_constructor:echo.EchoRequest)
  }
  EchoRequest::EchoRequest(const EchoRequest& from)
    : ::PROTOBUF_NAMESPACE_ID::Message(),
        _has_bits_(from._has_bits_) {
    _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
    payload_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
    #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
      payload_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
    #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
    if (from._internal_has_payload()) {
      payload_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_payload(), 
        GetArenaForAllocation());
    }
    // @@protoc_insertion_point(copy_constructor:echo.EchoRequest)
  }
  
  inline void EchoRequest::SharedCtor() {
  payload_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    payload_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  }
  
  EchoRequest::~EchoRequest() {
    // @@protoc_insertion_point(destructor:echo.EchoRequest)
    if (GetArenaForAllocation() != nullptr) return;
    SharedDtor();
    _internal_metadata_.Delete<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
  }
  
  inline void EchoRequest::SharedDtor() {
    GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
    payload_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  
  void EchoRequest::ArenaDtor(void* object) {
    EchoRequest* _this = reinterpret_cast< EchoRequest* >(object);
    (void)_this;
  }
  void EchoRequest::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
  }
  void EchoRequest::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  
  void EchoRequest::Clear() {
  // @@protoc_insertion_point(message_clear_start:echo.EchoRequest)
    uint32_t cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    cached_has_bits = _has_bits_[0];
    if (cached_has_bits & 0x00000001u) {
      payload_.ClearNonDefaultToEmpty();
    }
    _has_bits_.Clear();
    _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
  }
  
  const char* EchoRequest::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
  #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
    _Internal::HasBits has_bits{};
    while (!ctx->Done(&ptr)) {
      uint32_t tag;
      ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
      switch (tag >> 3) {
        // required string payload = 1;
        case 1:
          if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
            auto str = _internal_mutable_payload();
            ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
            #ifndef NDEBUG
            ::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "echo.EchoRequest.payload");
            #endif  // !NDEBUG
            CHK_(ptr);
          } else
            goto handle_unusual;
          continue;
        default:
          goto handle_unusual;
      }  // switch
    handle_unusual:
      if ((tag == 0) || ((tag & 7) == 4)) {
        CHK_(ptr);
        ctx->SetLastTag(tag);
        goto message_done;
      }
      ptr = UnknownFieldParse(
          tag,
          _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
          ptr, ctx);
      CHK_(ptr != nullptr);
    }  // while
  message_done:
    _has_bits_.Or(has_bits);
    return ptr;
  failure:
    ptr = nullptr;
    goto message_done;
  #undef CHK_
  }
  
  uint8_t* EchoRequest::_InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
    // @@protoc_insertion_point(serialize_to_array_start:echo.EchoRequest)
    uint32_t cached_has_bits = 0;
    (void) cached_has_bits;
  
    cached_has_bits = _has_bits_[0];
    // required string payload = 1;
    if (cached_has_bits & 0x00000001u) {
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::VerifyUTF8StringNamedField(
        this->_internal_payload().data(), static_cast<int>(this->_internal_payload().length()),
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SERIALIZE,
        "echo.EchoRequest.payload");
      target = stream->WriteStringMaybeAliased(
          1, this->_internal_payload(), target);
    }
  
    if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
          _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
    }
    // @@protoc_insertion_point(serialize_to_array_end:echo.EchoRequest)
    return target;
  }
  
  size_t EchoRequest::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:echo.EchoRequest)
    size_t total_size = 0;
  
    // required string payload = 1;
    if (_internal_has_payload()) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
          this->_internal_payload());
    }
    uint32_t cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
  }
  
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData EchoRequest::_class_data_ = {
      ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
      EchoRequest::MergeImpl
  };
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*EchoRequest::GetClassData() const { return &_class_data_; }
  
  void EchoRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
                        const ::PROTOBUF_NAMESPACE_ID::Message& from) {
    static_cast<EchoRequest *>(to)->MergeFrom(
        static_cast<const EchoRequest &>(from));
  }
  
  
  void EchoRequest::MergeFrom(const EchoRequest& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:echo.EchoRequest)
    GOOGLE_DCHECK_NE(&from, this);
    uint32_t cached_has_bits = 0;
    (void) cached_has_bits;
  
    if (from._internal_has_payload()) {
      _internal_set_payload(from._internal_payload());
    }
    _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  }
  
  void EchoRequest::CopyFrom(const EchoRequest& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:echo.EchoRequest)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool EchoRequest::IsInitialized() const {
    if (_Internal::MissingRequiredFields(_has_bits_)) return false;
    return true;
  }
  
  void EchoRequest::InternalSwap(EchoRequest* other) {
    using std::swap;
    auto* lhs_arena = GetArenaForAllocation();
    auto* rhs_arena = other->GetArenaForAllocation();
    _internal_metadata_.InternalSwap(&other->_internal_metadata_);
    swap(_has_bits_[0], other->_has_bits_[0]);
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
        &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
        &payload_, lhs_arena,
        &other->payload_, rhs_arena
    );
  }
  
  ::PROTOBUF_NAMESPACE_ID::Metadata EchoRequest::GetMetadata() const {
    return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
        &descriptor_table_echo_2eproto_getter, &descriptor_table_echo_2eproto_once,
        file_level_metadata_echo_2eproto[0]);
  }
  
  // ===================================================================
  
  class EchoResponse::_Internal {
   public:
    using HasBits = decltype(std::declval<EchoResponse>()._has_bits_);
    static void set_has_payload(HasBits* has_bits) {
      (*has_bits)[0] |= 1u;
    }
    static bool MissingRequiredFields(const HasBits& has_bits) {
      return ((has_bits[0] & 0x00000001) ^ 0x00000001) != 0;
    }
  };
  
  EchoResponse::EchoResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                           bool is_message_owned)
    : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
    SharedCtor();
    if (!is_message_owned) {
      RegisterArenaDtor(arena);
    }
    // @@protoc_insertion_point(arena_constructor:echo.EchoResponse)
  }
  EchoResponse::EchoResponse(const EchoResponse& from)
    : ::PROTOBUF_NAMESPACE_ID::Message(),
        _has_bits_(from._has_bits_) {
    _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
    payload_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
    #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
      payload_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
    #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
    if (from._internal_has_payload()) {
      payload_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_payload(), 
        GetArenaForAllocation());
    }
    // @@protoc_insertion_point(copy_constructor:echo.EchoResponse)
  }
  
  inline void EchoResponse::SharedCtor() {
  payload_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
    payload_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
  #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
  }
  
  EchoResponse::~EchoResponse() {
    // @@protoc_insertion_point(destructor:echo.EchoResponse)
    if (GetArenaForAllocation() != nullptr) return;
    SharedDtor();
    _internal_metadata_.Delete<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
  }
  
  inline void EchoResponse::SharedDtor() {
    GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
    payload_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  
  void EchoResponse::ArenaDtor(void* object) {
    EchoResponse* _this = reinterpret_cast< EchoResponse* >(object);
    (void)_this;
  }
  void EchoResponse::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
  }
  void EchoResponse::SetCachedSize(int size) const {
    _cached_size_.Set(size);
  }
  
  void EchoResponse::Clear() {
  // @@protoc_insertion_point(message_clear_start:echo.EchoResponse)
    uint32_t cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    cached_has_bits = _has_bits_[0];
    if (cached_has_bits & 0x00000001u) {
      payload_.ClearNonDefaultToEmpty();
    }
    _has_bits_.Clear();
    _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
  }
  
  const char* EchoResponse::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
  #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
    _Internal::HasBits has_bits{};
    while (!ctx->Done(&ptr)) {
      uint32_t tag;
      ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
      switch (tag >> 3) {
        // required string payload = 2;
        case 2:
          if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
            auto str = _internal_mutable_payload();
            ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
            #ifndef NDEBUG
            ::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "echo.EchoResponse.payload");
            #endif  // !NDEBUG
            CHK_(ptr);
          } else
            goto handle_unusual;
          continue;
        default:
          goto handle_unusual;
      }  // switch
    handle_unusual:
      if ((tag == 0) || ((tag & 7) == 4)) {
        CHK_(ptr);
        ctx->SetLastTag(tag);
        goto message_done;
      }
      ptr = UnknownFieldParse(
          tag,
          _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
          ptr, ctx);
      CHK_(ptr != nullptr);
    }  // while
  message_done:
    _has_bits_.Or(has_bits);
    return ptr;
  failure:
    ptr = nullptr;
    goto message_done;
  #undef CHK_
  }
  
  uint8_t* EchoResponse::_InternalSerialize(
      uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
    // @@protoc_insertion_point(serialize_to_array_start:echo.EchoResponse)
    uint32_t cached_has_bits = 0;
    (void) cached_has_bits;
  
    cached_has_bits = _has_bits_[0];
    // required string payload = 2;
    if (cached_has_bits & 0x00000001u) {
      ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::VerifyUTF8StringNamedField(
        this->_internal_payload().data(), static_cast<int>(this->_internal_payload().length()),
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SERIALIZE,
        "echo.EchoResponse.payload");
      target = stream->WriteStringMaybeAliased(
          2, this->_internal_payload(), target);
    }
  
    if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
      target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
          _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
    }
    // @@protoc_insertion_point(serialize_to_array_end:echo.EchoResponse)
    return target;
  }
  
  size_t EchoResponse::ByteSizeLong() const {
  // @@protoc_insertion_point(message_byte_size_start:echo.EchoResponse)
    size_t total_size = 0;
  
    // required string payload = 2;
    if (_internal_has_payload()) {
      total_size += 1 +
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
          this->_internal_payload());
    }
    uint32_t cached_has_bits = 0;
    // Prevent compiler warnings about cached_has_bits being unused
    (void) cached_has_bits;
  
    return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
  }
  
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData EchoResponse::_class_data_ = {
      ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
      EchoResponse::MergeImpl
  };
  const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*EchoResponse::GetClassData() const { return &_class_data_; }
  
  void EchoResponse::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
                        const ::PROTOBUF_NAMESPACE_ID::Message& from) {
    static_cast<EchoResponse *>(to)->MergeFrom(
        static_cast<const EchoResponse &>(from));
  }
  
  
  void EchoResponse::MergeFrom(const EchoResponse& from) {
  // @@protoc_insertion_point(class_specific_merge_from_start:echo.EchoResponse)
    GOOGLE_DCHECK_NE(&from, this);
    uint32_t cached_has_bits = 0;
    (void) cached_has_bits;
  
    if (from._internal_has_payload()) {
      _internal_set_payload(from._internal_payload());
    }
    _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
  }
  
  void EchoResponse::CopyFrom(const EchoResponse& from) {
  // @@protoc_insertion_point(class_specific_copy_from_start:echo.EchoResponse)
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool EchoResponse::IsInitialized() const {
    if (_Internal::MissingRequiredFields(_has_bits_)) return false;
    return true;
  }
  
  void EchoResponse::InternalSwap(EchoResponse* other) {
    using std::swap;
    auto* lhs_arena = GetArenaForAllocation();
    auto* rhs_arena = other->GetArenaForAllocation();
    _internal_metadata_.InternalSwap(&other->_internal_metadata_);
    swap(_has_bits_[0], other->_has_bits_[0]);
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
        &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
        &payload_, lhs_arena,
        &other->payload_, rhs_arena
    );
  }
  
  ::PROTOBUF_NAMESPACE_ID::Metadata EchoResponse::GetMetadata() const {
    return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
        &descriptor_table_echo_2eproto_getter, &descriptor_table_echo_2eproto_once,
        file_level_metadata_echo_2eproto[1]);
  }
  
  // ===================================================================
  
  EchoService::~EchoService() {}
  
  const ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor* EchoService::descriptor() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&descriptor_table_echo_2eproto);
    return file_level_service_descriptors_echo_2eproto[0];
  }
  
  const ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor* EchoService::GetDescriptor() {
    return descriptor();
  }
  
  void EchoService::Echo(::PROTOBUF_NAMESPACE_ID::RpcController* controller,
                           const ::echo::EchoRequest*,
                           ::echo::EchoResponse*,
                           ::google::protobuf::Closure* done) {
    controller->SetFailed("Method Echo() not implemented.");
    done->Run();
  }
  
  void EchoService::CallMethod(const ::PROTOBUF_NAMESPACE_ID::MethodDescriptor* method,
                               ::PROTOBUF_NAMESPACE_ID::RpcController* controller,
                               const ::PROTOBUF_NAMESPACE_ID::Message* request,
                               ::PROTOBUF_NAMESPACE_ID::Message* response,
                               ::google::protobuf::Closure* done) {
    GOOGLE_DCHECK_EQ(method->service(), file_level_service_descriptors_echo_2eproto[0]);
    switch(method->index()) {
      case 0:
        Echo(controller,
               ::PROTOBUF_NAMESPACE_ID::internal::DownCast<const ::echo::EchoRequest*>(
                   request),
               ::PROTOBUF_NAMESPACE_ID::internal::DownCast<::echo::EchoResponse*>(
                   response),
               done);
        break;
      default:
        GOOGLE_LOG(FATAL) << "Bad method index; this should never happen.";
        break;
    }
  }
  
  const ::PROTOBUF_NAMESPACE_ID::Message& EchoService::GetRequestPrototype(
      const ::PROTOBUF_NAMESPACE_ID::MethodDescriptor* method) const {
    GOOGLE_DCHECK_EQ(method->service(), descriptor());
    switch(method->index()) {
      case 0:
        return ::echo::EchoRequest::default_instance();
      default:
        GOOGLE_LOG(FATAL) << "Bad method index; this should never happen.";
        return *::PROTOBUF_NAMESPACE_ID::MessageFactory::generated_factory()
            ->GetPrototype(method->input_type());
    }
  }
  
  const ::PROTOBUF_NAMESPACE_ID::Message& EchoService::GetResponsePrototype(
      const ::PROTOBUF_NAMESPACE_ID::MethodDescriptor* method) const {
    GOOGLE_DCHECK_EQ(method->service(), descriptor());
    switch(method->index()) {
      case 0:
        return ::echo::EchoResponse::default_instance();
      default:
        GOOGLE_LOG(FATAL) << "Bad method index; this should never happen.";
        return *::PROTOBUF_NAMESPACE_ID::MessageFactory::generated_factory()
            ->GetPrototype(method->output_type());
    }
  }
  
  EchoService_Stub::EchoService_Stub(::PROTOBUF_NAMESPACE_ID::RpcChannel* channel)
    : channel_(channel), owns_channel_(false) {}
  EchoService_Stub::EchoService_Stub(
      ::PROTOBUF_NAMESPACE_ID::RpcChannel* channel,
      ::PROTOBUF_NAMESPACE_ID::Service::ChannelOwnership ownership)
    : channel_(channel),
      owns_channel_(ownership == ::PROTOBUF_NAMESPACE_ID::Service::STUB_OWNS_CHANNEL) {}
  EchoService_Stub::~EchoService_Stub() {
    if (owns_channel_) delete channel_;
  }
  
  void EchoService_Stub::Echo(::PROTOBUF_NAMESPACE_ID::RpcController* controller,
                                const ::echo::EchoRequest* request,
                                ::echo::EchoResponse* response,
                                ::google::protobuf::Closure* done) {
    channel_->CallMethod(descriptor()->method(0),
                         controller, request, response, done);
  }
  
  // @@protoc_insertion_point(namespace_scope)
  }  // namespace echo
  PROTOBUF_NAMESPACE_OPEN
  template<> PROTOBUF_NOINLINE ::echo::EchoRequest* Arena::CreateMaybeMessage< ::echo::EchoRequest >(Arena* arena) {
    return Arena::CreateMessageInternal< ::echo::EchoRequest >(arena);
  }
  template<> PROTOBUF_NOINLINE ::echo::EchoResponse* Arena::CreateMaybeMessage< ::echo::EchoResponse >(Arena* arena) {
    return Arena::CreateMessageInternal< ::echo::EchoResponse >(arena);
  }
  PROTOBUF_NAMESPACE_CLOSE
  
  // @@protoc_insertion_point(global_scope)
  #include <google/protobuf/port_undef.inc>
  