// Generated by the gRPC C++ plugin.
// If you make any local change, they will be lost.
// source: hillab_beam_stabilization_system.proto
#ifndef GRPC_hillab_5fbeam_5fstabilization_5fsystem_2eproto__INCLUDED
#define GRPC_hillab_5fbeam_5fstabilization_5fsystem_2eproto__INCLUDED

#include "hillab_beam_stabilization_system.pb.h"

#include <functional>
#include <grpcpp/generic/async_generic_service.h>
#include <grpcpp/support/async_stream.h>
#include <grpcpp/support/async_unary_call.h>
#include <grpcpp/support/client_callback.h>
#include <grpcpp/client_context.h>
#include <grpcpp/completion_queue.h>
#include <grpcpp/support/message_allocator.h>
#include <grpcpp/support/method_handler.h>
#include <grpcpp/impl/proto_utils.h>
#include <grpcpp/impl/rpc_method.h>
#include <grpcpp/support/server_callback.h>
#include <grpcpp/impl/server_callback_handlers.h>
#include <grpcpp/server_context.h>
#include <grpcpp/impl/service_type.h>
#include <grpcpp/support/status.h>
#include <grpcpp/support/stub_options.h>
#include <grpcpp/support/sync_stream.h>

namespace hillab {
namespace v4 {

// BeamStabilizationSystem service that allows retrieving and setting beam profile data.
class BeamStabilizationSystem final {
 public:
  static constexpr char const* service_full_name() {
    return "hillab.v4.BeamStabilizationSystem";
  }
  class StubInterface {
   public:
    virtual ~StubInterface() {}
    // Retrieves the value named given key.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure since various reasons. See message for more detail.
    // - Status "NOT_FOUND" for failure since given key is undefined.
    // - Status "INTERNAL" for failure since system error. 
    virtual ::grpc::Status Get(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::hillab::v4::GetResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::GetResponse>> AsyncGet(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::GetResponse>>(AsyncGetRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::GetResponse>> PrepareAsyncGet(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::GetResponse>>(PrepareAsyncGetRaw(context, request, cq));
    }
    // Modifies the value named given key.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure since various reasons. See message for more detail.
    // - Status "INVALID_ARGUMENT" for failure since various reasons. See message for more detail.
    // - Status "NOT_FOUND" for failure since given key is undefined.
    // - Status "INTERNAL" for failure since system error.
    virtual ::grpc::Status Set(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::google::protobuf::Empty* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> AsyncSet(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(AsyncSetRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> PrepareAsyncSet(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(PrepareAsyncSetRaw(context, request, cq));
    }
    // Retrieves the stream object for obtaining the beam profiles.
    // When the near field profile is finished, the near field and far field profiles are streamed.
    // Returns: 
    // - Status "OK" for successful.
    std::unique_ptr< ::grpc::ClientReaderInterface< ::hillab::v4::BeamProfileStream>> MonitorBeamProfile(::grpc::ClientContext* context, const ::google::protobuf::Empty& request) {
      return std::unique_ptr< ::grpc::ClientReaderInterface< ::hillab::v4::BeamProfileStream>>(MonitorBeamProfileRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hillab::v4::BeamProfileStream>> AsyncMonitorBeamProfile(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hillab::v4::BeamProfileStream>>(AsyncMonitorBeamProfileRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hillab::v4::BeamProfileStream>> PrepareAsyncMonitorBeamProfile(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hillab::v4::BeamProfileStream>>(PrepareAsyncMonitorBeamProfileRaw(context, request, cq));
    }
    class async_interface {
     public:
      virtual ~async_interface() {}
      // Retrieves the value named given key.
      // Returns: 
      // - Status "OK" for successful.
      // - Status "FAILED_PRECONDITION" for failure since various reasons. See message for more detail.
      // - Status "NOT_FOUND" for failure since given key is undefined.
      // - Status "INTERNAL" for failure since system error. 
      virtual void Get(::grpc::ClientContext* context, const ::hillab::v4::GetRequest* request, ::hillab::v4::GetResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void Get(::grpc::ClientContext* context, const ::hillab::v4::GetRequest* request, ::hillab::v4::GetResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Modifies the value named given key.
      // Returns: 
      // - Status "OK" for successful.
      // - Status "FAILED_PRECONDITION" for failure since various reasons. See message for more detail.
      // - Status "INVALID_ARGUMENT" for failure since various reasons. See message for more detail.
      // - Status "NOT_FOUND" for failure since given key is undefined.
      // - Status "INTERNAL" for failure since system error.
      virtual void Set(::grpc::ClientContext* context, const ::hillab::v4::SetRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) = 0;
      virtual void Set(::grpc::ClientContext* context, const ::hillab::v4::SetRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Retrieves the stream object for obtaining the beam profiles.
      // When the near field profile is finished, the near field and far field profiles are streamed.
      // Returns: 
      // - Status "OK" for successful.
      virtual void MonitorBeamProfile(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::grpc::ClientReadReactor< ::hillab::v4::BeamProfileStream>* reactor) = 0;
    };
    typedef class async_interface experimental_async_interface;
    virtual class async_interface* async() { return nullptr; }
    class async_interface* experimental_async() { return async(); }
   private:
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::GetResponse>* AsyncGetRaw(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::GetResponse>* PrepareAsyncGetRaw(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* AsyncSetRaw(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* PrepareAsyncSetRaw(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientReaderInterface< ::hillab::v4::BeamProfileStream>* MonitorBeamProfileRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::hillab::v4::BeamProfileStream>* AsyncMonitorBeamProfileRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq, void* tag) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::hillab::v4::BeamProfileStream>* PrepareAsyncMonitorBeamProfileRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
  };
  class Stub final : public StubInterface {
   public:
    Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions());
    ::grpc::Status Get(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::hillab::v4::GetResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::GetResponse>> AsyncGet(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::GetResponse>>(AsyncGetRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::GetResponse>> PrepareAsyncGet(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::GetResponse>>(PrepareAsyncGetRaw(context, request, cq));
    }
    ::grpc::Status Set(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::google::protobuf::Empty* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> AsyncSet(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(AsyncSetRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> PrepareAsyncSet(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(PrepareAsyncSetRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientReader< ::hillab::v4::BeamProfileStream>> MonitorBeamProfile(::grpc::ClientContext* context, const ::google::protobuf::Empty& request) {
      return std::unique_ptr< ::grpc::ClientReader< ::hillab::v4::BeamProfileStream>>(MonitorBeamProfileRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::hillab::v4::BeamProfileStream>> AsyncMonitorBeamProfile(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::hillab::v4::BeamProfileStream>>(AsyncMonitorBeamProfileRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::hillab::v4::BeamProfileStream>> PrepareAsyncMonitorBeamProfile(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::hillab::v4::BeamProfileStream>>(PrepareAsyncMonitorBeamProfileRaw(context, request, cq));
    }
    class async final :
      public StubInterface::async_interface {
     public:
      void Get(::grpc::ClientContext* context, const ::hillab::v4::GetRequest* request, ::hillab::v4::GetResponse* response, std::function<void(::grpc::Status)>) override;
      void Get(::grpc::ClientContext* context, const ::hillab::v4::GetRequest* request, ::hillab::v4::GetResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void Set(::grpc::ClientContext* context, const ::hillab::v4::SetRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) override;
      void Set(::grpc::ClientContext* context, const ::hillab::v4::SetRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) override;
      void MonitorBeamProfile(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::grpc::ClientReadReactor< ::hillab::v4::BeamProfileStream>* reactor) override;
     private:
      friend class Stub;
      explicit async(Stub* stub): stub_(stub) { }
      Stub* stub() { return stub_; }
      Stub* stub_;
    };
    class async* async() override { return &async_stub_; }

   private:
    std::shared_ptr< ::grpc::ChannelInterface> channel_;
    class async async_stub_{this};
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::GetResponse>* AsyncGetRaw(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::GetResponse>* PrepareAsyncGetRaw(::grpc::ClientContext* context, const ::hillab::v4::GetRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* AsyncSetRaw(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* PrepareAsyncSetRaw(::grpc::ClientContext* context, const ::hillab::v4::SetRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientReader< ::hillab::v4::BeamProfileStream>* MonitorBeamProfileRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request) override;
    ::grpc::ClientAsyncReader< ::hillab::v4::BeamProfileStream>* AsyncMonitorBeamProfileRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq, void* tag) override;
    ::grpc::ClientAsyncReader< ::hillab::v4::BeamProfileStream>* PrepareAsyncMonitorBeamProfileRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    const ::grpc::internal::RpcMethod rpcmethod_Get_;
    const ::grpc::internal::RpcMethod rpcmethod_Set_;
    const ::grpc::internal::RpcMethod rpcmethod_MonitorBeamProfile_;
  };
  static std::unique_ptr<Stub> NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions());

  class Service : public ::grpc::Service {
   public:
    Service();
    virtual ~Service();
    // Retrieves the value named given key.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure since various reasons. See message for more detail.
    // - Status "NOT_FOUND" for failure since given key is undefined.
    // - Status "INTERNAL" for failure since system error. 
    virtual ::grpc::Status Get(::grpc::ServerContext* context, const ::hillab::v4::GetRequest* request, ::hillab::v4::GetResponse* response);
    // Modifies the value named given key.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure since various reasons. See message for more detail.
    // - Status "INVALID_ARGUMENT" for failure since various reasons. See message for more detail.
    // - Status "NOT_FOUND" for failure since given key is undefined.
    // - Status "INTERNAL" for failure since system error.
    virtual ::grpc::Status Set(::grpc::ServerContext* context, const ::hillab::v4::SetRequest* request, ::google::protobuf::Empty* response);
    // Retrieves the stream object for obtaining the beam profiles.
    // When the near field profile is finished, the near field and far field profiles are streamed.
    // Returns: 
    // - Status "OK" for successful.
    virtual ::grpc::Status MonitorBeamProfile(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::grpc::ServerWriter< ::hillab::v4::BeamProfileStream>* writer);
  };
  template <class BaseClass>
  class WithAsyncMethod_Get : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_Get() {
      ::grpc::Service::MarkMethodAsync(0);
    }
    ~WithAsyncMethod_Get() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Get(::grpc::ServerContext* /*context*/, const ::hillab::v4::GetRequest* /*request*/, ::hillab::v4::GetResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGet(::grpc::ServerContext* context, ::hillab::v4::GetRequest* request, ::grpc::ServerAsyncResponseWriter< ::hillab::v4::GetResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(0, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_Set : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_Set() {
      ::grpc::Service::MarkMethodAsync(1);
    }
    ~WithAsyncMethod_Set() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Set(::grpc::ServerContext* /*context*/, const ::hillab::v4::SetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSet(::grpc::ServerContext* context, ::hillab::v4::SetRequest* request, ::grpc::ServerAsyncResponseWriter< ::google::protobuf::Empty>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(1, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_MonitorBeamProfile : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_MonitorBeamProfile() {
      ::grpc::Service::MarkMethodAsync(2);
    }
    ~WithAsyncMethod_MonitorBeamProfile() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorBeamProfile(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::BeamProfileStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestMonitorBeamProfile(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncWriter< ::hillab::v4::BeamProfileStream>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncServerStreaming(2, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  typedef WithAsyncMethod_Get<WithAsyncMethod_Set<WithAsyncMethod_MonitorBeamProfile<Service > > > AsyncService;
  template <class BaseClass>
  class WithCallbackMethod_Get : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_Get() {
      ::grpc::Service::MarkMethodCallback(0,
          new ::grpc::internal::CallbackUnaryHandler< ::hillab::v4::GetRequest, ::hillab::v4::GetResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::hillab::v4::GetRequest* request, ::hillab::v4::GetResponse* response) { return this->Get(context, request, response); }));}
    void SetMessageAllocatorFor_Get(
        ::grpc::MessageAllocator< ::hillab::v4::GetRequest, ::hillab::v4::GetResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(0);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::hillab::v4::GetRequest, ::hillab::v4::GetResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_Get() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Get(::grpc::ServerContext* /*context*/, const ::hillab::v4::GetRequest* /*request*/, ::hillab::v4::GetResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* Get(
      ::grpc::CallbackServerContext* /*context*/, const ::hillab::v4::GetRequest* /*request*/, ::hillab::v4::GetResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_Set : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_Set() {
      ::grpc::Service::MarkMethodCallback(1,
          new ::grpc::internal::CallbackUnaryHandler< ::hillab::v4::SetRequest, ::google::protobuf::Empty>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::hillab::v4::SetRequest* request, ::google::protobuf::Empty* response) { return this->Set(context, request, response); }));}
    void SetMessageAllocatorFor_Set(
        ::grpc::MessageAllocator< ::hillab::v4::SetRequest, ::google::protobuf::Empty>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(1);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::hillab::v4::SetRequest, ::google::protobuf::Empty>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_Set() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Set(::grpc::ServerContext* /*context*/, const ::hillab::v4::SetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* Set(
      ::grpc::CallbackServerContext* /*context*/, const ::hillab::v4::SetRequest* /*request*/, ::google::protobuf::Empty* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_MonitorBeamProfile : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_MonitorBeamProfile() {
      ::grpc::Service::MarkMethodCallback(2,
          new ::grpc::internal::CallbackServerStreamingHandler< ::google::protobuf::Empty, ::hillab::v4::BeamProfileStream>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request) { return this->MonitorBeamProfile(context, request); }));
    }
    ~WithCallbackMethod_MonitorBeamProfile() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorBeamProfile(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::BeamProfileStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::hillab::v4::BeamProfileStream>* MonitorBeamProfile(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/)  { return nullptr; }
  };
  typedef WithCallbackMethod_Get<WithCallbackMethod_Set<WithCallbackMethod_MonitorBeamProfile<Service > > > CallbackService;
  typedef CallbackService ExperimentalCallbackService;
  template <class BaseClass>
  class WithGenericMethod_Get : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_Get() {
      ::grpc::Service::MarkMethodGeneric(0);
    }
    ~WithGenericMethod_Get() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Get(::grpc::ServerContext* /*context*/, const ::hillab::v4::GetRequest* /*request*/, ::hillab::v4::GetResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_Set : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_Set() {
      ::grpc::Service::MarkMethodGeneric(1);
    }
    ~WithGenericMethod_Set() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Set(::grpc::ServerContext* /*context*/, const ::hillab::v4::SetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_MonitorBeamProfile : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_MonitorBeamProfile() {
      ::grpc::Service::MarkMethodGeneric(2);
    }
    ~WithGenericMethod_MonitorBeamProfile() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorBeamProfile(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::BeamProfileStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithRawMethod_Get : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_Get() {
      ::grpc::Service::MarkMethodRaw(0);
    }
    ~WithRawMethod_Get() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Get(::grpc::ServerContext* /*context*/, const ::hillab::v4::GetRequest* /*request*/, ::hillab::v4::GetResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGet(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(0, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_Set : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_Set() {
      ::grpc::Service::MarkMethodRaw(1);
    }
    ~WithRawMethod_Set() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Set(::grpc::ServerContext* /*context*/, const ::hillab::v4::SetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSet(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(1, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_MonitorBeamProfile : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_MonitorBeamProfile() {
      ::grpc::Service::MarkMethodRaw(2);
    }
    ~WithRawMethod_MonitorBeamProfile() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorBeamProfile(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::BeamProfileStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestMonitorBeamProfile(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncWriter< ::grpc::ByteBuffer>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncServerStreaming(2, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_Get : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_Get() {
      ::grpc::Service::MarkMethodRawCallback(0,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->Get(context, request, response); }));
    }
    ~WithRawCallbackMethod_Get() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Get(::grpc::ServerContext* /*context*/, const ::hillab::v4::GetRequest* /*request*/, ::hillab::v4::GetResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* Get(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_Set : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_Set() {
      ::grpc::Service::MarkMethodRawCallback(1,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->Set(context, request, response); }));
    }
    ~WithRawCallbackMethod_Set() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status Set(::grpc::ServerContext* /*context*/, const ::hillab::v4::SetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* Set(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_MonitorBeamProfile : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_MonitorBeamProfile() {
      ::grpc::Service::MarkMethodRawCallback(2,
          new ::grpc::internal::CallbackServerStreamingHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const::grpc::ByteBuffer* request) { return this->MonitorBeamProfile(context, request); }));
    }
    ~WithRawCallbackMethod_MonitorBeamProfile() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorBeamProfile(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::BeamProfileStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::grpc::ByteBuffer>* MonitorBeamProfile(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_Get : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_Get() {
      ::grpc::Service::MarkMethodStreamed(0,
        new ::grpc::internal::StreamedUnaryHandler<
          ::hillab::v4::GetRequest, ::hillab::v4::GetResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::hillab::v4::GetRequest, ::hillab::v4::GetResponse>* streamer) {
                       return this->StreamedGet(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_Get() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status Get(::grpc::ServerContext* /*context*/, const ::hillab::v4::GetRequest* /*request*/, ::hillab::v4::GetResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGet(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::hillab::v4::GetRequest,::hillab::v4::GetResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_Set : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_Set() {
      ::grpc::Service::MarkMethodStreamed(1,
        new ::grpc::internal::StreamedUnaryHandler<
          ::hillab::v4::SetRequest, ::google::protobuf::Empty>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::hillab::v4::SetRequest, ::google::protobuf::Empty>* streamer) {
                       return this->StreamedSet(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_Set() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status Set(::grpc::ServerContext* /*context*/, const ::hillab::v4::SetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedSet(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::hillab::v4::SetRequest,::google::protobuf::Empty>* server_unary_streamer) = 0;
  };
  typedef WithStreamedUnaryMethod_Get<WithStreamedUnaryMethod_Set<Service > > StreamedUnaryService;
  template <class BaseClass>
  class WithSplitStreamingMethod_MonitorBeamProfile : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithSplitStreamingMethod_MonitorBeamProfile() {
      ::grpc::Service::MarkMethodStreamed(2,
        new ::grpc::internal::SplitServerStreamingHandler<
          ::google::protobuf::Empty, ::hillab::v4::BeamProfileStream>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerSplitStreamer<
                     ::google::protobuf::Empty, ::hillab::v4::BeamProfileStream>* streamer) {
                       return this->StreamedMonitorBeamProfile(context,
                         streamer);
                  }));
    }
    ~WithSplitStreamingMethod_MonitorBeamProfile() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status MonitorBeamProfile(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::BeamProfileStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with split streamed
    virtual ::grpc::Status StreamedMonitorBeamProfile(::grpc::ServerContext* context, ::grpc::ServerSplitStreamer< ::google::protobuf::Empty,::hillab::v4::BeamProfileStream>* server_split_streamer) = 0;
  };
  typedef WithSplitStreamingMethod_MonitorBeamProfile<Service > SplitStreamedService;
  typedef WithStreamedUnaryMethod_Get<WithStreamedUnaryMethod_Set<WithSplitStreamingMethod_MonitorBeamProfile<Service > > > StreamedService;
};

class System final {
 public:
  static constexpr char const* service_full_name() {
    return "hillab.v4.System";
  }
  class StubInterface {
   public:
    virtual ~StubInterface() {}
    // Retrieves application information.
    // Returns: 
    // - Status "OK" and response indicating the app information.
    virtual ::grpc::Status GetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::AppInfoResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::AppInfoResponse>> AsyncGetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::AppInfoResponse>>(AsyncGetAppInfoRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::AppInfoResponse>> PrepareAsyncGetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::AppInfoResponse>>(PrepareAsyncGetAppInfoRaw(context, request, cq));
    }
    // Retrieves registered preset list.
    // Returns: 
    // - Status "OK" and response indicating the preset name list.
    virtual ::grpc::Status GetPresetList(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::PresetListResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::PresetListResponse>> AsyncGetPresetList(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::PresetListResponse>>(AsyncGetPresetListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::PresetListResponse>> PrepareAsyncGetPresetList(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::PresetListResponse>>(PrepareAsyncGetPresetListRaw(context, request, cq));
    }
    // Retrieves the loaded preset.
    // Returns: 
    // - Status "OK" and response indicating the loaded preset name.
    virtual ::grpc::Status GetCurrentPreset(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::PresetResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::PresetResponse>> AsyncGetCurrentPreset(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::PresetResponse>>(AsyncGetCurrentPresetRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::PresetResponse>> PrepareAsyncGetCurrentPreset(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::PresetResponse>>(PrepareAsyncGetCurrentPresetRaw(context, request, cq));
    }
    // Loads preset. All system properties are applied as loaded presets, but information of gRPC host and Image Stream hosts is not loaded.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure since the preset name is not exist in registered preset list.
    virtual ::grpc::Status LoadPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::google::protobuf::Empty* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> AsyncLoadPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(AsyncLoadPresetRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> PrepareAsyncLoadPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(PrepareAsyncLoadPresetRaw(context, request, cq));
    }
    // Saves preset. All system properties are saved in the current preset, including information of gRPC hosts and Image Stream hosts.
    // Returns: 
    // - Status "OK" for successful saving the preset.
    virtual ::grpc::Status SavePreset(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::google::protobuf::Empty* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> AsyncSavePreset(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(AsyncSavePresetRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> PrepareAsyncSavePreset(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(PrepareAsyncSavePresetRaw(context, request, cq));
    }
    // Adds available preset. All system properties will be saved with new preset.
    // This works like "Save as".
    // If the preset already exist, the existing preset will be overwritten.
    // Returns: 
    // - Status "OK" for successful.
    virtual ::grpc::Status AddPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::google::protobuf::Empty* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> AsyncAddPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(AsyncAddPresetRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> PrepareAsyncAddPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(PrepareAsyncAddPresetRaw(context, request, cq));
    }
    // Removes preset from the registered preset list.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure since target preset is loaded or not exist in registered preset list.
    virtual ::grpc::Status RemovePreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::google::protobuf::Empty* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> AsyncRemovePreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(AsyncRemovePresetRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> PrepareAsyncRemovePreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(PrepareAsyncRemovePresetRaw(context, request, cq));
    }
    // Retrieves image stream server information for near field image.
    // Returns: 
    // - Status "OK" and response indicating the image stream information.
    virtual ::grpc::Status GetNearFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::ImageStreamServerResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>> AsyncGetNearFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>>(AsyncGetNearFieldImageStreamServerInfoRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>> PrepareAsyncGetNearFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>>(PrepareAsyncGetNearFieldImageStreamServerInfoRaw(context, request, cq));
    }
    // Retrieves image stream server information for far field image.
    // Returns: 
    // - Status "OK" and response indicating the image stream information.
    virtual ::grpc::Status GetFarFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::ImageStreamServerResponse* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>> AsyncGetFarFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>>(AsyncGetFarFieldImageStreamServerInfoRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>> PrepareAsyncGetFarFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>>(PrepareAsyncGetFarFieldImageStreamServerInfoRaw(context, request, cq));
    }
    // Starts/stops image stream server for near field image and/or modifies options. 
    // The server's URL (IP and Port) cannot be changed with gRPC.
    // Note that the camera must be streaming to start the stream server.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "INVALID ARGUMENT" for failure since some values are out of range.
    // - Status "FAILED_PRECONDITION" for indicating that the stream cannot be started, or failure for changing some value since the server is running.
    virtual ::grpc::Status SetNearFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::google::protobuf::Empty* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> AsyncSetNearFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(AsyncSetNearFieldImageStreamServerRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> PrepareAsyncSetNearFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(PrepareAsyncSetNearFieldImageStreamServerRaw(context, request, cq));
    }
    // Starts/stops image stream server for far field image and/or modifies options. 
    // The server's URL (IP and Port) cannot be changed with gRPC.
    // Note that the camera must be streaming to start the stream server.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "INVALID ARGUMENT" for failure since some values are out of range.
    // - Status "FAILED_PRECONDITION" for indicating that the stream cannot be started, or failure for changing some value since the server is running.
    virtual ::grpc::Status SetFarFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::google::protobuf::Empty* response) = 0;
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> AsyncSetFarFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(AsyncSetFarFieldImageStreamServerRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>> PrepareAsyncSetFarFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>>(PrepareAsyncSetFarFieldImageStreamServerRaw(context, request, cq));
    }
    // Retrieves the stream object for obtaining the system log message.
    // Returns: 
    // - Status "OK" for successful.
    std::unique_ptr< ::grpc::ClientReaderInterface< ::hillab::v4::SystemLogStream>> MonitorSystemLog(::grpc::ClientContext* context, const ::google::protobuf::Empty& request) {
      return std::unique_ptr< ::grpc::ClientReaderInterface< ::hillab::v4::SystemLogStream>>(MonitorSystemLogRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hillab::v4::SystemLogStream>> AsyncMonitorSystemLog(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hillab::v4::SystemLogStream>>(AsyncMonitorSystemLogRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hillab::v4::SystemLogStream>> PrepareAsyncMonitorSystemLog(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::hillab::v4::SystemLogStream>>(PrepareAsyncMonitorSystemLogRaw(context, request, cq));
    }
    class async_interface {
     public:
      virtual ~async_interface() {}
      // Retrieves application information.
      // Returns: 
      // - Status "OK" and response indicating the app information.
      virtual void GetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::AppInfoResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::AppInfoResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Retrieves registered preset list.
      // Returns: 
      // - Status "OK" and response indicating the preset name list.
      virtual void GetPresetList(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::PresetListResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetPresetList(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::PresetListResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Retrieves the loaded preset.
      // Returns: 
      // - Status "OK" and response indicating the loaded preset name.
      virtual void GetCurrentPreset(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::PresetResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetCurrentPreset(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::PresetResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Loads preset. All system properties are applied as loaded presets, but information of gRPC host and Image Stream hosts is not loaded.
      // Returns: 
      // - Status "OK" for successful.
      // - Status "FAILED_PRECONDITION" for failure since the preset name is not exist in registered preset list.
      virtual void LoadPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) = 0;
      virtual void LoadPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Saves preset. All system properties are saved in the current preset, including information of gRPC hosts and Image Stream hosts.
      // Returns: 
      // - Status "OK" for successful saving the preset.
      virtual void SavePreset(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) = 0;
      virtual void SavePreset(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Adds available preset. All system properties will be saved with new preset.
      // This works like "Save as".
      // If the preset already exist, the existing preset will be overwritten.
      // Returns: 
      // - Status "OK" for successful.
      virtual void AddPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) = 0;
      virtual void AddPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Removes preset from the registered preset list.
      // Returns: 
      // - Status "OK" for successful.
      // - Status "FAILED_PRECONDITION" for failure since target preset is loaded or not exist in registered preset list.
      virtual void RemovePreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) = 0;
      virtual void RemovePreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Retrieves image stream server information for near field image.
      // Returns: 
      // - Status "OK" and response indicating the image stream information.
      virtual void GetNearFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetNearFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Retrieves image stream server information for far field image.
      // Returns: 
      // - Status "OK" and response indicating the image stream information.
      virtual void GetFarFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response, std::function<void(::grpc::Status)>) = 0;
      virtual void GetFarFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Starts/stops image stream server for near field image and/or modifies options. 
      // The server's URL (IP and Port) cannot be changed with gRPC.
      // Note that the camera must be streaming to start the stream server.
      // Returns: 
      // - Status "OK" for successful.
      // - Status "INVALID ARGUMENT" for failure since some values are out of range.
      // - Status "FAILED_PRECONDITION" for indicating that the stream cannot be started, or failure for changing some value since the server is running.
      virtual void SetNearFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) = 0;
      virtual void SetNearFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Starts/stops image stream server for far field image and/or modifies options. 
      // The server's URL (IP and Port) cannot be changed with gRPC.
      // Note that the camera must be streaming to start the stream server.
      // Returns: 
      // - Status "OK" for successful.
      // - Status "INVALID ARGUMENT" for failure since some values are out of range.
      // - Status "FAILED_PRECONDITION" for indicating that the stream cannot be started, or failure for changing some value since the server is running.
      virtual void SetFarFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) = 0;
      virtual void SetFarFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) = 0;
      // Retrieves the stream object for obtaining the system log message.
      // Returns: 
      // - Status "OK" for successful.
      virtual void MonitorSystemLog(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::grpc::ClientReadReactor< ::hillab::v4::SystemLogStream>* reactor) = 0;
    };
    typedef class async_interface experimental_async_interface;
    virtual class async_interface* async() { return nullptr; }
    class async_interface* experimental_async() { return async(); }
   private:
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::AppInfoResponse>* AsyncGetAppInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::AppInfoResponse>* PrepareAsyncGetAppInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::PresetListResponse>* AsyncGetPresetListRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::PresetListResponse>* PrepareAsyncGetPresetListRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::PresetResponse>* AsyncGetCurrentPresetRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::PresetResponse>* PrepareAsyncGetCurrentPresetRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* AsyncLoadPresetRaw(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* PrepareAsyncLoadPresetRaw(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* AsyncSavePresetRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* PrepareAsyncSavePresetRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* AsyncAddPresetRaw(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* PrepareAsyncAddPresetRaw(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* AsyncRemovePresetRaw(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* PrepareAsyncRemovePresetRaw(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>* AsyncGetNearFieldImageStreamServerInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>* PrepareAsyncGetNearFieldImageStreamServerInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>* AsyncGetFarFieldImageStreamServerInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::hillab::v4::ImageStreamServerResponse>* PrepareAsyncGetFarFieldImageStreamServerInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* AsyncSetNearFieldImageStreamServerRaw(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* PrepareAsyncSetNearFieldImageStreamServerRaw(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* AsyncSetFarFieldImageStreamServerRaw(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientAsyncResponseReaderInterface< ::google::protobuf::Empty>* PrepareAsyncSetFarFieldImageStreamServerRaw(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) = 0;
    virtual ::grpc::ClientReaderInterface< ::hillab::v4::SystemLogStream>* MonitorSystemLogRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::hillab::v4::SystemLogStream>* AsyncMonitorSystemLogRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq, void* tag) = 0;
    virtual ::grpc::ClientAsyncReaderInterface< ::hillab::v4::SystemLogStream>* PrepareAsyncMonitorSystemLogRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
  };
  class Stub final : public StubInterface {
   public:
    Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions());
    ::grpc::Status GetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::AppInfoResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::AppInfoResponse>> AsyncGetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::AppInfoResponse>>(AsyncGetAppInfoRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::AppInfoResponse>> PrepareAsyncGetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::AppInfoResponse>>(PrepareAsyncGetAppInfoRaw(context, request, cq));
    }
    ::grpc::Status GetPresetList(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::PresetListResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::PresetListResponse>> AsyncGetPresetList(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::PresetListResponse>>(AsyncGetPresetListRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::PresetListResponse>> PrepareAsyncGetPresetList(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::PresetListResponse>>(PrepareAsyncGetPresetListRaw(context, request, cq));
    }
    ::grpc::Status GetCurrentPreset(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::PresetResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::PresetResponse>> AsyncGetCurrentPreset(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::PresetResponse>>(AsyncGetCurrentPresetRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::PresetResponse>> PrepareAsyncGetCurrentPreset(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::PresetResponse>>(PrepareAsyncGetCurrentPresetRaw(context, request, cq));
    }
    ::grpc::Status LoadPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::google::protobuf::Empty* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> AsyncLoadPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(AsyncLoadPresetRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> PrepareAsyncLoadPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(PrepareAsyncLoadPresetRaw(context, request, cq));
    }
    ::grpc::Status SavePreset(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::google::protobuf::Empty* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> AsyncSavePreset(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(AsyncSavePresetRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> PrepareAsyncSavePreset(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(PrepareAsyncSavePresetRaw(context, request, cq));
    }
    ::grpc::Status AddPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::google::protobuf::Empty* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> AsyncAddPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(AsyncAddPresetRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> PrepareAsyncAddPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(PrepareAsyncAddPresetRaw(context, request, cq));
    }
    ::grpc::Status RemovePreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::google::protobuf::Empty* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> AsyncRemovePreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(AsyncRemovePresetRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> PrepareAsyncRemovePreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(PrepareAsyncRemovePresetRaw(context, request, cq));
    }
    ::grpc::Status GetNearFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::ImageStreamServerResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>> AsyncGetNearFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>>(AsyncGetNearFieldImageStreamServerInfoRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>> PrepareAsyncGetNearFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>>(PrepareAsyncGetNearFieldImageStreamServerInfoRaw(context, request, cq));
    }
    ::grpc::Status GetFarFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::hillab::v4::ImageStreamServerResponse* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>> AsyncGetFarFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>>(AsyncGetFarFieldImageStreamServerInfoRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>> PrepareAsyncGetFarFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>>(PrepareAsyncGetFarFieldImageStreamServerInfoRaw(context, request, cq));
    }
    ::grpc::Status SetNearFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::google::protobuf::Empty* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> AsyncSetNearFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(AsyncSetNearFieldImageStreamServerRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> PrepareAsyncSetNearFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(PrepareAsyncSetNearFieldImageStreamServerRaw(context, request, cq));
    }
    ::grpc::Status SetFarFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::google::protobuf::Empty* response) override;
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> AsyncSetFarFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(AsyncSetFarFieldImageStreamServerRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>> PrepareAsyncSetFarFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>>(PrepareAsyncSetFarFieldImageStreamServerRaw(context, request, cq));
    }
    std::unique_ptr< ::grpc::ClientReader< ::hillab::v4::SystemLogStream>> MonitorSystemLog(::grpc::ClientContext* context, const ::google::protobuf::Empty& request) {
      return std::unique_ptr< ::grpc::ClientReader< ::hillab::v4::SystemLogStream>>(MonitorSystemLogRaw(context, request));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::hillab::v4::SystemLogStream>> AsyncMonitorSystemLog(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq, void* tag) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::hillab::v4::SystemLogStream>>(AsyncMonitorSystemLogRaw(context, request, cq, tag));
    }
    std::unique_ptr< ::grpc::ClientAsyncReader< ::hillab::v4::SystemLogStream>> PrepareAsyncMonitorSystemLog(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
      return std::unique_ptr< ::grpc::ClientAsyncReader< ::hillab::v4::SystemLogStream>>(PrepareAsyncMonitorSystemLogRaw(context, request, cq));
    }
    class async final :
      public StubInterface::async_interface {
     public:
      void GetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::AppInfoResponse* response, std::function<void(::grpc::Status)>) override;
      void GetAppInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::AppInfoResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetPresetList(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::PresetListResponse* response, std::function<void(::grpc::Status)>) override;
      void GetPresetList(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::PresetListResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetCurrentPreset(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::PresetResponse* response, std::function<void(::grpc::Status)>) override;
      void GetCurrentPreset(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::PresetResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void LoadPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) override;
      void LoadPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) override;
      void SavePreset(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) override;
      void SavePreset(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) override;
      void AddPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) override;
      void AddPreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) override;
      void RemovePreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) override;
      void RemovePreset(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetNearFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response, std::function<void(::grpc::Status)>) override;
      void GetNearFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void GetFarFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response, std::function<void(::grpc::Status)>) override;
      void GetFarFieldImageStreamServerInfo(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
      void SetNearFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) override;
      void SetNearFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) override;
      void SetFarFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response, std::function<void(::grpc::Status)>) override;
      void SetFarFieldImageStreamServer(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response, ::grpc::ClientUnaryReactor* reactor) override;
      void MonitorSystemLog(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::grpc::ClientReadReactor< ::hillab::v4::SystemLogStream>* reactor) override;
     private:
      friend class Stub;
      explicit async(Stub* stub): stub_(stub) { }
      Stub* stub() { return stub_; }
      Stub* stub_;
    };
    class async* async() override { return &async_stub_; }

   private:
    std::shared_ptr< ::grpc::ChannelInterface> channel_;
    class async async_stub_{this};
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::AppInfoResponse>* AsyncGetAppInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::AppInfoResponse>* PrepareAsyncGetAppInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::PresetListResponse>* AsyncGetPresetListRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::PresetListResponse>* PrepareAsyncGetPresetListRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::PresetResponse>* AsyncGetCurrentPresetRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::PresetResponse>* PrepareAsyncGetCurrentPresetRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* AsyncLoadPresetRaw(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* PrepareAsyncLoadPresetRaw(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* AsyncSavePresetRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* PrepareAsyncSavePresetRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* AsyncAddPresetRaw(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* PrepareAsyncAddPresetRaw(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* AsyncRemovePresetRaw(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* PrepareAsyncRemovePresetRaw(::grpc::ClientContext* context, const ::hillab::v4::PresetRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>* AsyncGetNearFieldImageStreamServerInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>* PrepareAsyncGetNearFieldImageStreamServerInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>* AsyncGetFarFieldImageStreamServerInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::hillab::v4::ImageStreamServerResponse>* PrepareAsyncGetFarFieldImageStreamServerInfoRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* AsyncSetNearFieldImageStreamServerRaw(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* PrepareAsyncSetNearFieldImageStreamServerRaw(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* AsyncSetFarFieldImageStreamServerRaw(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientAsyncResponseReader< ::google::protobuf::Empty>* PrepareAsyncSetFarFieldImageStreamServerRaw(::grpc::ClientContext* context, const ::hillab::v4::ImageStreamServerRequest& request, ::grpc::CompletionQueue* cq) override;
    ::grpc::ClientReader< ::hillab::v4::SystemLogStream>* MonitorSystemLogRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request) override;
    ::grpc::ClientAsyncReader< ::hillab::v4::SystemLogStream>* AsyncMonitorSystemLogRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq, void* tag) override;
    ::grpc::ClientAsyncReader< ::hillab::v4::SystemLogStream>* PrepareAsyncMonitorSystemLogRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
    const ::grpc::internal::RpcMethod rpcmethod_GetAppInfo_;
    const ::grpc::internal::RpcMethod rpcmethod_GetPresetList_;
    const ::grpc::internal::RpcMethod rpcmethod_GetCurrentPreset_;
    const ::grpc::internal::RpcMethod rpcmethod_LoadPreset_;
    const ::grpc::internal::RpcMethod rpcmethod_SavePreset_;
    const ::grpc::internal::RpcMethod rpcmethod_AddPreset_;
    const ::grpc::internal::RpcMethod rpcmethod_RemovePreset_;
    const ::grpc::internal::RpcMethod rpcmethod_GetNearFieldImageStreamServerInfo_;
    const ::grpc::internal::RpcMethod rpcmethod_GetFarFieldImageStreamServerInfo_;
    const ::grpc::internal::RpcMethod rpcmethod_SetNearFieldImageStreamServer_;
    const ::grpc::internal::RpcMethod rpcmethod_SetFarFieldImageStreamServer_;
    const ::grpc::internal::RpcMethod rpcmethod_MonitorSystemLog_;
  };
  static std::unique_ptr<Stub> NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions());

  class Service : public ::grpc::Service {
   public:
    Service();
    virtual ~Service();
    // Retrieves application information.
    // Returns: 
    // - Status "OK" and response indicating the app information.
    virtual ::grpc::Status GetAppInfo(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::AppInfoResponse* response);
    // Retrieves registered preset list.
    // Returns: 
    // - Status "OK" and response indicating the preset name list.
    virtual ::grpc::Status GetPresetList(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::PresetListResponse* response);
    // Retrieves the loaded preset.
    // Returns: 
    // - Status "OK" and response indicating the loaded preset name.
    virtual ::grpc::Status GetCurrentPreset(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::PresetResponse* response);
    // Loads preset. All system properties are applied as loaded presets, but information of gRPC host and Image Stream hosts is not loaded.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure since the preset name is not exist in registered preset list.
    virtual ::grpc::Status LoadPreset(::grpc::ServerContext* context, const ::hillab::v4::PresetRequest* request, ::google::protobuf::Empty* response);
    // Saves preset. All system properties are saved in the current preset, including information of gRPC hosts and Image Stream hosts.
    // Returns: 
    // - Status "OK" for successful saving the preset.
    virtual ::grpc::Status SavePreset(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response);
    // Adds available preset. All system properties will be saved with new preset.
    // This works like "Save as".
    // If the preset already exist, the existing preset will be overwritten.
    // Returns: 
    // - Status "OK" for successful.
    virtual ::grpc::Status AddPreset(::grpc::ServerContext* context, const ::hillab::v4::PresetRequest* request, ::google::protobuf::Empty* response);
    // Removes preset from the registered preset list.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "FAILED_PRECONDITION" for failure since target preset is loaded or not exist in registered preset list.
    virtual ::grpc::Status RemovePreset(::grpc::ServerContext* context, const ::hillab::v4::PresetRequest* request, ::google::protobuf::Empty* response);
    // Retrieves image stream server information for near field image.
    // Returns: 
    // - Status "OK" and response indicating the image stream information.
    virtual ::grpc::Status GetNearFieldImageStreamServerInfo(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response);
    // Retrieves image stream server information for far field image.
    // Returns: 
    // - Status "OK" and response indicating the image stream information.
    virtual ::grpc::Status GetFarFieldImageStreamServerInfo(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response);
    // Starts/stops image stream server for near field image and/or modifies options. 
    // The server's URL (IP and Port) cannot be changed with gRPC.
    // Note that the camera must be streaming to start the stream server.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "INVALID ARGUMENT" for failure since some values are out of range.
    // - Status "FAILED_PRECONDITION" for indicating that the stream cannot be started, or failure for changing some value since the server is running.
    virtual ::grpc::Status SetNearFieldImageStreamServer(::grpc::ServerContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response);
    // Starts/stops image stream server for far field image and/or modifies options. 
    // The server's URL (IP and Port) cannot be changed with gRPC.
    // Note that the camera must be streaming to start the stream server.
    // Returns: 
    // - Status "OK" for successful.
    // - Status "INVALID ARGUMENT" for failure since some values are out of range.
    // - Status "FAILED_PRECONDITION" for indicating that the stream cannot be started, or failure for changing some value since the server is running.
    virtual ::grpc::Status SetFarFieldImageStreamServer(::grpc::ServerContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response);
    // Retrieves the stream object for obtaining the system log message.
    // Returns: 
    // - Status "OK" for successful.
    virtual ::grpc::Status MonitorSystemLog(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::grpc::ServerWriter< ::hillab::v4::SystemLogStream>* writer);
  };
  template <class BaseClass>
  class WithAsyncMethod_GetAppInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetAppInfo() {
      ::grpc::Service::MarkMethodAsync(0);
    }
    ~WithAsyncMethod_GetAppInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetAppInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::AppInfoResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetAppInfo(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncResponseWriter< ::hillab::v4::AppInfoResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(0, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetPresetList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetPresetList() {
      ::grpc::Service::MarkMethodAsync(1);
    }
    ~WithAsyncMethod_GetPresetList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetPresetList(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::PresetListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetPresetList(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncResponseWriter< ::hillab::v4::PresetListResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(1, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetCurrentPreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetCurrentPreset() {
      ::grpc::Service::MarkMethodAsync(2);
    }
    ~WithAsyncMethod_GetCurrentPreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCurrentPreset(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::PresetResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetCurrentPreset(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncResponseWriter< ::hillab::v4::PresetResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(2, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_LoadPreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_LoadPreset() {
      ::grpc::Service::MarkMethodAsync(3);
    }
    ~WithAsyncMethod_LoadPreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status LoadPreset(::grpc::ServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestLoadPreset(::grpc::ServerContext* context, ::hillab::v4::PresetRequest* request, ::grpc::ServerAsyncResponseWriter< ::google::protobuf::Empty>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(3, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_SavePreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_SavePreset() {
      ::grpc::Service::MarkMethodAsync(4);
    }
    ~WithAsyncMethod_SavePreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SavePreset(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSavePreset(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncResponseWriter< ::google::protobuf::Empty>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(4, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_AddPreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_AddPreset() {
      ::grpc::Service::MarkMethodAsync(5);
    }
    ~WithAsyncMethod_AddPreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status AddPreset(::grpc::ServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestAddPreset(::grpc::ServerContext* context, ::hillab::v4::PresetRequest* request, ::grpc::ServerAsyncResponseWriter< ::google::protobuf::Empty>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(5, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_RemovePreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_RemovePreset() {
      ::grpc::Service::MarkMethodAsync(6);
    }
    ~WithAsyncMethod_RemovePreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status RemovePreset(::grpc::ServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestRemovePreset(::grpc::ServerContext* context, ::hillab::v4::PresetRequest* request, ::grpc::ServerAsyncResponseWriter< ::google::protobuf::Empty>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(6, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetNearFieldImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetNearFieldImageStreamServerInfo() {
      ::grpc::Service::MarkMethodAsync(7);
    }
    ~WithAsyncMethod_GetNearFieldImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetNearFieldImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetNearFieldImageStreamServerInfo(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncResponseWriter< ::hillab::v4::ImageStreamServerResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(7, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_GetFarFieldImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_GetFarFieldImageStreamServerInfo() {
      ::grpc::Service::MarkMethodAsync(8);
    }
    ~WithAsyncMethod_GetFarFieldImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetFarFieldImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetFarFieldImageStreamServerInfo(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncResponseWriter< ::hillab::v4::ImageStreamServerResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(8, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_SetNearFieldImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_SetNearFieldImageStreamServer() {
      ::grpc::Service::MarkMethodAsync(9);
    }
    ~WithAsyncMethod_SetNearFieldImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetNearFieldImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSetNearFieldImageStreamServer(::grpc::ServerContext* context, ::hillab::v4::ImageStreamServerRequest* request, ::grpc::ServerAsyncResponseWriter< ::google::protobuf::Empty>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(9, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_SetFarFieldImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_SetFarFieldImageStreamServer() {
      ::grpc::Service::MarkMethodAsync(10);
    }
    ~WithAsyncMethod_SetFarFieldImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetFarFieldImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSetFarFieldImageStreamServer(::grpc::ServerContext* context, ::hillab::v4::ImageStreamServerRequest* request, ::grpc::ServerAsyncResponseWriter< ::google::protobuf::Empty>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(10, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithAsyncMethod_MonitorSystemLog : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithAsyncMethod_MonitorSystemLog() {
      ::grpc::Service::MarkMethodAsync(11);
    }
    ~WithAsyncMethod_MonitorSystemLog() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorSystemLog(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::SystemLogStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestMonitorSystemLog(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncWriter< ::hillab::v4::SystemLogStream>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncServerStreaming(11, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  typedef WithAsyncMethod_GetAppInfo<WithAsyncMethod_GetPresetList<WithAsyncMethod_GetCurrentPreset<WithAsyncMethod_LoadPreset<WithAsyncMethod_SavePreset<WithAsyncMethod_AddPreset<WithAsyncMethod_RemovePreset<WithAsyncMethod_GetNearFieldImageStreamServerInfo<WithAsyncMethod_GetFarFieldImageStreamServerInfo<WithAsyncMethod_SetNearFieldImageStreamServer<WithAsyncMethod_SetFarFieldImageStreamServer<WithAsyncMethod_MonitorSystemLog<Service > > > > > > > > > > > > AsyncService;
  template <class BaseClass>
  class WithCallbackMethod_GetAppInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetAppInfo() {
      ::grpc::Service::MarkMethodCallback(0,
          new ::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::AppInfoResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::AppInfoResponse* response) { return this->GetAppInfo(context, request, response); }));}
    void SetMessageAllocatorFor_GetAppInfo(
        ::grpc::MessageAllocator< ::google::protobuf::Empty, ::hillab::v4::AppInfoResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(0);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::AppInfoResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetAppInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetAppInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::AppInfoResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetAppInfo(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::AppInfoResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetPresetList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetPresetList() {
      ::grpc::Service::MarkMethodCallback(1,
          new ::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::PresetListResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::PresetListResponse* response) { return this->GetPresetList(context, request, response); }));}
    void SetMessageAllocatorFor_GetPresetList(
        ::grpc::MessageAllocator< ::google::protobuf::Empty, ::hillab::v4::PresetListResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(1);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::PresetListResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetPresetList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetPresetList(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::PresetListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetPresetList(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::PresetListResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetCurrentPreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetCurrentPreset() {
      ::grpc::Service::MarkMethodCallback(2,
          new ::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::PresetResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::PresetResponse* response) { return this->GetCurrentPreset(context, request, response); }));}
    void SetMessageAllocatorFor_GetCurrentPreset(
        ::grpc::MessageAllocator< ::google::protobuf::Empty, ::hillab::v4::PresetResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(2);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::PresetResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetCurrentPreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCurrentPreset(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::PresetResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetCurrentPreset(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::PresetResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_LoadPreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_LoadPreset() {
      ::grpc::Service::MarkMethodCallback(3,
          new ::grpc::internal::CallbackUnaryHandler< ::hillab::v4::PresetRequest, ::google::protobuf::Empty>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::hillab::v4::PresetRequest* request, ::google::protobuf::Empty* response) { return this->LoadPreset(context, request, response); }));}
    void SetMessageAllocatorFor_LoadPreset(
        ::grpc::MessageAllocator< ::hillab::v4::PresetRequest, ::google::protobuf::Empty>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(3);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::hillab::v4::PresetRequest, ::google::protobuf::Empty>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_LoadPreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status LoadPreset(::grpc::ServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* LoadPreset(
      ::grpc::CallbackServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_SavePreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_SavePreset() {
      ::grpc::Service::MarkMethodCallback(4,
          new ::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::google::protobuf::Empty>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request, ::google::protobuf::Empty* response) { return this->SavePreset(context, request, response); }));}
    void SetMessageAllocatorFor_SavePreset(
        ::grpc::MessageAllocator< ::google::protobuf::Empty, ::google::protobuf::Empty>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(4);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::google::protobuf::Empty>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_SavePreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SavePreset(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SavePreset(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_AddPreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_AddPreset() {
      ::grpc::Service::MarkMethodCallback(5,
          new ::grpc::internal::CallbackUnaryHandler< ::hillab::v4::PresetRequest, ::google::protobuf::Empty>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::hillab::v4::PresetRequest* request, ::google::protobuf::Empty* response) { return this->AddPreset(context, request, response); }));}
    void SetMessageAllocatorFor_AddPreset(
        ::grpc::MessageAllocator< ::hillab::v4::PresetRequest, ::google::protobuf::Empty>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(5);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::hillab::v4::PresetRequest, ::google::protobuf::Empty>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_AddPreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status AddPreset(::grpc::ServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* AddPreset(
      ::grpc::CallbackServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_RemovePreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_RemovePreset() {
      ::grpc::Service::MarkMethodCallback(6,
          new ::grpc::internal::CallbackUnaryHandler< ::hillab::v4::PresetRequest, ::google::protobuf::Empty>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::hillab::v4::PresetRequest* request, ::google::protobuf::Empty* response) { return this->RemovePreset(context, request, response); }));}
    void SetMessageAllocatorFor_RemovePreset(
        ::grpc::MessageAllocator< ::hillab::v4::PresetRequest, ::google::protobuf::Empty>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(6);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::hillab::v4::PresetRequest, ::google::protobuf::Empty>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_RemovePreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status RemovePreset(::grpc::ServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* RemovePreset(
      ::grpc::CallbackServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetNearFieldImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetNearFieldImageStreamServerInfo() {
      ::grpc::Service::MarkMethodCallback(7,
          new ::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response) { return this->GetNearFieldImageStreamServerInfo(context, request, response); }));}
    void SetMessageAllocatorFor_GetNearFieldImageStreamServerInfo(
        ::grpc::MessageAllocator< ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(7);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetNearFieldImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetNearFieldImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetNearFieldImageStreamServerInfo(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_GetFarFieldImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_GetFarFieldImageStreamServerInfo() {
      ::grpc::Service::MarkMethodCallback(8,
          new ::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request, ::hillab::v4::ImageStreamServerResponse* response) { return this->GetFarFieldImageStreamServerInfo(context, request, response); }));}
    void SetMessageAllocatorFor_GetFarFieldImageStreamServerInfo(
        ::grpc::MessageAllocator< ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(8);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_GetFarFieldImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetFarFieldImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetFarFieldImageStreamServerInfo(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_SetNearFieldImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_SetNearFieldImageStreamServer() {
      ::grpc::Service::MarkMethodCallback(9,
          new ::grpc::internal::CallbackUnaryHandler< ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response) { return this->SetNearFieldImageStreamServer(context, request, response); }));}
    void SetMessageAllocatorFor_SetNearFieldImageStreamServer(
        ::grpc::MessageAllocator< ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(9);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_SetNearFieldImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetNearFieldImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SetNearFieldImageStreamServer(
      ::grpc::CallbackServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_SetFarFieldImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_SetFarFieldImageStreamServer() {
      ::grpc::Service::MarkMethodCallback(10,
          new ::grpc::internal::CallbackUnaryHandler< ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::hillab::v4::ImageStreamServerRequest* request, ::google::protobuf::Empty* response) { return this->SetFarFieldImageStreamServer(context, request, response); }));}
    void SetMessageAllocatorFor_SetFarFieldImageStreamServer(
        ::grpc::MessageAllocator< ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>* allocator) {
      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(10);
      static_cast<::grpc::internal::CallbackUnaryHandler< ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>*>(handler)
              ->SetMessageAllocator(allocator);
    }
    ~WithCallbackMethod_SetFarFieldImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetFarFieldImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SetFarFieldImageStreamServer(
      ::grpc::CallbackServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithCallbackMethod_MonitorSystemLog : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithCallbackMethod_MonitorSystemLog() {
      ::grpc::Service::MarkMethodCallback(11,
          new ::grpc::internal::CallbackServerStreamingHandler< ::google::protobuf::Empty, ::hillab::v4::SystemLogStream>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::google::protobuf::Empty* request) { return this->MonitorSystemLog(context, request); }));
    }
    ~WithCallbackMethod_MonitorSystemLog() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorSystemLog(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::SystemLogStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::hillab::v4::SystemLogStream>* MonitorSystemLog(
      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/)  { return nullptr; }
  };
  typedef WithCallbackMethod_GetAppInfo<WithCallbackMethod_GetPresetList<WithCallbackMethod_GetCurrentPreset<WithCallbackMethod_LoadPreset<WithCallbackMethod_SavePreset<WithCallbackMethod_AddPreset<WithCallbackMethod_RemovePreset<WithCallbackMethod_GetNearFieldImageStreamServerInfo<WithCallbackMethod_GetFarFieldImageStreamServerInfo<WithCallbackMethod_SetNearFieldImageStreamServer<WithCallbackMethod_SetFarFieldImageStreamServer<WithCallbackMethod_MonitorSystemLog<Service > > > > > > > > > > > > CallbackService;
  typedef CallbackService ExperimentalCallbackService;
  template <class BaseClass>
  class WithGenericMethod_GetAppInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetAppInfo() {
      ::grpc::Service::MarkMethodGeneric(0);
    }
    ~WithGenericMethod_GetAppInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetAppInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::AppInfoResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetPresetList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetPresetList() {
      ::grpc::Service::MarkMethodGeneric(1);
    }
    ~WithGenericMethod_GetPresetList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetPresetList(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::PresetListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetCurrentPreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetCurrentPreset() {
      ::grpc::Service::MarkMethodGeneric(2);
    }
    ~WithGenericMethod_GetCurrentPreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCurrentPreset(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::PresetResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_LoadPreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_LoadPreset() {
      ::grpc::Service::MarkMethodGeneric(3);
    }
    ~WithGenericMethod_LoadPreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status LoadPreset(::grpc::ServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_SavePreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_SavePreset() {
      ::grpc::Service::MarkMethodGeneric(4);
    }
    ~WithGenericMethod_SavePreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SavePreset(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_AddPreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_AddPreset() {
      ::grpc::Service::MarkMethodGeneric(5);
    }
    ~WithGenericMethod_AddPreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status AddPreset(::grpc::ServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_RemovePreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_RemovePreset() {
      ::grpc::Service::MarkMethodGeneric(6);
    }
    ~WithGenericMethod_RemovePreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status RemovePreset(::grpc::ServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetNearFieldImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetNearFieldImageStreamServerInfo() {
      ::grpc::Service::MarkMethodGeneric(7);
    }
    ~WithGenericMethod_GetNearFieldImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetNearFieldImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_GetFarFieldImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_GetFarFieldImageStreamServerInfo() {
      ::grpc::Service::MarkMethodGeneric(8);
    }
    ~WithGenericMethod_GetFarFieldImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetFarFieldImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_SetNearFieldImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_SetNearFieldImageStreamServer() {
      ::grpc::Service::MarkMethodGeneric(9);
    }
    ~WithGenericMethod_SetNearFieldImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetNearFieldImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_SetFarFieldImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_SetFarFieldImageStreamServer() {
      ::grpc::Service::MarkMethodGeneric(10);
    }
    ~WithGenericMethod_SetFarFieldImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetFarFieldImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithGenericMethod_MonitorSystemLog : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithGenericMethod_MonitorSystemLog() {
      ::grpc::Service::MarkMethodGeneric(11);
    }
    ~WithGenericMethod_MonitorSystemLog() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorSystemLog(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::SystemLogStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetAppInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetAppInfo() {
      ::grpc::Service::MarkMethodRaw(0);
    }
    ~WithRawMethod_GetAppInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetAppInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::AppInfoResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetAppInfo(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(0, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetPresetList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetPresetList() {
      ::grpc::Service::MarkMethodRaw(1);
    }
    ~WithRawMethod_GetPresetList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetPresetList(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::PresetListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetPresetList(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(1, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetCurrentPreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetCurrentPreset() {
      ::grpc::Service::MarkMethodRaw(2);
    }
    ~WithRawMethod_GetCurrentPreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCurrentPreset(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::PresetResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetCurrentPreset(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(2, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_LoadPreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_LoadPreset() {
      ::grpc::Service::MarkMethodRaw(3);
    }
    ~WithRawMethod_LoadPreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status LoadPreset(::grpc::ServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestLoadPreset(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(3, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_SavePreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_SavePreset() {
      ::grpc::Service::MarkMethodRaw(4);
    }
    ~WithRawMethod_SavePreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SavePreset(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSavePreset(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(4, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_AddPreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_AddPreset() {
      ::grpc::Service::MarkMethodRaw(5);
    }
    ~WithRawMethod_AddPreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status AddPreset(::grpc::ServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestAddPreset(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(5, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_RemovePreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_RemovePreset() {
      ::grpc::Service::MarkMethodRaw(6);
    }
    ~WithRawMethod_RemovePreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status RemovePreset(::grpc::ServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestRemovePreset(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(6, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetNearFieldImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetNearFieldImageStreamServerInfo() {
      ::grpc::Service::MarkMethodRaw(7);
    }
    ~WithRawMethod_GetNearFieldImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetNearFieldImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetNearFieldImageStreamServerInfo(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(7, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_GetFarFieldImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_GetFarFieldImageStreamServerInfo() {
      ::grpc::Service::MarkMethodRaw(8);
    }
    ~WithRawMethod_GetFarFieldImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetFarFieldImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestGetFarFieldImageStreamServerInfo(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(8, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_SetNearFieldImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_SetNearFieldImageStreamServer() {
      ::grpc::Service::MarkMethodRaw(9);
    }
    ~WithRawMethod_SetNearFieldImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetNearFieldImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSetNearFieldImageStreamServer(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(9, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_SetFarFieldImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_SetFarFieldImageStreamServer() {
      ::grpc::Service::MarkMethodRaw(10);
    }
    ~WithRawMethod_SetFarFieldImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetFarFieldImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestSetFarFieldImageStreamServer(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncUnary(10, context, request, response, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawMethod_MonitorSystemLog : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawMethod_MonitorSystemLog() {
      ::grpc::Service::MarkMethodRaw(11);
    }
    ~WithRawMethod_MonitorSystemLog() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorSystemLog(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::SystemLogStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    void RequestMonitorSystemLog(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncWriter< ::grpc::ByteBuffer>* writer, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
      ::grpc::Service::RequestAsyncServerStreaming(11, context, request, writer, new_call_cq, notification_cq, tag);
    }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetAppInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetAppInfo() {
      ::grpc::Service::MarkMethodRawCallback(0,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetAppInfo(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetAppInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetAppInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::AppInfoResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetAppInfo(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetPresetList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetPresetList() {
      ::grpc::Service::MarkMethodRawCallback(1,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetPresetList(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetPresetList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetPresetList(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::PresetListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetPresetList(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetCurrentPreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetCurrentPreset() {
      ::grpc::Service::MarkMethodRawCallback(2,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetCurrentPreset(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetCurrentPreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetCurrentPreset(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::PresetResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetCurrentPreset(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_LoadPreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_LoadPreset() {
      ::grpc::Service::MarkMethodRawCallback(3,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->LoadPreset(context, request, response); }));
    }
    ~WithRawCallbackMethod_LoadPreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status LoadPreset(::grpc::ServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* LoadPreset(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_SavePreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_SavePreset() {
      ::grpc::Service::MarkMethodRawCallback(4,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->SavePreset(context, request, response); }));
    }
    ~WithRawCallbackMethod_SavePreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SavePreset(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SavePreset(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_AddPreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_AddPreset() {
      ::grpc::Service::MarkMethodRawCallback(5,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->AddPreset(context, request, response); }));
    }
    ~WithRawCallbackMethod_AddPreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status AddPreset(::grpc::ServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* AddPreset(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_RemovePreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_RemovePreset() {
      ::grpc::Service::MarkMethodRawCallback(6,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->RemovePreset(context, request, response); }));
    }
    ~WithRawCallbackMethod_RemovePreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status RemovePreset(::grpc::ServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* RemovePreset(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetNearFieldImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetNearFieldImageStreamServerInfo() {
      ::grpc::Service::MarkMethodRawCallback(7,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetNearFieldImageStreamServerInfo(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetNearFieldImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetNearFieldImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetNearFieldImageStreamServerInfo(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_GetFarFieldImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_GetFarFieldImageStreamServerInfo() {
      ::grpc::Service::MarkMethodRawCallback(8,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetFarFieldImageStreamServerInfo(context, request, response); }));
    }
    ~WithRawCallbackMethod_GetFarFieldImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status GetFarFieldImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* GetFarFieldImageStreamServerInfo(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_SetNearFieldImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_SetNearFieldImageStreamServer() {
      ::grpc::Service::MarkMethodRawCallback(9,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->SetNearFieldImageStreamServer(context, request, response); }));
    }
    ~WithRawCallbackMethod_SetNearFieldImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetNearFieldImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SetNearFieldImageStreamServer(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_SetFarFieldImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_SetFarFieldImageStreamServer() {
      ::grpc::Service::MarkMethodRawCallback(10,
          new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->SetFarFieldImageStreamServer(context, request, response); }));
    }
    ~WithRawCallbackMethod_SetFarFieldImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status SetFarFieldImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerUnaryReactor* SetFarFieldImageStreamServer(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithRawCallbackMethod_MonitorSystemLog : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithRawCallbackMethod_MonitorSystemLog() {
      ::grpc::Service::MarkMethodRawCallback(11,
          new ::grpc::internal::CallbackServerStreamingHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
            [this](
                   ::grpc::CallbackServerContext* context, const::grpc::ByteBuffer* request) { return this->MonitorSystemLog(context, request); }));
    }
    ~WithRawCallbackMethod_MonitorSystemLog() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable synchronous version of this method
    ::grpc::Status MonitorSystemLog(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::SystemLogStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    virtual ::grpc::ServerWriteReactor< ::grpc::ByteBuffer>* MonitorSystemLog(
      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/)  { return nullptr; }
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetAppInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetAppInfo() {
      ::grpc::Service::MarkMethodStreamed(0,
        new ::grpc::internal::StreamedUnaryHandler<
          ::google::protobuf::Empty, ::hillab::v4::AppInfoResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::google::protobuf::Empty, ::hillab::v4::AppInfoResponse>* streamer) {
                       return this->StreamedGetAppInfo(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetAppInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetAppInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::AppInfoResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetAppInfo(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::google::protobuf::Empty,::hillab::v4::AppInfoResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetPresetList : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetPresetList() {
      ::grpc::Service::MarkMethodStreamed(1,
        new ::grpc::internal::StreamedUnaryHandler<
          ::google::protobuf::Empty, ::hillab::v4::PresetListResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::google::protobuf::Empty, ::hillab::v4::PresetListResponse>* streamer) {
                       return this->StreamedGetPresetList(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetPresetList() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetPresetList(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::PresetListResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetPresetList(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::google::protobuf::Empty,::hillab::v4::PresetListResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetCurrentPreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetCurrentPreset() {
      ::grpc::Service::MarkMethodStreamed(2,
        new ::grpc::internal::StreamedUnaryHandler<
          ::google::protobuf::Empty, ::hillab::v4::PresetResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::google::protobuf::Empty, ::hillab::v4::PresetResponse>* streamer) {
                       return this->StreamedGetCurrentPreset(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetCurrentPreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetCurrentPreset(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::PresetResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetCurrentPreset(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::google::protobuf::Empty,::hillab::v4::PresetResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_LoadPreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_LoadPreset() {
      ::grpc::Service::MarkMethodStreamed(3,
        new ::grpc::internal::StreamedUnaryHandler<
          ::hillab::v4::PresetRequest, ::google::protobuf::Empty>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::hillab::v4::PresetRequest, ::google::protobuf::Empty>* streamer) {
                       return this->StreamedLoadPreset(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_LoadPreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status LoadPreset(::grpc::ServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedLoadPreset(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::hillab::v4::PresetRequest,::google::protobuf::Empty>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_SavePreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_SavePreset() {
      ::grpc::Service::MarkMethodStreamed(4,
        new ::grpc::internal::StreamedUnaryHandler<
          ::google::protobuf::Empty, ::google::protobuf::Empty>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::google::protobuf::Empty, ::google::protobuf::Empty>* streamer) {
                       return this->StreamedSavePreset(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_SavePreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status SavePreset(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedSavePreset(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::google::protobuf::Empty,::google::protobuf::Empty>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_AddPreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_AddPreset() {
      ::grpc::Service::MarkMethodStreamed(5,
        new ::grpc::internal::StreamedUnaryHandler<
          ::hillab::v4::PresetRequest, ::google::protobuf::Empty>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::hillab::v4::PresetRequest, ::google::protobuf::Empty>* streamer) {
                       return this->StreamedAddPreset(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_AddPreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status AddPreset(::grpc::ServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedAddPreset(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::hillab::v4::PresetRequest,::google::protobuf::Empty>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_RemovePreset : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_RemovePreset() {
      ::grpc::Service::MarkMethodStreamed(6,
        new ::grpc::internal::StreamedUnaryHandler<
          ::hillab::v4::PresetRequest, ::google::protobuf::Empty>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::hillab::v4::PresetRequest, ::google::protobuf::Empty>* streamer) {
                       return this->StreamedRemovePreset(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_RemovePreset() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status RemovePreset(::grpc::ServerContext* /*context*/, const ::hillab::v4::PresetRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedRemovePreset(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::hillab::v4::PresetRequest,::google::protobuf::Empty>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetNearFieldImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetNearFieldImageStreamServerInfo() {
      ::grpc::Service::MarkMethodStreamed(7,
        new ::grpc::internal::StreamedUnaryHandler<
          ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>* streamer) {
                       return this->StreamedGetNearFieldImageStreamServerInfo(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetNearFieldImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetNearFieldImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetNearFieldImageStreamServerInfo(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::google::protobuf::Empty,::hillab::v4::ImageStreamServerResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_GetFarFieldImageStreamServerInfo : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_GetFarFieldImageStreamServerInfo() {
      ::grpc::Service::MarkMethodStreamed(8,
        new ::grpc::internal::StreamedUnaryHandler<
          ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::google::protobuf::Empty, ::hillab::v4::ImageStreamServerResponse>* streamer) {
                       return this->StreamedGetFarFieldImageStreamServerInfo(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_GetFarFieldImageStreamServerInfo() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status GetFarFieldImageStreamServerInfo(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::hillab::v4::ImageStreamServerResponse* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedGetFarFieldImageStreamServerInfo(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::google::protobuf::Empty,::hillab::v4::ImageStreamServerResponse>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_SetNearFieldImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_SetNearFieldImageStreamServer() {
      ::grpc::Service::MarkMethodStreamed(9,
        new ::grpc::internal::StreamedUnaryHandler<
          ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>* streamer) {
                       return this->StreamedSetNearFieldImageStreamServer(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_SetNearFieldImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status SetNearFieldImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedSetNearFieldImageStreamServer(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::hillab::v4::ImageStreamServerRequest,::google::protobuf::Empty>* server_unary_streamer) = 0;
  };
  template <class BaseClass>
  class WithStreamedUnaryMethod_SetFarFieldImageStreamServer : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithStreamedUnaryMethod_SetFarFieldImageStreamServer() {
      ::grpc::Service::MarkMethodStreamed(10,
        new ::grpc::internal::StreamedUnaryHandler<
          ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerUnaryStreamer<
                     ::hillab::v4::ImageStreamServerRequest, ::google::protobuf::Empty>* streamer) {
                       return this->StreamedSetFarFieldImageStreamServer(context,
                         streamer);
                  }));
    }
    ~WithStreamedUnaryMethod_SetFarFieldImageStreamServer() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status SetFarFieldImageStreamServer(::grpc::ServerContext* /*context*/, const ::hillab::v4::ImageStreamServerRequest* /*request*/, ::google::protobuf::Empty* /*response*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with streamed unary
    virtual ::grpc::Status StreamedSetFarFieldImageStreamServer(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::hillab::v4::ImageStreamServerRequest,::google::protobuf::Empty>* server_unary_streamer) = 0;
  };
  typedef WithStreamedUnaryMethod_GetAppInfo<WithStreamedUnaryMethod_GetPresetList<WithStreamedUnaryMethod_GetCurrentPreset<WithStreamedUnaryMethod_LoadPreset<WithStreamedUnaryMethod_SavePreset<WithStreamedUnaryMethod_AddPreset<WithStreamedUnaryMethod_RemovePreset<WithStreamedUnaryMethod_GetNearFieldImageStreamServerInfo<WithStreamedUnaryMethod_GetFarFieldImageStreamServerInfo<WithStreamedUnaryMethod_SetNearFieldImageStreamServer<WithStreamedUnaryMethod_SetFarFieldImageStreamServer<Service > > > > > > > > > > > StreamedUnaryService;
  template <class BaseClass>
  class WithSplitStreamingMethod_MonitorSystemLog : public BaseClass {
   private:
    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
   public:
    WithSplitStreamingMethod_MonitorSystemLog() {
      ::grpc::Service::MarkMethodStreamed(11,
        new ::grpc::internal::SplitServerStreamingHandler<
          ::google::protobuf::Empty, ::hillab::v4::SystemLogStream>(
            [this](::grpc::ServerContext* context,
                   ::grpc::ServerSplitStreamer<
                     ::google::protobuf::Empty, ::hillab::v4::SystemLogStream>* streamer) {
                       return this->StreamedMonitorSystemLog(context,
                         streamer);
                  }));
    }
    ~WithSplitStreamingMethod_MonitorSystemLog() override {
      BaseClassMustBeDerivedFromService(this);
    }
    // disable regular version of this method
    ::grpc::Status MonitorSystemLog(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::grpc::ServerWriter< ::hillab::v4::SystemLogStream>* /*writer*/) override {
      abort();
      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
    }
    // replace default version of method with split streamed
    virtual ::grpc::Status StreamedMonitorSystemLog(::grpc::ServerContext* context, ::grpc::ServerSplitStreamer< ::google::protobuf::Empty,::hillab::v4::SystemLogStream>* server_split_streamer) = 0;
  };
  typedef WithSplitStreamingMethod_MonitorSystemLog<Service > SplitStreamedService;
  typedef WithStreamedUnaryMethod_GetAppInfo<WithStreamedUnaryMethod_GetPresetList<WithStreamedUnaryMethod_GetCurrentPreset<WithStreamedUnaryMethod_LoadPreset<WithStreamedUnaryMethod_SavePreset<WithStreamedUnaryMethod_AddPreset<WithStreamedUnaryMethod_RemovePreset<WithStreamedUnaryMethod_GetNearFieldImageStreamServerInfo<WithStreamedUnaryMethod_GetFarFieldImageStreamServerInfo<WithStreamedUnaryMethod_SetNearFieldImageStreamServer<WithStreamedUnaryMethod_SetFarFieldImageStreamServer<WithSplitStreamingMethod_MonitorSystemLog<Service > > > > > > > > > > > > StreamedService;
};

}  // namespace v4
}  // namespace hillab


#endif  // GRPC_hillab_5fbeam_5fstabilization_5fsystem_2eproto__INCLUDED
