From 7205cda0f0e9c85b67b45adef900e06adbdf8bcd Mon Sep 17 00:00:00 2001
From: Jorge Canizales <jcanizales@google.com>
Date: Mon, 23 Mar 2015 22:45:22 -0700
Subject: [PATCH] Generates ObjC code for the test protos

Command:
protoc --plugin=/usr/local/bin/protoc-gen-objc test.proto
messages.proto empty.proto
--proto_path=/Users/jcanizales/git/protobuf-objc/src/compiler
--proto_path=. --objc_out="./"
---
 .../Sample/RemoteTestClient/Empty.pb.h        |  103 +
 .../Sample/RemoteTestClient/Empty.pb.m        |  179 ++
 .../Sample/RemoteTestClient/Messages.pb.h     |  578 +++++
 .../Sample/RemoteTestClient/Messages.pb.m     | 2256 +++++++++++++++++
 .../Sample/RemoteTestClient/Test.pb.h         |   81 +
 .../Sample/RemoteTestClient/Test.pb.m         |   27 +
 6 files changed, 3224 insertions(+)
 create mode 100644 src/objective-c/examples/Sample/RemoteTestClient/Empty.pb.h
 create mode 100644 src/objective-c/examples/Sample/RemoteTestClient/Empty.pb.m
 create mode 100644 src/objective-c/examples/Sample/RemoteTestClient/Messages.pb.h
 create mode 100644 src/objective-c/examples/Sample/RemoteTestClient/Messages.pb.m
 create mode 100644 src/objective-c/examples/Sample/RemoteTestClient/Test.pb.h
 create mode 100644 src/objective-c/examples/Sample/RemoteTestClient/Test.pb.m

diff --git a/src/objective-c/examples/Sample/RemoteTestClient/Empty.pb.h b/src/objective-c/examples/Sample/RemoteTestClient/Empty.pb.h
new file mode 100644
index 0000000000..bf9fa3e36f
--- /dev/null
+++ b/src/objective-c/examples/Sample/RemoteTestClient/Empty.pb.h
@@ -0,0 +1,103 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+
+#import <ProtocolBuffers/ProtocolBuffers.h>
+
+// @@protoc_insertion_point(imports)
+
+@class ObjectiveCFileOptions;
+@class ObjectiveCFileOptionsBuilder;
+@class PBDescriptorProto;
+@class PBDescriptorProtoBuilder;
+@class PBDescriptorProtoExtensionRange;
+@class PBDescriptorProtoExtensionRangeBuilder;
+@class PBEnumDescriptorProto;
+@class PBEnumDescriptorProtoBuilder;
+@class PBEnumOptions;
+@class PBEnumOptionsBuilder;
+@class PBEnumValueDescriptorProto;
+@class PBEnumValueDescriptorProtoBuilder;
+@class PBEnumValueOptions;
+@class PBEnumValueOptionsBuilder;
+@class PBFieldDescriptorProto;
+@class PBFieldDescriptorProtoBuilder;
+@class PBFieldOptions;
+@class PBFieldOptionsBuilder;
+@class PBFileDescriptorProto;
+@class PBFileDescriptorProtoBuilder;
+@class PBFileDescriptorSet;
+@class PBFileDescriptorSetBuilder;
+@class PBFileOptions;
+@class PBFileOptionsBuilder;
+@class PBMessageOptions;
+@class PBMessageOptionsBuilder;
+@class PBMethodDescriptorProto;
+@class PBMethodDescriptorProtoBuilder;
+@class PBMethodOptions;
+@class PBMethodOptionsBuilder;
+@class PBOneofDescriptorProto;
+@class PBOneofDescriptorProtoBuilder;
+@class PBServiceDescriptorProto;
+@class PBServiceDescriptorProtoBuilder;
+@class PBServiceOptions;
+@class PBServiceOptionsBuilder;
+@class PBSourceCodeInfo;
+@class PBSourceCodeInfoBuilder;
+@class PBSourceCodeInfoLocation;
+@class PBSourceCodeInfoLocationBuilder;
+@class PBUninterpretedOption;
+@class PBUninterpretedOptionBuilder;
+@class PBUninterpretedOptionNamePart;
+@class PBUninterpretedOptionNamePartBuilder;
+@class RMTEmpty;
+@class RMTEmptyBuilder;
+
+
+
+@interface RMTEmptyRoot : NSObject {
+}
++ (PBExtensionRegistry*) extensionRegistry;
++ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry;
+@end
+
+@interface RMTEmpty : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+}
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RMTEmptyBuilder*) builder;
++ (RMTEmptyBuilder*) builder;
++ (RMTEmptyBuilder*) builderWithPrototype:(RMTEmpty*) prototype;
+- (RMTEmptyBuilder*) toBuilder;
+
++ (RMTEmpty*) parseFromData:(NSData*) data;
++ (RMTEmpty*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTEmpty*) parseFromInputStream:(NSInputStream*) input;
++ (RMTEmpty*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTEmpty*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RMTEmpty*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RMTEmptyBuilder : PBGeneratedMessageBuilder {
+@private
+  RMTEmpty* resultEmpty;
+}
+
+- (RMTEmpty*) defaultInstance;
+
+- (RMTEmptyBuilder*) clear;
+- (RMTEmptyBuilder*) clone;
+
+- (RMTEmpty*) build;
+- (RMTEmpty*) buildPartial;
+
+- (RMTEmptyBuilder*) mergeFrom:(RMTEmpty*) other;
+- (RMTEmptyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RMTEmptyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+
+// @@protoc_insertion_point(global_scope)
diff --git a/src/objective-c/examples/Sample/RemoteTestClient/Empty.pb.m b/src/objective-c/examples/Sample/RemoteTestClient/Empty.pb.m
new file mode 100644
index 0000000000..8e39cb70d1
--- /dev/null
+++ b/src/objective-c/examples/Sample/RemoteTestClient/Empty.pb.m
@@ -0,0 +1,179 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+
+#import "Empty.pb.h"
+// @@protoc_insertion_point(imports)
+
+@implementation RMTEmptyRoot
+static PBExtensionRegistry* extensionRegistry = nil;
++ (PBExtensionRegistry*) extensionRegistry {
+  return extensionRegistry;
+}
+
++ (void) initialize {
+  if (self == [RMTEmptyRoot class]) {
+    PBMutableExtensionRegistry* registry = [PBMutableExtensionRegistry registry];
+    [self registerAllExtensions:registry];
+    [ObjectivecDescriptorRoot registerAllExtensions:registry];
+    extensionRegistry = registry;
+  }
+}
++ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry {
+}
+@end
+
+@interface RMTEmpty ()
+@end
+
+@implementation RMTEmpty
+
+- (instancetype) init {
+  if ((self = [super init])) {
+  }
+  return self;
+}
+static RMTEmpty* defaultRMTEmptyInstance = nil;
++ (void) initialize {
+  if (self == [RMTEmpty class]) {
+    defaultRMTEmptyInstance = [[RMTEmpty alloc] init];
+  }
+}
++ (instancetype) defaultInstance {
+  return defaultRMTEmptyInstance;
+}
+- (instancetype) defaultInstance {
+  return defaultRMTEmptyInstance;
+}
+- (BOOL) isInitialized {
+  return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+  [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+  __block SInt32 size_ = memoizedSerializedSize;
+  if (size_ != -1) {
+    return size_;
+  }
+
+  size_ = 0;
+  size_ += self.unknownFields.serializedSize;
+  memoizedSerializedSize = size_;
+  return size_;
+}
++ (RMTEmpty*) parseFromData:(NSData*) data {
+  return (RMTEmpty*)[[[RMTEmpty builder] mergeFromData:data] build];
+}
++ (RMTEmpty*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTEmpty*)[[[RMTEmpty builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RMTEmpty*) parseFromInputStream:(NSInputStream*) input {
+  return (RMTEmpty*)[[[RMTEmpty builder] mergeFromInputStream:input] build];
+}
++ (RMTEmpty*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTEmpty*)[[[RMTEmpty builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTEmpty*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+  return (RMTEmpty*)[[[RMTEmpty builder] mergeFromCodedInputStream:input] build];
+}
++ (RMTEmpty*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTEmpty*)[[[RMTEmpty builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTEmptyBuilder*) builder {
+  return [[RMTEmptyBuilder alloc] init];
+}
++ (RMTEmptyBuilder*) builderWithPrototype:(RMTEmpty*) prototype {
+  return [[RMTEmpty builder] mergeFrom:prototype];
+}
+- (RMTEmptyBuilder*) builder {
+  return [RMTEmpty builder];
+}
+- (RMTEmptyBuilder*) toBuilder {
+  return [RMTEmpty builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+  [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+  if (other == self) {
+    return YES;
+  }
+  if (![other isKindOfClass:[RMTEmpty class]]) {
+    return NO;
+  }
+  RMTEmpty *otherMessage = other;
+  return
+      (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+  __block NSUInteger hashCode = 7;
+  hashCode = hashCode * 31 + [self.unknownFields hash];
+  return hashCode;
+}
+@end
+
+@interface RMTEmptyBuilder()
+@property (strong) RMTEmpty* resultEmpty;
+@end
+
+@implementation RMTEmptyBuilder
+@synthesize resultEmpty;
+- (instancetype) init {
+  if ((self = [super init])) {
+    self.resultEmpty = [[RMTEmpty alloc] init];
+  }
+  return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+  return resultEmpty;
+}
+- (RMTEmptyBuilder*) clear {
+  self.resultEmpty = [[RMTEmpty alloc] init];
+  return self;
+}
+- (RMTEmptyBuilder*) clone {
+  return [RMTEmpty builderWithPrototype:resultEmpty];
+}
+- (RMTEmpty*) defaultInstance {
+  return [RMTEmpty defaultInstance];
+}
+- (RMTEmpty*) build {
+  [self checkInitialized];
+  return [self buildPartial];
+}
+- (RMTEmpty*) buildPartial {
+  RMTEmpty* returnMe = resultEmpty;
+  self.resultEmpty = nil;
+  return returnMe;
+}
+- (RMTEmptyBuilder*) mergeFrom:(RMTEmpty*) other {
+  if (other == [RMTEmpty defaultInstance]) {
+    return self;
+  }
+  [self mergeUnknownFields:other.unknownFields];
+  return self;
+}
+- (RMTEmptyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+  return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RMTEmptyBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+  while (YES) {
+    SInt32 tag = [input readTag];
+    switch (tag) {
+      case 0:
+        [self setUnknownFields:[unknownFields build]];
+        return self;
+      default: {
+        if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+          [self setUnknownFields:[unknownFields build]];
+          return self;
+        }
+        break;
+      }
+    }
+  }
+}
+@end
+
+
+// @@protoc_insertion_point(global_scope)
diff --git a/src/objective-c/examples/Sample/RemoteTestClient/Messages.pb.h b/src/objective-c/examples/Sample/RemoteTestClient/Messages.pb.h
new file mode 100644
index 0000000000..0a08e67702
--- /dev/null
+++ b/src/objective-c/examples/Sample/RemoteTestClient/Messages.pb.h
@@ -0,0 +1,578 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+
+#import <ProtocolBuffers/ProtocolBuffers.h>
+
+// @@protoc_insertion_point(imports)
+
+@class ObjectiveCFileOptions;
+@class ObjectiveCFileOptionsBuilder;
+@class PBDescriptorProto;
+@class PBDescriptorProtoBuilder;
+@class PBDescriptorProtoExtensionRange;
+@class PBDescriptorProtoExtensionRangeBuilder;
+@class PBEnumDescriptorProto;
+@class PBEnumDescriptorProtoBuilder;
+@class PBEnumOptions;
+@class PBEnumOptionsBuilder;
+@class PBEnumValueDescriptorProto;
+@class PBEnumValueDescriptorProtoBuilder;
+@class PBEnumValueOptions;
+@class PBEnumValueOptionsBuilder;
+@class PBFieldDescriptorProto;
+@class PBFieldDescriptorProtoBuilder;
+@class PBFieldOptions;
+@class PBFieldOptionsBuilder;
+@class PBFileDescriptorProto;
+@class PBFileDescriptorProtoBuilder;
+@class PBFileDescriptorSet;
+@class PBFileDescriptorSetBuilder;
+@class PBFileOptions;
+@class PBFileOptionsBuilder;
+@class PBMessageOptions;
+@class PBMessageOptionsBuilder;
+@class PBMethodDescriptorProto;
+@class PBMethodDescriptorProtoBuilder;
+@class PBMethodOptions;
+@class PBMethodOptionsBuilder;
+@class PBOneofDescriptorProto;
+@class PBOneofDescriptorProtoBuilder;
+@class PBServiceDescriptorProto;
+@class PBServiceDescriptorProtoBuilder;
+@class PBServiceOptions;
+@class PBServiceOptionsBuilder;
+@class PBSourceCodeInfo;
+@class PBSourceCodeInfoBuilder;
+@class PBSourceCodeInfoLocation;
+@class PBSourceCodeInfoLocationBuilder;
+@class PBUninterpretedOption;
+@class PBUninterpretedOptionBuilder;
+@class PBUninterpretedOptionNamePart;
+@class PBUninterpretedOptionNamePartBuilder;
+@class RMTPayload;
+@class RMTPayloadBuilder;
+@class RMTResponseParameters;
+@class RMTResponseParametersBuilder;
+@class RMTSimpleRequest;
+@class RMTSimpleRequestBuilder;
+@class RMTSimpleResponse;
+@class RMTSimpleResponseBuilder;
+@class RMTStreamingInputCallRequest;
+@class RMTStreamingInputCallRequestBuilder;
+@class RMTStreamingInputCallResponse;
+@class RMTStreamingInputCallResponseBuilder;
+@class RMTStreamingOutputCallRequest;
+@class RMTStreamingOutputCallRequestBuilder;
+@class RMTStreamingOutputCallResponse;
+@class RMTStreamingOutputCallResponseBuilder;
+
+
+typedef NS_ENUM(SInt32, RMTPayloadType) {
+  RMTPayloadTypeCompressable = 0,
+  RMTPayloadTypeUncompressable = 1,
+  RMTPayloadTypeRandom = 2,
+};
+
+BOOL RMTPayloadTypeIsValidValue(RMTPayloadType value);
+NSString *NSStringFromRMTPayloadType(RMTPayloadType value);
+
+
+@interface RMTMessagesRoot : NSObject {
+}
++ (PBExtensionRegistry*) extensionRegistry;
++ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry;
+@end
+
+@interface RMTPayload : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+  BOOL hasBody_:1;
+  BOOL hasType_:1;
+  NSData* body;
+  RMTPayloadType type;
+}
+- (BOOL) hasType;
+- (BOOL) hasBody;
+@property (readonly) RMTPayloadType type;
+@property (readonly, strong) NSData* body;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RMTPayloadBuilder*) builder;
++ (RMTPayloadBuilder*) builder;
++ (RMTPayloadBuilder*) builderWithPrototype:(RMTPayload*) prototype;
+- (RMTPayloadBuilder*) toBuilder;
+
++ (RMTPayload*) parseFromData:(NSData*) data;
++ (RMTPayload*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTPayload*) parseFromInputStream:(NSInputStream*) input;
++ (RMTPayload*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTPayload*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RMTPayload*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RMTPayloadBuilder : PBGeneratedMessageBuilder {
+@private
+  RMTPayload* resultPayload;
+}
+
+- (RMTPayload*) defaultInstance;
+
+- (RMTPayloadBuilder*) clear;
+- (RMTPayloadBuilder*) clone;
+
+- (RMTPayload*) build;
+- (RMTPayload*) buildPartial;
+
+- (RMTPayloadBuilder*) mergeFrom:(RMTPayload*) other;
+- (RMTPayloadBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RMTPayloadBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasType;
+- (RMTPayloadType) type;
+- (RMTPayloadBuilder*) setType:(RMTPayloadType) value;
+- (RMTPayloadBuilder*) clearType;
+
+- (BOOL) hasBody;
+- (NSData*) body;
+- (RMTPayloadBuilder*) setBody:(NSData*) value;
+- (RMTPayloadBuilder*) clearBody;
+@end
+
+@interface RMTSimpleRequest : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+  BOOL hasFillUsername_:1;
+  BOOL hasFillOauthScope_:1;
+  BOOL hasResponseSize_:1;
+  BOOL hasPayload_:1;
+  BOOL hasResponseType_:1;
+  BOOL fillUsername_:1;
+  BOOL fillOauthScope_:1;
+  SInt32 responseSize;
+  RMTPayload* payload;
+  RMTPayloadType responseType;
+}
+- (BOOL) hasResponseType;
+- (BOOL) hasResponseSize;
+- (BOOL) hasPayload;
+- (BOOL) hasFillUsername;
+- (BOOL) hasFillOauthScope;
+@property (readonly) RMTPayloadType responseType;
+@property (readonly) SInt32 responseSize;
+@property (readonly, strong) RMTPayload* payload;
+- (BOOL) fillUsername;
+- (BOOL) fillOauthScope;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RMTSimpleRequestBuilder*) builder;
++ (RMTSimpleRequestBuilder*) builder;
++ (RMTSimpleRequestBuilder*) builderWithPrototype:(RMTSimpleRequest*) prototype;
+- (RMTSimpleRequestBuilder*) toBuilder;
+
++ (RMTSimpleRequest*) parseFromData:(NSData*) data;
++ (RMTSimpleRequest*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTSimpleRequest*) parseFromInputStream:(NSInputStream*) input;
++ (RMTSimpleRequest*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTSimpleRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RMTSimpleRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RMTSimpleRequestBuilder : PBGeneratedMessageBuilder {
+@private
+  RMTSimpleRequest* resultSimpleRequest;
+}
+
+- (RMTSimpleRequest*) defaultInstance;
+
+- (RMTSimpleRequestBuilder*) clear;
+- (RMTSimpleRequestBuilder*) clone;
+
+- (RMTSimpleRequest*) build;
+- (RMTSimpleRequest*) buildPartial;
+
+- (RMTSimpleRequestBuilder*) mergeFrom:(RMTSimpleRequest*) other;
+- (RMTSimpleRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RMTSimpleRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasResponseType;
+- (RMTPayloadType) responseType;
+- (RMTSimpleRequestBuilder*) setResponseType:(RMTPayloadType) value;
+- (RMTSimpleRequestBuilder*) clearResponseType;
+
+- (BOOL) hasResponseSize;
+- (SInt32) responseSize;
+- (RMTSimpleRequestBuilder*) setResponseSize:(SInt32) value;
+- (RMTSimpleRequestBuilder*) clearResponseSize;
+
+- (BOOL) hasPayload;
+- (RMTPayload*) payload;
+- (RMTSimpleRequestBuilder*) setPayload:(RMTPayload*) value;
+- (RMTSimpleRequestBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue;
+- (RMTSimpleRequestBuilder*) mergePayload:(RMTPayload*) value;
+- (RMTSimpleRequestBuilder*) clearPayload;
+
+- (BOOL) hasFillUsername;
+- (BOOL) fillUsername;
+- (RMTSimpleRequestBuilder*) setFillUsername:(BOOL) value;
+- (RMTSimpleRequestBuilder*) clearFillUsername;
+
+- (BOOL) hasFillOauthScope;
+- (BOOL) fillOauthScope;
+- (RMTSimpleRequestBuilder*) setFillOauthScope:(BOOL) value;
+- (RMTSimpleRequestBuilder*) clearFillOauthScope;
+@end
+
+@interface RMTSimpleResponse : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+  BOOL hasUsername_:1;
+  BOOL hasOauthScope_:1;
+  BOOL hasPayload_:1;
+  NSString* username;
+  NSString* oauthScope;
+  RMTPayload* payload;
+}
+- (BOOL) hasPayload;
+- (BOOL) hasUsername;
+- (BOOL) hasOauthScope;
+@property (readonly, strong) RMTPayload* payload;
+@property (readonly, strong) NSString* username;
+@property (readonly, strong) NSString* oauthScope;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RMTSimpleResponseBuilder*) builder;
++ (RMTSimpleResponseBuilder*) builder;
++ (RMTSimpleResponseBuilder*) builderWithPrototype:(RMTSimpleResponse*) prototype;
+- (RMTSimpleResponseBuilder*) toBuilder;
+
++ (RMTSimpleResponse*) parseFromData:(NSData*) data;
++ (RMTSimpleResponse*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTSimpleResponse*) parseFromInputStream:(NSInputStream*) input;
++ (RMTSimpleResponse*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTSimpleResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RMTSimpleResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RMTSimpleResponseBuilder : PBGeneratedMessageBuilder {
+@private
+  RMTSimpleResponse* resultSimpleResponse;
+}
+
+- (RMTSimpleResponse*) defaultInstance;
+
+- (RMTSimpleResponseBuilder*) clear;
+- (RMTSimpleResponseBuilder*) clone;
+
+- (RMTSimpleResponse*) build;
+- (RMTSimpleResponse*) buildPartial;
+
+- (RMTSimpleResponseBuilder*) mergeFrom:(RMTSimpleResponse*) other;
+- (RMTSimpleResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RMTSimpleResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasPayload;
+- (RMTPayload*) payload;
+- (RMTSimpleResponseBuilder*) setPayload:(RMTPayload*) value;
+- (RMTSimpleResponseBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue;
+- (RMTSimpleResponseBuilder*) mergePayload:(RMTPayload*) value;
+- (RMTSimpleResponseBuilder*) clearPayload;
+
+- (BOOL) hasUsername;
+- (NSString*) username;
+- (RMTSimpleResponseBuilder*) setUsername:(NSString*) value;
+- (RMTSimpleResponseBuilder*) clearUsername;
+
+- (BOOL) hasOauthScope;
+- (NSString*) oauthScope;
+- (RMTSimpleResponseBuilder*) setOauthScope:(NSString*) value;
+- (RMTSimpleResponseBuilder*) clearOauthScope;
+@end
+
+@interface RMTStreamingInputCallRequest : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+  BOOL hasPayload_:1;
+  RMTPayload* payload;
+}
+- (BOOL) hasPayload;
+@property (readonly, strong) RMTPayload* payload;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RMTStreamingInputCallRequestBuilder*) builder;
++ (RMTStreamingInputCallRequestBuilder*) builder;
++ (RMTStreamingInputCallRequestBuilder*) builderWithPrototype:(RMTStreamingInputCallRequest*) prototype;
+- (RMTStreamingInputCallRequestBuilder*) toBuilder;
+
++ (RMTStreamingInputCallRequest*) parseFromData:(NSData*) data;
++ (RMTStreamingInputCallRequest*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTStreamingInputCallRequest*) parseFromInputStream:(NSInputStream*) input;
++ (RMTStreamingInputCallRequest*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTStreamingInputCallRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RMTStreamingInputCallRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RMTStreamingInputCallRequestBuilder : PBGeneratedMessageBuilder {
+@private
+  RMTStreamingInputCallRequest* resultStreamingInputCallRequest;
+}
+
+- (RMTStreamingInputCallRequest*) defaultInstance;
+
+- (RMTStreamingInputCallRequestBuilder*) clear;
+- (RMTStreamingInputCallRequestBuilder*) clone;
+
+- (RMTStreamingInputCallRequest*) build;
+- (RMTStreamingInputCallRequest*) buildPartial;
+
+- (RMTStreamingInputCallRequestBuilder*) mergeFrom:(RMTStreamingInputCallRequest*) other;
+- (RMTStreamingInputCallRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RMTStreamingInputCallRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasPayload;
+- (RMTPayload*) payload;
+- (RMTStreamingInputCallRequestBuilder*) setPayload:(RMTPayload*) value;
+- (RMTStreamingInputCallRequestBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue;
+- (RMTStreamingInputCallRequestBuilder*) mergePayload:(RMTPayload*) value;
+- (RMTStreamingInputCallRequestBuilder*) clearPayload;
+@end
+
+@interface RMTStreamingInputCallResponse : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+  BOOL hasAggregatedPayloadSize_:1;
+  SInt32 aggregatedPayloadSize;
+}
+- (BOOL) hasAggregatedPayloadSize;
+@property (readonly) SInt32 aggregatedPayloadSize;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RMTStreamingInputCallResponseBuilder*) builder;
++ (RMTStreamingInputCallResponseBuilder*) builder;
++ (RMTStreamingInputCallResponseBuilder*) builderWithPrototype:(RMTStreamingInputCallResponse*) prototype;
+- (RMTStreamingInputCallResponseBuilder*) toBuilder;
+
++ (RMTStreamingInputCallResponse*) parseFromData:(NSData*) data;
++ (RMTStreamingInputCallResponse*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTStreamingInputCallResponse*) parseFromInputStream:(NSInputStream*) input;
++ (RMTStreamingInputCallResponse*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTStreamingInputCallResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RMTStreamingInputCallResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RMTStreamingInputCallResponseBuilder : PBGeneratedMessageBuilder {
+@private
+  RMTStreamingInputCallResponse* resultStreamingInputCallResponse;
+}
+
+- (RMTStreamingInputCallResponse*) defaultInstance;
+
+- (RMTStreamingInputCallResponseBuilder*) clear;
+- (RMTStreamingInputCallResponseBuilder*) clone;
+
+- (RMTStreamingInputCallResponse*) build;
+- (RMTStreamingInputCallResponse*) buildPartial;
+
+- (RMTStreamingInputCallResponseBuilder*) mergeFrom:(RMTStreamingInputCallResponse*) other;
+- (RMTStreamingInputCallResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RMTStreamingInputCallResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasAggregatedPayloadSize;
+- (SInt32) aggregatedPayloadSize;
+- (RMTStreamingInputCallResponseBuilder*) setAggregatedPayloadSize:(SInt32) value;
+- (RMTStreamingInputCallResponseBuilder*) clearAggregatedPayloadSize;
+@end
+
+@interface RMTResponseParameters : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+  BOOL hasSize_:1;
+  BOOL hasIntervalUs_:1;
+  SInt32 size;
+  SInt32 intervalUs;
+}
+- (BOOL) hasSize;
+- (BOOL) hasIntervalUs;
+@property (readonly) SInt32 size;
+@property (readonly) SInt32 intervalUs;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RMTResponseParametersBuilder*) builder;
++ (RMTResponseParametersBuilder*) builder;
++ (RMTResponseParametersBuilder*) builderWithPrototype:(RMTResponseParameters*) prototype;
+- (RMTResponseParametersBuilder*) toBuilder;
+
++ (RMTResponseParameters*) parseFromData:(NSData*) data;
++ (RMTResponseParameters*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTResponseParameters*) parseFromInputStream:(NSInputStream*) input;
++ (RMTResponseParameters*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTResponseParameters*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RMTResponseParameters*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RMTResponseParametersBuilder : PBGeneratedMessageBuilder {
+@private
+  RMTResponseParameters* resultResponseParameters;
+}
+
+- (RMTResponseParameters*) defaultInstance;
+
+- (RMTResponseParametersBuilder*) clear;
+- (RMTResponseParametersBuilder*) clone;
+
+- (RMTResponseParameters*) build;
+- (RMTResponseParameters*) buildPartial;
+
+- (RMTResponseParametersBuilder*) mergeFrom:(RMTResponseParameters*) other;
+- (RMTResponseParametersBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RMTResponseParametersBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasSize;
+- (SInt32) size;
+- (RMTResponseParametersBuilder*) setSize:(SInt32) value;
+- (RMTResponseParametersBuilder*) clearSize;
+
+- (BOOL) hasIntervalUs;
+- (SInt32) intervalUs;
+- (RMTResponseParametersBuilder*) setIntervalUs:(SInt32) value;
+- (RMTResponseParametersBuilder*) clearIntervalUs;
+@end
+
+@interface RMTStreamingOutputCallRequest : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+  BOOL hasPayload_:1;
+  BOOL hasResponseType_:1;
+  RMTPayload* payload;
+  RMTPayloadType responseType;
+  NSMutableArray * responseParametersArray;
+}
+- (BOOL) hasResponseType;
+- (BOOL) hasPayload;
+@property (readonly) RMTPayloadType responseType;
+@property (readonly, strong) NSArray * responseParameters;
+@property (readonly, strong) RMTPayload* payload;
+- (RMTResponseParameters*)responseParametersAtIndex:(NSUInteger)index;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RMTStreamingOutputCallRequestBuilder*) builder;
++ (RMTStreamingOutputCallRequestBuilder*) builder;
++ (RMTStreamingOutputCallRequestBuilder*) builderWithPrototype:(RMTStreamingOutputCallRequest*) prototype;
+- (RMTStreamingOutputCallRequestBuilder*) toBuilder;
+
++ (RMTStreamingOutputCallRequest*) parseFromData:(NSData*) data;
++ (RMTStreamingOutputCallRequest*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTStreamingOutputCallRequest*) parseFromInputStream:(NSInputStream*) input;
++ (RMTStreamingOutputCallRequest*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTStreamingOutputCallRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RMTStreamingOutputCallRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RMTStreamingOutputCallRequestBuilder : PBGeneratedMessageBuilder {
+@private
+  RMTStreamingOutputCallRequest* resultStreamingOutputCallRequest;
+}
+
+- (RMTStreamingOutputCallRequest*) defaultInstance;
+
+- (RMTStreamingOutputCallRequestBuilder*) clear;
+- (RMTStreamingOutputCallRequestBuilder*) clone;
+
+- (RMTStreamingOutputCallRequest*) build;
+- (RMTStreamingOutputCallRequest*) buildPartial;
+
+- (RMTStreamingOutputCallRequestBuilder*) mergeFrom:(RMTStreamingOutputCallRequest*) other;
+- (RMTStreamingOutputCallRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RMTStreamingOutputCallRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasResponseType;
+- (RMTPayloadType) responseType;
+- (RMTStreamingOutputCallRequestBuilder*) setResponseType:(RMTPayloadType) value;
+- (RMTStreamingOutputCallRequestBuilder*) clearResponseType;
+
+- (NSMutableArray *)responseParameters;
+- (RMTResponseParameters*)responseParametersAtIndex:(NSUInteger)index;
+- (RMTStreamingOutputCallRequestBuilder *)addResponseParameters:(RMTResponseParameters*)value;
+- (RMTStreamingOutputCallRequestBuilder *)setResponseParametersArray:(NSArray *)array;
+- (RMTStreamingOutputCallRequestBuilder *)clearResponseParameters;
+
+- (BOOL) hasPayload;
+- (RMTPayload*) payload;
+- (RMTStreamingOutputCallRequestBuilder*) setPayload:(RMTPayload*) value;
+- (RMTStreamingOutputCallRequestBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue;
+- (RMTStreamingOutputCallRequestBuilder*) mergePayload:(RMTPayload*) value;
+- (RMTStreamingOutputCallRequestBuilder*) clearPayload;
+@end
+
+@interface RMTStreamingOutputCallResponse : PBGeneratedMessage<GeneratedMessageProtocol> {
+@private
+  BOOL hasPayload_:1;
+  RMTPayload* payload;
+}
+- (BOOL) hasPayload;
+@property (readonly, strong) RMTPayload* payload;
+
++ (instancetype) defaultInstance;
+- (instancetype) defaultInstance;
+
+- (BOOL) isInitialized;
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
+- (RMTStreamingOutputCallResponseBuilder*) builder;
++ (RMTStreamingOutputCallResponseBuilder*) builder;
++ (RMTStreamingOutputCallResponseBuilder*) builderWithPrototype:(RMTStreamingOutputCallResponse*) prototype;
+- (RMTStreamingOutputCallResponseBuilder*) toBuilder;
+
++ (RMTStreamingOutputCallResponse*) parseFromData:(NSData*) data;
++ (RMTStreamingOutputCallResponse*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTStreamingOutputCallResponse*) parseFromInputStream:(NSInputStream*) input;
++ (RMTStreamingOutputCallResponse*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
++ (RMTStreamingOutputCallResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input;
++ (RMTStreamingOutputCallResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+@end
+
+@interface RMTStreamingOutputCallResponseBuilder : PBGeneratedMessageBuilder {
+@private
+  RMTStreamingOutputCallResponse* resultStreamingOutputCallResponse;
+}
+
+- (RMTStreamingOutputCallResponse*) defaultInstance;
+
+- (RMTStreamingOutputCallResponseBuilder*) clear;
+- (RMTStreamingOutputCallResponseBuilder*) clone;
+
+- (RMTStreamingOutputCallResponse*) build;
+- (RMTStreamingOutputCallResponse*) buildPartial;
+
+- (RMTStreamingOutputCallResponseBuilder*) mergeFrom:(RMTStreamingOutputCallResponse*) other;
+- (RMTStreamingOutputCallResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
+- (RMTStreamingOutputCallResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+
+- (BOOL) hasPayload;
+- (RMTPayload*) payload;
+- (RMTStreamingOutputCallResponseBuilder*) setPayload:(RMTPayload*) value;
+- (RMTStreamingOutputCallResponseBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue;
+- (RMTStreamingOutputCallResponseBuilder*) mergePayload:(RMTPayload*) value;
+- (RMTStreamingOutputCallResponseBuilder*) clearPayload;
+@end
+
+
+// @@protoc_insertion_point(global_scope)
diff --git a/src/objective-c/examples/Sample/RemoteTestClient/Messages.pb.m b/src/objective-c/examples/Sample/RemoteTestClient/Messages.pb.m
new file mode 100644
index 0000000000..fbad1a9c09
--- /dev/null
+++ b/src/objective-c/examples/Sample/RemoteTestClient/Messages.pb.m
@@ -0,0 +1,2256 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+
+#import "Messages.pb.h"
+// @@protoc_insertion_point(imports)
+
+@implementation RMTMessagesRoot
+static PBExtensionRegistry* extensionRegistry = nil;
++ (PBExtensionRegistry*) extensionRegistry {
+  return extensionRegistry;
+}
+
++ (void) initialize {
+  if (self == [RMTMessagesRoot class]) {
+    PBMutableExtensionRegistry* registry = [PBMutableExtensionRegistry registry];
+    [self registerAllExtensions:registry];
+    [ObjectivecDescriptorRoot registerAllExtensions:registry];
+    extensionRegistry = registry;
+  }
+}
++ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry {
+}
+@end
+
+BOOL RMTPayloadTypeIsValidValue(RMTPayloadType value) {
+  switch (value) {
+    case RMTPayloadTypeCompressable:
+    case RMTPayloadTypeUncompressable:
+    case RMTPayloadTypeRandom:
+      return YES;
+    default:
+      return NO;
+  }
+}
+NSString *NSStringFromRMTPayloadType(RMTPayloadType value) {
+  switch (value) {
+    case RMTPayloadTypeCompressable:
+      return @"RMTPayloadTypeCompressable";
+    case RMTPayloadTypeUncompressable:
+      return @"RMTPayloadTypeUncompressable";
+    case RMTPayloadTypeRandom:
+      return @"RMTPayloadTypeRandom";
+    default:
+      return nil;
+  }
+}
+
+@interface RMTPayload ()
+@property RMTPayloadType type;
+@property (strong) NSData* body;
+@end
+
+@implementation RMTPayload
+
+- (BOOL) hasType {
+  return !!hasType_;
+}
+- (void) setHasType:(BOOL) _value_ {
+  hasType_ = !!_value_;
+}
+@synthesize type;
+- (BOOL) hasBody {
+  return !!hasBody_;
+}
+- (void) setHasBody:(BOOL) _value_ {
+  hasBody_ = !!_value_;
+}
+@synthesize body;
+- (instancetype) init {
+  if ((self = [super init])) {
+    self.type = RMTPayloadTypeCompressable;
+    self.body = [NSData data];
+  }
+  return self;
+}
+static RMTPayload* defaultRMTPayloadInstance = nil;
++ (void) initialize {
+  if (self == [RMTPayload class]) {
+    defaultRMTPayloadInstance = [[RMTPayload alloc] init];
+  }
+}
++ (instancetype) defaultInstance {
+  return defaultRMTPayloadInstance;
+}
+- (instancetype) defaultInstance {
+  return defaultRMTPayloadInstance;
+}
+- (BOOL) isInitialized {
+  return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+  if (self.hasType) {
+    [output writeEnum:1 value:self.type];
+  }
+  if (self.hasBody) {
+    [output writeData:2 value:self.body];
+  }
+  [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+  __block SInt32 size_ = memoizedSerializedSize;
+  if (size_ != -1) {
+    return size_;
+  }
+
+  size_ = 0;
+  if (self.hasType) {
+    size_ += computeEnumSize(1, self.type);
+  }
+  if (self.hasBody) {
+    size_ += computeDataSize(2, self.body);
+  }
+  size_ += self.unknownFields.serializedSize;
+  memoizedSerializedSize = size_;
+  return size_;
+}
++ (RMTPayload*) parseFromData:(NSData*) data {
+  return (RMTPayload*)[[[RMTPayload builder] mergeFromData:data] build];
+}
++ (RMTPayload*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTPayload*)[[[RMTPayload builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RMTPayload*) parseFromInputStream:(NSInputStream*) input {
+  return (RMTPayload*)[[[RMTPayload builder] mergeFromInputStream:input] build];
+}
++ (RMTPayload*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTPayload*)[[[RMTPayload builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTPayload*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+  return (RMTPayload*)[[[RMTPayload builder] mergeFromCodedInputStream:input] build];
+}
++ (RMTPayload*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTPayload*)[[[RMTPayload builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTPayloadBuilder*) builder {
+  return [[RMTPayloadBuilder alloc] init];
+}
++ (RMTPayloadBuilder*) builderWithPrototype:(RMTPayload*) prototype {
+  return [[RMTPayload builder] mergeFrom:prototype];
+}
+- (RMTPayloadBuilder*) builder {
+  return [RMTPayload builder];
+}
+- (RMTPayloadBuilder*) toBuilder {
+  return [RMTPayload builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+  if (self.hasType) {
+    [output appendFormat:@"%@%@: %@\n", indent, @"type", NSStringFromRMTPayloadType(self.type)];
+  }
+  if (self.hasBody) {
+    [output appendFormat:@"%@%@: %@\n", indent, @"body", self.body];
+  }
+  [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+  if (other == self) {
+    return YES;
+  }
+  if (![other isKindOfClass:[RMTPayload class]]) {
+    return NO;
+  }
+  RMTPayload *otherMessage = other;
+  return
+      self.hasType == otherMessage.hasType &&
+      (!self.hasType || self.type == otherMessage.type) &&
+      self.hasBody == otherMessage.hasBody &&
+      (!self.hasBody || [self.body isEqual:otherMessage.body]) &&
+      (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+  __block NSUInteger hashCode = 7;
+  if (self.hasType) {
+    hashCode = hashCode * 31 + self.type;
+  }
+  if (self.hasBody) {
+    hashCode = hashCode * 31 + [self.body hash];
+  }
+  hashCode = hashCode * 31 + [self.unknownFields hash];
+  return hashCode;
+}
+@end
+
+@interface RMTPayloadBuilder()
+@property (strong) RMTPayload* resultPayload;
+@end
+
+@implementation RMTPayloadBuilder
+@synthesize resultPayload;
+- (instancetype) init {
+  if ((self = [super init])) {
+    self.resultPayload = [[RMTPayload alloc] init];
+  }
+  return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+  return resultPayload;
+}
+- (RMTPayloadBuilder*) clear {
+  self.resultPayload = [[RMTPayload alloc] init];
+  return self;
+}
+- (RMTPayloadBuilder*) clone {
+  return [RMTPayload builderWithPrototype:resultPayload];
+}
+- (RMTPayload*) defaultInstance {
+  return [RMTPayload defaultInstance];
+}
+- (RMTPayload*) build {
+  [self checkInitialized];
+  return [self buildPartial];
+}
+- (RMTPayload*) buildPartial {
+  RMTPayload* returnMe = resultPayload;
+  self.resultPayload = nil;
+  return returnMe;
+}
+- (RMTPayloadBuilder*) mergeFrom:(RMTPayload*) other {
+  if (other == [RMTPayload defaultInstance]) {
+    return self;
+  }
+  if (other.hasType) {
+    [self setType:other.type];
+  }
+  if (other.hasBody) {
+    [self setBody:other.body];
+  }
+  [self mergeUnknownFields:other.unknownFields];
+  return self;
+}
+- (RMTPayloadBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+  return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RMTPayloadBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+  while (YES) {
+    SInt32 tag = [input readTag];
+    switch (tag) {
+      case 0:
+        [self setUnknownFields:[unknownFields build]];
+        return self;
+      default: {
+        if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+          [self setUnknownFields:[unknownFields build]];
+          return self;
+        }
+        break;
+      }
+      case 8: {
+        RMTPayloadType value = (RMTPayloadType)[input readEnum];
+        if (RMTPayloadTypeIsValidValue(value)) {
+          [self setType:value];
+        } else {
+          [unknownFields mergeVarintField:1 value:value];
+        }
+        break;
+      }
+      case 18: {
+        [self setBody:[input readData]];
+        break;
+      }
+    }
+  }
+}
+- (BOOL) hasType {
+  return resultPayload.hasType;
+}
+- (RMTPayloadType) type {
+  return resultPayload.type;
+}
+- (RMTPayloadBuilder*) setType:(RMTPayloadType) value {
+  resultPayload.hasType = YES;
+  resultPayload.type = value;
+  return self;
+}
+- (RMTPayloadBuilder*) clearType {
+  resultPayload.hasType = NO;
+  resultPayload.type = RMTPayloadTypeCompressable;
+  return self;
+}
+- (BOOL) hasBody {
+  return resultPayload.hasBody;
+}
+- (NSData*) body {
+  return resultPayload.body;
+}
+- (RMTPayloadBuilder*) setBody:(NSData*) value {
+  resultPayload.hasBody = YES;
+  resultPayload.body = value;
+  return self;
+}
+- (RMTPayloadBuilder*) clearBody {
+  resultPayload.hasBody = NO;
+  resultPayload.body = [NSData data];
+  return self;
+}
+@end
+
+@interface RMTSimpleRequest ()
+@property RMTPayloadType responseType;
+@property SInt32 responseSize;
+@property (strong) RMTPayload* payload;
+@property BOOL fillUsername;
+@property BOOL fillOauthScope;
+@end
+
+@implementation RMTSimpleRequest
+
+- (BOOL) hasResponseType {
+  return !!hasResponseType_;
+}
+- (void) setHasResponseType:(BOOL) _value_ {
+  hasResponseType_ = !!_value_;
+}
+@synthesize responseType;
+- (BOOL) hasResponseSize {
+  return !!hasResponseSize_;
+}
+- (void) setHasResponseSize:(BOOL) _value_ {
+  hasResponseSize_ = !!_value_;
+}
+@synthesize responseSize;
+- (BOOL) hasPayload {
+  return !!hasPayload_;
+}
+- (void) setHasPayload:(BOOL) _value_ {
+  hasPayload_ = !!_value_;
+}
+@synthesize payload;
+- (BOOL) hasFillUsername {
+  return !!hasFillUsername_;
+}
+- (void) setHasFillUsername:(BOOL) _value_ {
+  hasFillUsername_ = !!_value_;
+}
+- (BOOL) fillUsername {
+  return !!fillUsername_;
+}
+- (void) setFillUsername:(BOOL) _value_ {
+  fillUsername_ = !!_value_;
+}
+- (BOOL) hasFillOauthScope {
+  return !!hasFillOauthScope_;
+}
+- (void) setHasFillOauthScope:(BOOL) _value_ {
+  hasFillOauthScope_ = !!_value_;
+}
+- (BOOL) fillOauthScope {
+  return !!fillOauthScope_;
+}
+- (void) setFillOauthScope:(BOOL) _value_ {
+  fillOauthScope_ = !!_value_;
+}
+- (instancetype) init {
+  if ((self = [super init])) {
+    self.responseType = RMTPayloadTypeCompressable;
+    self.responseSize = 0;
+    self.payload = [RMTPayload defaultInstance];
+    self.fillUsername = NO;
+    self.fillOauthScope = NO;
+  }
+  return self;
+}
+static RMTSimpleRequest* defaultRMTSimpleRequestInstance = nil;
++ (void) initialize {
+  if (self == [RMTSimpleRequest class]) {
+    defaultRMTSimpleRequestInstance = [[RMTSimpleRequest alloc] init];
+  }
+}
++ (instancetype) defaultInstance {
+  return defaultRMTSimpleRequestInstance;
+}
+- (instancetype) defaultInstance {
+  return defaultRMTSimpleRequestInstance;
+}
+- (BOOL) isInitialized {
+  return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+  if (self.hasResponseType) {
+    [output writeEnum:1 value:self.responseType];
+  }
+  if (self.hasResponseSize) {
+    [output writeInt32:2 value:self.responseSize];
+  }
+  if (self.hasPayload) {
+    [output writeMessage:3 value:self.payload];
+  }
+  if (self.hasFillUsername) {
+    [output writeBool:4 value:self.fillUsername];
+  }
+  if (self.hasFillOauthScope) {
+    [output writeBool:5 value:self.fillOauthScope];
+  }
+  [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+  __block SInt32 size_ = memoizedSerializedSize;
+  if (size_ != -1) {
+    return size_;
+  }
+
+  size_ = 0;
+  if (self.hasResponseType) {
+    size_ += computeEnumSize(1, self.responseType);
+  }
+  if (self.hasResponseSize) {
+    size_ += computeInt32Size(2, self.responseSize);
+  }
+  if (self.hasPayload) {
+    size_ += computeMessageSize(3, self.payload);
+  }
+  if (self.hasFillUsername) {
+    size_ += computeBoolSize(4, self.fillUsername);
+  }
+  if (self.hasFillOauthScope) {
+    size_ += computeBoolSize(5, self.fillOauthScope);
+  }
+  size_ += self.unknownFields.serializedSize;
+  memoizedSerializedSize = size_;
+  return size_;
+}
++ (RMTSimpleRequest*) parseFromData:(NSData*) data {
+  return (RMTSimpleRequest*)[[[RMTSimpleRequest builder] mergeFromData:data] build];
+}
++ (RMTSimpleRequest*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTSimpleRequest*)[[[RMTSimpleRequest builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RMTSimpleRequest*) parseFromInputStream:(NSInputStream*) input {
+  return (RMTSimpleRequest*)[[[RMTSimpleRequest builder] mergeFromInputStream:input] build];
+}
++ (RMTSimpleRequest*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTSimpleRequest*)[[[RMTSimpleRequest builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTSimpleRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+  return (RMTSimpleRequest*)[[[RMTSimpleRequest builder] mergeFromCodedInputStream:input] build];
+}
++ (RMTSimpleRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTSimpleRequest*)[[[RMTSimpleRequest builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTSimpleRequestBuilder*) builder {
+  return [[RMTSimpleRequestBuilder alloc] init];
+}
++ (RMTSimpleRequestBuilder*) builderWithPrototype:(RMTSimpleRequest*) prototype {
+  return [[RMTSimpleRequest builder] mergeFrom:prototype];
+}
+- (RMTSimpleRequestBuilder*) builder {
+  return [RMTSimpleRequest builder];
+}
+- (RMTSimpleRequestBuilder*) toBuilder {
+  return [RMTSimpleRequest builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+  if (self.hasResponseType) {
+    [output appendFormat:@"%@%@: %@\n", indent, @"responseType", NSStringFromRMTPayloadType(self.responseType)];
+  }
+  if (self.hasResponseSize) {
+    [output appendFormat:@"%@%@: %@\n", indent, @"responseSize", [NSNumber numberWithInteger:self.responseSize]];
+  }
+  if (self.hasPayload) {
+    [output appendFormat:@"%@%@ {\n", indent, @"payload"];
+    [self.payload writeDescriptionTo:output
+                         withIndent:[NSString stringWithFormat:@"%@  ", indent]];
+    [output appendFormat:@"%@}\n", indent];
+  }
+  if (self.hasFillUsername) {
+    [output appendFormat:@"%@%@: %@\n", indent, @"fillUsername", [NSNumber numberWithBool:self.fillUsername]];
+  }
+  if (self.hasFillOauthScope) {
+    [output appendFormat:@"%@%@: %@\n", indent, @"fillOauthScope", [NSNumber numberWithBool:self.fillOauthScope]];
+  }
+  [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+  if (other == self) {
+    return YES;
+  }
+  if (![other isKindOfClass:[RMTSimpleRequest class]]) {
+    return NO;
+  }
+  RMTSimpleRequest *otherMessage = other;
+  return
+      self.hasResponseType == otherMessage.hasResponseType &&
+      (!self.hasResponseType || self.responseType == otherMessage.responseType) &&
+      self.hasResponseSize == otherMessage.hasResponseSize &&
+      (!self.hasResponseSize || self.responseSize == otherMessage.responseSize) &&
+      self.hasPayload == otherMessage.hasPayload &&
+      (!self.hasPayload || [self.payload isEqual:otherMessage.payload]) &&
+      self.hasFillUsername == otherMessage.hasFillUsername &&
+      (!self.hasFillUsername || self.fillUsername == otherMessage.fillUsername) &&
+      self.hasFillOauthScope == otherMessage.hasFillOauthScope &&
+      (!self.hasFillOauthScope || self.fillOauthScope == otherMessage.fillOauthScope) &&
+      (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+  __block NSUInteger hashCode = 7;
+  if (self.hasResponseType) {
+    hashCode = hashCode * 31 + self.responseType;
+  }
+  if (self.hasResponseSize) {
+    hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.responseSize] hash];
+  }
+  if (self.hasPayload) {
+    hashCode = hashCode * 31 + [self.payload hash];
+  }
+  if (self.hasFillUsername) {
+    hashCode = hashCode * 31 + [[NSNumber numberWithBool:self.fillUsername] hash];
+  }
+  if (self.hasFillOauthScope) {
+    hashCode = hashCode * 31 + [[NSNumber numberWithBool:self.fillOauthScope] hash];
+  }
+  hashCode = hashCode * 31 + [self.unknownFields hash];
+  return hashCode;
+}
+@end
+
+@interface RMTSimpleRequestBuilder()
+@property (strong) RMTSimpleRequest* resultSimpleRequest;
+@end
+
+@implementation RMTSimpleRequestBuilder
+@synthesize resultSimpleRequest;
+- (instancetype) init {
+  if ((self = [super init])) {
+    self.resultSimpleRequest = [[RMTSimpleRequest alloc] init];
+  }
+  return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+  return resultSimpleRequest;
+}
+- (RMTSimpleRequestBuilder*) clear {
+  self.resultSimpleRequest = [[RMTSimpleRequest alloc] init];
+  return self;
+}
+- (RMTSimpleRequestBuilder*) clone {
+  return [RMTSimpleRequest builderWithPrototype:resultSimpleRequest];
+}
+- (RMTSimpleRequest*) defaultInstance {
+  return [RMTSimpleRequest defaultInstance];
+}
+- (RMTSimpleRequest*) build {
+  [self checkInitialized];
+  return [self buildPartial];
+}
+- (RMTSimpleRequest*) buildPartial {
+  RMTSimpleRequest* returnMe = resultSimpleRequest;
+  self.resultSimpleRequest = nil;
+  return returnMe;
+}
+- (RMTSimpleRequestBuilder*) mergeFrom:(RMTSimpleRequest*) other {
+  if (other == [RMTSimpleRequest defaultInstance]) {
+    return self;
+  }
+  if (other.hasResponseType) {
+    [self setResponseType:other.responseType];
+  }
+  if (other.hasResponseSize) {
+    [self setResponseSize:other.responseSize];
+  }
+  if (other.hasPayload) {
+    [self mergePayload:other.payload];
+  }
+  if (other.hasFillUsername) {
+    [self setFillUsername:other.fillUsername];
+  }
+  if (other.hasFillOauthScope) {
+    [self setFillOauthScope:other.fillOauthScope];
+  }
+  [self mergeUnknownFields:other.unknownFields];
+  return self;
+}
+- (RMTSimpleRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+  return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RMTSimpleRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+  while (YES) {
+    SInt32 tag = [input readTag];
+    switch (tag) {
+      case 0:
+        [self setUnknownFields:[unknownFields build]];
+        return self;
+      default: {
+        if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+          [self setUnknownFields:[unknownFields build]];
+          return self;
+        }
+        break;
+      }
+      case 8: {
+        RMTPayloadType value = (RMTPayloadType)[input readEnum];
+        if (RMTPayloadTypeIsValidValue(value)) {
+          [self setResponseType:value];
+        } else {
+          [unknownFields mergeVarintField:1 value:value];
+        }
+        break;
+      }
+      case 16: {
+        [self setResponseSize:[input readInt32]];
+        break;
+      }
+      case 26: {
+        RMTPayloadBuilder* subBuilder = [RMTPayload builder];
+        if (self.hasPayload) {
+          [subBuilder mergeFrom:self.payload];
+        }
+        [input readMessage:subBuilder extensionRegistry:extensionRegistry];
+        [self setPayload:[subBuilder buildPartial]];
+        break;
+      }
+      case 32: {
+        [self setFillUsername:[input readBool]];
+        break;
+      }
+      case 40: {
+        [self setFillOauthScope:[input readBool]];
+        break;
+      }
+    }
+  }
+}
+- (BOOL) hasResponseType {
+  return resultSimpleRequest.hasResponseType;
+}
+- (RMTPayloadType) responseType {
+  return resultSimpleRequest.responseType;
+}
+- (RMTSimpleRequestBuilder*) setResponseType:(RMTPayloadType) value {
+  resultSimpleRequest.hasResponseType = YES;
+  resultSimpleRequest.responseType = value;
+  return self;
+}
+- (RMTSimpleRequestBuilder*) clearResponseType {
+  resultSimpleRequest.hasResponseType = NO;
+  resultSimpleRequest.responseType = RMTPayloadTypeCompressable;
+  return self;
+}
+- (BOOL) hasResponseSize {
+  return resultSimpleRequest.hasResponseSize;
+}
+- (SInt32) responseSize {
+  return resultSimpleRequest.responseSize;
+}
+- (RMTSimpleRequestBuilder*) setResponseSize:(SInt32) value {
+  resultSimpleRequest.hasResponseSize = YES;
+  resultSimpleRequest.responseSize = value;
+  return self;
+}
+- (RMTSimpleRequestBuilder*) clearResponseSize {
+  resultSimpleRequest.hasResponseSize = NO;
+  resultSimpleRequest.responseSize = 0;
+  return self;
+}
+- (BOOL) hasPayload {
+  return resultSimpleRequest.hasPayload;
+}
+- (RMTPayload*) payload {
+  return resultSimpleRequest.payload;
+}
+- (RMTSimpleRequestBuilder*) setPayload:(RMTPayload*) value {
+  resultSimpleRequest.hasPayload = YES;
+  resultSimpleRequest.payload = value;
+  return self;
+}
+- (RMTSimpleRequestBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue {
+  return [self setPayload:[builderForValue build]];
+}
+- (RMTSimpleRequestBuilder*) mergePayload:(RMTPayload*) value {
+  if (resultSimpleRequest.hasPayload &&
+      resultSimpleRequest.payload != [RMTPayload defaultInstance]) {
+    resultSimpleRequest.payload =
+      [[[RMTPayload builderWithPrototype:resultSimpleRequest.payload] mergeFrom:value] buildPartial];
+  } else {
+    resultSimpleRequest.payload = value;
+  }
+  resultSimpleRequest.hasPayload = YES;
+  return self;
+}
+- (RMTSimpleRequestBuilder*) clearPayload {
+  resultSimpleRequest.hasPayload = NO;
+  resultSimpleRequest.payload = [RMTPayload defaultInstance];
+  return self;
+}
+- (BOOL) hasFillUsername {
+  return resultSimpleRequest.hasFillUsername;
+}
+- (BOOL) fillUsername {
+  return resultSimpleRequest.fillUsername;
+}
+- (RMTSimpleRequestBuilder*) setFillUsername:(BOOL) value {
+  resultSimpleRequest.hasFillUsername = YES;
+  resultSimpleRequest.fillUsername = value;
+  return self;
+}
+- (RMTSimpleRequestBuilder*) clearFillUsername {
+  resultSimpleRequest.hasFillUsername = NO;
+  resultSimpleRequest.fillUsername = NO;
+  return self;
+}
+- (BOOL) hasFillOauthScope {
+  return resultSimpleRequest.hasFillOauthScope;
+}
+- (BOOL) fillOauthScope {
+  return resultSimpleRequest.fillOauthScope;
+}
+- (RMTSimpleRequestBuilder*) setFillOauthScope:(BOOL) value {
+  resultSimpleRequest.hasFillOauthScope = YES;
+  resultSimpleRequest.fillOauthScope = value;
+  return self;
+}
+- (RMTSimpleRequestBuilder*) clearFillOauthScope {
+  resultSimpleRequest.hasFillOauthScope = NO;
+  resultSimpleRequest.fillOauthScope = NO;
+  return self;
+}
+@end
+
+@interface RMTSimpleResponse ()
+@property (strong) RMTPayload* payload;
+@property (strong) NSString* username;
+@property (strong) NSString* oauthScope;
+@end
+
+@implementation RMTSimpleResponse
+
+- (BOOL) hasPayload {
+  return !!hasPayload_;
+}
+- (void) setHasPayload:(BOOL) _value_ {
+  hasPayload_ = !!_value_;
+}
+@synthesize payload;
+- (BOOL) hasUsername {
+  return !!hasUsername_;
+}
+- (void) setHasUsername:(BOOL) _value_ {
+  hasUsername_ = !!_value_;
+}
+@synthesize username;
+- (BOOL) hasOauthScope {
+  return !!hasOauthScope_;
+}
+- (void) setHasOauthScope:(BOOL) _value_ {
+  hasOauthScope_ = !!_value_;
+}
+@synthesize oauthScope;
+- (instancetype) init {
+  if ((self = [super init])) {
+    self.payload = [RMTPayload defaultInstance];
+    self.username = @"";
+    self.oauthScope = @"";
+  }
+  return self;
+}
+static RMTSimpleResponse* defaultRMTSimpleResponseInstance = nil;
++ (void) initialize {
+  if (self == [RMTSimpleResponse class]) {
+    defaultRMTSimpleResponseInstance = [[RMTSimpleResponse alloc] init];
+  }
+}
++ (instancetype) defaultInstance {
+  return defaultRMTSimpleResponseInstance;
+}
+- (instancetype) defaultInstance {
+  return defaultRMTSimpleResponseInstance;
+}
+- (BOOL) isInitialized {
+  return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+  if (self.hasPayload) {
+    [output writeMessage:1 value:self.payload];
+  }
+  if (self.hasUsername) {
+    [output writeString:2 value:self.username];
+  }
+  if (self.hasOauthScope) {
+    [output writeString:3 value:self.oauthScope];
+  }
+  [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+  __block SInt32 size_ = memoizedSerializedSize;
+  if (size_ != -1) {
+    return size_;
+  }
+
+  size_ = 0;
+  if (self.hasPayload) {
+    size_ += computeMessageSize(1, self.payload);
+  }
+  if (self.hasUsername) {
+    size_ += computeStringSize(2, self.username);
+  }
+  if (self.hasOauthScope) {
+    size_ += computeStringSize(3, self.oauthScope);
+  }
+  size_ += self.unknownFields.serializedSize;
+  memoizedSerializedSize = size_;
+  return size_;
+}
++ (RMTSimpleResponse*) parseFromData:(NSData*) data {
+  return (RMTSimpleResponse*)[[[RMTSimpleResponse builder] mergeFromData:data] build];
+}
++ (RMTSimpleResponse*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTSimpleResponse*)[[[RMTSimpleResponse builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RMTSimpleResponse*) parseFromInputStream:(NSInputStream*) input {
+  return (RMTSimpleResponse*)[[[RMTSimpleResponse builder] mergeFromInputStream:input] build];
+}
++ (RMTSimpleResponse*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTSimpleResponse*)[[[RMTSimpleResponse builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTSimpleResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+  return (RMTSimpleResponse*)[[[RMTSimpleResponse builder] mergeFromCodedInputStream:input] build];
+}
++ (RMTSimpleResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTSimpleResponse*)[[[RMTSimpleResponse builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTSimpleResponseBuilder*) builder {
+  return [[RMTSimpleResponseBuilder alloc] init];
+}
++ (RMTSimpleResponseBuilder*) builderWithPrototype:(RMTSimpleResponse*) prototype {
+  return [[RMTSimpleResponse builder] mergeFrom:prototype];
+}
+- (RMTSimpleResponseBuilder*) builder {
+  return [RMTSimpleResponse builder];
+}
+- (RMTSimpleResponseBuilder*) toBuilder {
+  return [RMTSimpleResponse builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+  if (self.hasPayload) {
+    [output appendFormat:@"%@%@ {\n", indent, @"payload"];
+    [self.payload writeDescriptionTo:output
+                         withIndent:[NSString stringWithFormat:@"%@  ", indent]];
+    [output appendFormat:@"%@}\n", indent];
+  }
+  if (self.hasUsername) {
+    [output appendFormat:@"%@%@: %@\n", indent, @"username", self.username];
+  }
+  if (self.hasOauthScope) {
+    [output appendFormat:@"%@%@: %@\n", indent, @"oauthScope", self.oauthScope];
+  }
+  [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+  if (other == self) {
+    return YES;
+  }
+  if (![other isKindOfClass:[RMTSimpleResponse class]]) {
+    return NO;
+  }
+  RMTSimpleResponse *otherMessage = other;
+  return
+      self.hasPayload == otherMessage.hasPayload &&
+      (!self.hasPayload || [self.payload isEqual:otherMessage.payload]) &&
+      self.hasUsername == otherMessage.hasUsername &&
+      (!self.hasUsername || [self.username isEqual:otherMessage.username]) &&
+      self.hasOauthScope == otherMessage.hasOauthScope &&
+      (!self.hasOauthScope || [self.oauthScope isEqual:otherMessage.oauthScope]) &&
+      (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+  __block NSUInteger hashCode = 7;
+  if (self.hasPayload) {
+    hashCode = hashCode * 31 + [self.payload hash];
+  }
+  if (self.hasUsername) {
+    hashCode = hashCode * 31 + [self.username hash];
+  }
+  if (self.hasOauthScope) {
+    hashCode = hashCode * 31 + [self.oauthScope hash];
+  }
+  hashCode = hashCode * 31 + [self.unknownFields hash];
+  return hashCode;
+}
+@end
+
+@interface RMTSimpleResponseBuilder()
+@property (strong) RMTSimpleResponse* resultSimpleResponse;
+@end
+
+@implementation RMTSimpleResponseBuilder
+@synthesize resultSimpleResponse;
+- (instancetype) init {
+  if ((self = [super init])) {
+    self.resultSimpleResponse = [[RMTSimpleResponse alloc] init];
+  }
+  return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+  return resultSimpleResponse;
+}
+- (RMTSimpleResponseBuilder*) clear {
+  self.resultSimpleResponse = [[RMTSimpleResponse alloc] init];
+  return self;
+}
+- (RMTSimpleResponseBuilder*) clone {
+  return [RMTSimpleResponse builderWithPrototype:resultSimpleResponse];
+}
+- (RMTSimpleResponse*) defaultInstance {
+  return [RMTSimpleResponse defaultInstance];
+}
+- (RMTSimpleResponse*) build {
+  [self checkInitialized];
+  return [self buildPartial];
+}
+- (RMTSimpleResponse*) buildPartial {
+  RMTSimpleResponse* returnMe = resultSimpleResponse;
+  self.resultSimpleResponse = nil;
+  return returnMe;
+}
+- (RMTSimpleResponseBuilder*) mergeFrom:(RMTSimpleResponse*) other {
+  if (other == [RMTSimpleResponse defaultInstance]) {
+    return self;
+  }
+  if (other.hasPayload) {
+    [self mergePayload:other.payload];
+  }
+  if (other.hasUsername) {
+    [self setUsername:other.username];
+  }
+  if (other.hasOauthScope) {
+    [self setOauthScope:other.oauthScope];
+  }
+  [self mergeUnknownFields:other.unknownFields];
+  return self;
+}
+- (RMTSimpleResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+  return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RMTSimpleResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+  while (YES) {
+    SInt32 tag = [input readTag];
+    switch (tag) {
+      case 0:
+        [self setUnknownFields:[unknownFields build]];
+        return self;
+      default: {
+        if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+          [self setUnknownFields:[unknownFields build]];
+          return self;
+        }
+        break;
+      }
+      case 10: {
+        RMTPayloadBuilder* subBuilder = [RMTPayload builder];
+        if (self.hasPayload) {
+          [subBuilder mergeFrom:self.payload];
+        }
+        [input readMessage:subBuilder extensionRegistry:extensionRegistry];
+        [self setPayload:[subBuilder buildPartial]];
+        break;
+      }
+      case 18: {
+        [self setUsername:[input readString]];
+        break;
+      }
+      case 26: {
+        [self setOauthScope:[input readString]];
+        break;
+      }
+    }
+  }
+}
+- (BOOL) hasPayload {
+  return resultSimpleResponse.hasPayload;
+}
+- (RMTPayload*) payload {
+  return resultSimpleResponse.payload;
+}
+- (RMTSimpleResponseBuilder*) setPayload:(RMTPayload*) value {
+  resultSimpleResponse.hasPayload = YES;
+  resultSimpleResponse.payload = value;
+  return self;
+}
+- (RMTSimpleResponseBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue {
+  return [self setPayload:[builderForValue build]];
+}
+- (RMTSimpleResponseBuilder*) mergePayload:(RMTPayload*) value {
+  if (resultSimpleResponse.hasPayload &&
+      resultSimpleResponse.payload != [RMTPayload defaultInstance]) {
+    resultSimpleResponse.payload =
+      [[[RMTPayload builderWithPrototype:resultSimpleResponse.payload] mergeFrom:value] buildPartial];
+  } else {
+    resultSimpleResponse.payload = value;
+  }
+  resultSimpleResponse.hasPayload = YES;
+  return self;
+}
+- (RMTSimpleResponseBuilder*) clearPayload {
+  resultSimpleResponse.hasPayload = NO;
+  resultSimpleResponse.payload = [RMTPayload defaultInstance];
+  return self;
+}
+- (BOOL) hasUsername {
+  return resultSimpleResponse.hasUsername;
+}
+- (NSString*) username {
+  return resultSimpleResponse.username;
+}
+- (RMTSimpleResponseBuilder*) setUsername:(NSString*) value {
+  resultSimpleResponse.hasUsername = YES;
+  resultSimpleResponse.username = value;
+  return self;
+}
+- (RMTSimpleResponseBuilder*) clearUsername {
+  resultSimpleResponse.hasUsername = NO;
+  resultSimpleResponse.username = @"";
+  return self;
+}
+- (BOOL) hasOauthScope {
+  return resultSimpleResponse.hasOauthScope;
+}
+- (NSString*) oauthScope {
+  return resultSimpleResponse.oauthScope;
+}
+- (RMTSimpleResponseBuilder*) setOauthScope:(NSString*) value {
+  resultSimpleResponse.hasOauthScope = YES;
+  resultSimpleResponse.oauthScope = value;
+  return self;
+}
+- (RMTSimpleResponseBuilder*) clearOauthScope {
+  resultSimpleResponse.hasOauthScope = NO;
+  resultSimpleResponse.oauthScope = @"";
+  return self;
+}
+@end
+
+@interface RMTStreamingInputCallRequest ()
+@property (strong) RMTPayload* payload;
+@end
+
+@implementation RMTStreamingInputCallRequest
+
+- (BOOL) hasPayload {
+  return !!hasPayload_;
+}
+- (void) setHasPayload:(BOOL) _value_ {
+  hasPayload_ = !!_value_;
+}
+@synthesize payload;
+- (instancetype) init {
+  if ((self = [super init])) {
+    self.payload = [RMTPayload defaultInstance];
+  }
+  return self;
+}
+static RMTStreamingInputCallRequest* defaultRMTStreamingInputCallRequestInstance = nil;
++ (void) initialize {
+  if (self == [RMTStreamingInputCallRequest class]) {
+    defaultRMTStreamingInputCallRequestInstance = [[RMTStreamingInputCallRequest alloc] init];
+  }
+}
++ (instancetype) defaultInstance {
+  return defaultRMTStreamingInputCallRequestInstance;
+}
+- (instancetype) defaultInstance {
+  return defaultRMTStreamingInputCallRequestInstance;
+}
+- (BOOL) isInitialized {
+  return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+  if (self.hasPayload) {
+    [output writeMessage:1 value:self.payload];
+  }
+  [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+  __block SInt32 size_ = memoizedSerializedSize;
+  if (size_ != -1) {
+    return size_;
+  }
+
+  size_ = 0;
+  if (self.hasPayload) {
+    size_ += computeMessageSize(1, self.payload);
+  }
+  size_ += self.unknownFields.serializedSize;
+  memoizedSerializedSize = size_;
+  return size_;
+}
++ (RMTStreamingInputCallRequest*) parseFromData:(NSData*) data {
+  return (RMTStreamingInputCallRequest*)[[[RMTStreamingInputCallRequest builder] mergeFromData:data] build];
+}
++ (RMTStreamingInputCallRequest*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTStreamingInputCallRequest*)[[[RMTStreamingInputCallRequest builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingInputCallRequest*) parseFromInputStream:(NSInputStream*) input {
+  return (RMTStreamingInputCallRequest*)[[[RMTStreamingInputCallRequest builder] mergeFromInputStream:input] build];
+}
++ (RMTStreamingInputCallRequest*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTStreamingInputCallRequest*)[[[RMTStreamingInputCallRequest builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingInputCallRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+  return (RMTStreamingInputCallRequest*)[[[RMTStreamingInputCallRequest builder] mergeFromCodedInputStream:input] build];
+}
++ (RMTStreamingInputCallRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTStreamingInputCallRequest*)[[[RMTStreamingInputCallRequest builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingInputCallRequestBuilder*) builder {
+  return [[RMTStreamingInputCallRequestBuilder alloc] init];
+}
++ (RMTStreamingInputCallRequestBuilder*) builderWithPrototype:(RMTStreamingInputCallRequest*) prototype {
+  return [[RMTStreamingInputCallRequest builder] mergeFrom:prototype];
+}
+- (RMTStreamingInputCallRequestBuilder*) builder {
+  return [RMTStreamingInputCallRequest builder];
+}
+- (RMTStreamingInputCallRequestBuilder*) toBuilder {
+  return [RMTStreamingInputCallRequest builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+  if (self.hasPayload) {
+    [output appendFormat:@"%@%@ {\n", indent, @"payload"];
+    [self.payload writeDescriptionTo:output
+                         withIndent:[NSString stringWithFormat:@"%@  ", indent]];
+    [output appendFormat:@"%@}\n", indent];
+  }
+  [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+  if (other == self) {
+    return YES;
+  }
+  if (![other isKindOfClass:[RMTStreamingInputCallRequest class]]) {
+    return NO;
+  }
+  RMTStreamingInputCallRequest *otherMessage = other;
+  return
+      self.hasPayload == otherMessage.hasPayload &&
+      (!self.hasPayload || [self.payload isEqual:otherMessage.payload]) &&
+      (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+  __block NSUInteger hashCode = 7;
+  if (self.hasPayload) {
+    hashCode = hashCode * 31 + [self.payload hash];
+  }
+  hashCode = hashCode * 31 + [self.unknownFields hash];
+  return hashCode;
+}
+@end
+
+@interface RMTStreamingInputCallRequestBuilder()
+@property (strong) RMTStreamingInputCallRequest* resultStreamingInputCallRequest;
+@end
+
+@implementation RMTStreamingInputCallRequestBuilder
+@synthesize resultStreamingInputCallRequest;
+- (instancetype) init {
+  if ((self = [super init])) {
+    self.resultStreamingInputCallRequest = [[RMTStreamingInputCallRequest alloc] init];
+  }
+  return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+  return resultStreamingInputCallRequest;
+}
+- (RMTStreamingInputCallRequestBuilder*) clear {
+  self.resultStreamingInputCallRequest = [[RMTStreamingInputCallRequest alloc] init];
+  return self;
+}
+- (RMTStreamingInputCallRequestBuilder*) clone {
+  return [RMTStreamingInputCallRequest builderWithPrototype:resultStreamingInputCallRequest];
+}
+- (RMTStreamingInputCallRequest*) defaultInstance {
+  return [RMTStreamingInputCallRequest defaultInstance];
+}
+- (RMTStreamingInputCallRequest*) build {
+  [self checkInitialized];
+  return [self buildPartial];
+}
+- (RMTStreamingInputCallRequest*) buildPartial {
+  RMTStreamingInputCallRequest* returnMe = resultStreamingInputCallRequest;
+  self.resultStreamingInputCallRequest = nil;
+  return returnMe;
+}
+- (RMTStreamingInputCallRequestBuilder*) mergeFrom:(RMTStreamingInputCallRequest*) other {
+  if (other == [RMTStreamingInputCallRequest defaultInstance]) {
+    return self;
+  }
+  if (other.hasPayload) {
+    [self mergePayload:other.payload];
+  }
+  [self mergeUnknownFields:other.unknownFields];
+  return self;
+}
+- (RMTStreamingInputCallRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+  return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RMTStreamingInputCallRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+  while (YES) {
+    SInt32 tag = [input readTag];
+    switch (tag) {
+      case 0:
+        [self setUnknownFields:[unknownFields build]];
+        return self;
+      default: {
+        if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+          [self setUnknownFields:[unknownFields build]];
+          return self;
+        }
+        break;
+      }
+      case 10: {
+        RMTPayloadBuilder* subBuilder = [RMTPayload builder];
+        if (self.hasPayload) {
+          [subBuilder mergeFrom:self.payload];
+        }
+        [input readMessage:subBuilder extensionRegistry:extensionRegistry];
+        [self setPayload:[subBuilder buildPartial]];
+        break;
+      }
+    }
+  }
+}
+- (BOOL) hasPayload {
+  return resultStreamingInputCallRequest.hasPayload;
+}
+- (RMTPayload*) payload {
+  return resultStreamingInputCallRequest.payload;
+}
+- (RMTStreamingInputCallRequestBuilder*) setPayload:(RMTPayload*) value {
+  resultStreamingInputCallRequest.hasPayload = YES;
+  resultStreamingInputCallRequest.payload = value;
+  return self;
+}
+- (RMTStreamingInputCallRequestBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue {
+  return [self setPayload:[builderForValue build]];
+}
+- (RMTStreamingInputCallRequestBuilder*) mergePayload:(RMTPayload*) value {
+  if (resultStreamingInputCallRequest.hasPayload &&
+      resultStreamingInputCallRequest.payload != [RMTPayload defaultInstance]) {
+    resultStreamingInputCallRequest.payload =
+      [[[RMTPayload builderWithPrototype:resultStreamingInputCallRequest.payload] mergeFrom:value] buildPartial];
+  } else {
+    resultStreamingInputCallRequest.payload = value;
+  }
+  resultStreamingInputCallRequest.hasPayload = YES;
+  return self;
+}
+- (RMTStreamingInputCallRequestBuilder*) clearPayload {
+  resultStreamingInputCallRequest.hasPayload = NO;
+  resultStreamingInputCallRequest.payload = [RMTPayload defaultInstance];
+  return self;
+}
+@end
+
+@interface RMTStreamingInputCallResponse ()
+@property SInt32 aggregatedPayloadSize;
+@end
+
+@implementation RMTStreamingInputCallResponse
+
+- (BOOL) hasAggregatedPayloadSize {
+  return !!hasAggregatedPayloadSize_;
+}
+- (void) setHasAggregatedPayloadSize:(BOOL) _value_ {
+  hasAggregatedPayloadSize_ = !!_value_;
+}
+@synthesize aggregatedPayloadSize;
+- (instancetype) init {
+  if ((self = [super init])) {
+    self.aggregatedPayloadSize = 0;
+  }
+  return self;
+}
+static RMTStreamingInputCallResponse* defaultRMTStreamingInputCallResponseInstance = nil;
++ (void) initialize {
+  if (self == [RMTStreamingInputCallResponse class]) {
+    defaultRMTStreamingInputCallResponseInstance = [[RMTStreamingInputCallResponse alloc] init];
+  }
+}
++ (instancetype) defaultInstance {
+  return defaultRMTStreamingInputCallResponseInstance;
+}
+- (instancetype) defaultInstance {
+  return defaultRMTStreamingInputCallResponseInstance;
+}
+- (BOOL) isInitialized {
+  return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+  if (self.hasAggregatedPayloadSize) {
+    [output writeInt32:1 value:self.aggregatedPayloadSize];
+  }
+  [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+  __block SInt32 size_ = memoizedSerializedSize;
+  if (size_ != -1) {
+    return size_;
+  }
+
+  size_ = 0;
+  if (self.hasAggregatedPayloadSize) {
+    size_ += computeInt32Size(1, self.aggregatedPayloadSize);
+  }
+  size_ += self.unknownFields.serializedSize;
+  memoizedSerializedSize = size_;
+  return size_;
+}
++ (RMTStreamingInputCallResponse*) parseFromData:(NSData*) data {
+  return (RMTStreamingInputCallResponse*)[[[RMTStreamingInputCallResponse builder] mergeFromData:data] build];
+}
++ (RMTStreamingInputCallResponse*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTStreamingInputCallResponse*)[[[RMTStreamingInputCallResponse builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingInputCallResponse*) parseFromInputStream:(NSInputStream*) input {
+  return (RMTStreamingInputCallResponse*)[[[RMTStreamingInputCallResponse builder] mergeFromInputStream:input] build];
+}
++ (RMTStreamingInputCallResponse*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTStreamingInputCallResponse*)[[[RMTStreamingInputCallResponse builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingInputCallResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+  return (RMTStreamingInputCallResponse*)[[[RMTStreamingInputCallResponse builder] mergeFromCodedInputStream:input] build];
+}
++ (RMTStreamingInputCallResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTStreamingInputCallResponse*)[[[RMTStreamingInputCallResponse builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingInputCallResponseBuilder*) builder {
+  return [[RMTStreamingInputCallResponseBuilder alloc] init];
+}
++ (RMTStreamingInputCallResponseBuilder*) builderWithPrototype:(RMTStreamingInputCallResponse*) prototype {
+  return [[RMTStreamingInputCallResponse builder] mergeFrom:prototype];
+}
+- (RMTStreamingInputCallResponseBuilder*) builder {
+  return [RMTStreamingInputCallResponse builder];
+}
+- (RMTStreamingInputCallResponseBuilder*) toBuilder {
+  return [RMTStreamingInputCallResponse builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+  if (self.hasAggregatedPayloadSize) {
+    [output appendFormat:@"%@%@: %@\n", indent, @"aggregatedPayloadSize", [NSNumber numberWithInteger:self.aggregatedPayloadSize]];
+  }
+  [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+  if (other == self) {
+    return YES;
+  }
+  if (![other isKindOfClass:[RMTStreamingInputCallResponse class]]) {
+    return NO;
+  }
+  RMTStreamingInputCallResponse *otherMessage = other;
+  return
+      self.hasAggregatedPayloadSize == otherMessage.hasAggregatedPayloadSize &&
+      (!self.hasAggregatedPayloadSize || self.aggregatedPayloadSize == otherMessage.aggregatedPayloadSize) &&
+      (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+  __block NSUInteger hashCode = 7;
+  if (self.hasAggregatedPayloadSize) {
+    hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.aggregatedPayloadSize] hash];
+  }
+  hashCode = hashCode * 31 + [self.unknownFields hash];
+  return hashCode;
+}
+@end
+
+@interface RMTStreamingInputCallResponseBuilder()
+@property (strong) RMTStreamingInputCallResponse* resultStreamingInputCallResponse;
+@end
+
+@implementation RMTStreamingInputCallResponseBuilder
+@synthesize resultStreamingInputCallResponse;
+- (instancetype) init {
+  if ((self = [super init])) {
+    self.resultStreamingInputCallResponse = [[RMTStreamingInputCallResponse alloc] init];
+  }
+  return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+  return resultStreamingInputCallResponse;
+}
+- (RMTStreamingInputCallResponseBuilder*) clear {
+  self.resultStreamingInputCallResponse = [[RMTStreamingInputCallResponse alloc] init];
+  return self;
+}
+- (RMTStreamingInputCallResponseBuilder*) clone {
+  return [RMTStreamingInputCallResponse builderWithPrototype:resultStreamingInputCallResponse];
+}
+- (RMTStreamingInputCallResponse*) defaultInstance {
+  return [RMTStreamingInputCallResponse defaultInstance];
+}
+- (RMTStreamingInputCallResponse*) build {
+  [self checkInitialized];
+  return [self buildPartial];
+}
+- (RMTStreamingInputCallResponse*) buildPartial {
+  RMTStreamingInputCallResponse* returnMe = resultStreamingInputCallResponse;
+  self.resultStreamingInputCallResponse = nil;
+  return returnMe;
+}
+- (RMTStreamingInputCallResponseBuilder*) mergeFrom:(RMTStreamingInputCallResponse*) other {
+  if (other == [RMTStreamingInputCallResponse defaultInstance]) {
+    return self;
+  }
+  if (other.hasAggregatedPayloadSize) {
+    [self setAggregatedPayloadSize:other.aggregatedPayloadSize];
+  }
+  [self mergeUnknownFields:other.unknownFields];
+  return self;
+}
+- (RMTStreamingInputCallResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+  return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RMTStreamingInputCallResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+  while (YES) {
+    SInt32 tag = [input readTag];
+    switch (tag) {
+      case 0:
+        [self setUnknownFields:[unknownFields build]];
+        return self;
+      default: {
+        if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+          [self setUnknownFields:[unknownFields build]];
+          return self;
+        }
+        break;
+      }
+      case 8: {
+        [self setAggregatedPayloadSize:[input readInt32]];
+        break;
+      }
+    }
+  }
+}
+- (BOOL) hasAggregatedPayloadSize {
+  return resultStreamingInputCallResponse.hasAggregatedPayloadSize;
+}
+- (SInt32) aggregatedPayloadSize {
+  return resultStreamingInputCallResponse.aggregatedPayloadSize;
+}
+- (RMTStreamingInputCallResponseBuilder*) setAggregatedPayloadSize:(SInt32) value {
+  resultStreamingInputCallResponse.hasAggregatedPayloadSize = YES;
+  resultStreamingInputCallResponse.aggregatedPayloadSize = value;
+  return self;
+}
+- (RMTStreamingInputCallResponseBuilder*) clearAggregatedPayloadSize {
+  resultStreamingInputCallResponse.hasAggregatedPayloadSize = NO;
+  resultStreamingInputCallResponse.aggregatedPayloadSize = 0;
+  return self;
+}
+@end
+
+@interface RMTResponseParameters ()
+@property SInt32 size;
+@property SInt32 intervalUs;
+@end
+
+@implementation RMTResponseParameters
+
+- (BOOL) hasSize {
+  return !!hasSize_;
+}
+- (void) setHasSize:(BOOL) _value_ {
+  hasSize_ = !!_value_;
+}
+@synthesize size;
+- (BOOL) hasIntervalUs {
+  return !!hasIntervalUs_;
+}
+- (void) setHasIntervalUs:(BOOL) _value_ {
+  hasIntervalUs_ = !!_value_;
+}
+@synthesize intervalUs;
+- (instancetype) init {
+  if ((self = [super init])) {
+    self.size = 0;
+    self.intervalUs = 0;
+  }
+  return self;
+}
+static RMTResponseParameters* defaultRMTResponseParametersInstance = nil;
++ (void) initialize {
+  if (self == [RMTResponseParameters class]) {
+    defaultRMTResponseParametersInstance = [[RMTResponseParameters alloc] init];
+  }
+}
++ (instancetype) defaultInstance {
+  return defaultRMTResponseParametersInstance;
+}
+- (instancetype) defaultInstance {
+  return defaultRMTResponseParametersInstance;
+}
+- (BOOL) isInitialized {
+  return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+  if (self.hasSize) {
+    [output writeInt32:1 value:self.size];
+  }
+  if (self.hasIntervalUs) {
+    [output writeInt32:2 value:self.intervalUs];
+  }
+  [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+  __block SInt32 size_ = memoizedSerializedSize;
+  if (size_ != -1) {
+    return size_;
+  }
+
+  size_ = 0;
+  if (self.hasSize) {
+    size_ += computeInt32Size(1, self.size);
+  }
+  if (self.hasIntervalUs) {
+    size_ += computeInt32Size(2, self.intervalUs);
+  }
+  size_ += self.unknownFields.serializedSize;
+  memoizedSerializedSize = size_;
+  return size_;
+}
++ (RMTResponseParameters*) parseFromData:(NSData*) data {
+  return (RMTResponseParameters*)[[[RMTResponseParameters builder] mergeFromData:data] build];
+}
++ (RMTResponseParameters*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTResponseParameters*)[[[RMTResponseParameters builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RMTResponseParameters*) parseFromInputStream:(NSInputStream*) input {
+  return (RMTResponseParameters*)[[[RMTResponseParameters builder] mergeFromInputStream:input] build];
+}
++ (RMTResponseParameters*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTResponseParameters*)[[[RMTResponseParameters builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTResponseParameters*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+  return (RMTResponseParameters*)[[[RMTResponseParameters builder] mergeFromCodedInputStream:input] build];
+}
++ (RMTResponseParameters*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTResponseParameters*)[[[RMTResponseParameters builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTResponseParametersBuilder*) builder {
+  return [[RMTResponseParametersBuilder alloc] init];
+}
++ (RMTResponseParametersBuilder*) builderWithPrototype:(RMTResponseParameters*) prototype {
+  return [[RMTResponseParameters builder] mergeFrom:prototype];
+}
+- (RMTResponseParametersBuilder*) builder {
+  return [RMTResponseParameters builder];
+}
+- (RMTResponseParametersBuilder*) toBuilder {
+  return [RMTResponseParameters builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+  if (self.hasSize) {
+    [output appendFormat:@"%@%@: %@\n", indent, @"size", [NSNumber numberWithInteger:self.size]];
+  }
+  if (self.hasIntervalUs) {
+    [output appendFormat:@"%@%@: %@\n", indent, @"intervalUs", [NSNumber numberWithInteger:self.intervalUs]];
+  }
+  [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+  if (other == self) {
+    return YES;
+  }
+  if (![other isKindOfClass:[RMTResponseParameters class]]) {
+    return NO;
+  }
+  RMTResponseParameters *otherMessage = other;
+  return
+      self.hasSize == otherMessage.hasSize &&
+      (!self.hasSize || self.size == otherMessage.size) &&
+      self.hasIntervalUs == otherMessage.hasIntervalUs &&
+      (!self.hasIntervalUs || self.intervalUs == otherMessage.intervalUs) &&
+      (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+  __block NSUInteger hashCode = 7;
+  if (self.hasSize) {
+    hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.size] hash];
+  }
+  if (self.hasIntervalUs) {
+    hashCode = hashCode * 31 + [[NSNumber numberWithInteger:self.intervalUs] hash];
+  }
+  hashCode = hashCode * 31 + [self.unknownFields hash];
+  return hashCode;
+}
+@end
+
+@interface RMTResponseParametersBuilder()
+@property (strong) RMTResponseParameters* resultResponseParameters;
+@end
+
+@implementation RMTResponseParametersBuilder
+@synthesize resultResponseParameters;
+- (instancetype) init {
+  if ((self = [super init])) {
+    self.resultResponseParameters = [[RMTResponseParameters alloc] init];
+  }
+  return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+  return resultResponseParameters;
+}
+- (RMTResponseParametersBuilder*) clear {
+  self.resultResponseParameters = [[RMTResponseParameters alloc] init];
+  return self;
+}
+- (RMTResponseParametersBuilder*) clone {
+  return [RMTResponseParameters builderWithPrototype:resultResponseParameters];
+}
+- (RMTResponseParameters*) defaultInstance {
+  return [RMTResponseParameters defaultInstance];
+}
+- (RMTResponseParameters*) build {
+  [self checkInitialized];
+  return [self buildPartial];
+}
+- (RMTResponseParameters*) buildPartial {
+  RMTResponseParameters* returnMe = resultResponseParameters;
+  self.resultResponseParameters = nil;
+  return returnMe;
+}
+- (RMTResponseParametersBuilder*) mergeFrom:(RMTResponseParameters*) other {
+  if (other == [RMTResponseParameters defaultInstance]) {
+    return self;
+  }
+  if (other.hasSize) {
+    [self setSize:other.size];
+  }
+  if (other.hasIntervalUs) {
+    [self setIntervalUs:other.intervalUs];
+  }
+  [self mergeUnknownFields:other.unknownFields];
+  return self;
+}
+- (RMTResponseParametersBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+  return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RMTResponseParametersBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+  while (YES) {
+    SInt32 tag = [input readTag];
+    switch (tag) {
+      case 0:
+        [self setUnknownFields:[unknownFields build]];
+        return self;
+      default: {
+        if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+          [self setUnknownFields:[unknownFields build]];
+          return self;
+        }
+        break;
+      }
+      case 8: {
+        [self setSize:[input readInt32]];
+        break;
+      }
+      case 16: {
+        [self setIntervalUs:[input readInt32]];
+        break;
+      }
+    }
+  }
+}
+- (BOOL) hasSize {
+  return resultResponseParameters.hasSize;
+}
+- (SInt32) size {
+  return resultResponseParameters.size;
+}
+- (RMTResponseParametersBuilder*) setSize:(SInt32) value {
+  resultResponseParameters.hasSize = YES;
+  resultResponseParameters.size = value;
+  return self;
+}
+- (RMTResponseParametersBuilder*) clearSize {
+  resultResponseParameters.hasSize = NO;
+  resultResponseParameters.size = 0;
+  return self;
+}
+- (BOOL) hasIntervalUs {
+  return resultResponseParameters.hasIntervalUs;
+}
+- (SInt32) intervalUs {
+  return resultResponseParameters.intervalUs;
+}
+- (RMTResponseParametersBuilder*) setIntervalUs:(SInt32) value {
+  resultResponseParameters.hasIntervalUs = YES;
+  resultResponseParameters.intervalUs = value;
+  return self;
+}
+- (RMTResponseParametersBuilder*) clearIntervalUs {
+  resultResponseParameters.hasIntervalUs = NO;
+  resultResponseParameters.intervalUs = 0;
+  return self;
+}
+@end
+
+@interface RMTStreamingOutputCallRequest ()
+@property RMTPayloadType responseType;
+@property (strong) NSMutableArray * responseParametersArray;
+@property (strong) RMTPayload* payload;
+@end
+
+@implementation RMTStreamingOutputCallRequest
+
+- (BOOL) hasResponseType {
+  return !!hasResponseType_;
+}
+- (void) setHasResponseType:(BOOL) _value_ {
+  hasResponseType_ = !!_value_;
+}
+@synthesize responseType;
+@synthesize responseParametersArray;
+@dynamic responseParameters;
+- (BOOL) hasPayload {
+  return !!hasPayload_;
+}
+- (void) setHasPayload:(BOOL) _value_ {
+  hasPayload_ = !!_value_;
+}
+@synthesize payload;
+- (instancetype) init {
+  if ((self = [super init])) {
+    self.responseType = RMTPayloadTypeCompressable;
+    self.payload = [RMTPayload defaultInstance];
+  }
+  return self;
+}
+static RMTStreamingOutputCallRequest* defaultRMTStreamingOutputCallRequestInstance = nil;
++ (void) initialize {
+  if (self == [RMTStreamingOutputCallRequest class]) {
+    defaultRMTStreamingOutputCallRequestInstance = [[RMTStreamingOutputCallRequest alloc] init];
+  }
+}
++ (instancetype) defaultInstance {
+  return defaultRMTStreamingOutputCallRequestInstance;
+}
+- (instancetype) defaultInstance {
+  return defaultRMTStreamingOutputCallRequestInstance;
+}
+- (NSArray *)responseParameters {
+  return responseParametersArray;
+}
+- (RMTResponseParameters*)responseParametersAtIndex:(NSUInteger)index {
+  return [responseParametersArray objectAtIndex:index];
+}
+- (BOOL) isInitialized {
+  return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+  if (self.hasResponseType) {
+    [output writeEnum:1 value:self.responseType];
+  }
+  [self.responseParametersArray enumerateObjectsUsingBlock:^(RMTResponseParameters *element, NSUInteger idx, BOOL *stop) {
+    [output writeMessage:2 value:element];
+  }];
+  if (self.hasPayload) {
+    [output writeMessage:3 value:self.payload];
+  }
+  [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+  __block SInt32 size_ = memoizedSerializedSize;
+  if (size_ != -1) {
+    return size_;
+  }
+
+  size_ = 0;
+  if (self.hasResponseType) {
+    size_ += computeEnumSize(1, self.responseType);
+  }
+  [self.responseParametersArray enumerateObjectsUsingBlock:^(RMTResponseParameters *element, NSUInteger idx, BOOL *stop) {
+    size_ += computeMessageSize(2, element);
+  }];
+  if (self.hasPayload) {
+    size_ += computeMessageSize(3, self.payload);
+  }
+  size_ += self.unknownFields.serializedSize;
+  memoizedSerializedSize = size_;
+  return size_;
+}
++ (RMTStreamingOutputCallRequest*) parseFromData:(NSData*) data {
+  return (RMTStreamingOutputCallRequest*)[[[RMTStreamingOutputCallRequest builder] mergeFromData:data] build];
+}
++ (RMTStreamingOutputCallRequest*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTStreamingOutputCallRequest*)[[[RMTStreamingOutputCallRequest builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingOutputCallRequest*) parseFromInputStream:(NSInputStream*) input {
+  return (RMTStreamingOutputCallRequest*)[[[RMTStreamingOutputCallRequest builder] mergeFromInputStream:input] build];
+}
++ (RMTStreamingOutputCallRequest*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTStreamingOutputCallRequest*)[[[RMTStreamingOutputCallRequest builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingOutputCallRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+  return (RMTStreamingOutputCallRequest*)[[[RMTStreamingOutputCallRequest builder] mergeFromCodedInputStream:input] build];
+}
++ (RMTStreamingOutputCallRequest*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTStreamingOutputCallRequest*)[[[RMTStreamingOutputCallRequest builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingOutputCallRequestBuilder*) builder {
+  return [[RMTStreamingOutputCallRequestBuilder alloc] init];
+}
++ (RMTStreamingOutputCallRequestBuilder*) builderWithPrototype:(RMTStreamingOutputCallRequest*) prototype {
+  return [[RMTStreamingOutputCallRequest builder] mergeFrom:prototype];
+}
+- (RMTStreamingOutputCallRequestBuilder*) builder {
+  return [RMTStreamingOutputCallRequest builder];
+}
+- (RMTStreamingOutputCallRequestBuilder*) toBuilder {
+  return [RMTStreamingOutputCallRequest builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+  if (self.hasResponseType) {
+    [output appendFormat:@"%@%@: %@\n", indent, @"responseType", NSStringFromRMTPayloadType(self.responseType)];
+  }
+  [self.responseParametersArray enumerateObjectsUsingBlock:^(RMTResponseParameters *element, NSUInteger idx, BOOL *stop) {
+    [output appendFormat:@"%@%@ {\n", indent, @"responseParameters"];
+    [element writeDescriptionTo:output
+                     withIndent:[NSString stringWithFormat:@"%@  ", indent]];
+    [output appendFormat:@"%@}\n", indent];
+  }];
+  if (self.hasPayload) {
+    [output appendFormat:@"%@%@ {\n", indent, @"payload"];
+    [self.payload writeDescriptionTo:output
+                         withIndent:[NSString stringWithFormat:@"%@  ", indent]];
+    [output appendFormat:@"%@}\n", indent];
+  }
+  [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+  if (other == self) {
+    return YES;
+  }
+  if (![other isKindOfClass:[RMTStreamingOutputCallRequest class]]) {
+    return NO;
+  }
+  RMTStreamingOutputCallRequest *otherMessage = other;
+  return
+      self.hasResponseType == otherMessage.hasResponseType &&
+      (!self.hasResponseType || self.responseType == otherMessage.responseType) &&
+      [self.responseParametersArray isEqualToArray:otherMessage.responseParametersArray] &&
+      self.hasPayload == otherMessage.hasPayload &&
+      (!self.hasPayload || [self.payload isEqual:otherMessage.payload]) &&
+      (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+  __block NSUInteger hashCode = 7;
+  if (self.hasResponseType) {
+    hashCode = hashCode * 31 + self.responseType;
+  }
+  [self.responseParametersArray enumerateObjectsUsingBlock:^(RMTResponseParameters *element, NSUInteger idx, BOOL *stop) {
+    hashCode = hashCode * 31 + [element hash];
+  }];
+  if (self.hasPayload) {
+    hashCode = hashCode * 31 + [self.payload hash];
+  }
+  hashCode = hashCode * 31 + [self.unknownFields hash];
+  return hashCode;
+}
+@end
+
+@interface RMTStreamingOutputCallRequestBuilder()
+@property (strong) RMTStreamingOutputCallRequest* resultStreamingOutputCallRequest;
+@end
+
+@implementation RMTStreamingOutputCallRequestBuilder
+@synthesize resultStreamingOutputCallRequest;
+- (instancetype) init {
+  if ((self = [super init])) {
+    self.resultStreamingOutputCallRequest = [[RMTStreamingOutputCallRequest alloc] init];
+  }
+  return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+  return resultStreamingOutputCallRequest;
+}
+- (RMTStreamingOutputCallRequestBuilder*) clear {
+  self.resultStreamingOutputCallRequest = [[RMTStreamingOutputCallRequest alloc] init];
+  return self;
+}
+- (RMTStreamingOutputCallRequestBuilder*) clone {
+  return [RMTStreamingOutputCallRequest builderWithPrototype:resultStreamingOutputCallRequest];
+}
+- (RMTStreamingOutputCallRequest*) defaultInstance {
+  return [RMTStreamingOutputCallRequest defaultInstance];
+}
+- (RMTStreamingOutputCallRequest*) build {
+  [self checkInitialized];
+  return [self buildPartial];
+}
+- (RMTStreamingOutputCallRequest*) buildPartial {
+  RMTStreamingOutputCallRequest* returnMe = resultStreamingOutputCallRequest;
+  self.resultStreamingOutputCallRequest = nil;
+  return returnMe;
+}
+- (RMTStreamingOutputCallRequestBuilder*) mergeFrom:(RMTStreamingOutputCallRequest*) other {
+  if (other == [RMTStreamingOutputCallRequest defaultInstance]) {
+    return self;
+  }
+  if (other.hasResponseType) {
+    [self setResponseType:other.responseType];
+  }
+  if (other.responseParametersArray.count > 0) {
+    if (resultStreamingOutputCallRequest.responseParametersArray == nil) {
+      resultStreamingOutputCallRequest.responseParametersArray = [[NSMutableArray alloc] initWithArray:other.responseParametersArray];
+    } else {
+      [resultStreamingOutputCallRequest.responseParametersArray addObjectsFromArray:other.responseParametersArray];
+    }
+  }
+  if (other.hasPayload) {
+    [self mergePayload:other.payload];
+  }
+  [self mergeUnknownFields:other.unknownFields];
+  return self;
+}
+- (RMTStreamingOutputCallRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+  return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RMTStreamingOutputCallRequestBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+  while (YES) {
+    SInt32 tag = [input readTag];
+    switch (tag) {
+      case 0:
+        [self setUnknownFields:[unknownFields build]];
+        return self;
+      default: {
+        if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+          [self setUnknownFields:[unknownFields build]];
+          return self;
+        }
+        break;
+      }
+      case 8: {
+        RMTPayloadType value = (RMTPayloadType)[input readEnum];
+        if (RMTPayloadTypeIsValidValue(value)) {
+          [self setResponseType:value];
+        } else {
+          [unknownFields mergeVarintField:1 value:value];
+        }
+        break;
+      }
+      case 18: {
+        RMTResponseParametersBuilder* subBuilder = [RMTResponseParameters builder];
+        [input readMessage:subBuilder extensionRegistry:extensionRegistry];
+        [self addResponseParameters:[subBuilder buildPartial]];
+        break;
+      }
+      case 26: {
+        RMTPayloadBuilder* subBuilder = [RMTPayload builder];
+        if (self.hasPayload) {
+          [subBuilder mergeFrom:self.payload];
+        }
+        [input readMessage:subBuilder extensionRegistry:extensionRegistry];
+        [self setPayload:[subBuilder buildPartial]];
+        break;
+      }
+    }
+  }
+}
+- (BOOL) hasResponseType {
+  return resultStreamingOutputCallRequest.hasResponseType;
+}
+- (RMTPayloadType) responseType {
+  return resultStreamingOutputCallRequest.responseType;
+}
+- (RMTStreamingOutputCallRequestBuilder*) setResponseType:(RMTPayloadType) value {
+  resultStreamingOutputCallRequest.hasResponseType = YES;
+  resultStreamingOutputCallRequest.responseType = value;
+  return self;
+}
+- (RMTStreamingOutputCallRequestBuilder*) clearResponseType {
+  resultStreamingOutputCallRequest.hasResponseType = NO;
+  resultStreamingOutputCallRequest.responseType = RMTPayloadTypeCompressable;
+  return self;
+}
+- (NSMutableArray *)responseParameters {
+  return resultStreamingOutputCallRequest.responseParametersArray;
+}
+- (RMTResponseParameters*)responseParametersAtIndex:(NSUInteger)index {
+  return [resultStreamingOutputCallRequest responseParametersAtIndex:index];
+}
+- (RMTStreamingOutputCallRequestBuilder *)addResponseParameters:(RMTResponseParameters*)value {
+  if (resultStreamingOutputCallRequest.responseParametersArray == nil) {
+    resultStreamingOutputCallRequest.responseParametersArray = [[NSMutableArray alloc]init];
+  }
+  [resultStreamingOutputCallRequest.responseParametersArray addObject:value];
+  return self;
+}
+- (RMTStreamingOutputCallRequestBuilder *)setResponseParametersArray:(NSArray *)array {
+  resultStreamingOutputCallRequest.responseParametersArray = [[NSMutableArray alloc]initWithArray:array];
+  return self;
+}
+- (RMTStreamingOutputCallRequestBuilder *)clearResponseParameters {
+  resultStreamingOutputCallRequest.responseParametersArray = nil;
+  return self;
+}
+- (BOOL) hasPayload {
+  return resultStreamingOutputCallRequest.hasPayload;
+}
+- (RMTPayload*) payload {
+  return resultStreamingOutputCallRequest.payload;
+}
+- (RMTStreamingOutputCallRequestBuilder*) setPayload:(RMTPayload*) value {
+  resultStreamingOutputCallRequest.hasPayload = YES;
+  resultStreamingOutputCallRequest.payload = value;
+  return self;
+}
+- (RMTStreamingOutputCallRequestBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue {
+  return [self setPayload:[builderForValue build]];
+}
+- (RMTStreamingOutputCallRequestBuilder*) mergePayload:(RMTPayload*) value {
+  if (resultStreamingOutputCallRequest.hasPayload &&
+      resultStreamingOutputCallRequest.payload != [RMTPayload defaultInstance]) {
+    resultStreamingOutputCallRequest.payload =
+      [[[RMTPayload builderWithPrototype:resultStreamingOutputCallRequest.payload] mergeFrom:value] buildPartial];
+  } else {
+    resultStreamingOutputCallRequest.payload = value;
+  }
+  resultStreamingOutputCallRequest.hasPayload = YES;
+  return self;
+}
+- (RMTStreamingOutputCallRequestBuilder*) clearPayload {
+  resultStreamingOutputCallRequest.hasPayload = NO;
+  resultStreamingOutputCallRequest.payload = [RMTPayload defaultInstance];
+  return self;
+}
+@end
+
+@interface RMTStreamingOutputCallResponse ()
+@property (strong) RMTPayload* payload;
+@end
+
+@implementation RMTStreamingOutputCallResponse
+
+- (BOOL) hasPayload {
+  return !!hasPayload_;
+}
+- (void) setHasPayload:(BOOL) _value_ {
+  hasPayload_ = !!_value_;
+}
+@synthesize payload;
+- (instancetype) init {
+  if ((self = [super init])) {
+    self.payload = [RMTPayload defaultInstance];
+  }
+  return self;
+}
+static RMTStreamingOutputCallResponse* defaultRMTStreamingOutputCallResponseInstance = nil;
++ (void) initialize {
+  if (self == [RMTStreamingOutputCallResponse class]) {
+    defaultRMTStreamingOutputCallResponseInstance = [[RMTStreamingOutputCallResponse alloc] init];
+  }
+}
++ (instancetype) defaultInstance {
+  return defaultRMTStreamingOutputCallResponseInstance;
+}
+- (instancetype) defaultInstance {
+  return defaultRMTStreamingOutputCallResponseInstance;
+}
+- (BOOL) isInitialized {
+  return YES;
+}
+- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output {
+  if (self.hasPayload) {
+    [output writeMessage:1 value:self.payload];
+  }
+  [self.unknownFields writeToCodedOutputStream:output];
+}
+- (SInt32) serializedSize {
+  __block SInt32 size_ = memoizedSerializedSize;
+  if (size_ != -1) {
+    return size_;
+  }
+
+  size_ = 0;
+  if (self.hasPayload) {
+    size_ += computeMessageSize(1, self.payload);
+  }
+  size_ += self.unknownFields.serializedSize;
+  memoizedSerializedSize = size_;
+  return size_;
+}
++ (RMTStreamingOutputCallResponse*) parseFromData:(NSData*) data {
+  return (RMTStreamingOutputCallResponse*)[[[RMTStreamingOutputCallResponse builder] mergeFromData:data] build];
+}
++ (RMTStreamingOutputCallResponse*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTStreamingOutputCallResponse*)[[[RMTStreamingOutputCallResponse builder] mergeFromData:data extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingOutputCallResponse*) parseFromInputStream:(NSInputStream*) input {
+  return (RMTStreamingOutputCallResponse*)[[[RMTStreamingOutputCallResponse builder] mergeFromInputStream:input] build];
+}
++ (RMTStreamingOutputCallResponse*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTStreamingOutputCallResponse*)[[[RMTStreamingOutputCallResponse builder] mergeFromInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingOutputCallResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input {
+  return (RMTStreamingOutputCallResponse*)[[[RMTStreamingOutputCallResponse builder] mergeFromCodedInputStream:input] build];
+}
++ (RMTStreamingOutputCallResponse*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  return (RMTStreamingOutputCallResponse*)[[[RMTStreamingOutputCallResponse builder] mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] build];
+}
++ (RMTStreamingOutputCallResponseBuilder*) builder {
+  return [[RMTStreamingOutputCallResponseBuilder alloc] init];
+}
++ (RMTStreamingOutputCallResponseBuilder*) builderWithPrototype:(RMTStreamingOutputCallResponse*) prototype {
+  return [[RMTStreamingOutputCallResponse builder] mergeFrom:prototype];
+}
+- (RMTStreamingOutputCallResponseBuilder*) builder {
+  return [RMTStreamingOutputCallResponse builder];
+}
+- (RMTStreamingOutputCallResponseBuilder*) toBuilder {
+  return [RMTStreamingOutputCallResponse builderWithPrototype:self];
+}
+- (void) writeDescriptionTo:(NSMutableString*) output withIndent:(NSString*) indent {
+  if (self.hasPayload) {
+    [output appendFormat:@"%@%@ {\n", indent, @"payload"];
+    [self.payload writeDescriptionTo:output
+                         withIndent:[NSString stringWithFormat:@"%@  ", indent]];
+    [output appendFormat:@"%@}\n", indent];
+  }
+  [self.unknownFields writeDescriptionTo:output withIndent:indent];
+}
+- (BOOL) isEqual:(id)other {
+  if (other == self) {
+    return YES;
+  }
+  if (![other isKindOfClass:[RMTStreamingOutputCallResponse class]]) {
+    return NO;
+  }
+  RMTStreamingOutputCallResponse *otherMessage = other;
+  return
+      self.hasPayload == otherMessage.hasPayload &&
+      (!self.hasPayload || [self.payload isEqual:otherMessage.payload]) &&
+      (self.unknownFields == otherMessage.unknownFields || (self.unknownFields != nil && [self.unknownFields isEqual:otherMessage.unknownFields]));
+}
+- (NSUInteger) hash {
+  __block NSUInteger hashCode = 7;
+  if (self.hasPayload) {
+    hashCode = hashCode * 31 + [self.payload hash];
+  }
+  hashCode = hashCode * 31 + [self.unknownFields hash];
+  return hashCode;
+}
+@end
+
+@interface RMTStreamingOutputCallResponseBuilder()
+@property (strong) RMTStreamingOutputCallResponse* resultStreamingOutputCallResponse;
+@end
+
+@implementation RMTStreamingOutputCallResponseBuilder
+@synthesize resultStreamingOutputCallResponse;
+- (instancetype) init {
+  if ((self = [super init])) {
+    self.resultStreamingOutputCallResponse = [[RMTStreamingOutputCallResponse alloc] init];
+  }
+  return self;
+}
+- (PBGeneratedMessage*) internalGetResult {
+  return resultStreamingOutputCallResponse;
+}
+- (RMTStreamingOutputCallResponseBuilder*) clear {
+  self.resultStreamingOutputCallResponse = [[RMTStreamingOutputCallResponse alloc] init];
+  return self;
+}
+- (RMTStreamingOutputCallResponseBuilder*) clone {
+  return [RMTStreamingOutputCallResponse builderWithPrototype:resultStreamingOutputCallResponse];
+}
+- (RMTStreamingOutputCallResponse*) defaultInstance {
+  return [RMTStreamingOutputCallResponse defaultInstance];
+}
+- (RMTStreamingOutputCallResponse*) build {
+  [self checkInitialized];
+  return [self buildPartial];
+}
+- (RMTStreamingOutputCallResponse*) buildPartial {
+  RMTStreamingOutputCallResponse* returnMe = resultStreamingOutputCallResponse;
+  self.resultStreamingOutputCallResponse = nil;
+  return returnMe;
+}
+- (RMTStreamingOutputCallResponseBuilder*) mergeFrom:(RMTStreamingOutputCallResponse*) other {
+  if (other == [RMTStreamingOutputCallResponse defaultInstance]) {
+    return self;
+  }
+  if (other.hasPayload) {
+    [self mergePayload:other.payload];
+  }
+  [self mergeUnknownFields:other.unknownFields];
+  return self;
+}
+- (RMTStreamingOutputCallResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input {
+  return [self mergeFromCodedInputStream:input extensionRegistry:[PBExtensionRegistry emptyRegistry]];
+}
+- (RMTStreamingOutputCallResponseBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry {
+  PBUnknownFieldSetBuilder* unknownFields = [PBUnknownFieldSet builderWithUnknownFields:self.unknownFields];
+  while (YES) {
+    SInt32 tag = [input readTag];
+    switch (tag) {
+      case 0:
+        [self setUnknownFields:[unknownFields build]];
+        return self;
+      default: {
+        if (![self parseUnknownField:input unknownFields:unknownFields extensionRegistry:extensionRegistry tag:tag]) {
+          [self setUnknownFields:[unknownFields build]];
+          return self;
+        }
+        break;
+      }
+      case 10: {
+        RMTPayloadBuilder* subBuilder = [RMTPayload builder];
+        if (self.hasPayload) {
+          [subBuilder mergeFrom:self.payload];
+        }
+        [input readMessage:subBuilder extensionRegistry:extensionRegistry];
+        [self setPayload:[subBuilder buildPartial]];
+        break;
+      }
+    }
+  }
+}
+- (BOOL) hasPayload {
+  return resultStreamingOutputCallResponse.hasPayload;
+}
+- (RMTPayload*) payload {
+  return resultStreamingOutputCallResponse.payload;
+}
+- (RMTStreamingOutputCallResponseBuilder*) setPayload:(RMTPayload*) value {
+  resultStreamingOutputCallResponse.hasPayload = YES;
+  resultStreamingOutputCallResponse.payload = value;
+  return self;
+}
+- (RMTStreamingOutputCallResponseBuilder*) setPayloadBuilder:(RMTPayloadBuilder*) builderForValue {
+  return [self setPayload:[builderForValue build]];
+}
+- (RMTStreamingOutputCallResponseBuilder*) mergePayload:(RMTPayload*) value {
+  if (resultStreamingOutputCallResponse.hasPayload &&
+      resultStreamingOutputCallResponse.payload != [RMTPayload defaultInstance]) {
+    resultStreamingOutputCallResponse.payload =
+      [[[RMTPayload builderWithPrototype:resultStreamingOutputCallResponse.payload] mergeFrom:value] buildPartial];
+  } else {
+    resultStreamingOutputCallResponse.payload = value;
+  }
+  resultStreamingOutputCallResponse.hasPayload = YES;
+  return self;
+}
+- (RMTStreamingOutputCallResponseBuilder*) clearPayload {
+  resultStreamingOutputCallResponse.hasPayload = NO;
+  resultStreamingOutputCallResponse.payload = [RMTPayload defaultInstance];
+  return self;
+}
+@end
+
+
+// @@protoc_insertion_point(global_scope)
diff --git a/src/objective-c/examples/Sample/RemoteTestClient/Test.pb.h b/src/objective-c/examples/Sample/RemoteTestClient/Test.pb.h
new file mode 100644
index 0000000000..6db981dc5b
--- /dev/null
+++ b/src/objective-c/examples/Sample/RemoteTestClient/Test.pb.h
@@ -0,0 +1,81 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+
+#import <ProtocolBuffers/ProtocolBuffers.h>
+
+#import "Empty.pb.h"
+#import "Messages.pb.h"
+// @@protoc_insertion_point(imports)
+
+@class ObjectiveCFileOptions;
+@class ObjectiveCFileOptionsBuilder;
+@class PBDescriptorProto;
+@class PBDescriptorProtoBuilder;
+@class PBDescriptorProtoExtensionRange;
+@class PBDescriptorProtoExtensionRangeBuilder;
+@class PBEnumDescriptorProto;
+@class PBEnumDescriptorProtoBuilder;
+@class PBEnumOptions;
+@class PBEnumOptionsBuilder;
+@class PBEnumValueDescriptorProto;
+@class PBEnumValueDescriptorProtoBuilder;
+@class PBEnumValueOptions;
+@class PBEnumValueOptionsBuilder;
+@class PBFieldDescriptorProto;
+@class PBFieldDescriptorProtoBuilder;
+@class PBFieldOptions;
+@class PBFieldOptionsBuilder;
+@class PBFileDescriptorProto;
+@class PBFileDescriptorProtoBuilder;
+@class PBFileDescriptorSet;
+@class PBFileDescriptorSetBuilder;
+@class PBFileOptions;
+@class PBFileOptionsBuilder;
+@class PBMessageOptions;
+@class PBMessageOptionsBuilder;
+@class PBMethodDescriptorProto;
+@class PBMethodDescriptorProtoBuilder;
+@class PBMethodOptions;
+@class PBMethodOptionsBuilder;
+@class PBOneofDescriptorProto;
+@class PBOneofDescriptorProtoBuilder;
+@class PBServiceDescriptorProto;
+@class PBServiceDescriptorProtoBuilder;
+@class PBServiceOptions;
+@class PBServiceOptionsBuilder;
+@class PBSourceCodeInfo;
+@class PBSourceCodeInfoBuilder;
+@class PBSourceCodeInfoLocation;
+@class PBSourceCodeInfoLocationBuilder;
+@class PBUninterpretedOption;
+@class PBUninterpretedOptionBuilder;
+@class PBUninterpretedOptionNamePart;
+@class PBUninterpretedOptionNamePartBuilder;
+@class RMTEmpty;
+@class RMTEmptyBuilder;
+@class RMTPayload;
+@class RMTPayloadBuilder;
+@class RMTResponseParameters;
+@class RMTResponseParametersBuilder;
+@class RMTSimpleRequest;
+@class RMTSimpleRequestBuilder;
+@class RMTSimpleResponse;
+@class RMTSimpleResponseBuilder;
+@class RMTStreamingInputCallRequest;
+@class RMTStreamingInputCallRequestBuilder;
+@class RMTStreamingInputCallResponse;
+@class RMTStreamingInputCallResponseBuilder;
+@class RMTStreamingOutputCallRequest;
+@class RMTStreamingOutputCallRequestBuilder;
+@class RMTStreamingOutputCallResponse;
+@class RMTStreamingOutputCallResponseBuilder;
+
+
+
+@interface RMTTestRoot : NSObject {
+}
++ (PBExtensionRegistry*) extensionRegistry;
++ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry;
+@end
+
+
+// @@protoc_insertion_point(global_scope)
diff --git a/src/objective-c/examples/Sample/RemoteTestClient/Test.pb.m b/src/objective-c/examples/Sample/RemoteTestClient/Test.pb.m
new file mode 100644
index 0000000000..bd6a29df41
--- /dev/null
+++ b/src/objective-c/examples/Sample/RemoteTestClient/Test.pb.m
@@ -0,0 +1,27 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+
+#import "Test.pb.h"
+// @@protoc_insertion_point(imports)
+
+@implementation RMTTestRoot
+static PBExtensionRegistry* extensionRegistry = nil;
++ (PBExtensionRegistry*) extensionRegistry {
+  return extensionRegistry;
+}
+
++ (void) initialize {
+  if (self == [RMTTestRoot class]) {
+    PBMutableExtensionRegistry* registry = [PBMutableExtensionRegistry registry];
+    [self registerAllExtensions:registry];
+    [RMTEmptyRoot registerAllExtensions:registry];
+    [RMTMessagesRoot registerAllExtensions:registry];
+    [ObjectivecDescriptorRoot registerAllExtensions:registry];
+    extensionRegistry = registry;
+  }
+}
++ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry {
+}
+@end
+
+
+// @@protoc_insertion_point(global_scope)
-- 
GitLab