diff --git a/pb/last_generate.txt b/pb/last_generate.txt index 6c94950f5..bba91fb21 100644 --- a/pb/last_generate.txt +++ b/pb/last_generate.txt @@ -1,2 +1,2 @@ -generate.sh - Tue 10 Oct 2023 13:03:40 EDT - stepd -streamingfast/proto revision: b9cef0fef35e45c5f3cd0f7e976915f09aad6ded +generate.sh - Tue 14 Nov 2023 16:00:41 EST - stepd +streamingfast/proto revision: 0597bee6d25a0c8b6cd5dfe38dce5a1c9c107ab2 diff --git a/pb/sf/substreams/rpc/v2/pbsubstreamsrpcconnect/service.connect.go b/pb/sf/substreams/rpc/v2/pbsubstreamsrpcconnect/service.connect.go index 045cd59c8..1f31734bd 100644 --- a/pb/sf/substreams/rpc/v2/pbsubstreamsrpcconnect/service.connect.go +++ b/pb/sf/substreams/rpc/v2/pbsubstreamsrpcconnect/service.connect.go @@ -23,6 +23,8 @@ const _ = connect_go.IsAtLeastVersion0_1_0 const ( // StreamName is the fully-qualified name of the Stream service. StreamName = "sf.substreams.rpc.v2.Stream" + // ObserveName is the fully-qualified name of the Observe service. + ObserveName = "sf.substreams.rpc.v2.Observe" ) // StreamClient is a client for the sf.substreams.rpc.v2.Stream service. @@ -84,3 +86,63 @@ type UnimplementedStreamHandler struct{} func (UnimplementedStreamHandler) Blocks(context.Context, *connect_go.Request[v2.Request], *connect_go.ServerStream[v2.Response]) error { return connect_go.NewError(connect_go.CodeUnimplemented, errors.New("sf.substreams.rpc.v2.Stream.Blocks is not implemented")) } + +// ObserveClient is a client for the sf.substreams.rpc.v2.Observe service. +type ObserveClient interface { + Attach(context.Context, *connect_go.Request[v2.AttachRequest]) (*connect_go.ServerStreamForClient[v2.AttachResponse], error) +} + +// NewObserveClient constructs a client for the sf.substreams.rpc.v2.Observe service. By default, it +// uses the Connect protocol with the binary Protobuf Codec, asks for gzipped responses, and sends +// uncompressed requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() or +// connect.WithGRPCWeb() options. +// +// The URL supplied here should be the base URL for the Connect or gRPC server (for example, +// http://api.acme.com or https://acme.com/grpc). +func NewObserveClient(httpClient connect_go.HTTPClient, baseURL string, opts ...connect_go.ClientOption) ObserveClient { + baseURL = strings.TrimRight(baseURL, "/") + return &observeClient{ + attach: connect_go.NewClient[v2.AttachRequest, v2.AttachResponse]( + httpClient, + baseURL+"/sf.substreams.rpc.v2.Observe/Attach", + opts..., + ), + } +} + +// observeClient implements ObserveClient. +type observeClient struct { + attach *connect_go.Client[v2.AttachRequest, v2.AttachResponse] +} + +// Attach calls sf.substreams.rpc.v2.Observe.Attach. +func (c *observeClient) Attach(ctx context.Context, req *connect_go.Request[v2.AttachRequest]) (*connect_go.ServerStreamForClient[v2.AttachResponse], error) { + return c.attach.CallServerStream(ctx, req) +} + +// ObserveHandler is an implementation of the sf.substreams.rpc.v2.Observe service. +type ObserveHandler interface { + Attach(context.Context, *connect_go.Request[v2.AttachRequest], *connect_go.ServerStream[v2.AttachResponse]) error +} + +// NewObserveHandler builds an HTTP handler from the service implementation. It returns the path on +// which to mount the handler and the handler itself. +// +// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf +// and JSON codecs. They also support gzip compression. +func NewObserveHandler(svc ObserveHandler, opts ...connect_go.HandlerOption) (string, http.Handler) { + mux := http.NewServeMux() + mux.Handle("/sf.substreams.rpc.v2.Observe/Attach", connect_go.NewServerStreamHandler( + "/sf.substreams.rpc.v2.Observe/Attach", + svc.Attach, + opts..., + )) + return "/sf.substreams.rpc.v2.Observe/", mux +} + +// UnimplementedObserveHandler returns CodeUnimplemented from all methods. +type UnimplementedObserveHandler struct{} + +func (UnimplementedObserveHandler) Attach(context.Context, *connect_go.Request[v2.AttachRequest], *connect_go.ServerStream[v2.AttachResponse]) error { + return connect_go.NewError(connect_go.CodeUnimplemented, errors.New("sf.substreams.rpc.v2.Observe.Attach is not implemented")) +} diff --git a/pb/sf/substreams/rpc/v2/service.pb.go b/pb/sf/substreams/rpc/v2/service.pb.go index 65ee68819..d9580fd24 100644 --- a/pb/sf/substreams/rpc/v2/service.pb.go +++ b/pb/sf/substreams/rpc/v2/service.pb.go @@ -71,7 +71,7 @@ func (x StoreDelta_Operation) Number() protoreflect.EnumNumber { // Deprecated: Use StoreDelta_Operation.Descriptor instead. func (StoreDelta_Operation) EnumDescriptor() ([]byte, []int) { - return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{17, 0} + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{20, 0} } type Request struct { @@ -199,6 +199,194 @@ func (x *Request) GetDebugInitialStoreSnapshotForModules() []string { return nil } +type AttachRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *AttachRequest) Reset() { + *x = AttachRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AttachRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AttachRequest) ProtoMessage() {} + +func (x *AttachRequest) ProtoReflect() protoreflect.Message { + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AttachRequest.ProtoReflect.Descriptor instead. +func (*AttachRequest) Descriptor() ([]byte, []int) { + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{1} +} + +type AttachResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Message: + // + // *AttachResponse_Init + // *AttachResponse_Progress + // *AttachResponse_Error + Message isAttachResponse_Message `protobuf_oneof:"message"` +} + +func (x *AttachResponse) Reset() { + *x = AttachResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AttachResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AttachResponse) ProtoMessage() {} + +func (x *AttachResponse) ProtoReflect() protoreflect.Message { + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AttachResponse.ProtoReflect.Descriptor instead. +func (*AttachResponse) Descriptor() ([]byte, []int) { + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{2} +} + +func (m *AttachResponse) GetMessage() isAttachResponse_Message { + if m != nil { + return m.Message + } + return nil +} + +func (x *AttachResponse) GetInit() *AttachInit { + if x, ok := x.GetMessage().(*AttachResponse_Init); ok { + return x.Init + } + return nil +} + +func (x *AttachResponse) GetProgress() *ModulesProgress { + if x, ok := x.GetMessage().(*AttachResponse_Progress); ok { + return x.Progress + } + return nil +} + +func (x *AttachResponse) GetError() *Error { + if x, ok := x.GetMessage().(*AttachResponse_Error); ok { + return x.Error + } + return nil +} + +type isAttachResponse_Message interface { + isAttachResponse_Message() +} + +type AttachResponse_Init struct { + Init *AttachInit `protobuf:"bytes,1,opt,name=init,proto3,oneof"` +} + +type AttachResponse_Progress struct { + Progress *ModulesProgress `protobuf:"bytes,2,opt,name=progress,proto3,oneof"` // Progress of data preparation, before sending in the stream of `data` events. +} + +type AttachResponse_Error struct { + Error *Error `protobuf:"bytes,3,opt,name=error,proto3,oneof"` +} + +func (*AttachResponse_Init) isAttachResponse_Message() {} + +func (*AttachResponse_Progress) isAttachResponse_Message() {} + +func (*AttachResponse_Error) isAttachResponse_Message() {} + +type AttachInit struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OriginalRequest *Request `protobuf:"bytes,1,opt,name=original_request,json=originalRequest,proto3" json:"original_request,omitempty"` + Session *SessionInit `protobuf:"bytes,2,opt,name=session,proto3" json:"session,omitempty"` +} + +func (x *AttachInit) Reset() { + *x = AttachInit{} + if protoimpl.UnsafeEnabled { + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AttachInit) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AttachInit) ProtoMessage() {} + +func (x *AttachInit) ProtoReflect() protoreflect.Message { + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AttachInit.ProtoReflect.Descriptor instead. +func (*AttachInit) Descriptor() ([]byte, []int) { + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{3} +} + +func (x *AttachInit) GetOriginalRequest() *Request { + if x != nil { + return x.OriginalRequest + } + return nil +} + +func (x *AttachInit) GetSession() *SessionInit { + if x != nil { + return x.Session + } + return nil +} + type Response struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -219,7 +407,7 @@ type Response struct { func (x *Response) Reset() { *x = Response{} if protoimpl.UnsafeEnabled { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[1] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -232,7 +420,7 @@ func (x *Response) String() string { func (*Response) ProtoMessage() {} func (x *Response) ProtoReflect() protoreflect.Message { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[1] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -245,7 +433,7 @@ func (x *Response) ProtoReflect() protoreflect.Message { // Deprecated: Use Response.ProtoReflect.Descriptor instead. func (*Response) Descriptor() ([]byte, []int) { - return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{1} + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{4} } func (m *Response) GetMessage() isResponse_Message { @@ -367,7 +555,7 @@ type BlockUndoSignal struct { func (x *BlockUndoSignal) Reset() { *x = BlockUndoSignal{} if protoimpl.UnsafeEnabled { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[2] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -380,7 +568,7 @@ func (x *BlockUndoSignal) String() string { func (*BlockUndoSignal) ProtoMessage() {} func (x *BlockUndoSignal) ProtoReflect() protoreflect.Message { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[2] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -393,7 +581,7 @@ func (x *BlockUndoSignal) ProtoReflect() protoreflect.Message { // Deprecated: Use BlockUndoSignal.ProtoReflect.Descriptor instead. func (*BlockUndoSignal) Descriptor() ([]byte, []int) { - return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{2} + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{5} } func (x *BlockUndoSignal) GetLastValidBlock() *v1.BlockRef { @@ -427,7 +615,7 @@ type BlockScopedData struct { func (x *BlockScopedData) Reset() { *x = BlockScopedData{} if protoimpl.UnsafeEnabled { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[3] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -440,7 +628,7 @@ func (x *BlockScopedData) String() string { func (*BlockScopedData) ProtoMessage() {} func (x *BlockScopedData) ProtoReflect() protoreflect.Message { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[3] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -453,7 +641,7 @@ func (x *BlockScopedData) ProtoReflect() protoreflect.Message { // Deprecated: Use BlockScopedData.ProtoReflect.Descriptor instead. func (*BlockScopedData) Descriptor() ([]byte, []int) { - return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{3} + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{6} } func (x *BlockScopedData) GetOutput() *MapModuleOutput { @@ -512,7 +700,7 @@ type SessionInit struct { func (x *SessionInit) Reset() { *x = SessionInit{} if protoimpl.UnsafeEnabled { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[4] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -525,7 +713,7 @@ func (x *SessionInit) String() string { func (*SessionInit) ProtoMessage() {} func (x *SessionInit) ProtoReflect() protoreflect.Message { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[4] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -538,7 +726,7 @@ func (x *SessionInit) ProtoReflect() protoreflect.Message { // Deprecated: Use SessionInit.ProtoReflect.Descriptor instead. func (*SessionInit) Descriptor() ([]byte, []int) { - return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{4} + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{7} } func (x *SessionInit) GetTraceId() string { @@ -580,7 +768,7 @@ type InitialSnapshotComplete struct { func (x *InitialSnapshotComplete) Reset() { *x = InitialSnapshotComplete{} if protoimpl.UnsafeEnabled { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[5] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -593,7 +781,7 @@ func (x *InitialSnapshotComplete) String() string { func (*InitialSnapshotComplete) ProtoMessage() {} func (x *InitialSnapshotComplete) ProtoReflect() protoreflect.Message { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[5] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -606,7 +794,7 @@ func (x *InitialSnapshotComplete) ProtoReflect() protoreflect.Message { // Deprecated: Use InitialSnapshotComplete.ProtoReflect.Descriptor instead. func (*InitialSnapshotComplete) Descriptor() ([]byte, []int) { - return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{5} + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{8} } func (x *InitialSnapshotComplete) GetCursor() string { @@ -630,7 +818,7 @@ type InitialSnapshotData struct { func (x *InitialSnapshotData) Reset() { *x = InitialSnapshotData{} if protoimpl.UnsafeEnabled { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[6] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -643,7 +831,7 @@ func (x *InitialSnapshotData) String() string { func (*InitialSnapshotData) ProtoMessage() {} func (x *InitialSnapshotData) ProtoReflect() protoreflect.Message { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[6] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -656,7 +844,7 @@ func (x *InitialSnapshotData) ProtoReflect() protoreflect.Message { // Deprecated: Use InitialSnapshotData.ProtoReflect.Descriptor instead. func (*InitialSnapshotData) Descriptor() ([]byte, []int) { - return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{6} + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{9} } func (x *InitialSnapshotData) GetModuleName() string { @@ -701,7 +889,7 @@ type MapModuleOutput struct { func (x *MapModuleOutput) Reset() { *x = MapModuleOutput{} if protoimpl.UnsafeEnabled { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[7] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -714,7 +902,7 @@ func (x *MapModuleOutput) String() string { func (*MapModuleOutput) ProtoMessage() {} func (x *MapModuleOutput) ProtoReflect() protoreflect.Message { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[7] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -727,7 +915,7 @@ func (x *MapModuleOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use MapModuleOutput.ProtoReflect.Descriptor instead. func (*MapModuleOutput) Descriptor() ([]byte, []int) { - return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{7} + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{10} } func (x *MapModuleOutput) GetName() string { @@ -768,7 +956,7 @@ type StoreModuleOutput struct { func (x *StoreModuleOutput) Reset() { *x = StoreModuleOutput{} if protoimpl.UnsafeEnabled { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[8] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -781,7 +969,7 @@ func (x *StoreModuleOutput) String() string { func (*StoreModuleOutput) ProtoMessage() {} func (x *StoreModuleOutput) ProtoReflect() protoreflect.Message { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[8] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -794,7 +982,7 @@ func (x *StoreModuleOutput) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreModuleOutput.ProtoReflect.Descriptor instead. func (*StoreModuleOutput) Descriptor() ([]byte, []int) { - return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{8} + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{11} } func (x *StoreModuleOutput) GetName() string { @@ -833,7 +1021,7 @@ type OutputDebugInfo struct { func (x *OutputDebugInfo) Reset() { *x = OutputDebugInfo{} if protoimpl.UnsafeEnabled { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[9] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -846,7 +1034,7 @@ func (x *OutputDebugInfo) String() string { func (*OutputDebugInfo) ProtoMessage() {} func (x *OutputDebugInfo) ProtoReflect() protoreflect.Message { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[9] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -859,7 +1047,7 @@ func (x *OutputDebugInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use OutputDebugInfo.ProtoReflect.Descriptor instead. func (*OutputDebugInfo) Descriptor() ([]byte, []int) { - return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{9} + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{12} } func (x *OutputDebugInfo) GetLogs() []string { @@ -901,7 +1089,7 @@ type ModulesProgress struct { func (x *ModulesProgress) Reset() { *x = ModulesProgress{} if protoimpl.UnsafeEnabled { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[10] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -914,7 +1102,7 @@ func (x *ModulesProgress) String() string { func (*ModulesProgress) ProtoMessage() {} func (x *ModulesProgress) ProtoReflect() protoreflect.Message { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[10] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -927,7 +1115,7 @@ func (x *ModulesProgress) ProtoReflect() protoreflect.Message { // Deprecated: Use ModulesProgress.ProtoReflect.Descriptor instead. func (*ModulesProgress) Descriptor() ([]byte, []int) { - return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{10} + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{13} } func (x *ModulesProgress) GetRunningJobs() []*Job { @@ -970,7 +1158,7 @@ type ProcessedBytes struct { func (x *ProcessedBytes) Reset() { *x = ProcessedBytes{} if protoimpl.UnsafeEnabled { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[11] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -983,7 +1171,7 @@ func (x *ProcessedBytes) String() string { func (*ProcessedBytes) ProtoMessage() {} func (x *ProcessedBytes) ProtoReflect() protoreflect.Message { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[11] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -996,7 +1184,7 @@ func (x *ProcessedBytes) ProtoReflect() protoreflect.Message { // Deprecated: Use ProcessedBytes.ProtoReflect.Descriptor instead. func (*ProcessedBytes) Descriptor() ([]byte, []int) { - return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{11} + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{14} } func (x *ProcessedBytes) GetTotalBytesRead() uint64 { @@ -1029,7 +1217,7 @@ type Error struct { func (x *Error) Reset() { *x = Error{} if protoimpl.UnsafeEnabled { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[12] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1042,7 +1230,7 @@ func (x *Error) String() string { func (*Error) ProtoMessage() {} func (x *Error) ProtoReflect() protoreflect.Message { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[12] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1055,7 +1243,7 @@ func (x *Error) ProtoReflect() protoreflect.Message { // Deprecated: Use Error.ProtoReflect.Descriptor instead. func (*Error) Descriptor() ([]byte, []int) { - return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{12} + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{15} } func (x *Error) GetModule() string { @@ -1101,7 +1289,7 @@ type Job struct { func (x *Job) Reset() { *x = Job{} if protoimpl.UnsafeEnabled { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[13] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1114,7 +1302,7 @@ func (x *Job) String() string { func (*Job) ProtoMessage() {} func (x *Job) ProtoReflect() protoreflect.Message { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[13] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1127,7 +1315,7 @@ func (x *Job) ProtoReflect() protoreflect.Message { // Deprecated: Use Job.ProtoReflect.Descriptor instead. func (*Job) Descriptor() ([]byte, []int) { - return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{13} + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{16} } func (x *Job) GetStage() uint32 { @@ -1177,7 +1365,7 @@ type Stage struct { func (x *Stage) Reset() { *x = Stage{} if protoimpl.UnsafeEnabled { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[14] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1190,7 +1378,7 @@ func (x *Stage) String() string { func (*Stage) ProtoMessage() {} func (x *Stage) ProtoReflect() protoreflect.Message { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[14] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1203,7 +1391,7 @@ func (x *Stage) ProtoReflect() protoreflect.Message { // Deprecated: Use Stage.ProtoReflect.Descriptor instead. func (*Stage) Descriptor() ([]byte, []int) { - return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{14} + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{17} } func (x *Stage) GetModules() []string { @@ -1257,7 +1445,7 @@ type ModuleStats struct { func (x *ModuleStats) Reset() { *x = ModuleStats{} if protoimpl.UnsafeEnabled { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[15] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1270,7 +1458,7 @@ func (x *ModuleStats) String() string { func (*ModuleStats) ProtoMessage() {} func (x *ModuleStats) ProtoReflect() protoreflect.Message { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[15] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1283,7 +1471,7 @@ func (x *ModuleStats) ProtoReflect() protoreflect.Message { // Deprecated: Use ModuleStats.ProtoReflect.Descriptor instead. func (*ModuleStats) Descriptor() ([]byte, []int) { - return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{15} + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{18} } func (x *ModuleStats) GetName() string { @@ -1383,7 +1571,7 @@ type ExternalCallMetric struct { func (x *ExternalCallMetric) Reset() { *x = ExternalCallMetric{} if protoimpl.UnsafeEnabled { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[16] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1396,7 +1584,7 @@ func (x *ExternalCallMetric) String() string { func (*ExternalCallMetric) ProtoMessage() {} func (x *ExternalCallMetric) ProtoReflect() protoreflect.Message { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[16] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1409,7 +1597,7 @@ func (x *ExternalCallMetric) ProtoReflect() protoreflect.Message { // Deprecated: Use ExternalCallMetric.ProtoReflect.Descriptor instead. func (*ExternalCallMetric) Descriptor() ([]byte, []int) { - return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{16} + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{19} } func (x *ExternalCallMetric) GetName() string { @@ -1448,7 +1636,7 @@ type StoreDelta struct { func (x *StoreDelta) Reset() { *x = StoreDelta{} if protoimpl.UnsafeEnabled { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[17] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1461,7 +1649,7 @@ func (x *StoreDelta) String() string { func (*StoreDelta) ProtoMessage() {} func (x *StoreDelta) ProtoReflect() protoreflect.Message { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[17] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1474,7 +1662,7 @@ func (x *StoreDelta) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreDelta.ProtoReflect.Descriptor instead. func (*StoreDelta) Descriptor() ([]byte, []int) { - return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{17} + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{20} } func (x *StoreDelta) GetOperation() StoreDelta_Operation { @@ -1524,7 +1712,7 @@ type BlockRange struct { func (x *BlockRange) Reset() { *x = BlockRange{} if protoimpl.UnsafeEnabled { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[18] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1537,7 +1725,7 @@ func (x *BlockRange) String() string { func (*BlockRange) ProtoMessage() {} func (x *BlockRange) ProtoReflect() protoreflect.Message { - mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[18] + mi := &file_sf_substreams_rpc_v2_service_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1550,7 +1738,7 @@ func (x *BlockRange) ProtoReflect() protoreflect.Message { // Deprecated: Use BlockRange.ProtoReflect.Descriptor instead. func (*BlockRange) Descriptor() ([]byte, []int) { - return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{18} + return file_sf_substreams_rpc_v2_service_proto_rawDescGZIP(), []int{21} } func (x *BlockRange) GetStartBlock() uint64 { @@ -1603,261 +1791,291 @@ var file_sf_substreams_rpc_v2_service_proto_rawDesc = []byte{ 0x66, 0x6f, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x23, 0x64, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x46, 0x6f, 0x72, 0x4d, - 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x22, 0xc9, 0x04, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x69, 0x74, 0x48, 0x00, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x0f, 0x0a, 0x0d, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xcd, 0x01, 0x0a, 0x0e, 0x41, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x69, 0x6e, + 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, + 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, + 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x49, 0x6e, 0x69, 0x74, 0x48, 0x00, 0x52, 0x04, 0x69, 0x6e, + 0x69, 0x74, 0x12, 0x43, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x08, 0x70, - 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x53, 0x0a, 0x11, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, - 0x63, 0x6f, 0x70, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x0f, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x53, 0x0a, 0x11, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x75, 0x6e, 0x64, 0x6f, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x6e, 0x64, 0x6f, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x48, 0x00, - 0x52, 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x6e, 0x64, 0x6f, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x6c, 0x12, 0x3e, 0x0a, 0x0b, 0x66, 0x61, 0x74, 0x61, 0x6c, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x33, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x61, 0x74, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x12, 0x5b, 0x0a, 0x13, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, - 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, - 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x11, 0x64, 0x65, 0x62, - 0x75, 0x67, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x67, - 0x0a, 0x17, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2d, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x00, - 0x52, 0x15, 0x64, 0x65, 0x62, 0x75, 0x67, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x83, 0x01, 0x0a, 0x0f, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x6e, 0x64, 0x6f, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x66, 0x52, 0x0e, 0x6c, 0x61, - 0x73, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x11, - 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xf1, 0x02, 0x0a, 0x0f, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3d, 0x0a, 0x06, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, - 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x61, 0x70, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x2d, 0x0a, 0x05, 0x63, - 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x66, 0x2e, - 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, - 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, - 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, - 0x6f, 0x72, 0x12, 0x2c, 0x0a, 0x12, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, - 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x12, 0x51, 0x0a, 0x11, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x6d, 0x61, 0x70, 0x5f, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x66, + 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x09, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x93, 0x01, 0x0a, 0x0a, 0x41, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x48, 0x0a, 0x10, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, + 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, + 0x0f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x3b, 0x0a, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x49, 0x6e, 0x69, 0x74, 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xc9, 0x04, + 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, - 0x76, 0x32, 0x2e, 0x4d, 0x61, 0x70, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x52, 0x0f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x4d, 0x61, 0x70, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x73, 0x12, 0x57, 0x0a, 0x13, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x27, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, - 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x11, 0x64, 0x65, 0x62, 0x75, 0x67, - 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x22, 0xbe, 0x01, 0x0a, - 0x0b, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08, - 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x74, 0x72, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x30, 0x0a, 0x14, 0x6c, 0x69, 0x6e, - 0x65, 0x61, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6f, 0x66, 0x66, 0x5f, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x48, - 0x61, 0x6e, 0x64, 0x6f, 0x66, 0x66, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x30, 0x0a, 0x14, 0x6d, - 0x61, 0x78, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x5f, 0x77, 0x6f, 0x72, 0x6b, - 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x50, 0x61, - 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x22, 0x31, 0x0a, - 0x17, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, - 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, - 0x22, 0xac, 0x01, 0x0a, 0x13, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x6f, 0x64, 0x75, - 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, - 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x64, 0x65, 0x6c, - 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x66, 0x2e, 0x73, + 0x76, 0x32, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x69, 0x74, 0x48, 0x00, + 0x52, 0x07, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x43, 0x0a, 0x08, 0x70, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x66, + 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x76, 0x32, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x53, + 0x0a, 0x11, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x52, 0x06, 0x64, 0x65, 0x6c, - 0x74, 0x61, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x73, - 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x22, - 0xa0, 0x01, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, - 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x44, 0x0a, 0x0a, - 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, - 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x65, - 0x62, 0x75, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x64, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, - 0x66, 0x6f, 0x22, 0xbd, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4d, 0x6f, 0x64, 0x75, - 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4e, 0x0a, 0x12, - 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x74, - 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, + 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, + 0x48, 0x00, 0x52, 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x53, 0x0a, 0x11, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x75, 0x6e, 0x64, + 0x6f, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x6e, 0x64, 0x6f, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x6e, + 0x64, 0x6f, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x3e, 0x0a, 0x0b, 0x66, 0x61, 0x74, 0x61, + 0x6c, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x61, + 0x74, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x5b, 0x0a, 0x13, 0x64, 0x65, 0x62, 0x75, + 0x67, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6e, 0x69, + 0x74, 0x69, 0x61, 0x6c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x44, 0x61, 0x74, 0x61, + 0x48, 0x00, 0x52, 0x11, 0x64, 0x65, 0x62, 0x75, 0x67, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x67, 0x0a, 0x17, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x73, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6e, + 0x69, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x00, 0x52, 0x15, 0x64, 0x65, 0x62, 0x75, 0x67, 0x53, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x09, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x83, 0x01, 0x0a, 0x0f, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x55, 0x6e, 0x64, 0x6f, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x44, 0x0a, + 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x52, 0x65, 0x66, 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x6c, 0x61, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, + 0xf1, 0x02, 0x0a, 0x0f, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x3d, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x61, 0x70, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x12, 0x2d, 0x0a, 0x05, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x05, 0x63, 0x6c, 0x6f, 0x63, + 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x2c, 0x0a, 0x12, 0x66, 0x69, 0x6e, + 0x61, 0x6c, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x51, 0x0a, 0x11, 0x64, 0x65, 0x62, 0x75, 0x67, + 0x5f, 0x6d, 0x61, 0x70, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x61, 0x70, 0x4d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x0f, 0x64, 0x65, 0x62, 0x75, 0x67, + 0x4d, 0x61, 0x70, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, 0x57, 0x0a, 0x13, 0x64, 0x65, + 0x62, 0x75, 0x67, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x52, 0x11, 0x64, 0x65, 0x62, 0x75, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x73, 0x22, 0xbe, 0x01, 0x0a, 0x0b, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x30, + 0x0a, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x72, 0x65, + 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x12, 0x30, 0x0a, 0x14, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6f, + 0x66, 0x66, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, + 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x6f, 0x66, 0x66, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x12, 0x30, 0x0a, 0x14, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, + 0x65, 0x6c, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x12, 0x6d, 0x61, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x57, 0x6f, 0x72, + 0x6b, 0x65, 0x72, 0x73, 0x22, 0x31, 0x0a, 0x17, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xac, 0x01, 0x0a, 0x13, 0x49, 0x6e, 0x69, 0x74, + 0x69, 0x61, 0x6c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x1f, 0x0a, 0x0b, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x38, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, + 0x74, 0x61, 0x52, 0x06, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x65, + 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, + 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x33, + 0x0a, 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x12, 0x44, 0x0a, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, + 0x64, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xbd, 0x01, 0x0a, 0x11, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x74, + 0x61, 0x52, 0x10, 0x64, 0x65, 0x62, 0x75, 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, + 0x74, 0x61, 0x73, 0x12, 0x44, 0x0a, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, + 0x64, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x64, 0x0a, 0x0f, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, + 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, + 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x6f, 0x67, 0x73, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, 0x6f, 0x67, 0x73, 0x54, 0x72, + 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x22, + 0xa1, 0x02, 0x0a, 0x0f, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x3c, 0x0a, 0x0c, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6a, + 0x6f, 0x62, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x66, 0x2e, 0x73, + 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, + 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x0b, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x4a, 0x6f, 0x62, + 0x73, 0x12, 0x46, 0x0a, 0x0d, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, - 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x52, 0x10, 0x64, 0x65, 0x62, 0x75, - 0x67, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x12, 0x44, 0x0a, 0x0a, - 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, - 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x65, - 0x62, 0x75, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x64, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, - 0x66, 0x6f, 0x22, 0x64, 0x0a, 0x0f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x44, 0x65, 0x62, 0x75, - 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x6f, 0x67, - 0x73, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0d, 0x6c, 0x6f, 0x67, 0x73, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x22, 0xa1, 0x02, 0x0a, 0x0f, 0x4d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3c, 0x0a, 0x0c, - 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x4a, 0x6f, 0x62, 0x52, 0x0b, 0x72, - 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x46, 0x0a, 0x0d, 0x6d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x73, 0x52, 0x0c, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x67, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x67, 0x65, 0x73, 0x12, 0x4d, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, - 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, - 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, - 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x6a, 0x0a, 0x0e, - 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x28, - 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x72, 0x65, - 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x52, 0x65, 0x61, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x57, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x22, 0x72, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x6f, 0x67, 0x73, 0x5f, 0x74, 0x72, - 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, - 0x6f, 0x67, 0x73, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x22, 0xa7, 0x01, 0x0a, - 0x03, 0x4a, 0x6f, 0x62, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1d, 0x0a, 0x0a, 0x73, - 0x74, 0x6f, 0x70, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x09, 0x73, 0x74, 0x6f, 0x70, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x64, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x73, 0x22, 0x6e, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x4b, 0x0a, 0x10, 0x63, 0x6f, 0x6d, - 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, - 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0xc4, 0x05, 0x0a, 0x0b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x18, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x18, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, - 0x4d, 0x73, 0x12, 0x5c, 0x0a, 0x15, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x63, - 0x61, 0x6c, 0x6c, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x43, 0x61, 0x6c, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x13, 0x65, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x61, 0x6c, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x12, 0x40, 0x0a, 0x1d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x19, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, - 0x4d, 0x73, 0x12, 0x33, 0x0a, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, - 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x17, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x43, - 0x0a, 0x1e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x3c, 0x0a, - 0x1b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x72, - 0x67, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x17, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4d, 0x65, - 0x72, 0x67, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x5f, 0x6d, - 0x65, 0x72, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x4d, 0x65, 0x72, 0x67, - 0x69, 0x6e, 0x67, 0x12, 0x38, 0x0a, 0x18, 0x68, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x5f, 0x63, - 0x6f, 0x6e, 0x74, 0x69, 0x67, 0x75, 0x6f, 0x75, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x68, 0x69, 0x67, 0x68, 0x65, 0x73, 0x74, 0x43, 0x6f, - 0x6e, 0x74, 0x69, 0x67, 0x75, 0x6f, 0x75, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x57, 0x0a, - 0x12, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x61, 0x6c, 0x6c, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x17, 0x0a, - 0x07, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, - 0x74, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xf8, 0x01, 0x0a, 0x0a, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, + 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0c, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x67, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x73, 0x66, 0x2e, 0x73, + 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, + 0x2e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x67, 0x65, 0x73, 0x12, 0x4d, + 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x50, + 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x0e, 0x70, + 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x4a, 0x04, 0x08, + 0x01, 0x10, 0x02, 0x22, 0x6a, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x52, 0x65, 0x61, 0x64, 0x12, + 0x2e, 0x0a, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x77, + 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x22, + 0x72, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x25, 0x0a, 0x0e, + 0x6c, 0x6f, 0x67, 0x73, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6c, 0x6f, 0x67, 0x73, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, + 0x74, 0x65, 0x64, 0x22, 0xa7, 0x01, 0x0a, 0x03, 0x4a, 0x6f, 0x62, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x67, + 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x70, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x70, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x1f, 0x0a, 0x0b, + 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x73, 0x22, 0x6e, 0x0a, + 0x05, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x12, 0x4b, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x61, + 0x6e, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x66, 0x2e, + 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, + 0x32, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0f, 0x63, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0xc4, 0x05, + 0x0a, 0x0b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, + 0x73, 0x73, 0x65, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x18, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x37, 0x0a, 0x18, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, + 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x15, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, + 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x5c, 0x0a, 0x15, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, + 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, + 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x61, 0x6c, 0x6c, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x52, 0x13, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x61, 0x6c, 0x6c, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x40, 0x0a, 0x1d, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x19, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x33, 0x0a, 0x16, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x35, + 0x0a, 0x17, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x1e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x70, 0x72, 0x65, 0x66, 0x69, + 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x1b, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x70, + 0x72, 0x65, 0x66, 0x69, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x42, + 0x79, 0x74, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x1b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x17, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, + 0x4d, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x0e, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x15, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x6c, 0x79, 0x4d, 0x65, 0x72, 0x67, 0x69, 0x6e, 0x67, 0x12, 0x38, 0x0a, 0x18, 0x68, 0x69, + 0x67, 0x68, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x67, 0x75, 0x6f, 0x75, 0x73, + 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x68, 0x69, + 0x67, 0x68, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x67, 0x75, 0x6f, 0x75, 0x73, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x57, 0x0a, 0x12, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x43, 0x61, 0x6c, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x74, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0xf8, 0x01, + 0x0a, 0x0a, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x09, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2a, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, + 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x74, + 0x61, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x6c, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6f, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x1b, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x0a, 0x09, + 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x09, 0x0a, 0x05, 0x55, 0x4e, 0x53, + 0x45, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x01, + 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, + 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x22, 0x4a, 0x0a, 0x0a, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x5f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x32, 0x53, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x49, + 0x0a, 0x06, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x1d, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, - 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x18, 0x0a, 0x07, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x07, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x6f, - 0x6c, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, - 0x6f, 0x6c, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6e, 0x65, 0x77, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x09, 0x0a, 0x05, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, - 0x06, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, - 0x03, 0x22, 0x4a, 0x0a, 0x0a, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x32, 0x53, 0x0a, - 0x06, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x49, 0x0a, 0x06, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x73, 0x12, 0x1d, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1e, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, - 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x30, 0x01, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x66, 0x61, 0x73, 0x74, 0x2f, 0x73, - 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2f, 0x70, 0x62, 0x2f, 0x73, 0x66, 0x2f, - 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x76, - 0x32, 0x3b, 0x70, 0x62, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x72, 0x70, - 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32, 0x60, 0x0a, 0x07, 0x4f, 0x62, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x12, 0x55, 0x0a, 0x06, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x12, 0x23, + 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x73, 0x66, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x73, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x74, 0x74, 0x61, 0x63, + 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x4d, 0x5a, 0x4b, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x69, 0x6e, 0x67, 0x66, 0x61, 0x73, 0x74, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x73, 0x2f, 0x70, 0x62, 0x2f, 0x73, 0x66, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x73, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x76, 0x32, 0x3b, 0x70, 0x62, 0x73, 0x75, 0x62, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -1873,66 +2091,76 @@ func file_sf_substreams_rpc_v2_service_proto_rawDescGZIP() []byte { } var file_sf_substreams_rpc_v2_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_sf_substreams_rpc_v2_service_proto_msgTypes = make([]protoimpl.MessageInfo, 19) +var file_sf_substreams_rpc_v2_service_proto_msgTypes = make([]protoimpl.MessageInfo, 22) var file_sf_substreams_rpc_v2_service_proto_goTypes = []interface{}{ (StoreDelta_Operation)(0), // 0: sf.substreams.rpc.v2.StoreDelta.Operation (*Request)(nil), // 1: sf.substreams.rpc.v2.Request - (*Response)(nil), // 2: sf.substreams.rpc.v2.Response - (*BlockUndoSignal)(nil), // 3: sf.substreams.rpc.v2.BlockUndoSignal - (*BlockScopedData)(nil), // 4: sf.substreams.rpc.v2.BlockScopedData - (*SessionInit)(nil), // 5: sf.substreams.rpc.v2.SessionInit - (*InitialSnapshotComplete)(nil), // 6: sf.substreams.rpc.v2.InitialSnapshotComplete - (*InitialSnapshotData)(nil), // 7: sf.substreams.rpc.v2.InitialSnapshotData - (*MapModuleOutput)(nil), // 8: sf.substreams.rpc.v2.MapModuleOutput - (*StoreModuleOutput)(nil), // 9: sf.substreams.rpc.v2.StoreModuleOutput - (*OutputDebugInfo)(nil), // 10: sf.substreams.rpc.v2.OutputDebugInfo - (*ModulesProgress)(nil), // 11: sf.substreams.rpc.v2.ModulesProgress - (*ProcessedBytes)(nil), // 12: sf.substreams.rpc.v2.ProcessedBytes - (*Error)(nil), // 13: sf.substreams.rpc.v2.Error - (*Job)(nil), // 14: sf.substreams.rpc.v2.Job - (*Stage)(nil), // 15: sf.substreams.rpc.v2.Stage - (*ModuleStats)(nil), // 16: sf.substreams.rpc.v2.ModuleStats - (*ExternalCallMetric)(nil), // 17: sf.substreams.rpc.v2.ExternalCallMetric - (*StoreDelta)(nil), // 18: sf.substreams.rpc.v2.StoreDelta - (*BlockRange)(nil), // 19: sf.substreams.rpc.v2.BlockRange - (*v1.Modules)(nil), // 20: sf.substreams.v1.Modules - (*v1.BlockRef)(nil), // 21: sf.substreams.v1.BlockRef - (*v1.Clock)(nil), // 22: sf.substreams.v1.Clock - (*anypb.Any)(nil), // 23: google.protobuf.Any + (*AttachRequest)(nil), // 2: sf.substreams.rpc.v2.AttachRequest + (*AttachResponse)(nil), // 3: sf.substreams.rpc.v2.AttachResponse + (*AttachInit)(nil), // 4: sf.substreams.rpc.v2.AttachInit + (*Response)(nil), // 5: sf.substreams.rpc.v2.Response + (*BlockUndoSignal)(nil), // 6: sf.substreams.rpc.v2.BlockUndoSignal + (*BlockScopedData)(nil), // 7: sf.substreams.rpc.v2.BlockScopedData + (*SessionInit)(nil), // 8: sf.substreams.rpc.v2.SessionInit + (*InitialSnapshotComplete)(nil), // 9: sf.substreams.rpc.v2.InitialSnapshotComplete + (*InitialSnapshotData)(nil), // 10: sf.substreams.rpc.v2.InitialSnapshotData + (*MapModuleOutput)(nil), // 11: sf.substreams.rpc.v2.MapModuleOutput + (*StoreModuleOutput)(nil), // 12: sf.substreams.rpc.v2.StoreModuleOutput + (*OutputDebugInfo)(nil), // 13: sf.substreams.rpc.v2.OutputDebugInfo + (*ModulesProgress)(nil), // 14: sf.substreams.rpc.v2.ModulesProgress + (*ProcessedBytes)(nil), // 15: sf.substreams.rpc.v2.ProcessedBytes + (*Error)(nil), // 16: sf.substreams.rpc.v2.Error + (*Job)(nil), // 17: sf.substreams.rpc.v2.Job + (*Stage)(nil), // 18: sf.substreams.rpc.v2.Stage + (*ModuleStats)(nil), // 19: sf.substreams.rpc.v2.ModuleStats + (*ExternalCallMetric)(nil), // 20: sf.substreams.rpc.v2.ExternalCallMetric + (*StoreDelta)(nil), // 21: sf.substreams.rpc.v2.StoreDelta + (*BlockRange)(nil), // 22: sf.substreams.rpc.v2.BlockRange + (*v1.Modules)(nil), // 23: sf.substreams.v1.Modules + (*v1.BlockRef)(nil), // 24: sf.substreams.v1.BlockRef + (*v1.Clock)(nil), // 25: sf.substreams.v1.Clock + (*anypb.Any)(nil), // 26: google.protobuf.Any } var file_sf_substreams_rpc_v2_service_proto_depIdxs = []int32{ - 20, // 0: sf.substreams.rpc.v2.Request.modules:type_name -> sf.substreams.v1.Modules - 5, // 1: sf.substreams.rpc.v2.Response.session:type_name -> sf.substreams.rpc.v2.SessionInit - 11, // 2: sf.substreams.rpc.v2.Response.progress:type_name -> sf.substreams.rpc.v2.ModulesProgress - 4, // 3: sf.substreams.rpc.v2.Response.block_scoped_data:type_name -> sf.substreams.rpc.v2.BlockScopedData - 3, // 4: sf.substreams.rpc.v2.Response.block_undo_signal:type_name -> sf.substreams.rpc.v2.BlockUndoSignal - 13, // 5: sf.substreams.rpc.v2.Response.fatal_error:type_name -> sf.substreams.rpc.v2.Error - 7, // 6: sf.substreams.rpc.v2.Response.debug_snapshot_data:type_name -> sf.substreams.rpc.v2.InitialSnapshotData - 6, // 7: sf.substreams.rpc.v2.Response.debug_snapshot_complete:type_name -> sf.substreams.rpc.v2.InitialSnapshotComplete - 21, // 8: sf.substreams.rpc.v2.BlockUndoSignal.last_valid_block:type_name -> sf.substreams.v1.BlockRef - 8, // 9: sf.substreams.rpc.v2.BlockScopedData.output:type_name -> sf.substreams.rpc.v2.MapModuleOutput - 22, // 10: sf.substreams.rpc.v2.BlockScopedData.clock:type_name -> sf.substreams.v1.Clock - 8, // 11: sf.substreams.rpc.v2.BlockScopedData.debug_map_outputs:type_name -> sf.substreams.rpc.v2.MapModuleOutput - 9, // 12: sf.substreams.rpc.v2.BlockScopedData.debug_store_outputs:type_name -> sf.substreams.rpc.v2.StoreModuleOutput - 18, // 13: sf.substreams.rpc.v2.InitialSnapshotData.deltas:type_name -> sf.substreams.rpc.v2.StoreDelta - 23, // 14: sf.substreams.rpc.v2.MapModuleOutput.map_output:type_name -> google.protobuf.Any - 10, // 15: sf.substreams.rpc.v2.MapModuleOutput.debug_info:type_name -> sf.substreams.rpc.v2.OutputDebugInfo - 18, // 16: sf.substreams.rpc.v2.StoreModuleOutput.debug_store_deltas:type_name -> sf.substreams.rpc.v2.StoreDelta - 10, // 17: sf.substreams.rpc.v2.StoreModuleOutput.debug_info:type_name -> sf.substreams.rpc.v2.OutputDebugInfo - 14, // 18: sf.substreams.rpc.v2.ModulesProgress.running_jobs:type_name -> sf.substreams.rpc.v2.Job - 16, // 19: sf.substreams.rpc.v2.ModulesProgress.modules_stats:type_name -> sf.substreams.rpc.v2.ModuleStats - 15, // 20: sf.substreams.rpc.v2.ModulesProgress.stages:type_name -> sf.substreams.rpc.v2.Stage - 12, // 21: sf.substreams.rpc.v2.ModulesProgress.processed_bytes:type_name -> sf.substreams.rpc.v2.ProcessedBytes - 19, // 22: sf.substreams.rpc.v2.Stage.completed_ranges:type_name -> sf.substreams.rpc.v2.BlockRange - 17, // 23: sf.substreams.rpc.v2.ModuleStats.external_call_metrics:type_name -> sf.substreams.rpc.v2.ExternalCallMetric - 0, // 24: sf.substreams.rpc.v2.StoreDelta.operation:type_name -> sf.substreams.rpc.v2.StoreDelta.Operation - 1, // 25: sf.substreams.rpc.v2.Stream.Blocks:input_type -> sf.substreams.rpc.v2.Request - 2, // 26: sf.substreams.rpc.v2.Stream.Blocks:output_type -> sf.substreams.rpc.v2.Response - 26, // [26:27] is the sub-list for method output_type - 25, // [25:26] is the sub-list for method input_type - 25, // [25:25] is the sub-list for extension type_name - 25, // [25:25] is the sub-list for extension extendee - 0, // [0:25] is the sub-list for field type_name + 23, // 0: sf.substreams.rpc.v2.Request.modules:type_name -> sf.substreams.v1.Modules + 4, // 1: sf.substreams.rpc.v2.AttachResponse.init:type_name -> sf.substreams.rpc.v2.AttachInit + 14, // 2: sf.substreams.rpc.v2.AttachResponse.progress:type_name -> sf.substreams.rpc.v2.ModulesProgress + 16, // 3: sf.substreams.rpc.v2.AttachResponse.error:type_name -> sf.substreams.rpc.v2.Error + 1, // 4: sf.substreams.rpc.v2.AttachInit.original_request:type_name -> sf.substreams.rpc.v2.Request + 8, // 5: sf.substreams.rpc.v2.AttachInit.session:type_name -> sf.substreams.rpc.v2.SessionInit + 8, // 6: sf.substreams.rpc.v2.Response.session:type_name -> sf.substreams.rpc.v2.SessionInit + 14, // 7: sf.substreams.rpc.v2.Response.progress:type_name -> sf.substreams.rpc.v2.ModulesProgress + 7, // 8: sf.substreams.rpc.v2.Response.block_scoped_data:type_name -> sf.substreams.rpc.v2.BlockScopedData + 6, // 9: sf.substreams.rpc.v2.Response.block_undo_signal:type_name -> sf.substreams.rpc.v2.BlockUndoSignal + 16, // 10: sf.substreams.rpc.v2.Response.fatal_error:type_name -> sf.substreams.rpc.v2.Error + 10, // 11: sf.substreams.rpc.v2.Response.debug_snapshot_data:type_name -> sf.substreams.rpc.v2.InitialSnapshotData + 9, // 12: sf.substreams.rpc.v2.Response.debug_snapshot_complete:type_name -> sf.substreams.rpc.v2.InitialSnapshotComplete + 24, // 13: sf.substreams.rpc.v2.BlockUndoSignal.last_valid_block:type_name -> sf.substreams.v1.BlockRef + 11, // 14: sf.substreams.rpc.v2.BlockScopedData.output:type_name -> sf.substreams.rpc.v2.MapModuleOutput + 25, // 15: sf.substreams.rpc.v2.BlockScopedData.clock:type_name -> sf.substreams.v1.Clock + 11, // 16: sf.substreams.rpc.v2.BlockScopedData.debug_map_outputs:type_name -> sf.substreams.rpc.v2.MapModuleOutput + 12, // 17: sf.substreams.rpc.v2.BlockScopedData.debug_store_outputs:type_name -> sf.substreams.rpc.v2.StoreModuleOutput + 21, // 18: sf.substreams.rpc.v2.InitialSnapshotData.deltas:type_name -> sf.substreams.rpc.v2.StoreDelta + 26, // 19: sf.substreams.rpc.v2.MapModuleOutput.map_output:type_name -> google.protobuf.Any + 13, // 20: sf.substreams.rpc.v2.MapModuleOutput.debug_info:type_name -> sf.substreams.rpc.v2.OutputDebugInfo + 21, // 21: sf.substreams.rpc.v2.StoreModuleOutput.debug_store_deltas:type_name -> sf.substreams.rpc.v2.StoreDelta + 13, // 22: sf.substreams.rpc.v2.StoreModuleOutput.debug_info:type_name -> sf.substreams.rpc.v2.OutputDebugInfo + 17, // 23: sf.substreams.rpc.v2.ModulesProgress.running_jobs:type_name -> sf.substreams.rpc.v2.Job + 19, // 24: sf.substreams.rpc.v2.ModulesProgress.modules_stats:type_name -> sf.substreams.rpc.v2.ModuleStats + 18, // 25: sf.substreams.rpc.v2.ModulesProgress.stages:type_name -> sf.substreams.rpc.v2.Stage + 15, // 26: sf.substreams.rpc.v2.ModulesProgress.processed_bytes:type_name -> sf.substreams.rpc.v2.ProcessedBytes + 22, // 27: sf.substreams.rpc.v2.Stage.completed_ranges:type_name -> sf.substreams.rpc.v2.BlockRange + 20, // 28: sf.substreams.rpc.v2.ModuleStats.external_call_metrics:type_name -> sf.substreams.rpc.v2.ExternalCallMetric + 0, // 29: sf.substreams.rpc.v2.StoreDelta.operation:type_name -> sf.substreams.rpc.v2.StoreDelta.Operation + 1, // 30: sf.substreams.rpc.v2.Stream.Blocks:input_type -> sf.substreams.rpc.v2.Request + 2, // 31: sf.substreams.rpc.v2.Observe.Attach:input_type -> sf.substreams.rpc.v2.AttachRequest + 5, // 32: sf.substreams.rpc.v2.Stream.Blocks:output_type -> sf.substreams.rpc.v2.Response + 3, // 33: sf.substreams.rpc.v2.Observe.Attach:output_type -> sf.substreams.rpc.v2.AttachResponse + 32, // [32:34] is the sub-list for method output_type + 30, // [30:32] is the sub-list for method input_type + 30, // [30:30] is the sub-list for extension type_name + 30, // [30:30] is the sub-list for extension extendee + 0, // [0:30] is the sub-list for field type_name } func init() { file_sf_substreams_rpc_v2_service_proto_init() } @@ -1954,7 +2182,7 @@ func file_sf_substreams_rpc_v2_service_proto_init() { } } file_sf_substreams_rpc_v2_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Response); i { + switch v := v.(*AttachRequest); i { case 0: return &v.state case 1: @@ -1966,7 +2194,7 @@ func file_sf_substreams_rpc_v2_service_proto_init() { } } file_sf_substreams_rpc_v2_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockUndoSignal); i { + switch v := v.(*AttachResponse); i { case 0: return &v.state case 1: @@ -1978,7 +2206,7 @@ func file_sf_substreams_rpc_v2_service_proto_init() { } } file_sf_substreams_rpc_v2_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BlockScopedData); i { + switch v := v.(*AttachInit); i { case 0: return &v.state case 1: @@ -1990,7 +2218,7 @@ func file_sf_substreams_rpc_v2_service_proto_init() { } } file_sf_substreams_rpc_v2_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SessionInit); i { + switch v := v.(*Response); i { case 0: return &v.state case 1: @@ -2002,7 +2230,7 @@ func file_sf_substreams_rpc_v2_service_proto_init() { } } file_sf_substreams_rpc_v2_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InitialSnapshotComplete); i { + switch v := v.(*BlockUndoSignal); i { case 0: return &v.state case 1: @@ -2014,7 +2242,7 @@ func file_sf_substreams_rpc_v2_service_proto_init() { } } file_sf_substreams_rpc_v2_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InitialSnapshotData); i { + switch v := v.(*BlockScopedData); i { case 0: return &v.state case 1: @@ -2026,7 +2254,7 @@ func file_sf_substreams_rpc_v2_service_proto_init() { } } file_sf_substreams_rpc_v2_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MapModuleOutput); i { + switch v := v.(*SessionInit); i { case 0: return &v.state case 1: @@ -2038,7 +2266,7 @@ func file_sf_substreams_rpc_v2_service_proto_init() { } } file_sf_substreams_rpc_v2_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreModuleOutput); i { + switch v := v.(*InitialSnapshotComplete); i { case 0: return &v.state case 1: @@ -2050,7 +2278,7 @@ func file_sf_substreams_rpc_v2_service_proto_init() { } } file_sf_substreams_rpc_v2_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OutputDebugInfo); i { + switch v := v.(*InitialSnapshotData); i { case 0: return &v.state case 1: @@ -2062,7 +2290,7 @@ func file_sf_substreams_rpc_v2_service_proto_init() { } } file_sf_substreams_rpc_v2_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ModulesProgress); i { + switch v := v.(*MapModuleOutput); i { case 0: return &v.state case 1: @@ -2074,7 +2302,7 @@ func file_sf_substreams_rpc_v2_service_proto_init() { } } file_sf_substreams_rpc_v2_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProcessedBytes); i { + switch v := v.(*StoreModuleOutput); i { case 0: return &v.state case 1: @@ -2086,7 +2314,7 @@ func file_sf_substreams_rpc_v2_service_proto_init() { } } file_sf_substreams_rpc_v2_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Error); i { + switch v := v.(*OutputDebugInfo); i { case 0: return &v.state case 1: @@ -2098,7 +2326,7 @@ func file_sf_substreams_rpc_v2_service_proto_init() { } } file_sf_substreams_rpc_v2_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Job); i { + switch v := v.(*ModulesProgress); i { case 0: return &v.state case 1: @@ -2110,7 +2338,7 @@ func file_sf_substreams_rpc_v2_service_proto_init() { } } file_sf_substreams_rpc_v2_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Stage); i { + switch v := v.(*ProcessedBytes); i { case 0: return &v.state case 1: @@ -2122,7 +2350,7 @@ func file_sf_substreams_rpc_v2_service_proto_init() { } } file_sf_substreams_rpc_v2_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ModuleStats); i { + switch v := v.(*Error); i { case 0: return &v.state case 1: @@ -2134,7 +2362,7 @@ func file_sf_substreams_rpc_v2_service_proto_init() { } } file_sf_substreams_rpc_v2_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExternalCallMetric); i { + switch v := v.(*Job); i { case 0: return &v.state case 1: @@ -2146,7 +2374,7 @@ func file_sf_substreams_rpc_v2_service_proto_init() { } } file_sf_substreams_rpc_v2_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreDelta); i { + switch v := v.(*Stage); i { case 0: return &v.state case 1: @@ -2158,6 +2386,42 @@ func file_sf_substreams_rpc_v2_service_proto_init() { } } file_sf_substreams_rpc_v2_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ModuleStats); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sf_substreams_rpc_v2_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExternalCallMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sf_substreams_rpc_v2_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StoreDelta); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sf_substreams_rpc_v2_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BlockRange); i { case 0: return &v.state @@ -2170,7 +2434,12 @@ func file_sf_substreams_rpc_v2_service_proto_init() { } } } - file_sf_substreams_rpc_v2_service_proto_msgTypes[1].OneofWrappers = []interface{}{ + file_sf_substreams_rpc_v2_service_proto_msgTypes[2].OneofWrappers = []interface{}{ + (*AttachResponse_Init)(nil), + (*AttachResponse_Progress)(nil), + (*AttachResponse_Error)(nil), + } + file_sf_substreams_rpc_v2_service_proto_msgTypes[4].OneofWrappers = []interface{}{ (*Response_Session)(nil), (*Response_Progress)(nil), (*Response_BlockScopedData)(nil), @@ -2185,9 +2454,9 @@ func file_sf_substreams_rpc_v2_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_sf_substreams_rpc_v2_service_proto_rawDesc, NumEnums: 1, - NumMessages: 19, + NumMessages: 22, NumExtensions: 0, - NumServices: 1, + NumServices: 2, }, GoTypes: file_sf_substreams_rpc_v2_service_proto_goTypes, DependencyIndexes: file_sf_substreams_rpc_v2_service_proto_depIdxs, diff --git a/pb/sf/substreams/rpc/v2/service_grpc.pb.go b/pb/sf/substreams/rpc/v2/service_grpc.pb.go index 3d4b2eb69..899629db0 100644 --- a/pb/sf/substreams/rpc/v2/service_grpc.pb.go +++ b/pb/sf/substreams/rpc/v2/service_grpc.pb.go @@ -128,3 +128,114 @@ var Stream_ServiceDesc = grpc.ServiceDesc{ }, Metadata: "sf/substreams/rpc/v2/service.proto", } + +// ObserveClient is the client API for Observe service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type ObserveClient interface { + Attach(ctx context.Context, in *AttachRequest, opts ...grpc.CallOption) (Observe_AttachClient, error) +} + +type observeClient struct { + cc grpc.ClientConnInterface +} + +func NewObserveClient(cc grpc.ClientConnInterface) ObserveClient { + return &observeClient{cc} +} + +func (c *observeClient) Attach(ctx context.Context, in *AttachRequest, opts ...grpc.CallOption) (Observe_AttachClient, error) { + stream, err := c.cc.NewStream(ctx, &Observe_ServiceDesc.Streams[0], "/sf.substreams.rpc.v2.Observe/Attach", opts...) + if err != nil { + return nil, err + } + x := &observeAttachClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Observe_AttachClient interface { + Recv() (*AttachResponse, error) + grpc.ClientStream +} + +type observeAttachClient struct { + grpc.ClientStream +} + +func (x *observeAttachClient) Recv() (*AttachResponse, error) { + m := new(AttachResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// ObserveServer is the server API for Observe service. +// All implementations should embed UnimplementedObserveServer +// for forward compatibility +type ObserveServer interface { + Attach(*AttachRequest, Observe_AttachServer) error +} + +// UnimplementedObserveServer should be embedded to have forward compatible implementations. +type UnimplementedObserveServer struct { +} + +func (UnimplementedObserveServer) Attach(*AttachRequest, Observe_AttachServer) error { + return status.Errorf(codes.Unimplemented, "method Attach not implemented") +} + +// UnsafeObserveServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to ObserveServer will +// result in compilation errors. +type UnsafeObserveServer interface { + mustEmbedUnimplementedObserveServer() +} + +func RegisterObserveServer(s grpc.ServiceRegistrar, srv ObserveServer) { + s.RegisterService(&Observe_ServiceDesc, srv) +} + +func _Observe_Attach_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(AttachRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(ObserveServer).Attach(m, &observeAttachServer{stream}) +} + +type Observe_AttachServer interface { + Send(*AttachResponse) error + grpc.ServerStream +} + +type observeAttachServer struct { + grpc.ServerStream +} + +func (x *observeAttachServer) Send(m *AttachResponse) error { + return x.ServerStream.SendMsg(m) +} + +// Observe_ServiceDesc is the grpc.ServiceDesc for Observe service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Observe_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "sf.substreams.rpc.v2.Observe", + HandlerType: (*ObserveServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "Attach", + Handler: _Observe_Attach_Handler, + ServerStreams: true, + }, + }, + Metadata: "sf/substreams/rpc/v2/service.proto", +} diff --git a/pb/system/system.pb b/pb/system/system.pb index 0fbebb93c..4271ebdf2 100644 Binary files a/pb/system/system.pb and b/pb/system/system.pb differ diff --git a/proto/sf/substreams/rpc/v2/service.proto b/proto/sf/substreams/rpc/v2/service.proto index 24e5b78a6..dbe54ca00 100644 --- a/proto/sf/substreams/rpc/v2/service.proto +++ b/proto/sf/substreams/rpc/v2/service.proto @@ -49,6 +49,23 @@ message Request { repeated string debug_initial_store_snapshot_for_modules = 10; } +service Observe { + rpc Attach(AttachRequest) returns (stream AttachResponse); +} + +message AttachRequest {} +message AttachResponse{ + oneof message { + AttachInit init = 1; + ModulesProgress progress = 2; // Progress of data preparation, before sending in the stream of `data` events. + Error error = 3; + } +} + +message AttachInit { + Request original_request = 1; + SessionInit session = 2; +} message Response { oneof message {