From 049d2a28f0dcc37f9a75c5ccc687f0d9706c1b4c Mon Sep 17 00:00:00 2001 From: Jalen Geason Date: Sat, 10 Jan 2026 17:28:55 -0500 Subject: [PATCH 01/12] Add LeRobotService proto definition with recording and teleoperation methods --- .../service/lerobot/v1/lerobot_grpc_web_pb.js | 573 +++ gen/js/service/lerobot/v1/lerobot_pb.d.ts | 509 +++ gen/js/service/lerobot/v1/lerobot_pb.js | 3828 +++++++++++++++++ .../lerobot/v1/lerobot_pb_service.d.ts | 196 + .../service/lerobot/v1/lerobot_pb_service.js | 341 ++ proto/viam/service/lerobot/v1/lerobot.proto | 161 + service/lerobot/v1/lerobot.pb.go | 1453 +++++++ service/lerobot/v1/lerobot.pb.gw.go | 1054 +++++ service/lerobot/v1/lerobot_grpc.pb.go | 373 ++ 9 files changed, 8488 insertions(+) create mode 100644 gen/js/service/lerobot/v1/lerobot_grpc_web_pb.js create mode 100644 gen/js/service/lerobot/v1/lerobot_pb.d.ts create mode 100644 gen/js/service/lerobot/v1/lerobot_pb.js create mode 100644 gen/js/service/lerobot/v1/lerobot_pb_service.d.ts create mode 100644 gen/js/service/lerobot/v1/lerobot_pb_service.js create mode 100644 proto/viam/service/lerobot/v1/lerobot.proto create mode 100644 service/lerobot/v1/lerobot.pb.go create mode 100644 service/lerobot/v1/lerobot.pb.gw.go create mode 100644 service/lerobot/v1/lerobot_grpc.pb.go diff --git a/gen/js/service/lerobot/v1/lerobot_grpc_web_pb.js b/gen/js/service/lerobot/v1/lerobot_grpc_web_pb.js new file mode 100644 index 000000000..7f715f8c7 --- /dev/null +++ b/gen/js/service/lerobot/v1/lerobot_grpc_web_pb.js @@ -0,0 +1,573 @@ +/** + * @fileoverview gRPC-Web generated client stub for viam.service.lerobot.v1 + * @enhanceable + * @public + */ + +// Code generated by protoc-gen-grpc-web. DO NOT EDIT. +// versions: +// protoc-gen-grpc-web v1.5.0 +// protoc v0.0.0 +// source: service/lerobot/v1/lerobot.proto + + +/* eslint-disable */ +// @ts-nocheck + + + +const grpc = {}; +grpc.web = require('grpc-web'); + + +var google_api_annotations_pb = require('../../../google/api/annotations_pb.js') + +var google_protobuf_struct_pb = require('google-protobuf/google/protobuf/struct_pb.js') +const proto = {}; +proto.viam = {}; +proto.viam.service = {}; +proto.viam.service.lerobot = {}; +proto.viam.service.lerobot.v1 = require('./lerobot_pb.js'); + +/** + * @param {string} hostname + * @param {?Object} credentials + * @param {?grpc.web.ClientOptions} options + * @constructor + * @struct + * @final + */ +proto.viam.service.lerobot.v1.LeRobotServiceClient = + function(hostname, credentials, options) { + if (!options) options = {}; + options.format = 'text'; + + /** + * @private @const {!grpc.web.GrpcWebClientBase} The client + */ + this.client_ = new grpc.web.GrpcWebClientBase(options); + + /** + * @private @const {string} The hostname + */ + this.hostname_ = hostname.replace(/\/+$/, ''); + +}; + + +/** + * @param {string} hostname + * @param {?Object} credentials + * @param {?grpc.web.ClientOptions} options + * @constructor + * @struct + * @final + */ +proto.viam.service.lerobot.v1.LeRobotServicePromiseClient = + function(hostname, credentials, options) { + if (!options) options = {}; + options.format = 'text'; + + /** + * @private @const {!grpc.web.GrpcWebClientBase} The client + */ + this.client_ = new grpc.web.GrpcWebClientBase(options); + + /** + * @private @const {string} The hostname + */ + this.hostname_ = hostname.replace(/\/+$/, ''); + +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.viam.service.lerobot.v1.StartRecordingRequest, + * !proto.viam.service.lerobot.v1.StartRecordingResponse>} + */ +const methodDescriptor_LeRobotService_StartRecording = new grpc.web.MethodDescriptor( + '/viam.service.lerobot.v1.LeRobotService/StartRecording', + grpc.web.MethodType.UNARY, + proto.viam.service.lerobot.v1.StartRecordingRequest, + proto.viam.service.lerobot.v1.StartRecordingResponse, + /** + * @param {!proto.viam.service.lerobot.v1.StartRecordingRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.viam.service.lerobot.v1.StartRecordingResponse.deserializeBinary +); + + +/** + * @param {!proto.viam.service.lerobot.v1.StartRecordingRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.RpcError, ?proto.viam.service.lerobot.v1.StartRecordingResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.viam.service.lerobot.v1.LeRobotServiceClient.prototype.startRecording = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/viam.service.lerobot.v1.LeRobotService/StartRecording', + request, + metadata || {}, + methodDescriptor_LeRobotService_StartRecording, + callback); +}; + + +/** + * @param {!proto.viam.service.lerobot.v1.StartRecordingRequest} request The + * request proto + * @param {?Object=} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.viam.service.lerobot.v1.LeRobotServicePromiseClient.prototype.startRecording = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/viam.service.lerobot.v1.LeRobotService/StartRecording', + request, + metadata || {}, + methodDescriptor_LeRobotService_StartRecording); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.viam.service.lerobot.v1.StopRecordingRequest, + * !proto.viam.service.lerobot.v1.StopRecordingResponse>} + */ +const methodDescriptor_LeRobotService_StopRecording = new grpc.web.MethodDescriptor( + '/viam.service.lerobot.v1.LeRobotService/StopRecording', + grpc.web.MethodType.UNARY, + proto.viam.service.lerobot.v1.StopRecordingRequest, + proto.viam.service.lerobot.v1.StopRecordingResponse, + /** + * @param {!proto.viam.service.lerobot.v1.StopRecordingRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.viam.service.lerobot.v1.StopRecordingResponse.deserializeBinary +); + + +/** + * @param {!proto.viam.service.lerobot.v1.StopRecordingRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.RpcError, ?proto.viam.service.lerobot.v1.StopRecordingResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.viam.service.lerobot.v1.LeRobotServiceClient.prototype.stopRecording = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/viam.service.lerobot.v1.LeRobotService/StopRecording', + request, + metadata || {}, + methodDescriptor_LeRobotService_StopRecording, + callback); +}; + + +/** + * @param {!proto.viam.service.lerobot.v1.StopRecordingRequest} request The + * request proto + * @param {?Object=} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.viam.service.lerobot.v1.LeRobotServicePromiseClient.prototype.stopRecording = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/viam.service.lerobot.v1.LeRobotService/StopRecording', + request, + metadata || {}, + methodDescriptor_LeRobotService_StopRecording); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.viam.service.lerobot.v1.RecordEpisodeRequest, + * !proto.viam.service.lerobot.v1.RecordEpisodeResponse>} + */ +const methodDescriptor_LeRobotService_RecordEpisode = new grpc.web.MethodDescriptor( + '/viam.service.lerobot.v1.LeRobotService/RecordEpisode', + grpc.web.MethodType.UNARY, + proto.viam.service.lerobot.v1.RecordEpisodeRequest, + proto.viam.service.lerobot.v1.RecordEpisodeResponse, + /** + * @param {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.viam.service.lerobot.v1.RecordEpisodeResponse.deserializeBinary +); + + +/** + * @param {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.RpcError, ?proto.viam.service.lerobot.v1.RecordEpisodeResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.viam.service.lerobot.v1.LeRobotServiceClient.prototype.recordEpisode = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/viam.service.lerobot.v1.LeRobotService/RecordEpisode', + request, + metadata || {}, + methodDescriptor_LeRobotService_RecordEpisode, + callback); +}; + + +/** + * @param {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} request The + * request proto + * @param {?Object=} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.viam.service.lerobot.v1.LeRobotServicePromiseClient.prototype.recordEpisode = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/viam.service.lerobot.v1.LeRobotService/RecordEpisode', + request, + metadata || {}, + methodDescriptor_LeRobotService_RecordEpisode); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.viam.service.lerobot.v1.ReplayEpisodeRequest, + * !proto.viam.service.lerobot.v1.ReplayEpisodeResponse>} + */ +const methodDescriptor_LeRobotService_ReplayEpisode = new grpc.web.MethodDescriptor( + '/viam.service.lerobot.v1.LeRobotService/ReplayEpisode', + grpc.web.MethodType.UNARY, + proto.viam.service.lerobot.v1.ReplayEpisodeRequest, + proto.viam.service.lerobot.v1.ReplayEpisodeResponse, + /** + * @param {!proto.viam.service.lerobot.v1.ReplayEpisodeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.viam.service.lerobot.v1.ReplayEpisodeResponse.deserializeBinary +); + + +/** + * @param {!proto.viam.service.lerobot.v1.ReplayEpisodeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.RpcError, ?proto.viam.service.lerobot.v1.ReplayEpisodeResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.viam.service.lerobot.v1.LeRobotServiceClient.prototype.replayEpisode = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/viam.service.lerobot.v1.LeRobotService/ReplayEpisode', + request, + metadata || {}, + methodDescriptor_LeRobotService_ReplayEpisode, + callback); +}; + + +/** + * @param {!proto.viam.service.lerobot.v1.ReplayEpisodeRequest} request The + * request proto + * @param {?Object=} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.viam.service.lerobot.v1.LeRobotServicePromiseClient.prototype.replayEpisode = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/viam.service.lerobot.v1.LeRobotService/ReplayEpisode', + request, + metadata || {}, + methodDescriptor_LeRobotService_ReplayEpisode); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.viam.service.lerobot.v1.StartTeleoperationRequest, + * !proto.viam.service.lerobot.v1.StartTeleoperationResponse>} + */ +const methodDescriptor_LeRobotService_StartTeleoperation = new grpc.web.MethodDescriptor( + '/viam.service.lerobot.v1.LeRobotService/StartTeleoperation', + grpc.web.MethodType.UNARY, + proto.viam.service.lerobot.v1.StartTeleoperationRequest, + proto.viam.service.lerobot.v1.StartTeleoperationResponse, + /** + * @param {!proto.viam.service.lerobot.v1.StartTeleoperationRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.viam.service.lerobot.v1.StartTeleoperationResponse.deserializeBinary +); + + +/** + * @param {!proto.viam.service.lerobot.v1.StartTeleoperationRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.RpcError, ?proto.viam.service.lerobot.v1.StartTeleoperationResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.viam.service.lerobot.v1.LeRobotServiceClient.prototype.startTeleoperation = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/viam.service.lerobot.v1.LeRobotService/StartTeleoperation', + request, + metadata || {}, + methodDescriptor_LeRobotService_StartTeleoperation, + callback); +}; + + +/** + * @param {!proto.viam.service.lerobot.v1.StartTeleoperationRequest} request The + * request proto + * @param {?Object=} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.viam.service.lerobot.v1.LeRobotServicePromiseClient.prototype.startTeleoperation = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/viam.service.lerobot.v1.LeRobotService/StartTeleoperation', + request, + metadata || {}, + methodDescriptor_LeRobotService_StartTeleoperation); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.viam.service.lerobot.v1.StopTeleoperationRequest, + * !proto.viam.service.lerobot.v1.StopTeleoperationResponse>} + */ +const methodDescriptor_LeRobotService_StopTeleoperation = new grpc.web.MethodDescriptor( + '/viam.service.lerobot.v1.LeRobotService/StopTeleoperation', + grpc.web.MethodType.UNARY, + proto.viam.service.lerobot.v1.StopTeleoperationRequest, + proto.viam.service.lerobot.v1.StopTeleoperationResponse, + /** + * @param {!proto.viam.service.lerobot.v1.StopTeleoperationRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.viam.service.lerobot.v1.StopTeleoperationResponse.deserializeBinary +); + + +/** + * @param {!proto.viam.service.lerobot.v1.StopTeleoperationRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.RpcError, ?proto.viam.service.lerobot.v1.StopTeleoperationResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.viam.service.lerobot.v1.LeRobotServiceClient.prototype.stopTeleoperation = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/viam.service.lerobot.v1.LeRobotService/StopTeleoperation', + request, + metadata || {}, + methodDescriptor_LeRobotService_StopTeleoperation, + callback); +}; + + +/** + * @param {!proto.viam.service.lerobot.v1.StopTeleoperationRequest} request The + * request proto + * @param {?Object=} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.viam.service.lerobot.v1.LeRobotServicePromiseClient.prototype.stopTeleoperation = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/viam.service.lerobot.v1.LeRobotService/StopTeleoperation', + request, + metadata || {}, + methodDescriptor_LeRobotService_StopTeleoperation); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.viam.service.lerobot.v1.LoadPolicyRequest, + * !proto.viam.service.lerobot.v1.LoadPolicyResponse>} + */ +const methodDescriptor_LeRobotService_LoadPolicy = new grpc.web.MethodDescriptor( + '/viam.service.lerobot.v1.LeRobotService/LoadPolicy', + grpc.web.MethodType.UNARY, + proto.viam.service.lerobot.v1.LoadPolicyRequest, + proto.viam.service.lerobot.v1.LoadPolicyResponse, + /** + * @param {!proto.viam.service.lerobot.v1.LoadPolicyRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.viam.service.lerobot.v1.LoadPolicyResponse.deserializeBinary +); + + +/** + * @param {!proto.viam.service.lerobot.v1.LoadPolicyRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.RpcError, ?proto.viam.service.lerobot.v1.LoadPolicyResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.viam.service.lerobot.v1.LeRobotServiceClient.prototype.loadPolicy = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/viam.service.lerobot.v1.LeRobotService/LoadPolicy', + request, + metadata || {}, + methodDescriptor_LeRobotService_LoadPolicy, + callback); +}; + + +/** + * @param {!proto.viam.service.lerobot.v1.LoadPolicyRequest} request The + * request proto + * @param {?Object=} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.viam.service.lerobot.v1.LeRobotServicePromiseClient.prototype.loadPolicy = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/viam.service.lerobot.v1.LeRobotService/LoadPolicy', + request, + metadata || {}, + methodDescriptor_LeRobotService_LoadPolicy); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest, + * !proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse>} + */ +const methodDescriptor_LeRobotService_RunPolicyEpisode = new grpc.web.MethodDescriptor( + '/viam.service.lerobot.v1.LeRobotService/RunPolicyEpisode', + grpc.web.MethodType.UNARY, + proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest, + proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse, + /** + * @param {!proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.deserializeBinary +); + + +/** + * @param {!proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.RpcError, ?proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.viam.service.lerobot.v1.LeRobotServiceClient.prototype.runPolicyEpisode = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/viam.service.lerobot.v1.LeRobotService/RunPolicyEpisode', + request, + metadata || {}, + methodDescriptor_LeRobotService_RunPolicyEpisode, + callback); +}; + + +/** + * @param {!proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest} request The + * request proto + * @param {?Object=} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.viam.service.lerobot.v1.LeRobotServicePromiseClient.prototype.runPolicyEpisode = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/viam.service.lerobot.v1.LeRobotService/RunPolicyEpisode', + request, + metadata || {}, + methodDescriptor_LeRobotService_RunPolicyEpisode); +}; + + +module.exports = proto.viam.service.lerobot.v1; + diff --git a/gen/js/service/lerobot/v1/lerobot_pb.d.ts b/gen/js/service/lerobot/v1/lerobot_pb.d.ts new file mode 100644 index 000000000..11dfa4dd3 --- /dev/null +++ b/gen/js/service/lerobot/v1/lerobot_pb.d.ts @@ -0,0 +1,509 @@ +// package: viam.service.lerobot.v1 +// file: service/lerobot/v1/lerobot.proto + +import * as jspb from "google-protobuf"; +import * as google_api_annotations_pb from "../../../google/api/annotations_pb"; +import * as google_protobuf_struct_pb from "google-protobuf/google/protobuf/struct_pb"; + +export class RecordEpisodeRequest extends jspb.Message { + getName(): string; + setName(value: string): void; + + getDatasetName(): string; + setDatasetName(value: string): void; + + getEpisodeIndex(): number; + setEpisodeIndex(value: number): void; + + getSource(): RecordingSourceMap[keyof RecordingSourceMap]; + setSource(value: RecordingSourceMap[keyof RecordingSourceMap]): void; + + getWarmupTimeS(): number; + setWarmupTimeS(value: number): void; + + getEpisodeTimeS(): number; + setEpisodeTimeS(value: number): void; + + getResetTimeS(): number; + setResetTimeS(value: number): void; + + getFps(): number; + setFps(value: number): void; + + clearTagsList(): void; + getTagsList(): Array; + setTagsList(value: Array): void; + addTags(value: string, index?: number): string; + + hasExtra(): boolean; + clearExtra(): void; + getExtra(): google_protobuf_struct_pb.Struct | undefined; + setExtra(value?: google_protobuf_struct_pb.Struct): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RecordEpisodeRequest.AsObject; + static toObject(includeInstance: boolean, msg: RecordEpisodeRequest): RecordEpisodeRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: RecordEpisodeRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RecordEpisodeRequest; + static deserializeBinaryFromReader(message: RecordEpisodeRequest, reader: jspb.BinaryReader): RecordEpisodeRequest; +} + +export namespace RecordEpisodeRequest { + export type AsObject = { + name: string, + datasetName: string, + episodeIndex: number, + source: RecordingSourceMap[keyof RecordingSourceMap], + warmupTimeS: number, + episodeTimeS: number, + resetTimeS: number, + fps: number, + tagsList: Array, + extra?: google_protobuf_struct_pb.Struct.AsObject, + } +} + +export class RecordEpisodeResponse extends jspb.Message { + getNumFrames(): number; + setNumFrames(value: number): void; + + getActualDurationS(): number; + setActualDurationS(value: number): void; + + getEpisodePath(): string; + setEpisodePath(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RecordEpisodeResponse.AsObject; + static toObject(includeInstance: boolean, msg: RecordEpisodeResponse): RecordEpisodeResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: RecordEpisodeResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RecordEpisodeResponse; + static deserializeBinaryFromReader(message: RecordEpisodeResponse, reader: jspb.BinaryReader): RecordEpisodeResponse; +} + +export namespace RecordEpisodeResponse { + export type AsObject = { + numFrames: number, + actualDurationS: number, + episodePath: string, + } +} + +export class StartRecordingRequest extends jspb.Message { + getName(): string; + setName(value: string): void; + + getDatasetName(): string; + setDatasetName(value: string): void; + + hasExtra(): boolean; + clearExtra(): void; + getExtra(): google_protobuf_struct_pb.Struct | undefined; + setExtra(value?: google_protobuf_struct_pb.Struct): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): StartRecordingRequest.AsObject; + static toObject(includeInstance: boolean, msg: StartRecordingRequest): StartRecordingRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: StartRecordingRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): StartRecordingRequest; + static deserializeBinaryFromReader(message: StartRecordingRequest, reader: jspb.BinaryReader): StartRecordingRequest; +} + +export namespace StartRecordingRequest { + export type AsObject = { + name: string, + datasetName: string, + extra?: google_protobuf_struct_pb.Struct.AsObject, + } +} + +export class StartRecordingResponse extends jspb.Message { + getSessionId(): string; + setSessionId(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): StartRecordingResponse.AsObject; + static toObject(includeInstance: boolean, msg: StartRecordingResponse): StartRecordingResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: StartRecordingResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): StartRecordingResponse; + static deserializeBinaryFromReader(message: StartRecordingResponse, reader: jspb.BinaryReader): StartRecordingResponse; +} + +export namespace StartRecordingResponse { + export type AsObject = { + sessionId: string, + } +} + +export class StopRecordingRequest extends jspb.Message { + getName(): string; + setName(value: string): void; + + getSessionId(): string; + setSessionId(value: string): void; + + hasExtra(): boolean; + clearExtra(): void; + getExtra(): google_protobuf_struct_pb.Struct | undefined; + setExtra(value?: google_protobuf_struct_pb.Struct): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): StopRecordingRequest.AsObject; + static toObject(includeInstance: boolean, msg: StopRecordingRequest): StopRecordingRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: StopRecordingRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): StopRecordingRequest; + static deserializeBinaryFromReader(message: StopRecordingRequest, reader: jspb.BinaryReader): StopRecordingRequest; +} + +export namespace StopRecordingRequest { + export type AsObject = { + name: string, + sessionId: string, + extra?: google_protobuf_struct_pb.Struct.AsObject, + } +} + +export class StopRecordingResponse extends jspb.Message { + getDurationS(): number; + setDurationS(value: number): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): StopRecordingResponse.AsObject; + static toObject(includeInstance: boolean, msg: StopRecordingResponse): StopRecordingResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: StopRecordingResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): StopRecordingResponse; + static deserializeBinaryFromReader(message: StopRecordingResponse, reader: jspb.BinaryReader): StopRecordingResponse; +} + +export namespace StopRecordingResponse { + export type AsObject = { + durationS: number, + } +} + +export class ReplayEpisodeRequest extends jspb.Message { + getName(): string; + setName(value: string): void; + + getDatasetName(): string; + setDatasetName(value: string): void; + + getEpisodeIndex(): number; + setEpisodeIndex(value: number): void; + + getFps(): number; + setFps(value: number): void; + + hasExtra(): boolean; + clearExtra(): void; + getExtra(): google_protobuf_struct_pb.Struct | undefined; + setExtra(value?: google_protobuf_struct_pb.Struct): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ReplayEpisodeRequest.AsObject; + static toObject(includeInstance: boolean, msg: ReplayEpisodeRequest): ReplayEpisodeRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ReplayEpisodeRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ReplayEpisodeRequest; + static deserializeBinaryFromReader(message: ReplayEpisodeRequest, reader: jspb.BinaryReader): ReplayEpisodeRequest; +} + +export namespace ReplayEpisodeRequest { + export type AsObject = { + name: string, + datasetName: string, + episodeIndex: number, + fps: number, + extra?: google_protobuf_struct_pb.Struct.AsObject, + } +} + +export class ReplayEpisodeResponse extends jspb.Message { + getNumFramesReplayed(): number; + setNumFramesReplayed(value: number): void; + + getDurationS(): number; + setDurationS(value: number): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ReplayEpisodeResponse.AsObject; + static toObject(includeInstance: boolean, msg: ReplayEpisodeResponse): ReplayEpisodeResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ReplayEpisodeResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ReplayEpisodeResponse; + static deserializeBinaryFromReader(message: ReplayEpisodeResponse, reader: jspb.BinaryReader): ReplayEpisodeResponse; +} + +export namespace ReplayEpisodeResponse { + export type AsObject = { + numFramesReplayed: number, + durationS: number, + } +} + +export class StartTeleoperationRequest extends jspb.Message { + getName(): string; + setName(value: string): void; + + getTeleopDeviceType(): string; + setTeleopDeviceType(value: string): void; + + getFps(): number; + setFps(value: number): void; + + getDisplayCameras(): boolean; + setDisplayCameras(value: boolean): void; + + hasExtra(): boolean; + clearExtra(): void; + getExtra(): google_protobuf_struct_pb.Struct | undefined; + setExtra(value?: google_protobuf_struct_pb.Struct): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): StartTeleoperationRequest.AsObject; + static toObject(includeInstance: boolean, msg: StartTeleoperationRequest): StartTeleoperationRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: StartTeleoperationRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): StartTeleoperationRequest; + static deserializeBinaryFromReader(message: StartTeleoperationRequest, reader: jspb.BinaryReader): StartTeleoperationRequest; +} + +export namespace StartTeleoperationRequest { + export type AsObject = { + name: string, + teleopDeviceType: string, + fps: number, + displayCameras: boolean, + extra?: google_protobuf_struct_pb.Struct.AsObject, + } +} + +export class StartTeleoperationResponse extends jspb.Message { + getSessionId(): string; + setSessionId(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): StartTeleoperationResponse.AsObject; + static toObject(includeInstance: boolean, msg: StartTeleoperationResponse): StartTeleoperationResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: StartTeleoperationResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): StartTeleoperationResponse; + static deserializeBinaryFromReader(message: StartTeleoperationResponse, reader: jspb.BinaryReader): StartTeleoperationResponse; +} + +export namespace StartTeleoperationResponse { + export type AsObject = { + sessionId: string, + } +} + +export class StopTeleoperationRequest extends jspb.Message { + getName(): string; + setName(value: string): void; + + getSessionId(): string; + setSessionId(value: string): void; + + hasExtra(): boolean; + clearExtra(): void; + getExtra(): google_protobuf_struct_pb.Struct | undefined; + setExtra(value?: google_protobuf_struct_pb.Struct): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): StopTeleoperationRequest.AsObject; + static toObject(includeInstance: boolean, msg: StopTeleoperationRequest): StopTeleoperationRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: StopTeleoperationRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): StopTeleoperationRequest; + static deserializeBinaryFromReader(message: StopTeleoperationRequest, reader: jspb.BinaryReader): StopTeleoperationRequest; +} + +export namespace StopTeleoperationRequest { + export type AsObject = { + name: string, + sessionId: string, + extra?: google_protobuf_struct_pb.Struct.AsObject, + } +} + +export class StopTeleoperationResponse extends jspb.Message { + getDurationS(): number; + setDurationS(value: number): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): StopTeleoperationResponse.AsObject; + static toObject(includeInstance: boolean, msg: StopTeleoperationResponse): StopTeleoperationResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: StopTeleoperationResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): StopTeleoperationResponse; + static deserializeBinaryFromReader(message: StopTeleoperationResponse, reader: jspb.BinaryReader): StopTeleoperationResponse; +} + +export namespace StopTeleoperationResponse { + export type AsObject = { + durationS: number, + } +} + +export class LoadPolicyRequest extends jspb.Message { + getName(): string; + setName(value: string): void; + + getPolicyRepoId(): string; + setPolicyRepoId(value: string): void; + + hasExtra(): boolean; + clearExtra(): void; + getExtra(): google_protobuf_struct_pb.Struct | undefined; + setExtra(value?: google_protobuf_struct_pb.Struct): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): LoadPolicyRequest.AsObject; + static toObject(includeInstance: boolean, msg: LoadPolicyRequest): LoadPolicyRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: LoadPolicyRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): LoadPolicyRequest; + static deserializeBinaryFromReader(message: LoadPolicyRequest, reader: jspb.BinaryReader): LoadPolicyRequest; +} + +export namespace LoadPolicyRequest { + export type AsObject = { + name: string, + policyRepoId: string, + extra?: google_protobuf_struct_pb.Struct.AsObject, + } +} + +export class LoadPolicyResponse extends jspb.Message { + getPolicyId(): string; + setPolicyId(value: string): void; + + getPolicyType(): string; + setPolicyType(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): LoadPolicyResponse.AsObject; + static toObject(includeInstance: boolean, msg: LoadPolicyResponse): LoadPolicyResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: LoadPolicyResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): LoadPolicyResponse; + static deserializeBinaryFromReader(message: LoadPolicyResponse, reader: jspb.BinaryReader): LoadPolicyResponse; +} + +export namespace LoadPolicyResponse { + export type AsObject = { + policyId: string, + policyType: string, + } +} + +export class RunPolicyEpisodeRequest extends jspb.Message { + getName(): string; + setName(value: string): void; + + getPolicyId(): string; + setPolicyId(value: string): void; + + getMaxSteps(): number; + setMaxSteps(value: number): void; + + getFps(): number; + setFps(value: number): void; + + getRecordToDataset(): boolean; + setRecordToDataset(value: boolean): void; + + getDatasetName(): string; + setDatasetName(value: string): void; + + getEpisodeIndex(): number; + setEpisodeIndex(value: number): void; + + hasExtra(): boolean; + clearExtra(): void; + getExtra(): google_protobuf_struct_pb.Struct | undefined; + setExtra(value?: google_protobuf_struct_pb.Struct): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RunPolicyEpisodeRequest.AsObject; + static toObject(includeInstance: boolean, msg: RunPolicyEpisodeRequest): RunPolicyEpisodeRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: RunPolicyEpisodeRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RunPolicyEpisodeRequest; + static deserializeBinaryFromReader(message: RunPolicyEpisodeRequest, reader: jspb.BinaryReader): RunPolicyEpisodeRequest; +} + +export namespace RunPolicyEpisodeRequest { + export type AsObject = { + name: string, + policyId: string, + maxSteps: number, + fps: number, + recordToDataset: boolean, + datasetName: string, + episodeIndex: number, + extra?: google_protobuf_struct_pb.Struct.AsObject, + } +} + +export class RunPolicyEpisodeResponse extends jspb.Message { + getNumSteps(): number; + setNumSteps(value: number): void; + + getDurationS(): number; + setDurationS(value: number): void; + + getSuccess(): boolean; + setSuccess(value: boolean): void; + + getEpisodePath(): string; + setEpisodePath(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RunPolicyEpisodeResponse.AsObject; + static toObject(includeInstance: boolean, msg: RunPolicyEpisodeResponse): RunPolicyEpisodeResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: RunPolicyEpisodeResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RunPolicyEpisodeResponse; + static deserializeBinaryFromReader(message: RunPolicyEpisodeResponse, reader: jspb.BinaryReader): RunPolicyEpisodeResponse; +} + +export namespace RunPolicyEpisodeResponse { + export type AsObject = { + numSteps: number, + durationS: number, + success: boolean, + episodePath: string, + } +} + +export interface RecordingSourceMap { + RECORDING_SOURCE_UNSPECIFIED: 0; + RECORDING_SOURCE_TELEOPERATION: 1; + RECORDING_SOURCE_POLICY: 2; +} + +export const RecordingSource: RecordingSourceMap; + diff --git a/gen/js/service/lerobot/v1/lerobot_pb.js b/gen/js/service/lerobot/v1/lerobot_pb.js new file mode 100644 index 000000000..dbffb19de --- /dev/null +++ b/gen/js/service/lerobot/v1/lerobot_pb.js @@ -0,0 +1,3828 @@ +// source: service/lerobot/v1/lerobot.proto +/** + * @fileoverview + * @enhanceable + * @suppress {missingRequire} reports error on implicit type usages. + * @suppress {messageConventions} JS Compiler reports an error if a variable or + * field starts with 'MSG_' and isn't a translatable message. + * @public + */ +// GENERATED CODE -- DO NOT EDIT! +/* eslint-disable */ +// @ts-nocheck + +var jspb = require('google-protobuf'); +var goog = jspb; +var global = (function() { return this || window || global || self || Function('return this')(); }).call(null); + +var google_api_annotations_pb = require('../../../google/api/annotations_pb.js'); +goog.object.extend(proto, google_api_annotations_pb); +var google_protobuf_struct_pb = require('google-protobuf/google/protobuf/struct_pb.js'); +goog.object.extend(proto, google_protobuf_struct_pb); +goog.exportSymbol('proto.viam.service.lerobot.v1.LoadPolicyRequest', null, global); +goog.exportSymbol('proto.viam.service.lerobot.v1.LoadPolicyResponse', null, global); +goog.exportSymbol('proto.viam.service.lerobot.v1.RecordEpisodeRequest', null, global); +goog.exportSymbol('proto.viam.service.lerobot.v1.RecordEpisodeResponse', null, global); +goog.exportSymbol('proto.viam.service.lerobot.v1.RecordingSource', null, global); +goog.exportSymbol('proto.viam.service.lerobot.v1.ReplayEpisodeRequest', null, global); +goog.exportSymbol('proto.viam.service.lerobot.v1.ReplayEpisodeResponse', null, global); +goog.exportSymbol('proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest', null, global); +goog.exportSymbol('proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse', null, global); +goog.exportSymbol('proto.viam.service.lerobot.v1.StartRecordingRequest', null, global); +goog.exportSymbol('proto.viam.service.lerobot.v1.StartRecordingResponse', null, global); +goog.exportSymbol('proto.viam.service.lerobot.v1.StartTeleoperationRequest', null, global); +goog.exportSymbol('proto.viam.service.lerobot.v1.StartTeleoperationResponse', null, global); +goog.exportSymbol('proto.viam.service.lerobot.v1.StopRecordingRequest', null, global); +goog.exportSymbol('proto.viam.service.lerobot.v1.StopRecordingResponse', null, global); +goog.exportSymbol('proto.viam.service.lerobot.v1.StopTeleoperationRequest', null, global); +goog.exportSymbol('proto.viam.service.lerobot.v1.StopTeleoperationResponse', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.viam.service.lerobot.v1.RecordEpisodeRequest.repeatedFields_, null); +}; +goog.inherits(proto.viam.service.lerobot.v1.RecordEpisodeRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.viam.service.lerobot.v1.RecordEpisodeRequest.displayName = 'proto.viam.service.lerobot.v1.RecordEpisodeRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.viam.service.lerobot.v1.RecordEpisodeResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.viam.service.lerobot.v1.RecordEpisodeResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.viam.service.lerobot.v1.RecordEpisodeResponse.displayName = 'proto.viam.service.lerobot.v1.RecordEpisodeResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.viam.service.lerobot.v1.StartRecordingRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.viam.service.lerobot.v1.StartRecordingRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.viam.service.lerobot.v1.StartRecordingRequest.displayName = 'proto.viam.service.lerobot.v1.StartRecordingRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.viam.service.lerobot.v1.StartRecordingResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.viam.service.lerobot.v1.StartRecordingResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.viam.service.lerobot.v1.StartRecordingResponse.displayName = 'proto.viam.service.lerobot.v1.StartRecordingResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.viam.service.lerobot.v1.StopRecordingRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.viam.service.lerobot.v1.StopRecordingRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.viam.service.lerobot.v1.StopRecordingRequest.displayName = 'proto.viam.service.lerobot.v1.StopRecordingRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.viam.service.lerobot.v1.StopRecordingResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.viam.service.lerobot.v1.StopRecordingResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.viam.service.lerobot.v1.StopRecordingResponse.displayName = 'proto.viam.service.lerobot.v1.StopRecordingResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.viam.service.lerobot.v1.ReplayEpisodeRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.viam.service.lerobot.v1.ReplayEpisodeRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.viam.service.lerobot.v1.ReplayEpisodeRequest.displayName = 'proto.viam.service.lerobot.v1.ReplayEpisodeRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.viam.service.lerobot.v1.ReplayEpisodeResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.viam.service.lerobot.v1.ReplayEpisodeResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.viam.service.lerobot.v1.ReplayEpisodeResponse.displayName = 'proto.viam.service.lerobot.v1.ReplayEpisodeResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.viam.service.lerobot.v1.StartTeleoperationRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.viam.service.lerobot.v1.StartTeleoperationRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.viam.service.lerobot.v1.StartTeleoperationRequest.displayName = 'proto.viam.service.lerobot.v1.StartTeleoperationRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.viam.service.lerobot.v1.StartTeleoperationResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.viam.service.lerobot.v1.StartTeleoperationResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.viam.service.lerobot.v1.StartTeleoperationResponse.displayName = 'proto.viam.service.lerobot.v1.StartTeleoperationResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.viam.service.lerobot.v1.StopTeleoperationRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.viam.service.lerobot.v1.StopTeleoperationRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.viam.service.lerobot.v1.StopTeleoperationRequest.displayName = 'proto.viam.service.lerobot.v1.StopTeleoperationRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.viam.service.lerobot.v1.StopTeleoperationResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.viam.service.lerobot.v1.StopTeleoperationResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.viam.service.lerobot.v1.StopTeleoperationResponse.displayName = 'proto.viam.service.lerobot.v1.StopTeleoperationResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.viam.service.lerobot.v1.LoadPolicyRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.viam.service.lerobot.v1.LoadPolicyRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.viam.service.lerobot.v1.LoadPolicyRequest.displayName = 'proto.viam.service.lerobot.v1.LoadPolicyRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.viam.service.lerobot.v1.LoadPolicyResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.viam.service.lerobot.v1.LoadPolicyResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.viam.service.lerobot.v1.LoadPolicyResponse.displayName = 'proto.viam.service.lerobot.v1.LoadPolicyResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.displayName = 'proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.displayName = 'proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse'; +} + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.repeatedFields_ = [9]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.toObject = function(opt_includeInstance) { + return proto.viam.service.lerobot.v1.RecordEpisodeRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + datasetName: jspb.Message.getFieldWithDefault(msg, 2, ""), + episodeIndex: jspb.Message.getFieldWithDefault(msg, 3, 0), + source: jspb.Message.getFieldWithDefault(msg, 4, 0), + warmupTimeS: jspb.Message.getFieldWithDefault(msg, 5, 0), + episodeTimeS: jspb.Message.getFieldWithDefault(msg, 6, 0), + resetTimeS: jspb.Message.getFieldWithDefault(msg, 7, 0), + fps: jspb.Message.getFieldWithDefault(msg, 8, 0), + tagsList: (f = jspb.Message.getRepeatedField(msg, 9)) == null ? undefined : f, + extra: (f = msg.getExtra()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.viam.service.lerobot.v1.RecordEpisodeRequest; + return proto.viam.service.lerobot.v1.RecordEpisodeRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setDatasetName(value); + break; + case 3: + var value = /** @type {number} */ (reader.readInt32()); + msg.setEpisodeIndex(value); + break; + case 4: + var value = /** @type {!proto.viam.service.lerobot.v1.RecordingSource} */ (reader.readEnum()); + msg.setSource(value); + break; + case 5: + var value = /** @type {number} */ (reader.readInt32()); + msg.setWarmupTimeS(value); + break; + case 6: + var value = /** @type {number} */ (reader.readInt32()); + msg.setEpisodeTimeS(value); + break; + case 7: + var value = /** @type {number} */ (reader.readInt32()); + msg.setResetTimeS(value); + break; + case 8: + var value = /** @type {number} */ (reader.readInt32()); + msg.setFps(value); + break; + case 9: + var value = /** @type {string} */ (reader.readString()); + msg.addTags(value); + break; + case 99: + var value = new google_protobuf_struct_pb.Struct; + reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader); + msg.setExtra(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.viam.service.lerobot.v1.RecordEpisodeRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getDatasetName(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getEpisodeIndex(); + if (f !== 0) { + writer.writeInt32( + 3, + f + ); + } + f = message.getSource(); + if (f !== 0.0) { + writer.writeEnum( + 4, + f + ); + } + f = message.getWarmupTimeS(); + if (f !== 0) { + writer.writeInt32( + 5, + f + ); + } + f = message.getEpisodeTimeS(); + if (f !== 0) { + writer.writeInt32( + 6, + f + ); + } + f = message.getResetTimeS(); + if (f !== 0) { + writer.writeInt32( + 7, + f + ); + } + f = message.getFps(); + if (f !== 0) { + writer.writeInt32( + 8, + f + ); + } + f = message.getTagsList(); + if (f.length > 0) { + writer.writeRepeatedString( + 9, + f + ); + } + f = message.getExtra(); + if (f != null) { + writer.writeMessage( + 99, + f, + google_protobuf_struct_pb.Struct.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string dataset_name = 2; + * @return {string} + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.getDatasetName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.setDatasetName = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional int32 episode_index = 3; + * @return {number} + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.getEpisodeIndex = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.setEpisodeIndex = function(value) { + return jspb.Message.setProto3IntField(this, 3, value); +}; + + +/** + * optional RecordingSource source = 4; + * @return {!proto.viam.service.lerobot.v1.RecordingSource} + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.getSource = function() { + return /** @type {!proto.viam.service.lerobot.v1.RecordingSource} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {!proto.viam.service.lerobot.v1.RecordingSource} value + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.setSource = function(value) { + return jspb.Message.setProto3EnumField(this, 4, value); +}; + + +/** + * optional int32 warmup_time_s = 5; + * @return {number} + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.getWarmupTimeS = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.setWarmupTimeS = function(value) { + return jspb.Message.setProto3IntField(this, 5, value); +}; + + +/** + * optional int32 episode_time_s = 6; + * @return {number} + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.getEpisodeTimeS = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 6, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.setEpisodeTimeS = function(value) { + return jspb.Message.setProto3IntField(this, 6, value); +}; + + +/** + * optional int32 reset_time_s = 7; + * @return {number} + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.getResetTimeS = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 7, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.setResetTimeS = function(value) { + return jspb.Message.setProto3IntField(this, 7, value); +}; + + +/** + * optional int32 fps = 8; + * @return {number} + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.getFps = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 8, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.setFps = function(value) { + return jspb.Message.setProto3IntField(this, 8, value); +}; + + +/** + * repeated string tags = 9; + * @return {!Array} + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.getTagsList = function() { + return /** @type {!Array} */ (jspb.Message.getRepeatedField(this, 9)); +}; + + +/** + * @param {!Array} value + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.setTagsList = function(value) { + return jspb.Message.setField(this, 9, value || []); +}; + + +/** + * @param {string} value + * @param {number=} opt_index + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.addTags = function(value, opt_index) { + return jspb.Message.addToRepeatedField(this, 9, value, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.clearTagsList = function() { + return this.setTagsList([]); +}; + + +/** + * optional google.protobuf.Struct extra = 99; + * @return {?proto.google.protobuf.Struct} + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.getExtra = function() { + return /** @type{?proto.google.protobuf.Struct} */ ( + jspb.Message.getWrapperField(this, google_protobuf_struct_pb.Struct, 99)); +}; + + +/** + * @param {?proto.google.protobuf.Struct|undefined} value + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} returns this +*/ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.setExtra = function(value) { + return jspb.Message.setWrapperField(this, 99, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.clearExtra = function() { + return this.setExtra(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.hasExtra = function() { + return jspb.Message.getField(this, 99) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.viam.service.lerobot.v1.RecordEpisodeResponse.prototype.toObject = function(opt_includeInstance) { + return proto.viam.service.lerobot.v1.RecordEpisodeResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.viam.service.lerobot.v1.RecordEpisodeResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.RecordEpisodeResponse.toObject = function(includeInstance, msg) { + var f, obj = { + numFrames: jspb.Message.getFieldWithDefault(msg, 1, 0), + actualDurationS: jspb.Message.getFloatingPointFieldWithDefault(msg, 2, 0.0), + episodePath: jspb.Message.getFieldWithDefault(msg, 3, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeResponse} + */ +proto.viam.service.lerobot.v1.RecordEpisodeResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.viam.service.lerobot.v1.RecordEpisodeResponse; + return proto.viam.service.lerobot.v1.RecordEpisodeResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.viam.service.lerobot.v1.RecordEpisodeResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeResponse} + */ +proto.viam.service.lerobot.v1.RecordEpisodeResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt32()); + msg.setNumFrames(value); + break; + case 2: + var value = /** @type {number} */ (reader.readFloat()); + msg.setActualDurationS(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setEpisodePath(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.viam.service.lerobot.v1.RecordEpisodeResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.viam.service.lerobot.v1.RecordEpisodeResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.viam.service.lerobot.v1.RecordEpisodeResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.RecordEpisodeResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getNumFrames(); + if (f !== 0) { + writer.writeInt32( + 1, + f + ); + } + f = message.getActualDurationS(); + if (f !== 0.0) { + writer.writeFloat( + 2, + f + ); + } + f = message.getEpisodePath(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } +}; + + +/** + * optional int32 num_frames = 1; + * @return {number} + */ +proto.viam.service.lerobot.v1.RecordEpisodeResponse.prototype.getNumFrames = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeResponse} returns this + */ +proto.viam.service.lerobot.v1.RecordEpisodeResponse.prototype.setNumFrames = function(value) { + return jspb.Message.setProto3IntField(this, 1, value); +}; + + +/** + * optional float actual_duration_s = 2; + * @return {number} + */ +proto.viam.service.lerobot.v1.RecordEpisodeResponse.prototype.getActualDurationS = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 2, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeResponse} returns this + */ +proto.viam.service.lerobot.v1.RecordEpisodeResponse.prototype.setActualDurationS = function(value) { + return jspb.Message.setProto3FloatField(this, 2, value); +}; + + +/** + * optional string episode_path = 3; + * @return {string} + */ +proto.viam.service.lerobot.v1.RecordEpisodeResponse.prototype.getEpisodePath = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeResponse} returns this + */ +proto.viam.service.lerobot.v1.RecordEpisodeResponse.prototype.setEpisodePath = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.viam.service.lerobot.v1.StartRecordingRequest.prototype.toObject = function(opt_includeInstance) { + return proto.viam.service.lerobot.v1.StartRecordingRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.viam.service.lerobot.v1.StartRecordingRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.StartRecordingRequest.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + datasetName: jspb.Message.getFieldWithDefault(msg, 2, ""), + extra: (f = msg.getExtra()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.viam.service.lerobot.v1.StartRecordingRequest} + */ +proto.viam.service.lerobot.v1.StartRecordingRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.viam.service.lerobot.v1.StartRecordingRequest; + return proto.viam.service.lerobot.v1.StartRecordingRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.viam.service.lerobot.v1.StartRecordingRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.viam.service.lerobot.v1.StartRecordingRequest} + */ +proto.viam.service.lerobot.v1.StartRecordingRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setDatasetName(value); + break; + case 99: + var value = new google_protobuf_struct_pb.Struct; + reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader); + msg.setExtra(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.viam.service.lerobot.v1.StartRecordingRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.viam.service.lerobot.v1.StartRecordingRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.viam.service.lerobot.v1.StartRecordingRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.StartRecordingRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getDatasetName(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getExtra(); + if (f != null) { + writer.writeMessage( + 99, + f, + google_protobuf_struct_pb.Struct.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.viam.service.lerobot.v1.StartRecordingRequest.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.StartRecordingRequest} returns this + */ +proto.viam.service.lerobot.v1.StartRecordingRequest.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string dataset_name = 2; + * @return {string} + */ +proto.viam.service.lerobot.v1.StartRecordingRequest.prototype.getDatasetName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.StartRecordingRequest} returns this + */ +proto.viam.service.lerobot.v1.StartRecordingRequest.prototype.setDatasetName = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional google.protobuf.Struct extra = 99; + * @return {?proto.google.protobuf.Struct} + */ +proto.viam.service.lerobot.v1.StartRecordingRequest.prototype.getExtra = function() { + return /** @type{?proto.google.protobuf.Struct} */ ( + jspb.Message.getWrapperField(this, google_protobuf_struct_pb.Struct, 99)); +}; + + +/** + * @param {?proto.google.protobuf.Struct|undefined} value + * @return {!proto.viam.service.lerobot.v1.StartRecordingRequest} returns this +*/ +proto.viam.service.lerobot.v1.StartRecordingRequest.prototype.setExtra = function(value) { + return jspb.Message.setWrapperField(this, 99, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.viam.service.lerobot.v1.StartRecordingRequest} returns this + */ +proto.viam.service.lerobot.v1.StartRecordingRequest.prototype.clearExtra = function() { + return this.setExtra(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.viam.service.lerobot.v1.StartRecordingRequest.prototype.hasExtra = function() { + return jspb.Message.getField(this, 99) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.viam.service.lerobot.v1.StartRecordingResponse.prototype.toObject = function(opt_includeInstance) { + return proto.viam.service.lerobot.v1.StartRecordingResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.viam.service.lerobot.v1.StartRecordingResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.StartRecordingResponse.toObject = function(includeInstance, msg) { + var f, obj = { + sessionId: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.viam.service.lerobot.v1.StartRecordingResponse} + */ +proto.viam.service.lerobot.v1.StartRecordingResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.viam.service.lerobot.v1.StartRecordingResponse; + return proto.viam.service.lerobot.v1.StartRecordingResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.viam.service.lerobot.v1.StartRecordingResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.viam.service.lerobot.v1.StartRecordingResponse} + */ +proto.viam.service.lerobot.v1.StartRecordingResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setSessionId(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.viam.service.lerobot.v1.StartRecordingResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.viam.service.lerobot.v1.StartRecordingResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.viam.service.lerobot.v1.StartRecordingResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.StartRecordingResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getSessionId(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string session_id = 1; + * @return {string} + */ +proto.viam.service.lerobot.v1.StartRecordingResponse.prototype.getSessionId = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.StartRecordingResponse} returns this + */ +proto.viam.service.lerobot.v1.StartRecordingResponse.prototype.setSessionId = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.viam.service.lerobot.v1.StopRecordingRequest.prototype.toObject = function(opt_includeInstance) { + return proto.viam.service.lerobot.v1.StopRecordingRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.viam.service.lerobot.v1.StopRecordingRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.StopRecordingRequest.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + sessionId: jspb.Message.getFieldWithDefault(msg, 2, ""), + extra: (f = msg.getExtra()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.viam.service.lerobot.v1.StopRecordingRequest} + */ +proto.viam.service.lerobot.v1.StopRecordingRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.viam.service.lerobot.v1.StopRecordingRequest; + return proto.viam.service.lerobot.v1.StopRecordingRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.viam.service.lerobot.v1.StopRecordingRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.viam.service.lerobot.v1.StopRecordingRequest} + */ +proto.viam.service.lerobot.v1.StopRecordingRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setSessionId(value); + break; + case 99: + var value = new google_protobuf_struct_pb.Struct; + reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader); + msg.setExtra(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.viam.service.lerobot.v1.StopRecordingRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.viam.service.lerobot.v1.StopRecordingRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.viam.service.lerobot.v1.StopRecordingRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.StopRecordingRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getSessionId(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getExtra(); + if (f != null) { + writer.writeMessage( + 99, + f, + google_protobuf_struct_pb.Struct.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.viam.service.lerobot.v1.StopRecordingRequest.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.StopRecordingRequest} returns this + */ +proto.viam.service.lerobot.v1.StopRecordingRequest.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string session_id = 2; + * @return {string} + */ +proto.viam.service.lerobot.v1.StopRecordingRequest.prototype.getSessionId = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.StopRecordingRequest} returns this + */ +proto.viam.service.lerobot.v1.StopRecordingRequest.prototype.setSessionId = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional google.protobuf.Struct extra = 99; + * @return {?proto.google.protobuf.Struct} + */ +proto.viam.service.lerobot.v1.StopRecordingRequest.prototype.getExtra = function() { + return /** @type{?proto.google.protobuf.Struct} */ ( + jspb.Message.getWrapperField(this, google_protobuf_struct_pb.Struct, 99)); +}; + + +/** + * @param {?proto.google.protobuf.Struct|undefined} value + * @return {!proto.viam.service.lerobot.v1.StopRecordingRequest} returns this +*/ +proto.viam.service.lerobot.v1.StopRecordingRequest.prototype.setExtra = function(value) { + return jspb.Message.setWrapperField(this, 99, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.viam.service.lerobot.v1.StopRecordingRequest} returns this + */ +proto.viam.service.lerobot.v1.StopRecordingRequest.prototype.clearExtra = function() { + return this.setExtra(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.viam.service.lerobot.v1.StopRecordingRequest.prototype.hasExtra = function() { + return jspb.Message.getField(this, 99) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.viam.service.lerobot.v1.StopRecordingResponse.prototype.toObject = function(opt_includeInstance) { + return proto.viam.service.lerobot.v1.StopRecordingResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.viam.service.lerobot.v1.StopRecordingResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.StopRecordingResponse.toObject = function(includeInstance, msg) { + var f, obj = { + durationS: jspb.Message.getFloatingPointFieldWithDefault(msg, 1, 0.0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.viam.service.lerobot.v1.StopRecordingResponse} + */ +proto.viam.service.lerobot.v1.StopRecordingResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.viam.service.lerobot.v1.StopRecordingResponse; + return proto.viam.service.lerobot.v1.StopRecordingResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.viam.service.lerobot.v1.StopRecordingResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.viam.service.lerobot.v1.StopRecordingResponse} + */ +proto.viam.service.lerobot.v1.StopRecordingResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readFloat()); + msg.setDurationS(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.viam.service.lerobot.v1.StopRecordingResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.viam.service.lerobot.v1.StopRecordingResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.viam.service.lerobot.v1.StopRecordingResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.StopRecordingResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getDurationS(); + if (f !== 0.0) { + writer.writeFloat( + 1, + f + ); + } +}; + + +/** + * optional float duration_s = 1; + * @return {number} + */ +proto.viam.service.lerobot.v1.StopRecordingResponse.prototype.getDurationS = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 1, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.viam.service.lerobot.v1.StopRecordingResponse} returns this + */ +proto.viam.service.lerobot.v1.StopRecordingResponse.prototype.setDurationS = function(value) { + return jspb.Message.setProto3FloatField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.viam.service.lerobot.v1.ReplayEpisodeRequest.prototype.toObject = function(opt_includeInstance) { + return proto.viam.service.lerobot.v1.ReplayEpisodeRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.viam.service.lerobot.v1.ReplayEpisodeRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.ReplayEpisodeRequest.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + datasetName: jspb.Message.getFieldWithDefault(msg, 2, ""), + episodeIndex: jspb.Message.getFieldWithDefault(msg, 3, 0), + fps: jspb.Message.getFieldWithDefault(msg, 4, 0), + extra: (f = msg.getExtra()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.viam.service.lerobot.v1.ReplayEpisodeRequest} + */ +proto.viam.service.lerobot.v1.ReplayEpisodeRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.viam.service.lerobot.v1.ReplayEpisodeRequest; + return proto.viam.service.lerobot.v1.ReplayEpisodeRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.viam.service.lerobot.v1.ReplayEpisodeRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.viam.service.lerobot.v1.ReplayEpisodeRequest} + */ +proto.viam.service.lerobot.v1.ReplayEpisodeRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setDatasetName(value); + break; + case 3: + var value = /** @type {number} */ (reader.readInt32()); + msg.setEpisodeIndex(value); + break; + case 4: + var value = /** @type {number} */ (reader.readInt32()); + msg.setFps(value); + break; + case 99: + var value = new google_protobuf_struct_pb.Struct; + reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader); + msg.setExtra(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.viam.service.lerobot.v1.ReplayEpisodeRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.viam.service.lerobot.v1.ReplayEpisodeRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.viam.service.lerobot.v1.ReplayEpisodeRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.ReplayEpisodeRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getDatasetName(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getEpisodeIndex(); + if (f !== 0) { + writer.writeInt32( + 3, + f + ); + } + f = message.getFps(); + if (f !== 0) { + writer.writeInt32( + 4, + f + ); + } + f = message.getExtra(); + if (f != null) { + writer.writeMessage( + 99, + f, + google_protobuf_struct_pb.Struct.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.viam.service.lerobot.v1.ReplayEpisodeRequest.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.ReplayEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.ReplayEpisodeRequest.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string dataset_name = 2; + * @return {string} + */ +proto.viam.service.lerobot.v1.ReplayEpisodeRequest.prototype.getDatasetName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.ReplayEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.ReplayEpisodeRequest.prototype.setDatasetName = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional int32 episode_index = 3; + * @return {number} + */ +proto.viam.service.lerobot.v1.ReplayEpisodeRequest.prototype.getEpisodeIndex = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.viam.service.lerobot.v1.ReplayEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.ReplayEpisodeRequest.prototype.setEpisodeIndex = function(value) { + return jspb.Message.setProto3IntField(this, 3, value); +}; + + +/** + * optional int32 fps = 4; + * @return {number} + */ +proto.viam.service.lerobot.v1.ReplayEpisodeRequest.prototype.getFps = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.viam.service.lerobot.v1.ReplayEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.ReplayEpisodeRequest.prototype.setFps = function(value) { + return jspb.Message.setProto3IntField(this, 4, value); +}; + + +/** + * optional google.protobuf.Struct extra = 99; + * @return {?proto.google.protobuf.Struct} + */ +proto.viam.service.lerobot.v1.ReplayEpisodeRequest.prototype.getExtra = function() { + return /** @type{?proto.google.protobuf.Struct} */ ( + jspb.Message.getWrapperField(this, google_protobuf_struct_pb.Struct, 99)); +}; + + +/** + * @param {?proto.google.protobuf.Struct|undefined} value + * @return {!proto.viam.service.lerobot.v1.ReplayEpisodeRequest} returns this +*/ +proto.viam.service.lerobot.v1.ReplayEpisodeRequest.prototype.setExtra = function(value) { + return jspb.Message.setWrapperField(this, 99, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.viam.service.lerobot.v1.ReplayEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.ReplayEpisodeRequest.prototype.clearExtra = function() { + return this.setExtra(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.viam.service.lerobot.v1.ReplayEpisodeRequest.prototype.hasExtra = function() { + return jspb.Message.getField(this, 99) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.viam.service.lerobot.v1.ReplayEpisodeResponse.prototype.toObject = function(opt_includeInstance) { + return proto.viam.service.lerobot.v1.ReplayEpisodeResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.viam.service.lerobot.v1.ReplayEpisodeResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.ReplayEpisodeResponse.toObject = function(includeInstance, msg) { + var f, obj = { + numFramesReplayed: jspb.Message.getFieldWithDefault(msg, 1, 0), + durationS: jspb.Message.getFloatingPointFieldWithDefault(msg, 2, 0.0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.viam.service.lerobot.v1.ReplayEpisodeResponse} + */ +proto.viam.service.lerobot.v1.ReplayEpisodeResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.viam.service.lerobot.v1.ReplayEpisodeResponse; + return proto.viam.service.lerobot.v1.ReplayEpisodeResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.viam.service.lerobot.v1.ReplayEpisodeResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.viam.service.lerobot.v1.ReplayEpisodeResponse} + */ +proto.viam.service.lerobot.v1.ReplayEpisodeResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt32()); + msg.setNumFramesReplayed(value); + break; + case 2: + var value = /** @type {number} */ (reader.readFloat()); + msg.setDurationS(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.viam.service.lerobot.v1.ReplayEpisodeResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.viam.service.lerobot.v1.ReplayEpisodeResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.viam.service.lerobot.v1.ReplayEpisodeResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.ReplayEpisodeResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getNumFramesReplayed(); + if (f !== 0) { + writer.writeInt32( + 1, + f + ); + } + f = message.getDurationS(); + if (f !== 0.0) { + writer.writeFloat( + 2, + f + ); + } +}; + + +/** + * optional int32 num_frames_replayed = 1; + * @return {number} + */ +proto.viam.service.lerobot.v1.ReplayEpisodeResponse.prototype.getNumFramesReplayed = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.viam.service.lerobot.v1.ReplayEpisodeResponse} returns this + */ +proto.viam.service.lerobot.v1.ReplayEpisodeResponse.prototype.setNumFramesReplayed = function(value) { + return jspb.Message.setProto3IntField(this, 1, value); +}; + + +/** + * optional float duration_s = 2; + * @return {number} + */ +proto.viam.service.lerobot.v1.ReplayEpisodeResponse.prototype.getDurationS = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 2, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.viam.service.lerobot.v1.ReplayEpisodeResponse} returns this + */ +proto.viam.service.lerobot.v1.ReplayEpisodeResponse.prototype.setDurationS = function(value) { + return jspb.Message.setProto3FloatField(this, 2, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.viam.service.lerobot.v1.StartTeleoperationRequest.prototype.toObject = function(opt_includeInstance) { + return proto.viam.service.lerobot.v1.StartTeleoperationRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.viam.service.lerobot.v1.StartTeleoperationRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.StartTeleoperationRequest.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + teleopDeviceType: jspb.Message.getFieldWithDefault(msg, 2, ""), + fps: jspb.Message.getFieldWithDefault(msg, 3, 0), + displayCameras: jspb.Message.getBooleanFieldWithDefault(msg, 4, false), + extra: (f = msg.getExtra()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.viam.service.lerobot.v1.StartTeleoperationRequest} + */ +proto.viam.service.lerobot.v1.StartTeleoperationRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.viam.service.lerobot.v1.StartTeleoperationRequest; + return proto.viam.service.lerobot.v1.StartTeleoperationRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.viam.service.lerobot.v1.StartTeleoperationRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.viam.service.lerobot.v1.StartTeleoperationRequest} + */ +proto.viam.service.lerobot.v1.StartTeleoperationRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setTeleopDeviceType(value); + break; + case 3: + var value = /** @type {number} */ (reader.readInt32()); + msg.setFps(value); + break; + case 4: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setDisplayCameras(value); + break; + case 99: + var value = new google_protobuf_struct_pb.Struct; + reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader); + msg.setExtra(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.viam.service.lerobot.v1.StartTeleoperationRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.viam.service.lerobot.v1.StartTeleoperationRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.viam.service.lerobot.v1.StartTeleoperationRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.StartTeleoperationRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getTeleopDeviceType(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getFps(); + if (f !== 0) { + writer.writeInt32( + 3, + f + ); + } + f = message.getDisplayCameras(); + if (f) { + writer.writeBool( + 4, + f + ); + } + f = message.getExtra(); + if (f != null) { + writer.writeMessage( + 99, + f, + google_protobuf_struct_pb.Struct.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.viam.service.lerobot.v1.StartTeleoperationRequest.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.StartTeleoperationRequest} returns this + */ +proto.viam.service.lerobot.v1.StartTeleoperationRequest.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string teleop_device_type = 2; + * @return {string} + */ +proto.viam.service.lerobot.v1.StartTeleoperationRequest.prototype.getTeleopDeviceType = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.StartTeleoperationRequest} returns this + */ +proto.viam.service.lerobot.v1.StartTeleoperationRequest.prototype.setTeleopDeviceType = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional int32 fps = 3; + * @return {number} + */ +proto.viam.service.lerobot.v1.StartTeleoperationRequest.prototype.getFps = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.viam.service.lerobot.v1.StartTeleoperationRequest} returns this + */ +proto.viam.service.lerobot.v1.StartTeleoperationRequest.prototype.setFps = function(value) { + return jspb.Message.setProto3IntField(this, 3, value); +}; + + +/** + * optional bool display_cameras = 4; + * @return {boolean} + */ +proto.viam.service.lerobot.v1.StartTeleoperationRequest.prototype.getDisplayCameras = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.viam.service.lerobot.v1.StartTeleoperationRequest} returns this + */ +proto.viam.service.lerobot.v1.StartTeleoperationRequest.prototype.setDisplayCameras = function(value) { + return jspb.Message.setProto3BooleanField(this, 4, value); +}; + + +/** + * optional google.protobuf.Struct extra = 99; + * @return {?proto.google.protobuf.Struct} + */ +proto.viam.service.lerobot.v1.StartTeleoperationRequest.prototype.getExtra = function() { + return /** @type{?proto.google.protobuf.Struct} */ ( + jspb.Message.getWrapperField(this, google_protobuf_struct_pb.Struct, 99)); +}; + + +/** + * @param {?proto.google.protobuf.Struct|undefined} value + * @return {!proto.viam.service.lerobot.v1.StartTeleoperationRequest} returns this +*/ +proto.viam.service.lerobot.v1.StartTeleoperationRequest.prototype.setExtra = function(value) { + return jspb.Message.setWrapperField(this, 99, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.viam.service.lerobot.v1.StartTeleoperationRequest} returns this + */ +proto.viam.service.lerobot.v1.StartTeleoperationRequest.prototype.clearExtra = function() { + return this.setExtra(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.viam.service.lerobot.v1.StartTeleoperationRequest.prototype.hasExtra = function() { + return jspb.Message.getField(this, 99) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.viam.service.lerobot.v1.StartTeleoperationResponse.prototype.toObject = function(opt_includeInstance) { + return proto.viam.service.lerobot.v1.StartTeleoperationResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.viam.service.lerobot.v1.StartTeleoperationResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.StartTeleoperationResponse.toObject = function(includeInstance, msg) { + var f, obj = { + sessionId: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.viam.service.lerobot.v1.StartTeleoperationResponse} + */ +proto.viam.service.lerobot.v1.StartTeleoperationResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.viam.service.lerobot.v1.StartTeleoperationResponse; + return proto.viam.service.lerobot.v1.StartTeleoperationResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.viam.service.lerobot.v1.StartTeleoperationResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.viam.service.lerobot.v1.StartTeleoperationResponse} + */ +proto.viam.service.lerobot.v1.StartTeleoperationResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setSessionId(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.viam.service.lerobot.v1.StartTeleoperationResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.viam.service.lerobot.v1.StartTeleoperationResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.viam.service.lerobot.v1.StartTeleoperationResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.StartTeleoperationResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getSessionId(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string session_id = 1; + * @return {string} + */ +proto.viam.service.lerobot.v1.StartTeleoperationResponse.prototype.getSessionId = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.StartTeleoperationResponse} returns this + */ +proto.viam.service.lerobot.v1.StartTeleoperationResponse.prototype.setSessionId = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.viam.service.lerobot.v1.StopTeleoperationRequest.prototype.toObject = function(opt_includeInstance) { + return proto.viam.service.lerobot.v1.StopTeleoperationRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.viam.service.lerobot.v1.StopTeleoperationRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.StopTeleoperationRequest.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + sessionId: jspb.Message.getFieldWithDefault(msg, 2, ""), + extra: (f = msg.getExtra()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.viam.service.lerobot.v1.StopTeleoperationRequest} + */ +proto.viam.service.lerobot.v1.StopTeleoperationRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.viam.service.lerobot.v1.StopTeleoperationRequest; + return proto.viam.service.lerobot.v1.StopTeleoperationRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.viam.service.lerobot.v1.StopTeleoperationRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.viam.service.lerobot.v1.StopTeleoperationRequest} + */ +proto.viam.service.lerobot.v1.StopTeleoperationRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setSessionId(value); + break; + case 99: + var value = new google_protobuf_struct_pb.Struct; + reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader); + msg.setExtra(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.viam.service.lerobot.v1.StopTeleoperationRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.viam.service.lerobot.v1.StopTeleoperationRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.viam.service.lerobot.v1.StopTeleoperationRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.StopTeleoperationRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getSessionId(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getExtra(); + if (f != null) { + writer.writeMessage( + 99, + f, + google_protobuf_struct_pb.Struct.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.viam.service.lerobot.v1.StopTeleoperationRequest.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.StopTeleoperationRequest} returns this + */ +proto.viam.service.lerobot.v1.StopTeleoperationRequest.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string session_id = 2; + * @return {string} + */ +proto.viam.service.lerobot.v1.StopTeleoperationRequest.prototype.getSessionId = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.StopTeleoperationRequest} returns this + */ +proto.viam.service.lerobot.v1.StopTeleoperationRequest.prototype.setSessionId = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional google.protobuf.Struct extra = 99; + * @return {?proto.google.protobuf.Struct} + */ +proto.viam.service.lerobot.v1.StopTeleoperationRequest.prototype.getExtra = function() { + return /** @type{?proto.google.protobuf.Struct} */ ( + jspb.Message.getWrapperField(this, google_protobuf_struct_pb.Struct, 99)); +}; + + +/** + * @param {?proto.google.protobuf.Struct|undefined} value + * @return {!proto.viam.service.lerobot.v1.StopTeleoperationRequest} returns this +*/ +proto.viam.service.lerobot.v1.StopTeleoperationRequest.prototype.setExtra = function(value) { + return jspb.Message.setWrapperField(this, 99, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.viam.service.lerobot.v1.StopTeleoperationRequest} returns this + */ +proto.viam.service.lerobot.v1.StopTeleoperationRequest.prototype.clearExtra = function() { + return this.setExtra(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.viam.service.lerobot.v1.StopTeleoperationRequest.prototype.hasExtra = function() { + return jspb.Message.getField(this, 99) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.viam.service.lerobot.v1.StopTeleoperationResponse.prototype.toObject = function(opt_includeInstance) { + return proto.viam.service.lerobot.v1.StopTeleoperationResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.viam.service.lerobot.v1.StopTeleoperationResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.StopTeleoperationResponse.toObject = function(includeInstance, msg) { + var f, obj = { + durationS: jspb.Message.getFloatingPointFieldWithDefault(msg, 1, 0.0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.viam.service.lerobot.v1.StopTeleoperationResponse} + */ +proto.viam.service.lerobot.v1.StopTeleoperationResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.viam.service.lerobot.v1.StopTeleoperationResponse; + return proto.viam.service.lerobot.v1.StopTeleoperationResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.viam.service.lerobot.v1.StopTeleoperationResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.viam.service.lerobot.v1.StopTeleoperationResponse} + */ +proto.viam.service.lerobot.v1.StopTeleoperationResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readFloat()); + msg.setDurationS(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.viam.service.lerobot.v1.StopTeleoperationResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.viam.service.lerobot.v1.StopTeleoperationResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.viam.service.lerobot.v1.StopTeleoperationResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.StopTeleoperationResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getDurationS(); + if (f !== 0.0) { + writer.writeFloat( + 1, + f + ); + } +}; + + +/** + * optional float duration_s = 1; + * @return {number} + */ +proto.viam.service.lerobot.v1.StopTeleoperationResponse.prototype.getDurationS = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 1, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.viam.service.lerobot.v1.StopTeleoperationResponse} returns this + */ +proto.viam.service.lerobot.v1.StopTeleoperationResponse.prototype.setDurationS = function(value) { + return jspb.Message.setProto3FloatField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.viam.service.lerobot.v1.LoadPolicyRequest.prototype.toObject = function(opt_includeInstance) { + return proto.viam.service.lerobot.v1.LoadPolicyRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.viam.service.lerobot.v1.LoadPolicyRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.LoadPolicyRequest.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + policyRepoId: jspb.Message.getFieldWithDefault(msg, 2, ""), + extra: (f = msg.getExtra()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.viam.service.lerobot.v1.LoadPolicyRequest} + */ +proto.viam.service.lerobot.v1.LoadPolicyRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.viam.service.lerobot.v1.LoadPolicyRequest; + return proto.viam.service.lerobot.v1.LoadPolicyRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.viam.service.lerobot.v1.LoadPolicyRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.viam.service.lerobot.v1.LoadPolicyRequest} + */ +proto.viam.service.lerobot.v1.LoadPolicyRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setPolicyRepoId(value); + break; + case 99: + var value = new google_protobuf_struct_pb.Struct; + reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader); + msg.setExtra(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.viam.service.lerobot.v1.LoadPolicyRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.viam.service.lerobot.v1.LoadPolicyRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.viam.service.lerobot.v1.LoadPolicyRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.LoadPolicyRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getPolicyRepoId(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getExtra(); + if (f != null) { + writer.writeMessage( + 99, + f, + google_protobuf_struct_pb.Struct.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.viam.service.lerobot.v1.LoadPolicyRequest.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.LoadPolicyRequest} returns this + */ +proto.viam.service.lerobot.v1.LoadPolicyRequest.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string policy_repo_id = 2; + * @return {string} + */ +proto.viam.service.lerobot.v1.LoadPolicyRequest.prototype.getPolicyRepoId = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.LoadPolicyRequest} returns this + */ +proto.viam.service.lerobot.v1.LoadPolicyRequest.prototype.setPolicyRepoId = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional google.protobuf.Struct extra = 99; + * @return {?proto.google.protobuf.Struct} + */ +proto.viam.service.lerobot.v1.LoadPolicyRequest.prototype.getExtra = function() { + return /** @type{?proto.google.protobuf.Struct} */ ( + jspb.Message.getWrapperField(this, google_protobuf_struct_pb.Struct, 99)); +}; + + +/** + * @param {?proto.google.protobuf.Struct|undefined} value + * @return {!proto.viam.service.lerobot.v1.LoadPolicyRequest} returns this +*/ +proto.viam.service.lerobot.v1.LoadPolicyRequest.prototype.setExtra = function(value) { + return jspb.Message.setWrapperField(this, 99, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.viam.service.lerobot.v1.LoadPolicyRequest} returns this + */ +proto.viam.service.lerobot.v1.LoadPolicyRequest.prototype.clearExtra = function() { + return this.setExtra(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.viam.service.lerobot.v1.LoadPolicyRequest.prototype.hasExtra = function() { + return jspb.Message.getField(this, 99) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.viam.service.lerobot.v1.LoadPolicyResponse.prototype.toObject = function(opt_includeInstance) { + return proto.viam.service.lerobot.v1.LoadPolicyResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.viam.service.lerobot.v1.LoadPolicyResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.LoadPolicyResponse.toObject = function(includeInstance, msg) { + var f, obj = { + policyId: jspb.Message.getFieldWithDefault(msg, 1, ""), + policyType: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.viam.service.lerobot.v1.LoadPolicyResponse} + */ +proto.viam.service.lerobot.v1.LoadPolicyResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.viam.service.lerobot.v1.LoadPolicyResponse; + return proto.viam.service.lerobot.v1.LoadPolicyResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.viam.service.lerobot.v1.LoadPolicyResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.viam.service.lerobot.v1.LoadPolicyResponse} + */ +proto.viam.service.lerobot.v1.LoadPolicyResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setPolicyId(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setPolicyType(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.viam.service.lerobot.v1.LoadPolicyResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.viam.service.lerobot.v1.LoadPolicyResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.viam.service.lerobot.v1.LoadPolicyResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.LoadPolicyResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getPolicyId(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getPolicyType(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional string policy_id = 1; + * @return {string} + */ +proto.viam.service.lerobot.v1.LoadPolicyResponse.prototype.getPolicyId = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.LoadPolicyResponse} returns this + */ +proto.viam.service.lerobot.v1.LoadPolicyResponse.prototype.setPolicyId = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string policy_type = 2; + * @return {string} + */ +proto.viam.service.lerobot.v1.LoadPolicyResponse.prototype.getPolicyType = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.LoadPolicyResponse} returns this + */ +proto.viam.service.lerobot.v1.LoadPolicyResponse.prototype.setPolicyType = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.toObject = function(opt_includeInstance) { + return proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + policyId: jspb.Message.getFieldWithDefault(msg, 2, ""), + maxSteps: jspb.Message.getFieldWithDefault(msg, 3, 0), + fps: jspb.Message.getFieldWithDefault(msg, 4, 0), + recordToDataset: jspb.Message.getBooleanFieldWithDefault(msg, 5, false), + datasetName: jspb.Message.getFieldWithDefault(msg, 6, ""), + episodeIndex: jspb.Message.getFieldWithDefault(msg, 7, 0), + extra: (f = msg.getExtra()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest; + return proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setPolicyId(value); + break; + case 3: + var value = /** @type {number} */ (reader.readInt32()); + msg.setMaxSteps(value); + break; + case 4: + var value = /** @type {number} */ (reader.readInt32()); + msg.setFps(value); + break; + case 5: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setRecordToDataset(value); + break; + case 6: + var value = /** @type {string} */ (reader.readString()); + msg.setDatasetName(value); + break; + case 7: + var value = /** @type {number} */ (reader.readInt32()); + msg.setEpisodeIndex(value); + break; + case 99: + var value = new google_protobuf_struct_pb.Struct; + reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader); + msg.setExtra(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getPolicyId(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getMaxSteps(); + if (f !== 0) { + writer.writeInt32( + 3, + f + ); + } + f = message.getFps(); + if (f !== 0) { + writer.writeInt32( + 4, + f + ); + } + f = message.getRecordToDataset(); + if (f) { + writer.writeBool( + 5, + f + ); + } + f = message.getDatasetName(); + if (f.length > 0) { + writer.writeString( + 6, + f + ); + } + f = message.getEpisodeIndex(); + if (f !== 0) { + writer.writeInt32( + 7, + f + ); + } + f = message.getExtra(); + if (f != null) { + writer.writeMessage( + 99, + f, + google_protobuf_struct_pb.Struct.serializeBinaryToWriter + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string policy_id = 2; + * @return {string} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.getPolicyId = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.setPolicyId = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional int32 max_steps = 3; + * @return {number} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.getMaxSteps = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.setMaxSteps = function(value) { + return jspb.Message.setProto3IntField(this, 3, value); +}; + + +/** + * optional int32 fps = 4; + * @return {number} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.getFps = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.setFps = function(value) { + return jspb.Message.setProto3IntField(this, 4, value); +}; + + +/** + * optional bool record_to_dataset = 5; + * @return {boolean} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.getRecordToDataset = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 5, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.setRecordToDataset = function(value) { + return jspb.Message.setProto3BooleanField(this, 5, value); +}; + + +/** + * optional string dataset_name = 6; + * @return {string} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.getDatasetName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.setDatasetName = function(value) { + return jspb.Message.setProto3StringField(this, 6, value); +}; + + +/** + * optional int32 episode_index = 7; + * @return {number} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.getEpisodeIndex = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 7, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.setEpisodeIndex = function(value) { + return jspb.Message.setProto3IntField(this, 7, value); +}; + + +/** + * optional google.protobuf.Struct extra = 99; + * @return {?proto.google.protobuf.Struct} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.getExtra = function() { + return /** @type{?proto.google.protobuf.Struct} */ ( + jspb.Message.getWrapperField(this, google_protobuf_struct_pb.Struct, 99)); +}; + + +/** + * @param {?proto.google.protobuf.Struct|undefined} value + * @return {!proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest} returns this +*/ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.setExtra = function(value) { + return jspb.Message.setWrapperField(this, 99, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.clearExtra = function() { + return this.setExtra(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.hasExtra = function() { + return jspb.Message.getField(this, 99) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.prototype.toObject = function(opt_includeInstance) { + return proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.toObject = function(includeInstance, msg) { + var f, obj = { + numSteps: jspb.Message.getFieldWithDefault(msg, 1, 0), + durationS: jspb.Message.getFloatingPointFieldWithDefault(msg, 2, 0.0), + success: jspb.Message.getBooleanFieldWithDefault(msg, 3, false), + episodePath: jspb.Message.getFieldWithDefault(msg, 4, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse; + return proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readInt32()); + msg.setNumSteps(value); + break; + case 2: + var value = /** @type {number} */ (reader.readFloat()); + msg.setDurationS(value); + break; + case 3: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setSuccess(value); + break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setEpisodePath(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getNumSteps(); + if (f !== 0) { + writer.writeInt32( + 1, + f + ); + } + f = message.getDurationS(); + if (f !== 0.0) { + writer.writeFloat( + 2, + f + ); + } + f = message.getSuccess(); + if (f) { + writer.writeBool( + 3, + f + ); + } + f = message.getEpisodePath(); + if (f.length > 0) { + writer.writeString( + 4, + f + ); + } +}; + + +/** + * optional int32 num_steps = 1; + * @return {number} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.prototype.getNumSteps = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse} returns this + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.prototype.setNumSteps = function(value) { + return jspb.Message.setProto3IntField(this, 1, value); +}; + + +/** + * optional float duration_s = 2; + * @return {number} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.prototype.getDurationS = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 2, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse} returns this + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.prototype.setDurationS = function(value) { + return jspb.Message.setProto3FloatField(this, 2, value); +}; + + +/** + * optional bool success = 3; + * @return {boolean} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.prototype.getSuccess = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 3, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse} returns this + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.prototype.setSuccess = function(value) { + return jspb.Message.setProto3BooleanField(this, 3, value); +}; + + +/** + * optional string episode_path = 4; + * @return {string} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.prototype.getEpisodePath = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse} returns this + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.prototype.setEpisodePath = function(value) { + return jspb.Message.setProto3StringField(this, 4, value); +}; + + +/** + * @enum {number} + */ +proto.viam.service.lerobot.v1.RecordingSource = { + RECORDING_SOURCE_UNSPECIFIED: 0, + RECORDING_SOURCE_TELEOPERATION: 1, + RECORDING_SOURCE_POLICY: 2 +}; + +goog.object.extend(exports, proto.viam.service.lerobot.v1); diff --git a/gen/js/service/lerobot/v1/lerobot_pb_service.d.ts b/gen/js/service/lerobot/v1/lerobot_pb_service.d.ts new file mode 100644 index 000000000..b89c28335 --- /dev/null +++ b/gen/js/service/lerobot/v1/lerobot_pb_service.d.ts @@ -0,0 +1,196 @@ +// package: viam.service.lerobot.v1 +// file: service/lerobot/v1/lerobot.proto + +import * as service_lerobot_v1_lerobot_pb from "../../../service/lerobot/v1/lerobot_pb"; +import {grpc} from "@improbable-eng/grpc-web"; + +type LeRobotServiceStartRecording = { + readonly methodName: string; + readonly service: typeof LeRobotService; + readonly requestStream: false; + readonly responseStream: false; + readonly requestType: typeof service_lerobot_v1_lerobot_pb.StartRecordingRequest; + readonly responseType: typeof service_lerobot_v1_lerobot_pb.StartRecordingResponse; +}; + +type LeRobotServiceStopRecording = { + readonly methodName: string; + readonly service: typeof LeRobotService; + readonly requestStream: false; + readonly responseStream: false; + readonly requestType: typeof service_lerobot_v1_lerobot_pb.StopRecordingRequest; + readonly responseType: typeof service_lerobot_v1_lerobot_pb.StopRecordingResponse; +}; + +type LeRobotServiceRecordEpisode = { + readonly methodName: string; + readonly service: typeof LeRobotService; + readonly requestStream: false; + readonly responseStream: false; + readonly requestType: typeof service_lerobot_v1_lerobot_pb.RecordEpisodeRequest; + readonly responseType: typeof service_lerobot_v1_lerobot_pb.RecordEpisodeResponse; +}; + +type LeRobotServiceReplayEpisode = { + readonly methodName: string; + readonly service: typeof LeRobotService; + readonly requestStream: false; + readonly responseStream: false; + readonly requestType: typeof service_lerobot_v1_lerobot_pb.ReplayEpisodeRequest; + readonly responseType: typeof service_lerobot_v1_lerobot_pb.ReplayEpisodeResponse; +}; + +type LeRobotServiceStartTeleoperation = { + readonly methodName: string; + readonly service: typeof LeRobotService; + readonly requestStream: false; + readonly responseStream: false; + readonly requestType: typeof service_lerobot_v1_lerobot_pb.StartTeleoperationRequest; + readonly responseType: typeof service_lerobot_v1_lerobot_pb.StartTeleoperationResponse; +}; + +type LeRobotServiceStopTeleoperation = { + readonly methodName: string; + readonly service: typeof LeRobotService; + readonly requestStream: false; + readonly responseStream: false; + readonly requestType: typeof service_lerobot_v1_lerobot_pb.StopTeleoperationRequest; + readonly responseType: typeof service_lerobot_v1_lerobot_pb.StopTeleoperationResponse; +}; + +type LeRobotServiceLoadPolicy = { + readonly methodName: string; + readonly service: typeof LeRobotService; + readonly requestStream: false; + readonly responseStream: false; + readonly requestType: typeof service_lerobot_v1_lerobot_pb.LoadPolicyRequest; + readonly responseType: typeof service_lerobot_v1_lerobot_pb.LoadPolicyResponse; +}; + +type LeRobotServiceRunPolicyEpisode = { + readonly methodName: string; + readonly service: typeof LeRobotService; + readonly requestStream: false; + readonly responseStream: false; + readonly requestType: typeof service_lerobot_v1_lerobot_pb.RunPolicyEpisodeRequest; + readonly responseType: typeof service_lerobot_v1_lerobot_pb.RunPolicyEpisodeResponse; +}; + +export class LeRobotService { + static readonly serviceName: string; + static readonly StartRecording: LeRobotServiceStartRecording; + static readonly StopRecording: LeRobotServiceStopRecording; + static readonly RecordEpisode: LeRobotServiceRecordEpisode; + static readonly ReplayEpisode: LeRobotServiceReplayEpisode; + static readonly StartTeleoperation: LeRobotServiceStartTeleoperation; + static readonly StopTeleoperation: LeRobotServiceStopTeleoperation; + static readonly LoadPolicy: LeRobotServiceLoadPolicy; + static readonly RunPolicyEpisode: LeRobotServiceRunPolicyEpisode; +} + +export type ServiceError = { message: string, code: number; metadata: grpc.Metadata } +export type Status = { details: string, code: number; metadata: grpc.Metadata } + +interface UnaryResponse { + cancel(): void; +} +interface ResponseStream { + cancel(): void; + on(type: 'data', handler: (message: T) => void): ResponseStream; + on(type: 'end', handler: (status?: Status) => void): ResponseStream; + on(type: 'status', handler: (status: Status) => void): ResponseStream; +} +interface RequestStream { + write(message: T): RequestStream; + end(): void; + cancel(): void; + on(type: 'end', handler: (status?: Status) => void): RequestStream; + on(type: 'status', handler: (status: Status) => void): RequestStream; +} +interface BidirectionalStream { + write(message: ReqT): BidirectionalStream; + end(): void; + cancel(): void; + on(type: 'data', handler: (message: ResT) => void): BidirectionalStream; + on(type: 'end', handler: (status?: Status) => void): BidirectionalStream; + on(type: 'status', handler: (status: Status) => void): BidirectionalStream; +} + +export class LeRobotServiceClient { + readonly serviceHost: string; + + constructor(serviceHost: string, options?: grpc.RpcOptions); + startRecording( + requestMessage: service_lerobot_v1_lerobot_pb.StartRecordingRequest, + metadata: grpc.Metadata, + callback: (error: ServiceError|null, responseMessage: service_lerobot_v1_lerobot_pb.StartRecordingResponse|null) => void + ): UnaryResponse; + startRecording( + requestMessage: service_lerobot_v1_lerobot_pb.StartRecordingRequest, + callback: (error: ServiceError|null, responseMessage: service_lerobot_v1_lerobot_pb.StartRecordingResponse|null) => void + ): UnaryResponse; + stopRecording( + requestMessage: service_lerobot_v1_lerobot_pb.StopRecordingRequest, + metadata: grpc.Metadata, + callback: (error: ServiceError|null, responseMessage: service_lerobot_v1_lerobot_pb.StopRecordingResponse|null) => void + ): UnaryResponse; + stopRecording( + requestMessage: service_lerobot_v1_lerobot_pb.StopRecordingRequest, + callback: (error: ServiceError|null, responseMessage: service_lerobot_v1_lerobot_pb.StopRecordingResponse|null) => void + ): UnaryResponse; + recordEpisode( + requestMessage: service_lerobot_v1_lerobot_pb.RecordEpisodeRequest, + metadata: grpc.Metadata, + callback: (error: ServiceError|null, responseMessage: service_lerobot_v1_lerobot_pb.RecordEpisodeResponse|null) => void + ): UnaryResponse; + recordEpisode( + requestMessage: service_lerobot_v1_lerobot_pb.RecordEpisodeRequest, + callback: (error: ServiceError|null, responseMessage: service_lerobot_v1_lerobot_pb.RecordEpisodeResponse|null) => void + ): UnaryResponse; + replayEpisode( + requestMessage: service_lerobot_v1_lerobot_pb.ReplayEpisodeRequest, + metadata: grpc.Metadata, + callback: (error: ServiceError|null, responseMessage: service_lerobot_v1_lerobot_pb.ReplayEpisodeResponse|null) => void + ): UnaryResponse; + replayEpisode( + requestMessage: service_lerobot_v1_lerobot_pb.ReplayEpisodeRequest, + callback: (error: ServiceError|null, responseMessage: service_lerobot_v1_lerobot_pb.ReplayEpisodeResponse|null) => void + ): UnaryResponse; + startTeleoperation( + requestMessage: service_lerobot_v1_lerobot_pb.StartTeleoperationRequest, + metadata: grpc.Metadata, + callback: (error: ServiceError|null, responseMessage: service_lerobot_v1_lerobot_pb.StartTeleoperationResponse|null) => void + ): UnaryResponse; + startTeleoperation( + requestMessage: service_lerobot_v1_lerobot_pb.StartTeleoperationRequest, + callback: (error: ServiceError|null, responseMessage: service_lerobot_v1_lerobot_pb.StartTeleoperationResponse|null) => void + ): UnaryResponse; + stopTeleoperation( + requestMessage: service_lerobot_v1_lerobot_pb.StopTeleoperationRequest, + metadata: grpc.Metadata, + callback: (error: ServiceError|null, responseMessage: service_lerobot_v1_lerobot_pb.StopTeleoperationResponse|null) => void + ): UnaryResponse; + stopTeleoperation( + requestMessage: service_lerobot_v1_lerobot_pb.StopTeleoperationRequest, + callback: (error: ServiceError|null, responseMessage: service_lerobot_v1_lerobot_pb.StopTeleoperationResponse|null) => void + ): UnaryResponse; + loadPolicy( + requestMessage: service_lerobot_v1_lerobot_pb.LoadPolicyRequest, + metadata: grpc.Metadata, + callback: (error: ServiceError|null, responseMessage: service_lerobot_v1_lerobot_pb.LoadPolicyResponse|null) => void + ): UnaryResponse; + loadPolicy( + requestMessage: service_lerobot_v1_lerobot_pb.LoadPolicyRequest, + callback: (error: ServiceError|null, responseMessage: service_lerobot_v1_lerobot_pb.LoadPolicyResponse|null) => void + ): UnaryResponse; + runPolicyEpisode( + requestMessage: service_lerobot_v1_lerobot_pb.RunPolicyEpisodeRequest, + metadata: grpc.Metadata, + callback: (error: ServiceError|null, responseMessage: service_lerobot_v1_lerobot_pb.RunPolicyEpisodeResponse|null) => void + ): UnaryResponse; + runPolicyEpisode( + requestMessage: service_lerobot_v1_lerobot_pb.RunPolicyEpisodeRequest, + callback: (error: ServiceError|null, responseMessage: service_lerobot_v1_lerobot_pb.RunPolicyEpisodeResponse|null) => void + ): UnaryResponse; +} + diff --git a/gen/js/service/lerobot/v1/lerobot_pb_service.js b/gen/js/service/lerobot/v1/lerobot_pb_service.js new file mode 100644 index 000000000..8bfd554c7 --- /dev/null +++ b/gen/js/service/lerobot/v1/lerobot_pb_service.js @@ -0,0 +1,341 @@ +// package: viam.service.lerobot.v1 +// file: service/lerobot/v1/lerobot.proto + +var service_lerobot_v1_lerobot_pb = require("../../../service/lerobot/v1/lerobot_pb"); +var grpc = require("@improbable-eng/grpc-web").grpc; + +var LeRobotService = (function () { + function LeRobotService() {} + LeRobotService.serviceName = "viam.service.lerobot.v1.LeRobotService"; + return LeRobotService; +}()); + +LeRobotService.StartRecording = { + methodName: "StartRecording", + service: LeRobotService, + requestStream: false, + responseStream: false, + requestType: service_lerobot_v1_lerobot_pb.StartRecordingRequest, + responseType: service_lerobot_v1_lerobot_pb.StartRecordingResponse +}; + +LeRobotService.StopRecording = { + methodName: "StopRecording", + service: LeRobotService, + requestStream: false, + responseStream: false, + requestType: service_lerobot_v1_lerobot_pb.StopRecordingRequest, + responseType: service_lerobot_v1_lerobot_pb.StopRecordingResponse +}; + +LeRobotService.RecordEpisode = { + methodName: "RecordEpisode", + service: LeRobotService, + requestStream: false, + responseStream: false, + requestType: service_lerobot_v1_lerobot_pb.RecordEpisodeRequest, + responseType: service_lerobot_v1_lerobot_pb.RecordEpisodeResponse +}; + +LeRobotService.ReplayEpisode = { + methodName: "ReplayEpisode", + service: LeRobotService, + requestStream: false, + responseStream: false, + requestType: service_lerobot_v1_lerobot_pb.ReplayEpisodeRequest, + responseType: service_lerobot_v1_lerobot_pb.ReplayEpisodeResponse +}; + +LeRobotService.StartTeleoperation = { + methodName: "StartTeleoperation", + service: LeRobotService, + requestStream: false, + responseStream: false, + requestType: service_lerobot_v1_lerobot_pb.StartTeleoperationRequest, + responseType: service_lerobot_v1_lerobot_pb.StartTeleoperationResponse +}; + +LeRobotService.StopTeleoperation = { + methodName: "StopTeleoperation", + service: LeRobotService, + requestStream: false, + responseStream: false, + requestType: service_lerobot_v1_lerobot_pb.StopTeleoperationRequest, + responseType: service_lerobot_v1_lerobot_pb.StopTeleoperationResponse +}; + +LeRobotService.LoadPolicy = { + methodName: "LoadPolicy", + service: LeRobotService, + requestStream: false, + responseStream: false, + requestType: service_lerobot_v1_lerobot_pb.LoadPolicyRequest, + responseType: service_lerobot_v1_lerobot_pb.LoadPolicyResponse +}; + +LeRobotService.RunPolicyEpisode = { + methodName: "RunPolicyEpisode", + service: LeRobotService, + requestStream: false, + responseStream: false, + requestType: service_lerobot_v1_lerobot_pb.RunPolicyEpisodeRequest, + responseType: service_lerobot_v1_lerobot_pb.RunPolicyEpisodeResponse +}; + +exports.LeRobotService = LeRobotService; + +function LeRobotServiceClient(serviceHost, options) { + this.serviceHost = serviceHost; + this.options = options || {}; +} + +LeRobotServiceClient.prototype.startRecording = function startRecording(requestMessage, metadata, callback) { + if (arguments.length === 2) { + callback = arguments[1]; + } + var client = grpc.unary(LeRobotService.StartRecording, { + request: requestMessage, + host: this.serviceHost, + metadata: metadata, + transport: this.options.transport, + debug: this.options.debug, + onEnd: function (response) { + if (callback) { + if (response.status !== grpc.Code.OK) { + var err = new Error(response.statusMessage); + err.code = response.status; + err.metadata = response.trailers; + callback(err, null); + } else { + callback(null, response.message); + } + } + } + }); + return { + cancel: function () { + callback = null; + client.close(); + } + }; +}; + +LeRobotServiceClient.prototype.stopRecording = function stopRecording(requestMessage, metadata, callback) { + if (arguments.length === 2) { + callback = arguments[1]; + } + var client = grpc.unary(LeRobotService.StopRecording, { + request: requestMessage, + host: this.serviceHost, + metadata: metadata, + transport: this.options.transport, + debug: this.options.debug, + onEnd: function (response) { + if (callback) { + if (response.status !== grpc.Code.OK) { + var err = new Error(response.statusMessage); + err.code = response.status; + err.metadata = response.trailers; + callback(err, null); + } else { + callback(null, response.message); + } + } + } + }); + return { + cancel: function () { + callback = null; + client.close(); + } + }; +}; + +LeRobotServiceClient.prototype.recordEpisode = function recordEpisode(requestMessage, metadata, callback) { + if (arguments.length === 2) { + callback = arguments[1]; + } + var client = grpc.unary(LeRobotService.RecordEpisode, { + request: requestMessage, + host: this.serviceHost, + metadata: metadata, + transport: this.options.transport, + debug: this.options.debug, + onEnd: function (response) { + if (callback) { + if (response.status !== grpc.Code.OK) { + var err = new Error(response.statusMessage); + err.code = response.status; + err.metadata = response.trailers; + callback(err, null); + } else { + callback(null, response.message); + } + } + } + }); + return { + cancel: function () { + callback = null; + client.close(); + } + }; +}; + +LeRobotServiceClient.prototype.replayEpisode = function replayEpisode(requestMessage, metadata, callback) { + if (arguments.length === 2) { + callback = arguments[1]; + } + var client = grpc.unary(LeRobotService.ReplayEpisode, { + request: requestMessage, + host: this.serviceHost, + metadata: metadata, + transport: this.options.transport, + debug: this.options.debug, + onEnd: function (response) { + if (callback) { + if (response.status !== grpc.Code.OK) { + var err = new Error(response.statusMessage); + err.code = response.status; + err.metadata = response.trailers; + callback(err, null); + } else { + callback(null, response.message); + } + } + } + }); + return { + cancel: function () { + callback = null; + client.close(); + } + }; +}; + +LeRobotServiceClient.prototype.startTeleoperation = function startTeleoperation(requestMessage, metadata, callback) { + if (arguments.length === 2) { + callback = arguments[1]; + } + var client = grpc.unary(LeRobotService.StartTeleoperation, { + request: requestMessage, + host: this.serviceHost, + metadata: metadata, + transport: this.options.transport, + debug: this.options.debug, + onEnd: function (response) { + if (callback) { + if (response.status !== grpc.Code.OK) { + var err = new Error(response.statusMessage); + err.code = response.status; + err.metadata = response.trailers; + callback(err, null); + } else { + callback(null, response.message); + } + } + } + }); + return { + cancel: function () { + callback = null; + client.close(); + } + }; +}; + +LeRobotServiceClient.prototype.stopTeleoperation = function stopTeleoperation(requestMessage, metadata, callback) { + if (arguments.length === 2) { + callback = arguments[1]; + } + var client = grpc.unary(LeRobotService.StopTeleoperation, { + request: requestMessage, + host: this.serviceHost, + metadata: metadata, + transport: this.options.transport, + debug: this.options.debug, + onEnd: function (response) { + if (callback) { + if (response.status !== grpc.Code.OK) { + var err = new Error(response.statusMessage); + err.code = response.status; + err.metadata = response.trailers; + callback(err, null); + } else { + callback(null, response.message); + } + } + } + }); + return { + cancel: function () { + callback = null; + client.close(); + } + }; +}; + +LeRobotServiceClient.prototype.loadPolicy = function loadPolicy(requestMessage, metadata, callback) { + if (arguments.length === 2) { + callback = arguments[1]; + } + var client = grpc.unary(LeRobotService.LoadPolicy, { + request: requestMessage, + host: this.serviceHost, + metadata: metadata, + transport: this.options.transport, + debug: this.options.debug, + onEnd: function (response) { + if (callback) { + if (response.status !== grpc.Code.OK) { + var err = new Error(response.statusMessage); + err.code = response.status; + err.metadata = response.trailers; + callback(err, null); + } else { + callback(null, response.message); + } + } + } + }); + return { + cancel: function () { + callback = null; + client.close(); + } + }; +}; + +LeRobotServiceClient.prototype.runPolicyEpisode = function runPolicyEpisode(requestMessage, metadata, callback) { + if (arguments.length === 2) { + callback = arguments[1]; + } + var client = grpc.unary(LeRobotService.RunPolicyEpisode, { + request: requestMessage, + host: this.serviceHost, + metadata: metadata, + transport: this.options.transport, + debug: this.options.debug, + onEnd: function (response) { + if (callback) { + if (response.status !== grpc.Code.OK) { + var err = new Error(response.statusMessage); + err.code = response.status; + err.metadata = response.trailers; + callback(err, null); + } else { + callback(null, response.message); + } + } + } + }); + return { + cancel: function () { + callback = null; + client.close(); + } + }; +}; + +exports.LeRobotServiceClient = LeRobotServiceClient; + diff --git a/proto/viam/service/lerobot/v1/lerobot.proto b/proto/viam/service/lerobot/v1/lerobot.proto new file mode 100644 index 000000000..fff641482 --- /dev/null +++ b/proto/viam/service/lerobot/v1/lerobot.proto @@ -0,0 +1,161 @@ +syntax = "proto3"; + +package viam.service.lerobot.v1; + +import "google/api/annotations.proto"; +import "google/protobuf/struct.proto"; + +option go_package = "go.viam.com/api/service/lerobot/v1"; +option java_package = "com.viam.service.lerobot.v1"; + +// LeRobotService provides methods for controlling and interacting with the LeRobot. +service LeRobotService { + // StartRecording begins a new recording session for the specified dataset. + rpc StartRecording(StartRecordingRequest) returns (StartRecordingResponse) { + option (google.api.http) = {post: "/viam/api/v1/service/lerobot/{name}/start_recording"}; + } + + // StopRecording ends the current recording session and saves the data. + rpc StopRecording(StopRecordingRequest) returns (StopRecordingResponse) { + option (google.api.http) = {post: "/viam/api/v1/service/lerobot/{name}/stop_recording"}; + } + + // RecordEpisode records a single episode with the specified parameters. + rpc RecordEpisode(RecordEpisodeRequest) returns (RecordEpisodeResponse) { + option (google.api.http) = {post: "/viam/api/v1/service/lerobot/{name}/record_episode"}; + } + + // ReplayEpisode plays back a previously recorded episode. + rpc ReplayEpisode(ReplayEpisodeRequest) returns (ReplayEpisodeResponse) { + option (google.api.http) = {post: "/viam/api/v1/service/lerobot/{name}/replay_episode"}; + } + + // StartTeleoperation begins a teleoperation session with the specified device. + rpc StartTeleoperation(StartTeleoperationRequest) returns (StartTeleoperationResponse) { + option (google.api.http) = {post: "/viam/api/v1/service/lerobot/{name}/start_teleoperation"}; + } + + // StopTeleoperation ends the current teleoperation session. + rpc StopTeleoperation(StopTeleoperationRequest) returns (StopTeleoperationResponse) { + option (google.api.http) = {post: "/viam/api/v1/service/lerobot/{name}/stop_teleoperation"}; + } + + // LoadPolicy loads a policy from a HuggingFace repo or local path. + rpc LoadPolicy(LoadPolicyRequest) returns (LoadPolicyResponse) { + option (google.api.http) = {post: "/viam/api/v1/service/lerobot/{name}/load_policy"}; + } + + // RunPolicyEpisode executes a loaded policy for a single episode. + rpc RunPolicyEpisode(RunPolicyEpisodeRequest) returns (RunPolicyEpisodeResponse) { + option (google.api.http) = {post: "/viam/api/v1/service/lerobot/{name}/run_policy_episode"}; + } +} + +message RecordEpisodeRequest { + string name = 1; // Service name + string dataset_name = 2; + int32 episode_index = 3; + RecordingSource source = 4; + int32 warmup_time_s = 5; + int32 episode_time_s = 6; + int32 reset_time_s = 7; + int32 fps = 8; + repeated string tags = 9; + google.protobuf.Struct extra = 99; +} + +enum RecordingSource { + RECORDING_SOURCE_UNSPECIFIED = 0; + RECORDING_SOURCE_TELEOPERATION = 1; + RECORDING_SOURCE_POLICY = 2; +} + +message RecordEpisodeResponse { + int32 num_frames = 1; + float actual_duration_s = 2; + string episode_path = 3; +} + +message StartRecordingRequest { + string name = 1; + string dataset_name = 2; + google.protobuf.Struct extra = 99; +} + +message StartRecordingResponse { + string session_id = 1; +} + +message StopRecordingRequest { + string name = 1; + string session_id = 2; + google.protobuf.Struct extra = 99; +} + +message StopRecordingResponse { + float duration_s = 1; +} + +message ReplayEpisodeRequest { + string name = 1; + string dataset_name = 2; + int32 episode_index = 3; + int32 fps = 4; + google.protobuf.Struct extra = 99; +} + +message ReplayEpisodeResponse { + int32 num_frames_replayed = 1; + float duration_s = 2; +} + +message StartTeleoperationRequest { + string name = 1; + string teleop_device_type = 2; // e.g., "keyboard", "spacemouse", "leader_arm" + int32 fps = 3; + bool display_cameras = 4; + google.protobuf.Struct extra = 99; +} + +message StartTeleoperationResponse { + string session_id = 1; +} + +message StopTeleoperationRequest { + string name = 1; + string session_id = 2; + google.protobuf.Struct extra = 99; +} + +message StopTeleoperationResponse { + float duration_s = 1; +} + +message LoadPolicyRequest { + string name = 1; + string policy_repo_id = 2; // HuggingFace repo or local path + google.protobuf.Struct extra = 99; +} + +message LoadPolicyResponse { + string policy_id = 1; + string policy_type = 2; // "act", "diffusion", etc. +} + +message RunPolicyEpisodeRequest { + string name = 1; + string policy_id = 2; + int32 max_steps = 3; + int32 fps = 4; + bool record_to_dataset = 5; // Optional: record for evaluation + string dataset_name = 6; + int32 episode_index = 7; + google.protobuf.Struct extra = 99; +} + +message RunPolicyEpisodeResponse { + int32 num_steps = 1; + float duration_s = 2; + bool success = 3; // If task has success criteria + string episode_path = 4; // If recorded +} diff --git a/service/lerobot/v1/lerobot.pb.go b/service/lerobot/v1/lerobot.pb.go new file mode 100644 index 000000000..86d3c2579 --- /dev/null +++ b/service/lerobot/v1/lerobot.pb.go @@ -0,0 +1,1453 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.35.1 +// protoc (unknown) +// source: service/lerobot/v1/lerobot.proto + +package v1 + +import ( + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + structpb "google.golang.org/protobuf/types/known/structpb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type RecordingSource int32 + +const ( + RecordingSource_RECORDING_SOURCE_UNSPECIFIED RecordingSource = 0 + RecordingSource_RECORDING_SOURCE_TELEOPERATION RecordingSource = 1 + RecordingSource_RECORDING_SOURCE_POLICY RecordingSource = 2 +) + +// Enum value maps for RecordingSource. +var ( + RecordingSource_name = map[int32]string{ + 0: "RECORDING_SOURCE_UNSPECIFIED", + 1: "RECORDING_SOURCE_TELEOPERATION", + 2: "RECORDING_SOURCE_POLICY", + } + RecordingSource_value = map[string]int32{ + "RECORDING_SOURCE_UNSPECIFIED": 0, + "RECORDING_SOURCE_TELEOPERATION": 1, + "RECORDING_SOURCE_POLICY": 2, + } +) + +func (x RecordingSource) Enum() *RecordingSource { + p := new(RecordingSource) + *p = x + return p +} + +func (x RecordingSource) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RecordingSource) Descriptor() protoreflect.EnumDescriptor { + return file_service_lerobot_v1_lerobot_proto_enumTypes[0].Descriptor() +} + +func (RecordingSource) Type() protoreflect.EnumType { + return &file_service_lerobot_v1_lerobot_proto_enumTypes[0] +} + +func (x RecordingSource) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RecordingSource.Descriptor instead. +func (RecordingSource) EnumDescriptor() ([]byte, []int) { + return file_service_lerobot_v1_lerobot_proto_rawDescGZIP(), []int{0} +} + +type RecordEpisodeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Service name + DatasetName string `protobuf:"bytes,2,opt,name=dataset_name,json=datasetName,proto3" json:"dataset_name,omitempty"` + EpisodeIndex int32 `protobuf:"varint,3,opt,name=episode_index,json=episodeIndex,proto3" json:"episode_index,omitempty"` + Source RecordingSource `protobuf:"varint,4,opt,name=source,proto3,enum=viam.service.lerobot.v1.RecordingSource" json:"source,omitempty"` + WarmupTimeS int32 `protobuf:"varint,5,opt,name=warmup_time_s,json=warmupTimeS,proto3" json:"warmup_time_s,omitempty"` + EpisodeTimeS int32 `protobuf:"varint,6,opt,name=episode_time_s,json=episodeTimeS,proto3" json:"episode_time_s,omitempty"` + ResetTimeS int32 `protobuf:"varint,7,opt,name=reset_time_s,json=resetTimeS,proto3" json:"reset_time_s,omitempty"` + Fps int32 `protobuf:"varint,8,opt,name=fps,proto3" json:"fps,omitempty"` + Tags []string `protobuf:"bytes,9,rep,name=tags,proto3" json:"tags,omitempty"` + Extra *structpb.Struct `protobuf:"bytes,99,opt,name=extra,proto3" json:"extra,omitempty"` +} + +func (x *RecordEpisodeRequest) Reset() { + *x = RecordEpisodeRequest{} + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RecordEpisodeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordEpisodeRequest) ProtoMessage() {} + +func (x *RecordEpisodeRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RecordEpisodeRequest.ProtoReflect.Descriptor instead. +func (*RecordEpisodeRequest) Descriptor() ([]byte, []int) { + return file_service_lerobot_v1_lerobot_proto_rawDescGZIP(), []int{0} +} + +func (x *RecordEpisodeRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RecordEpisodeRequest) GetDatasetName() string { + if x != nil { + return x.DatasetName + } + return "" +} + +func (x *RecordEpisodeRequest) GetEpisodeIndex() int32 { + if x != nil { + return x.EpisodeIndex + } + return 0 +} + +func (x *RecordEpisodeRequest) GetSource() RecordingSource { + if x != nil { + return x.Source + } + return RecordingSource_RECORDING_SOURCE_UNSPECIFIED +} + +func (x *RecordEpisodeRequest) GetWarmupTimeS() int32 { + if x != nil { + return x.WarmupTimeS + } + return 0 +} + +func (x *RecordEpisodeRequest) GetEpisodeTimeS() int32 { + if x != nil { + return x.EpisodeTimeS + } + return 0 +} + +func (x *RecordEpisodeRequest) GetResetTimeS() int32 { + if x != nil { + return x.ResetTimeS + } + return 0 +} + +func (x *RecordEpisodeRequest) GetFps() int32 { + if x != nil { + return x.Fps + } + return 0 +} + +func (x *RecordEpisodeRequest) GetTags() []string { + if x != nil { + return x.Tags + } + return nil +} + +func (x *RecordEpisodeRequest) GetExtra() *structpb.Struct { + if x != nil { + return x.Extra + } + return nil +} + +type RecordEpisodeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NumFrames int32 `protobuf:"varint,1,opt,name=num_frames,json=numFrames,proto3" json:"num_frames,omitempty"` + ActualDurationS float32 `protobuf:"fixed32,2,opt,name=actual_duration_s,json=actualDurationS,proto3" json:"actual_duration_s,omitempty"` + EpisodePath string `protobuf:"bytes,3,opt,name=episode_path,json=episodePath,proto3" json:"episode_path,omitempty"` +} + +func (x *RecordEpisodeResponse) Reset() { + *x = RecordEpisodeResponse{} + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RecordEpisodeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordEpisodeResponse) ProtoMessage() {} + +func (x *RecordEpisodeResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RecordEpisodeResponse.ProtoReflect.Descriptor instead. +func (*RecordEpisodeResponse) Descriptor() ([]byte, []int) { + return file_service_lerobot_v1_lerobot_proto_rawDescGZIP(), []int{1} +} + +func (x *RecordEpisodeResponse) GetNumFrames() int32 { + if x != nil { + return x.NumFrames + } + return 0 +} + +func (x *RecordEpisodeResponse) GetActualDurationS() float32 { + if x != nil { + return x.ActualDurationS + } + return 0 +} + +func (x *RecordEpisodeResponse) GetEpisodePath() string { + if x != nil { + return x.EpisodePath + } + return "" +} + +type StartRecordingRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + DatasetName string `protobuf:"bytes,2,opt,name=dataset_name,json=datasetName,proto3" json:"dataset_name,omitempty"` + Extra *structpb.Struct `protobuf:"bytes,99,opt,name=extra,proto3" json:"extra,omitempty"` +} + +func (x *StartRecordingRequest) Reset() { + *x = StartRecordingRequest{} + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StartRecordingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartRecordingRequest) ProtoMessage() {} + +func (x *StartRecordingRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartRecordingRequest.ProtoReflect.Descriptor instead. +func (*StartRecordingRequest) Descriptor() ([]byte, []int) { + return file_service_lerobot_v1_lerobot_proto_rawDescGZIP(), []int{2} +} + +func (x *StartRecordingRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *StartRecordingRequest) GetDatasetName() string { + if x != nil { + return x.DatasetName + } + return "" +} + +func (x *StartRecordingRequest) GetExtra() *structpb.Struct { + if x != nil { + return x.Extra + } + return nil +} + +type StartRecordingResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` +} + +func (x *StartRecordingResponse) Reset() { + *x = StartRecordingResponse{} + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StartRecordingResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartRecordingResponse) ProtoMessage() {} + +func (x *StartRecordingResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartRecordingResponse.ProtoReflect.Descriptor instead. +func (*StartRecordingResponse) Descriptor() ([]byte, []int) { + return file_service_lerobot_v1_lerobot_proto_rawDescGZIP(), []int{3} +} + +func (x *StartRecordingResponse) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" +} + +type StopRecordingRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + SessionId string `protobuf:"bytes,2,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + Extra *structpb.Struct `protobuf:"bytes,99,opt,name=extra,proto3" json:"extra,omitempty"` +} + +func (x *StopRecordingRequest) Reset() { + *x = StopRecordingRequest{} + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StopRecordingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StopRecordingRequest) ProtoMessage() {} + +func (x *StopRecordingRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StopRecordingRequest.ProtoReflect.Descriptor instead. +func (*StopRecordingRequest) Descriptor() ([]byte, []int) { + return file_service_lerobot_v1_lerobot_proto_rawDescGZIP(), []int{4} +} + +func (x *StopRecordingRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *StopRecordingRequest) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" +} + +func (x *StopRecordingRequest) GetExtra() *structpb.Struct { + if x != nil { + return x.Extra + } + return nil +} + +type StopRecordingResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DurationS float32 `protobuf:"fixed32,1,opt,name=duration_s,json=durationS,proto3" json:"duration_s,omitempty"` +} + +func (x *StopRecordingResponse) Reset() { + *x = StopRecordingResponse{} + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StopRecordingResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StopRecordingResponse) ProtoMessage() {} + +func (x *StopRecordingResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StopRecordingResponse.ProtoReflect.Descriptor instead. +func (*StopRecordingResponse) Descriptor() ([]byte, []int) { + return file_service_lerobot_v1_lerobot_proto_rawDescGZIP(), []int{5} +} + +func (x *StopRecordingResponse) GetDurationS() float32 { + if x != nil { + return x.DurationS + } + return 0 +} + +type ReplayEpisodeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + DatasetName string `protobuf:"bytes,2,opt,name=dataset_name,json=datasetName,proto3" json:"dataset_name,omitempty"` + EpisodeIndex int32 `protobuf:"varint,3,opt,name=episode_index,json=episodeIndex,proto3" json:"episode_index,omitempty"` + Fps int32 `protobuf:"varint,4,opt,name=fps,proto3" json:"fps,omitempty"` + Extra *structpb.Struct `protobuf:"bytes,99,opt,name=extra,proto3" json:"extra,omitempty"` +} + +func (x *ReplayEpisodeRequest) Reset() { + *x = ReplayEpisodeRequest{} + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReplayEpisodeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReplayEpisodeRequest) ProtoMessage() {} + +func (x *ReplayEpisodeRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReplayEpisodeRequest.ProtoReflect.Descriptor instead. +func (*ReplayEpisodeRequest) Descriptor() ([]byte, []int) { + return file_service_lerobot_v1_lerobot_proto_rawDescGZIP(), []int{6} +} + +func (x *ReplayEpisodeRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ReplayEpisodeRequest) GetDatasetName() string { + if x != nil { + return x.DatasetName + } + return "" +} + +func (x *ReplayEpisodeRequest) GetEpisodeIndex() int32 { + if x != nil { + return x.EpisodeIndex + } + return 0 +} + +func (x *ReplayEpisodeRequest) GetFps() int32 { + if x != nil { + return x.Fps + } + return 0 +} + +func (x *ReplayEpisodeRequest) GetExtra() *structpb.Struct { + if x != nil { + return x.Extra + } + return nil +} + +type ReplayEpisodeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NumFramesReplayed int32 `protobuf:"varint,1,opt,name=num_frames_replayed,json=numFramesReplayed,proto3" json:"num_frames_replayed,omitempty"` + DurationS float32 `protobuf:"fixed32,2,opt,name=duration_s,json=durationS,proto3" json:"duration_s,omitempty"` +} + +func (x *ReplayEpisodeResponse) Reset() { + *x = ReplayEpisodeResponse{} + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReplayEpisodeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReplayEpisodeResponse) ProtoMessage() {} + +func (x *ReplayEpisodeResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReplayEpisodeResponse.ProtoReflect.Descriptor instead. +func (*ReplayEpisodeResponse) Descriptor() ([]byte, []int) { + return file_service_lerobot_v1_lerobot_proto_rawDescGZIP(), []int{7} +} + +func (x *ReplayEpisodeResponse) GetNumFramesReplayed() int32 { + if x != nil { + return x.NumFramesReplayed + } + return 0 +} + +func (x *ReplayEpisodeResponse) GetDurationS() float32 { + if x != nil { + return x.DurationS + } + return 0 +} + +type StartTeleoperationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + TeleopDeviceType string `protobuf:"bytes,2,opt,name=teleop_device_type,json=teleopDeviceType,proto3" json:"teleop_device_type,omitempty"` // e.g., "keyboard", "spacemouse", "leader_arm" + Fps int32 `protobuf:"varint,3,opt,name=fps,proto3" json:"fps,omitempty"` + DisplayCameras bool `protobuf:"varint,4,opt,name=display_cameras,json=displayCameras,proto3" json:"display_cameras,omitempty"` + Extra *structpb.Struct `protobuf:"bytes,99,opt,name=extra,proto3" json:"extra,omitempty"` +} + +func (x *StartTeleoperationRequest) Reset() { + *x = StartTeleoperationRequest{} + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StartTeleoperationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartTeleoperationRequest) ProtoMessage() {} + +func (x *StartTeleoperationRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartTeleoperationRequest.ProtoReflect.Descriptor instead. +func (*StartTeleoperationRequest) Descriptor() ([]byte, []int) { + return file_service_lerobot_v1_lerobot_proto_rawDescGZIP(), []int{8} +} + +func (x *StartTeleoperationRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *StartTeleoperationRequest) GetTeleopDeviceType() string { + if x != nil { + return x.TeleopDeviceType + } + return "" +} + +func (x *StartTeleoperationRequest) GetFps() int32 { + if x != nil { + return x.Fps + } + return 0 +} + +func (x *StartTeleoperationRequest) GetDisplayCameras() bool { + if x != nil { + return x.DisplayCameras + } + return false +} + +func (x *StartTeleoperationRequest) GetExtra() *structpb.Struct { + if x != nil { + return x.Extra + } + return nil +} + +type StartTeleoperationResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` +} + +func (x *StartTeleoperationResponse) Reset() { + *x = StartTeleoperationResponse{} + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StartTeleoperationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartTeleoperationResponse) ProtoMessage() {} + +func (x *StartTeleoperationResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartTeleoperationResponse.ProtoReflect.Descriptor instead. +func (*StartTeleoperationResponse) Descriptor() ([]byte, []int) { + return file_service_lerobot_v1_lerobot_proto_rawDescGZIP(), []int{9} +} + +func (x *StartTeleoperationResponse) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" +} + +type StopTeleoperationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + SessionId string `protobuf:"bytes,2,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + Extra *structpb.Struct `protobuf:"bytes,99,opt,name=extra,proto3" json:"extra,omitempty"` +} + +func (x *StopTeleoperationRequest) Reset() { + *x = StopTeleoperationRequest{} + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StopTeleoperationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StopTeleoperationRequest) ProtoMessage() {} + +func (x *StopTeleoperationRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StopTeleoperationRequest.ProtoReflect.Descriptor instead. +func (*StopTeleoperationRequest) Descriptor() ([]byte, []int) { + return file_service_lerobot_v1_lerobot_proto_rawDescGZIP(), []int{10} +} + +func (x *StopTeleoperationRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *StopTeleoperationRequest) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" +} + +func (x *StopTeleoperationRequest) GetExtra() *structpb.Struct { + if x != nil { + return x.Extra + } + return nil +} + +type StopTeleoperationResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DurationS float32 `protobuf:"fixed32,1,opt,name=duration_s,json=durationS,proto3" json:"duration_s,omitempty"` +} + +func (x *StopTeleoperationResponse) Reset() { + *x = StopTeleoperationResponse{} + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StopTeleoperationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StopTeleoperationResponse) ProtoMessage() {} + +func (x *StopTeleoperationResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StopTeleoperationResponse.ProtoReflect.Descriptor instead. +func (*StopTeleoperationResponse) Descriptor() ([]byte, []int) { + return file_service_lerobot_v1_lerobot_proto_rawDescGZIP(), []int{11} +} + +func (x *StopTeleoperationResponse) GetDurationS() float32 { + if x != nil { + return x.DurationS + } + return 0 +} + +type LoadPolicyRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + PolicyRepoId string `protobuf:"bytes,2,opt,name=policy_repo_id,json=policyRepoId,proto3" json:"policy_repo_id,omitempty"` // HuggingFace repo or local path + Extra *structpb.Struct `protobuf:"bytes,99,opt,name=extra,proto3" json:"extra,omitempty"` +} + +func (x *LoadPolicyRequest) Reset() { + *x = LoadPolicyRequest{} + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LoadPolicyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LoadPolicyRequest) ProtoMessage() {} + +func (x *LoadPolicyRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LoadPolicyRequest.ProtoReflect.Descriptor instead. +func (*LoadPolicyRequest) Descriptor() ([]byte, []int) { + return file_service_lerobot_v1_lerobot_proto_rawDescGZIP(), []int{12} +} + +func (x *LoadPolicyRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *LoadPolicyRequest) GetPolicyRepoId() string { + if x != nil { + return x.PolicyRepoId + } + return "" +} + +func (x *LoadPolicyRequest) GetExtra() *structpb.Struct { + if x != nil { + return x.Extra + } + return nil +} + +type LoadPolicyResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PolicyId string `protobuf:"bytes,1,opt,name=policy_id,json=policyId,proto3" json:"policy_id,omitempty"` + PolicyType string `protobuf:"bytes,2,opt,name=policy_type,json=policyType,proto3" json:"policy_type,omitempty"` // "act", "diffusion", etc. +} + +func (x *LoadPolicyResponse) Reset() { + *x = LoadPolicyResponse{} + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LoadPolicyResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LoadPolicyResponse) ProtoMessage() {} + +func (x *LoadPolicyResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LoadPolicyResponse.ProtoReflect.Descriptor instead. +func (*LoadPolicyResponse) Descriptor() ([]byte, []int) { + return file_service_lerobot_v1_lerobot_proto_rawDescGZIP(), []int{13} +} + +func (x *LoadPolicyResponse) GetPolicyId() string { + if x != nil { + return x.PolicyId + } + return "" +} + +func (x *LoadPolicyResponse) GetPolicyType() string { + if x != nil { + return x.PolicyType + } + return "" +} + +type RunPolicyEpisodeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + PolicyId string `protobuf:"bytes,2,opt,name=policy_id,json=policyId,proto3" json:"policy_id,omitempty"` + MaxSteps int32 `protobuf:"varint,3,opt,name=max_steps,json=maxSteps,proto3" json:"max_steps,omitempty"` + Fps int32 `protobuf:"varint,4,opt,name=fps,proto3" json:"fps,omitempty"` + RecordToDataset bool `protobuf:"varint,5,opt,name=record_to_dataset,json=recordToDataset,proto3" json:"record_to_dataset,omitempty"` // Optional: record for evaluation + DatasetName string `protobuf:"bytes,6,opt,name=dataset_name,json=datasetName,proto3" json:"dataset_name,omitempty"` + EpisodeIndex int32 `protobuf:"varint,7,opt,name=episode_index,json=episodeIndex,proto3" json:"episode_index,omitempty"` + Extra *structpb.Struct `protobuf:"bytes,99,opt,name=extra,proto3" json:"extra,omitempty"` +} + +func (x *RunPolicyEpisodeRequest) Reset() { + *x = RunPolicyEpisodeRequest{} + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RunPolicyEpisodeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RunPolicyEpisodeRequest) ProtoMessage() {} + +func (x *RunPolicyEpisodeRequest) ProtoReflect() protoreflect.Message { + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RunPolicyEpisodeRequest.ProtoReflect.Descriptor instead. +func (*RunPolicyEpisodeRequest) Descriptor() ([]byte, []int) { + return file_service_lerobot_v1_lerobot_proto_rawDescGZIP(), []int{14} +} + +func (x *RunPolicyEpisodeRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RunPolicyEpisodeRequest) GetPolicyId() string { + if x != nil { + return x.PolicyId + } + return "" +} + +func (x *RunPolicyEpisodeRequest) GetMaxSteps() int32 { + if x != nil { + return x.MaxSteps + } + return 0 +} + +func (x *RunPolicyEpisodeRequest) GetFps() int32 { + if x != nil { + return x.Fps + } + return 0 +} + +func (x *RunPolicyEpisodeRequest) GetRecordToDataset() bool { + if x != nil { + return x.RecordToDataset + } + return false +} + +func (x *RunPolicyEpisodeRequest) GetDatasetName() string { + if x != nil { + return x.DatasetName + } + return "" +} + +func (x *RunPolicyEpisodeRequest) GetEpisodeIndex() int32 { + if x != nil { + return x.EpisodeIndex + } + return 0 +} + +func (x *RunPolicyEpisodeRequest) GetExtra() *structpb.Struct { + if x != nil { + return x.Extra + } + return nil +} + +type RunPolicyEpisodeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NumSteps int32 `protobuf:"varint,1,opt,name=num_steps,json=numSteps,proto3" json:"num_steps,omitempty"` + DurationS float32 `protobuf:"fixed32,2,opt,name=duration_s,json=durationS,proto3" json:"duration_s,omitempty"` + Success bool `protobuf:"varint,3,opt,name=success,proto3" json:"success,omitempty"` // If task has success criteria + EpisodePath string `protobuf:"bytes,4,opt,name=episode_path,json=episodePath,proto3" json:"episode_path,omitempty"` // If recorded +} + +func (x *RunPolicyEpisodeResponse) Reset() { + *x = RunPolicyEpisodeResponse{} + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RunPolicyEpisodeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RunPolicyEpisodeResponse) ProtoMessage() {} + +func (x *RunPolicyEpisodeResponse) ProtoReflect() protoreflect.Message { + mi := &file_service_lerobot_v1_lerobot_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RunPolicyEpisodeResponse.ProtoReflect.Descriptor instead. +func (*RunPolicyEpisodeResponse) Descriptor() ([]byte, []int) { + return file_service_lerobot_v1_lerobot_proto_rawDescGZIP(), []int{15} +} + +func (x *RunPolicyEpisodeResponse) GetNumSteps() int32 { + if x != nil { + return x.NumSteps + } + return 0 +} + +func (x *RunPolicyEpisodeResponse) GetDurationS() float32 { + if x != nil { + return x.DurationS + } + return 0 +} + +func (x *RunPolicyEpisodeResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *RunPolicyEpisodeResponse) GetEpisodePath() string { + if x != nil { + return x.EpisodePath + } + return "" +} + +var File_service_lerobot_v1_lerobot_proto protoreflect.FileDescriptor + +var file_service_lerobot_v1_lerobot_proto_rawDesc = []byte{ + 0x0a, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, + 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x17, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf5, 0x02, 0x0a, 0x14, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, + 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x70, 0x69, 0x73, 0x6f, + 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, + 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x40, 0x0a, 0x06, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x76, + 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, + 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x22, + 0x0a, 0x0d, 0x77, 0x61, 0x72, 0x6d, 0x75, 0x70, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x77, 0x61, 0x72, 0x6d, 0x75, 0x70, 0x54, 0x69, 0x6d, + 0x65, 0x53, 0x12, 0x24, 0x0a, 0x0e, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x70, 0x69, 0x73, + 0x6f, 0x64, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x12, 0x20, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x65, + 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x72, 0x65, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x70, + 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x66, 0x70, 0x73, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x61, 0x67, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, + 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, + 0x85, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, + 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6e, + 0x75, 0x6d, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x63, 0x74, 0x75, + 0x61, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x0f, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, + 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x69, 0x73, + 0x6f, 0x64, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, 0x7d, 0x0a, 0x15, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, + 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, + 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, + 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x37, 0x0a, 0x16, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, + 0x78, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, + 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x36, 0x0a, 0x15, 0x53, 0x74, 0x6f, + 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x22, 0xb3, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, + 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, + 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x70, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x03, 0x66, 0x70, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, + 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x66, 0x0a, 0x15, 0x52, 0x65, 0x70, 0x6c, 0x61, + 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2e, 0x0a, 0x13, 0x6e, 0x75, 0x6d, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x72, + 0x65, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x6e, + 0x75, 0x6d, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x64, + 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x22, + 0xc7, 0x01, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x5f, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, + 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x66, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x66, 0x70, + 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x63, 0x61, 0x6d, + 0x65, 0x72, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x70, + 0x6c, 0x61, 0x79, 0x43, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, + 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3b, 0x0a, 0x1a, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x7c, 0x0a, 0x18, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, + 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, + 0x78, 0x74, 0x72, 0x61, 0x22, 0x3a, 0x0a, 0x19, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x22, 0x7c, 0x0a, 0x11, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, + 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x52, + 0x0a, 0x12, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, + 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x79, + 0x70, 0x65, 0x22, 0x9c, 0x02, 0x0a, 0x17, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, + 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x74, 0x65, 0x70, 0x73, 0x12, 0x10, 0x0a, 0x03, + 0x66, 0x70, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x66, 0x70, 0x73, 0x12, 0x2a, + 0x0a, 0x11, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x61, 0x74, 0x61, + 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x54, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x61, + 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, + 0x0d, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, + 0x61, 0x22, 0x93, 0x01, 0x0a, 0x18, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, + 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, + 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x53, 0x74, 0x65, 0x70, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x64, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, + 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x69, 0x73, + 0x6f, 0x64, 0x65, 0x50, 0x61, 0x74, 0x68, 0x2a, 0x74, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x52, 0x45, + 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, + 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, + 0x5f, 0x54, 0x45, 0x4c, 0x45, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, + 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x10, 0x02, 0x32, 0xa1, 0x0b, + 0x0a, 0x0e, 0x4c, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0xae, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x22, 0x33, 0x2f, 0x76, + 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, + 0x67, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x67, 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, + 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, + 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, + 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, + 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0xaa, + 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, + 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, + 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, + 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x0d, + 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x2e, + 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, + 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, + 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, + 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, + 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, + 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, + 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, + 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0xbe, 0x01, 0x0a, 0x12, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x32, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, + 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, + 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, + 0x22, 0x37, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x6c, 0x65, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xba, 0x01, 0x0a, 0x11, 0x53, 0x74, + 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x31, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, + 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, + 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, + 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, 0x36, + 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x9e, 0x01, 0x0a, 0x0a, 0x4c, 0x6f, 0x61, 0x64, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2a, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2b, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x22, 0x2f, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, + 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6c, 0x6f, 0x61, 0x64, + 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0xb7, 0x01, 0x0a, 0x10, 0x52, 0x75, 0x6e, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x2e, 0x76, + 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, + 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, + 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, + 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, 0x36, 0x2f, 0x76, 0x69, 0x61, 0x6d, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, + 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, + 0x75, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, + 0x65, 0x42, 0x41, 0x0a, 0x1b, 0x63, 0x6f, 0x6d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, + 0x5a, 0x22, 0x67, 0x6f, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, + 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_service_lerobot_v1_lerobot_proto_rawDescOnce sync.Once + file_service_lerobot_v1_lerobot_proto_rawDescData = file_service_lerobot_v1_lerobot_proto_rawDesc +) + +func file_service_lerobot_v1_lerobot_proto_rawDescGZIP() []byte { + file_service_lerobot_v1_lerobot_proto_rawDescOnce.Do(func() { + file_service_lerobot_v1_lerobot_proto_rawDescData = protoimpl.X.CompressGZIP(file_service_lerobot_v1_lerobot_proto_rawDescData) + }) + return file_service_lerobot_v1_lerobot_proto_rawDescData +} + +var file_service_lerobot_v1_lerobot_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_service_lerobot_v1_lerobot_proto_msgTypes = make([]protoimpl.MessageInfo, 16) +var file_service_lerobot_v1_lerobot_proto_goTypes = []any{ + (RecordingSource)(0), // 0: viam.service.lerobot.v1.RecordingSource + (*RecordEpisodeRequest)(nil), // 1: viam.service.lerobot.v1.RecordEpisodeRequest + (*RecordEpisodeResponse)(nil), // 2: viam.service.lerobot.v1.RecordEpisodeResponse + (*StartRecordingRequest)(nil), // 3: viam.service.lerobot.v1.StartRecordingRequest + (*StartRecordingResponse)(nil), // 4: viam.service.lerobot.v1.StartRecordingResponse + (*StopRecordingRequest)(nil), // 5: viam.service.lerobot.v1.StopRecordingRequest + (*StopRecordingResponse)(nil), // 6: viam.service.lerobot.v1.StopRecordingResponse + (*ReplayEpisodeRequest)(nil), // 7: viam.service.lerobot.v1.ReplayEpisodeRequest + (*ReplayEpisodeResponse)(nil), // 8: viam.service.lerobot.v1.ReplayEpisodeResponse + (*StartTeleoperationRequest)(nil), // 9: viam.service.lerobot.v1.StartTeleoperationRequest + (*StartTeleoperationResponse)(nil), // 10: viam.service.lerobot.v1.StartTeleoperationResponse + (*StopTeleoperationRequest)(nil), // 11: viam.service.lerobot.v1.StopTeleoperationRequest + (*StopTeleoperationResponse)(nil), // 12: viam.service.lerobot.v1.StopTeleoperationResponse + (*LoadPolicyRequest)(nil), // 13: viam.service.lerobot.v1.LoadPolicyRequest + (*LoadPolicyResponse)(nil), // 14: viam.service.lerobot.v1.LoadPolicyResponse + (*RunPolicyEpisodeRequest)(nil), // 15: viam.service.lerobot.v1.RunPolicyEpisodeRequest + (*RunPolicyEpisodeResponse)(nil), // 16: viam.service.lerobot.v1.RunPolicyEpisodeResponse + (*structpb.Struct)(nil), // 17: google.protobuf.Struct +} +var file_service_lerobot_v1_lerobot_proto_depIdxs = []int32{ + 0, // 0: viam.service.lerobot.v1.RecordEpisodeRequest.source:type_name -> viam.service.lerobot.v1.RecordingSource + 17, // 1: viam.service.lerobot.v1.RecordEpisodeRequest.extra:type_name -> google.protobuf.Struct + 17, // 2: viam.service.lerobot.v1.StartRecordingRequest.extra:type_name -> google.protobuf.Struct + 17, // 3: viam.service.lerobot.v1.StopRecordingRequest.extra:type_name -> google.protobuf.Struct + 17, // 4: viam.service.lerobot.v1.ReplayEpisodeRequest.extra:type_name -> google.protobuf.Struct + 17, // 5: viam.service.lerobot.v1.StartTeleoperationRequest.extra:type_name -> google.protobuf.Struct + 17, // 6: viam.service.lerobot.v1.StopTeleoperationRequest.extra:type_name -> google.protobuf.Struct + 17, // 7: viam.service.lerobot.v1.LoadPolicyRequest.extra:type_name -> google.protobuf.Struct + 17, // 8: viam.service.lerobot.v1.RunPolicyEpisodeRequest.extra:type_name -> google.protobuf.Struct + 3, // 9: viam.service.lerobot.v1.LeRobotService.StartRecording:input_type -> viam.service.lerobot.v1.StartRecordingRequest + 5, // 10: viam.service.lerobot.v1.LeRobotService.StopRecording:input_type -> viam.service.lerobot.v1.StopRecordingRequest + 1, // 11: viam.service.lerobot.v1.LeRobotService.RecordEpisode:input_type -> viam.service.lerobot.v1.RecordEpisodeRequest + 7, // 12: viam.service.lerobot.v1.LeRobotService.ReplayEpisode:input_type -> viam.service.lerobot.v1.ReplayEpisodeRequest + 9, // 13: viam.service.lerobot.v1.LeRobotService.StartTeleoperation:input_type -> viam.service.lerobot.v1.StartTeleoperationRequest + 11, // 14: viam.service.lerobot.v1.LeRobotService.StopTeleoperation:input_type -> viam.service.lerobot.v1.StopTeleoperationRequest + 13, // 15: viam.service.lerobot.v1.LeRobotService.LoadPolicy:input_type -> viam.service.lerobot.v1.LoadPolicyRequest + 15, // 16: viam.service.lerobot.v1.LeRobotService.RunPolicyEpisode:input_type -> viam.service.lerobot.v1.RunPolicyEpisodeRequest + 4, // 17: viam.service.lerobot.v1.LeRobotService.StartRecording:output_type -> viam.service.lerobot.v1.StartRecordingResponse + 6, // 18: viam.service.lerobot.v1.LeRobotService.StopRecording:output_type -> viam.service.lerobot.v1.StopRecordingResponse + 2, // 19: viam.service.lerobot.v1.LeRobotService.RecordEpisode:output_type -> viam.service.lerobot.v1.RecordEpisodeResponse + 8, // 20: viam.service.lerobot.v1.LeRobotService.ReplayEpisode:output_type -> viam.service.lerobot.v1.ReplayEpisodeResponse + 10, // 21: viam.service.lerobot.v1.LeRobotService.StartTeleoperation:output_type -> viam.service.lerobot.v1.StartTeleoperationResponse + 12, // 22: viam.service.lerobot.v1.LeRobotService.StopTeleoperation:output_type -> viam.service.lerobot.v1.StopTeleoperationResponse + 14, // 23: viam.service.lerobot.v1.LeRobotService.LoadPolicy:output_type -> viam.service.lerobot.v1.LoadPolicyResponse + 16, // 24: viam.service.lerobot.v1.LeRobotService.RunPolicyEpisode:output_type -> viam.service.lerobot.v1.RunPolicyEpisodeResponse + 17, // [17:25] is the sub-list for method output_type + 9, // [9:17] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name +} + +func init() { file_service_lerobot_v1_lerobot_proto_init() } +func file_service_lerobot_v1_lerobot_proto_init() { + if File_service_lerobot_v1_lerobot_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_service_lerobot_v1_lerobot_proto_rawDesc, + NumEnums: 1, + NumMessages: 16, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_service_lerobot_v1_lerobot_proto_goTypes, + DependencyIndexes: file_service_lerobot_v1_lerobot_proto_depIdxs, + EnumInfos: file_service_lerobot_v1_lerobot_proto_enumTypes, + MessageInfos: file_service_lerobot_v1_lerobot_proto_msgTypes, + }.Build() + File_service_lerobot_v1_lerobot_proto = out.File + file_service_lerobot_v1_lerobot_proto_rawDesc = nil + file_service_lerobot_v1_lerobot_proto_goTypes = nil + file_service_lerobot_v1_lerobot_proto_depIdxs = nil +} diff --git a/service/lerobot/v1/lerobot.pb.gw.go b/service/lerobot/v1/lerobot.pb.gw.go new file mode 100644 index 000000000..8a5ee9ef0 --- /dev/null +++ b/service/lerobot/v1/lerobot.pb.gw.go @@ -0,0 +1,1054 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: service/lerobot/v1/lerobot.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +var ( + filter_LeRobotService_StartRecording_0 = &utilities.DoubleArray{Encoding: map[string]int{"name": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_LeRobotService_StartRecording_0(ctx context.Context, marshaler runtime.Marshaler, client LeRobotServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq StartRecordingRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_LeRobotService_StartRecording_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.StartRecording(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_LeRobotService_StartRecording_0(ctx context.Context, marshaler runtime.Marshaler, server LeRobotServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq StartRecordingRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_LeRobotService_StartRecording_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.StartRecording(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_LeRobotService_StopRecording_0 = &utilities.DoubleArray{Encoding: map[string]int{"name": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_LeRobotService_StopRecording_0(ctx context.Context, marshaler runtime.Marshaler, client LeRobotServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq StopRecordingRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_LeRobotService_StopRecording_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.StopRecording(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_LeRobotService_StopRecording_0(ctx context.Context, marshaler runtime.Marshaler, server LeRobotServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq StopRecordingRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_LeRobotService_StopRecording_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.StopRecording(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_LeRobotService_RecordEpisode_0 = &utilities.DoubleArray{Encoding: map[string]int{"name": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_LeRobotService_RecordEpisode_0(ctx context.Context, marshaler runtime.Marshaler, client LeRobotServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RecordEpisodeRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_LeRobotService_RecordEpisode_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.RecordEpisode(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_LeRobotService_RecordEpisode_0(ctx context.Context, marshaler runtime.Marshaler, server LeRobotServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RecordEpisodeRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_LeRobotService_RecordEpisode_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.RecordEpisode(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_LeRobotService_ReplayEpisode_0 = &utilities.DoubleArray{Encoding: map[string]int{"name": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_LeRobotService_ReplayEpisode_0(ctx context.Context, marshaler runtime.Marshaler, client LeRobotServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ReplayEpisodeRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_LeRobotService_ReplayEpisode_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ReplayEpisode(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_LeRobotService_ReplayEpisode_0(ctx context.Context, marshaler runtime.Marshaler, server LeRobotServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ReplayEpisodeRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_LeRobotService_ReplayEpisode_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ReplayEpisode(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_LeRobotService_StartTeleoperation_0 = &utilities.DoubleArray{Encoding: map[string]int{"name": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_LeRobotService_StartTeleoperation_0(ctx context.Context, marshaler runtime.Marshaler, client LeRobotServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq StartTeleoperationRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_LeRobotService_StartTeleoperation_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.StartTeleoperation(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_LeRobotService_StartTeleoperation_0(ctx context.Context, marshaler runtime.Marshaler, server LeRobotServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq StartTeleoperationRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_LeRobotService_StartTeleoperation_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.StartTeleoperation(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_LeRobotService_StopTeleoperation_0 = &utilities.DoubleArray{Encoding: map[string]int{"name": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_LeRobotService_StopTeleoperation_0(ctx context.Context, marshaler runtime.Marshaler, client LeRobotServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq StopTeleoperationRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_LeRobotService_StopTeleoperation_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.StopTeleoperation(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_LeRobotService_StopTeleoperation_0(ctx context.Context, marshaler runtime.Marshaler, server LeRobotServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq StopTeleoperationRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_LeRobotService_StopTeleoperation_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.StopTeleoperation(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_LeRobotService_LoadPolicy_0 = &utilities.DoubleArray{Encoding: map[string]int{"name": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_LeRobotService_LoadPolicy_0(ctx context.Context, marshaler runtime.Marshaler, client LeRobotServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq LoadPolicyRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_LeRobotService_LoadPolicy_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.LoadPolicy(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_LeRobotService_LoadPolicy_0(ctx context.Context, marshaler runtime.Marshaler, server LeRobotServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq LoadPolicyRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_LeRobotService_LoadPolicy_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.LoadPolicy(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_LeRobotService_RunPolicyEpisode_0 = &utilities.DoubleArray{Encoding: map[string]int{"name": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_LeRobotService_RunPolicyEpisode_0(ctx context.Context, marshaler runtime.Marshaler, client LeRobotServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RunPolicyEpisodeRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_LeRobotService_RunPolicyEpisode_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.RunPolicyEpisode(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_LeRobotService_RunPolicyEpisode_0(ctx context.Context, marshaler runtime.Marshaler, server LeRobotServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RunPolicyEpisodeRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_LeRobotService_RunPolicyEpisode_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.RunPolicyEpisode(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterLeRobotServiceHandlerServer registers the http handlers for service LeRobotService to "mux". +// UnaryRPC :call LeRobotServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterLeRobotServiceHandlerFromEndpoint instead. +func RegisterLeRobotServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server LeRobotServiceServer) error { + + mux.Handle("POST", pattern_LeRobotService_StartRecording_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/viam.service.lerobot.v1.LeRobotService/StartRecording", runtime.WithHTTPPathPattern("/viam/api/v1/service/lerobot/{name}/start_recording")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_LeRobotService_StartRecording_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_LeRobotService_StartRecording_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_LeRobotService_StopRecording_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/viam.service.lerobot.v1.LeRobotService/StopRecording", runtime.WithHTTPPathPattern("/viam/api/v1/service/lerobot/{name}/stop_recording")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_LeRobotService_StopRecording_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_LeRobotService_StopRecording_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_LeRobotService_RecordEpisode_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/viam.service.lerobot.v1.LeRobotService/RecordEpisode", runtime.WithHTTPPathPattern("/viam/api/v1/service/lerobot/{name}/record_episode")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_LeRobotService_RecordEpisode_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_LeRobotService_RecordEpisode_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_LeRobotService_ReplayEpisode_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/viam.service.lerobot.v1.LeRobotService/ReplayEpisode", runtime.WithHTTPPathPattern("/viam/api/v1/service/lerobot/{name}/replay_episode")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_LeRobotService_ReplayEpisode_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_LeRobotService_ReplayEpisode_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_LeRobotService_StartTeleoperation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/viam.service.lerobot.v1.LeRobotService/StartTeleoperation", runtime.WithHTTPPathPattern("/viam/api/v1/service/lerobot/{name}/start_teleoperation")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_LeRobotService_StartTeleoperation_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_LeRobotService_StartTeleoperation_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_LeRobotService_StopTeleoperation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/viam.service.lerobot.v1.LeRobotService/StopTeleoperation", runtime.WithHTTPPathPattern("/viam/api/v1/service/lerobot/{name}/stop_teleoperation")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_LeRobotService_StopTeleoperation_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_LeRobotService_StopTeleoperation_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_LeRobotService_LoadPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/viam.service.lerobot.v1.LeRobotService/LoadPolicy", runtime.WithHTTPPathPattern("/viam/api/v1/service/lerobot/{name}/load_policy")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_LeRobotService_LoadPolicy_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_LeRobotService_LoadPolicy_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_LeRobotService_RunPolicyEpisode_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/viam.service.lerobot.v1.LeRobotService/RunPolicyEpisode", runtime.WithHTTPPathPattern("/viam/api/v1/service/lerobot/{name}/run_policy_episode")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_LeRobotService_RunPolicyEpisode_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_LeRobotService_RunPolicyEpisode_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterLeRobotServiceHandlerFromEndpoint is same as RegisterLeRobotServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterLeRobotServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.NewClient(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterLeRobotServiceHandler(ctx, mux, conn) +} + +// RegisterLeRobotServiceHandler registers the http handlers for service LeRobotService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterLeRobotServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterLeRobotServiceHandlerClient(ctx, mux, NewLeRobotServiceClient(conn)) +} + +// RegisterLeRobotServiceHandlerClient registers the http handlers for service LeRobotService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "LeRobotServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "LeRobotServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "LeRobotServiceClient" to call the correct interceptors. +func RegisterLeRobotServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client LeRobotServiceClient) error { + + mux.Handle("POST", pattern_LeRobotService_StartRecording_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/viam.service.lerobot.v1.LeRobotService/StartRecording", runtime.WithHTTPPathPattern("/viam/api/v1/service/lerobot/{name}/start_recording")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_LeRobotService_StartRecording_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_LeRobotService_StartRecording_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_LeRobotService_StopRecording_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/viam.service.lerobot.v1.LeRobotService/StopRecording", runtime.WithHTTPPathPattern("/viam/api/v1/service/lerobot/{name}/stop_recording")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_LeRobotService_StopRecording_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_LeRobotService_StopRecording_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_LeRobotService_RecordEpisode_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/viam.service.lerobot.v1.LeRobotService/RecordEpisode", runtime.WithHTTPPathPattern("/viam/api/v1/service/lerobot/{name}/record_episode")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_LeRobotService_RecordEpisode_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_LeRobotService_RecordEpisode_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_LeRobotService_ReplayEpisode_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/viam.service.lerobot.v1.LeRobotService/ReplayEpisode", runtime.WithHTTPPathPattern("/viam/api/v1/service/lerobot/{name}/replay_episode")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_LeRobotService_ReplayEpisode_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_LeRobotService_ReplayEpisode_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_LeRobotService_StartTeleoperation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/viam.service.lerobot.v1.LeRobotService/StartTeleoperation", runtime.WithHTTPPathPattern("/viam/api/v1/service/lerobot/{name}/start_teleoperation")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_LeRobotService_StartTeleoperation_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_LeRobotService_StartTeleoperation_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_LeRobotService_StopTeleoperation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/viam.service.lerobot.v1.LeRobotService/StopTeleoperation", runtime.WithHTTPPathPattern("/viam/api/v1/service/lerobot/{name}/stop_teleoperation")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_LeRobotService_StopTeleoperation_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_LeRobotService_StopTeleoperation_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_LeRobotService_LoadPolicy_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/viam.service.lerobot.v1.LeRobotService/LoadPolicy", runtime.WithHTTPPathPattern("/viam/api/v1/service/lerobot/{name}/load_policy")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_LeRobotService_LoadPolicy_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_LeRobotService_LoadPolicy_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_LeRobotService_RunPolicyEpisode_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/viam.service.lerobot.v1.LeRobotService/RunPolicyEpisode", runtime.WithHTTPPathPattern("/viam/api/v1/service/lerobot/{name}/run_policy_episode")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_LeRobotService_RunPolicyEpisode_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_LeRobotService_RunPolicyEpisode_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_LeRobotService_StartRecording_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"viam", "api", "v1", "service", "lerobot", "name", "start_recording"}, "")) + + pattern_LeRobotService_StopRecording_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"viam", "api", "v1", "service", "lerobot", "name", "stop_recording"}, "")) + + pattern_LeRobotService_RecordEpisode_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"viam", "api", "v1", "service", "lerobot", "name", "record_episode"}, "")) + + pattern_LeRobotService_ReplayEpisode_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"viam", "api", "v1", "service", "lerobot", "name", "replay_episode"}, "")) + + pattern_LeRobotService_StartTeleoperation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"viam", "api", "v1", "service", "lerobot", "name", "start_teleoperation"}, "")) + + pattern_LeRobotService_StopTeleoperation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"viam", "api", "v1", "service", "lerobot", "name", "stop_teleoperation"}, "")) + + pattern_LeRobotService_LoadPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"viam", "api", "v1", "service", "lerobot", "name", "load_policy"}, "")) + + pattern_LeRobotService_RunPolicyEpisode_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"viam", "api", "v1", "service", "lerobot", "name", "run_policy_episode"}, "")) +) + +var ( + forward_LeRobotService_StartRecording_0 = runtime.ForwardResponseMessage + + forward_LeRobotService_StopRecording_0 = runtime.ForwardResponseMessage + + forward_LeRobotService_RecordEpisode_0 = runtime.ForwardResponseMessage + + forward_LeRobotService_ReplayEpisode_0 = runtime.ForwardResponseMessage + + forward_LeRobotService_StartTeleoperation_0 = runtime.ForwardResponseMessage + + forward_LeRobotService_StopTeleoperation_0 = runtime.ForwardResponseMessage + + forward_LeRobotService_LoadPolicy_0 = runtime.ForwardResponseMessage + + forward_LeRobotService_RunPolicyEpisode_0 = runtime.ForwardResponseMessage +) diff --git a/service/lerobot/v1/lerobot_grpc.pb.go b/service/lerobot/v1/lerobot_grpc.pb.go new file mode 100644 index 000000000..51cafc172 --- /dev/null +++ b/service/lerobot/v1/lerobot_grpc.pb.go @@ -0,0 +1,373 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc (unknown) +// source: service/lerobot/v1/lerobot.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// LeRobotServiceClient is the client API for LeRobotService 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 LeRobotServiceClient interface { + // StartRecording begins a new recording session for the specified dataset. + StartRecording(ctx context.Context, in *StartRecordingRequest, opts ...grpc.CallOption) (*StartRecordingResponse, error) + // StopRecording ends the current recording session and saves the data. + StopRecording(ctx context.Context, in *StopRecordingRequest, opts ...grpc.CallOption) (*StopRecordingResponse, error) + // RecordEpisode records a single episode with the specified parameters. + RecordEpisode(ctx context.Context, in *RecordEpisodeRequest, opts ...grpc.CallOption) (*RecordEpisodeResponse, error) + // ReplayEpisode plays back a previously recorded episode. + ReplayEpisode(ctx context.Context, in *ReplayEpisodeRequest, opts ...grpc.CallOption) (*ReplayEpisodeResponse, error) + // StartTeleoperation begins a teleoperation session with the specified device. + StartTeleoperation(ctx context.Context, in *StartTeleoperationRequest, opts ...grpc.CallOption) (*StartTeleoperationResponse, error) + // StopTeleoperation ends the current teleoperation session. + StopTeleoperation(ctx context.Context, in *StopTeleoperationRequest, opts ...grpc.CallOption) (*StopTeleoperationResponse, error) + // LoadPolicy loads a policy from a HuggingFace repo or local path. + LoadPolicy(ctx context.Context, in *LoadPolicyRequest, opts ...grpc.CallOption) (*LoadPolicyResponse, error) + // RunPolicyEpisode executes a loaded policy for a single episode. + RunPolicyEpisode(ctx context.Context, in *RunPolicyEpisodeRequest, opts ...grpc.CallOption) (*RunPolicyEpisodeResponse, error) +} + +type leRobotServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewLeRobotServiceClient(cc grpc.ClientConnInterface) LeRobotServiceClient { + return &leRobotServiceClient{cc} +} + +func (c *leRobotServiceClient) StartRecording(ctx context.Context, in *StartRecordingRequest, opts ...grpc.CallOption) (*StartRecordingResponse, error) { + out := new(StartRecordingResponse) + err := c.cc.Invoke(ctx, "/viam.service.lerobot.v1.LeRobotService/StartRecording", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *leRobotServiceClient) StopRecording(ctx context.Context, in *StopRecordingRequest, opts ...grpc.CallOption) (*StopRecordingResponse, error) { + out := new(StopRecordingResponse) + err := c.cc.Invoke(ctx, "/viam.service.lerobot.v1.LeRobotService/StopRecording", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *leRobotServiceClient) RecordEpisode(ctx context.Context, in *RecordEpisodeRequest, opts ...grpc.CallOption) (*RecordEpisodeResponse, error) { + out := new(RecordEpisodeResponse) + err := c.cc.Invoke(ctx, "/viam.service.lerobot.v1.LeRobotService/RecordEpisode", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *leRobotServiceClient) ReplayEpisode(ctx context.Context, in *ReplayEpisodeRequest, opts ...grpc.CallOption) (*ReplayEpisodeResponse, error) { + out := new(ReplayEpisodeResponse) + err := c.cc.Invoke(ctx, "/viam.service.lerobot.v1.LeRobotService/ReplayEpisode", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *leRobotServiceClient) StartTeleoperation(ctx context.Context, in *StartTeleoperationRequest, opts ...grpc.CallOption) (*StartTeleoperationResponse, error) { + out := new(StartTeleoperationResponse) + err := c.cc.Invoke(ctx, "/viam.service.lerobot.v1.LeRobotService/StartTeleoperation", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *leRobotServiceClient) StopTeleoperation(ctx context.Context, in *StopTeleoperationRequest, opts ...grpc.CallOption) (*StopTeleoperationResponse, error) { + out := new(StopTeleoperationResponse) + err := c.cc.Invoke(ctx, "/viam.service.lerobot.v1.LeRobotService/StopTeleoperation", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *leRobotServiceClient) LoadPolicy(ctx context.Context, in *LoadPolicyRequest, opts ...grpc.CallOption) (*LoadPolicyResponse, error) { + out := new(LoadPolicyResponse) + err := c.cc.Invoke(ctx, "/viam.service.lerobot.v1.LeRobotService/LoadPolicy", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *leRobotServiceClient) RunPolicyEpisode(ctx context.Context, in *RunPolicyEpisodeRequest, opts ...grpc.CallOption) (*RunPolicyEpisodeResponse, error) { + out := new(RunPolicyEpisodeResponse) + err := c.cc.Invoke(ctx, "/viam.service.lerobot.v1.LeRobotService/RunPolicyEpisode", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// LeRobotServiceServer is the server API for LeRobotService service. +// All implementations must embed UnimplementedLeRobotServiceServer +// for forward compatibility +type LeRobotServiceServer interface { + // StartRecording begins a new recording session for the specified dataset. + StartRecording(context.Context, *StartRecordingRequest) (*StartRecordingResponse, error) + // StopRecording ends the current recording session and saves the data. + StopRecording(context.Context, *StopRecordingRequest) (*StopRecordingResponse, error) + // RecordEpisode records a single episode with the specified parameters. + RecordEpisode(context.Context, *RecordEpisodeRequest) (*RecordEpisodeResponse, error) + // ReplayEpisode plays back a previously recorded episode. + ReplayEpisode(context.Context, *ReplayEpisodeRequest) (*ReplayEpisodeResponse, error) + // StartTeleoperation begins a teleoperation session with the specified device. + StartTeleoperation(context.Context, *StartTeleoperationRequest) (*StartTeleoperationResponse, error) + // StopTeleoperation ends the current teleoperation session. + StopTeleoperation(context.Context, *StopTeleoperationRequest) (*StopTeleoperationResponse, error) + // LoadPolicy loads a policy from a HuggingFace repo or local path. + LoadPolicy(context.Context, *LoadPolicyRequest) (*LoadPolicyResponse, error) + // RunPolicyEpisode executes a loaded policy for a single episode. + RunPolicyEpisode(context.Context, *RunPolicyEpisodeRequest) (*RunPolicyEpisodeResponse, error) + mustEmbedUnimplementedLeRobotServiceServer() +} + +// UnimplementedLeRobotServiceServer must be embedded to have forward compatible implementations. +type UnimplementedLeRobotServiceServer struct { +} + +func (UnimplementedLeRobotServiceServer) StartRecording(context.Context, *StartRecordingRequest) (*StartRecordingResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StartRecording not implemented") +} +func (UnimplementedLeRobotServiceServer) StopRecording(context.Context, *StopRecordingRequest) (*StopRecordingResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StopRecording not implemented") +} +func (UnimplementedLeRobotServiceServer) RecordEpisode(context.Context, *RecordEpisodeRequest) (*RecordEpisodeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RecordEpisode not implemented") +} +func (UnimplementedLeRobotServiceServer) ReplayEpisode(context.Context, *ReplayEpisodeRequest) (*ReplayEpisodeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ReplayEpisode not implemented") +} +func (UnimplementedLeRobotServiceServer) StartTeleoperation(context.Context, *StartTeleoperationRequest) (*StartTeleoperationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StartTeleoperation not implemented") +} +func (UnimplementedLeRobotServiceServer) StopTeleoperation(context.Context, *StopTeleoperationRequest) (*StopTeleoperationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StopTeleoperation not implemented") +} +func (UnimplementedLeRobotServiceServer) LoadPolicy(context.Context, *LoadPolicyRequest) (*LoadPolicyResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method LoadPolicy not implemented") +} +func (UnimplementedLeRobotServiceServer) RunPolicyEpisode(context.Context, *RunPolicyEpisodeRequest) (*RunPolicyEpisodeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RunPolicyEpisode not implemented") +} +func (UnimplementedLeRobotServiceServer) mustEmbedUnimplementedLeRobotServiceServer() {} + +// UnsafeLeRobotServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to LeRobotServiceServer will +// result in compilation errors. +type UnsafeLeRobotServiceServer interface { + mustEmbedUnimplementedLeRobotServiceServer() +} + +func RegisterLeRobotServiceServer(s grpc.ServiceRegistrar, srv LeRobotServiceServer) { + s.RegisterService(&LeRobotService_ServiceDesc, srv) +} + +func _LeRobotService_StartRecording_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StartRecordingRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LeRobotServiceServer).StartRecording(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/viam.service.lerobot.v1.LeRobotService/StartRecording", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LeRobotServiceServer).StartRecording(ctx, req.(*StartRecordingRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LeRobotService_StopRecording_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StopRecordingRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LeRobotServiceServer).StopRecording(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/viam.service.lerobot.v1.LeRobotService/StopRecording", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LeRobotServiceServer).StopRecording(ctx, req.(*StopRecordingRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LeRobotService_RecordEpisode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RecordEpisodeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LeRobotServiceServer).RecordEpisode(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/viam.service.lerobot.v1.LeRobotService/RecordEpisode", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LeRobotServiceServer).RecordEpisode(ctx, req.(*RecordEpisodeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LeRobotService_ReplayEpisode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ReplayEpisodeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LeRobotServiceServer).ReplayEpisode(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/viam.service.lerobot.v1.LeRobotService/ReplayEpisode", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LeRobotServiceServer).ReplayEpisode(ctx, req.(*ReplayEpisodeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LeRobotService_StartTeleoperation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StartTeleoperationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LeRobotServiceServer).StartTeleoperation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/viam.service.lerobot.v1.LeRobotService/StartTeleoperation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LeRobotServiceServer).StartTeleoperation(ctx, req.(*StartTeleoperationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LeRobotService_StopTeleoperation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StopTeleoperationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LeRobotServiceServer).StopTeleoperation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/viam.service.lerobot.v1.LeRobotService/StopTeleoperation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LeRobotServiceServer).StopTeleoperation(ctx, req.(*StopTeleoperationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LeRobotService_LoadPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(LoadPolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LeRobotServiceServer).LoadPolicy(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/viam.service.lerobot.v1.LeRobotService/LoadPolicy", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LeRobotServiceServer).LoadPolicy(ctx, req.(*LoadPolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _LeRobotService_RunPolicyEpisode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RunPolicyEpisodeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LeRobotServiceServer).RunPolicyEpisode(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/viam.service.lerobot.v1.LeRobotService/RunPolicyEpisode", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LeRobotServiceServer).RunPolicyEpisode(ctx, req.(*RunPolicyEpisodeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// LeRobotService_ServiceDesc is the grpc.ServiceDesc for LeRobotService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var LeRobotService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "viam.service.lerobot.v1.LeRobotService", + HandlerType: (*LeRobotServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "StartRecording", + Handler: _LeRobotService_StartRecording_Handler, + }, + { + MethodName: "StopRecording", + Handler: _LeRobotService_StopRecording_Handler, + }, + { + MethodName: "RecordEpisode", + Handler: _LeRobotService_RecordEpisode_Handler, + }, + { + MethodName: "ReplayEpisode", + Handler: _LeRobotService_ReplayEpisode_Handler, + }, + { + MethodName: "StartTeleoperation", + Handler: _LeRobotService_StartTeleoperation_Handler, + }, + { + MethodName: "StopTeleoperation", + Handler: _LeRobotService_StopTeleoperation_Handler, + }, + { + MethodName: "LoadPolicy", + Handler: _LeRobotService_LoadPolicy_Handler, + }, + { + MethodName: "RunPolicyEpisode", + Handler: _LeRobotService_RunPolicyEpisode_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "service/lerobot/v1/lerobot.proto", +} From 9b1cecd0b0d07ad9711fe984b725239c4f068d91 Mon Sep 17 00:00:00 2001 From: Jalen Geason Date: Sat, 10 Jan 2026 18:05:04 -0500 Subject: [PATCH 02/12] add DoCommand --- proto/viam/service/lerobot/v1/lerobot.proto | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/proto/viam/service/lerobot/v1/lerobot.proto b/proto/viam/service/lerobot/v1/lerobot.proto index fff641482..273d18ba2 100644 --- a/proto/viam/service/lerobot/v1/lerobot.proto +++ b/proto/viam/service/lerobot/v1/lerobot.proto @@ -4,6 +4,7 @@ package viam.service.lerobot.v1; import "google/api/annotations.proto"; import "google/protobuf/struct.proto"; +import "proto/viam/common/v1/common.proto"; option go_package = "go.viam.com/api/service/lerobot/v1"; option java_package = "com.viam.service.lerobot.v1"; @@ -49,6 +50,11 @@ service LeRobotService { rpc RunPolicyEpisode(RunPolicyEpisodeRequest) returns (RunPolicyEpisodeResponse) { option (google.api.http) = {post: "/viam/api/v1/service/lerobot/{name}/run_policy_episode"}; } + + // DoCommand sends/receives arbitrary commands + rpc DoCommand(common.v1.DoCommandRequest) returns (common.v1.DoCommandResponse) { + option (google.api.http) = {post: "/viam/api/v1/service/lerobot/{name}/do_command"}; + } } message RecordEpisodeRequest { From 8f25b5e4aa494eda7360820c3dfaced18444cd2c Mon Sep 17 00:00:00 2001 From: Jalen Geason Date: Sat, 10 Jan 2026 18:05:52 -0500 Subject: [PATCH 03/12] fix import --- proto/viam/service/lerobot/v1/lerobot.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proto/viam/service/lerobot/v1/lerobot.proto b/proto/viam/service/lerobot/v1/lerobot.proto index 273d18ba2..87455307d 100644 --- a/proto/viam/service/lerobot/v1/lerobot.proto +++ b/proto/viam/service/lerobot/v1/lerobot.proto @@ -4,7 +4,7 @@ package viam.service.lerobot.v1; import "google/api/annotations.proto"; import "google/protobuf/struct.proto"; -import "proto/viam/common/v1/common.proto"; +import "common/v1/common.proto"; option go_package = "go.viam.com/api/service/lerobot/v1"; option java_package = "com.viam.service.lerobot.v1"; From ed77684036f3b93176d88898857e05ae0807951f Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 10 Jan 2026 23:06:29 +0000 Subject: [PATCH 04/12] Built new protos from 8f25b5e --- .../service/lerobot/v1/lerobot_grpc_web_pb.js | 63 +++ gen/js/service/lerobot/v1/lerobot_pb.d.ts | 1 + gen/js/service/lerobot/v1/lerobot_pb.js | 2 + .../lerobot/v1/lerobot_pb_service.d.ts | 20 + .../service/lerobot/v1/lerobot_pb_service.js | 41 ++ proto/viam/service/lerobot/v1/lerobot.proto | 2 +- service/lerobot/v1/lerobot.pb.go | 505 +++++++++--------- service/lerobot/v1/lerobot.pb.gw.go | 122 +++++ service/lerobot/v1/lerobot_grpc.pb.go | 39 ++ 9 files changed, 549 insertions(+), 246 deletions(-) diff --git a/gen/js/service/lerobot/v1/lerobot_grpc_web_pb.js b/gen/js/service/lerobot/v1/lerobot_grpc_web_pb.js index 7f715f8c7..3d4cf0fe1 100644 --- a/gen/js/service/lerobot/v1/lerobot_grpc_web_pb.js +++ b/gen/js/service/lerobot/v1/lerobot_grpc_web_pb.js @@ -20,6 +20,8 @@ const grpc = {}; grpc.web = require('grpc-web'); +var common_v1_common_pb = require('../../../common/v1/common_pb.js') + var google_api_annotations_pb = require('../../../google/api/annotations_pb.js') var google_protobuf_struct_pb = require('google-protobuf/google/protobuf/struct_pb.js') @@ -569,5 +571,66 @@ proto.viam.service.lerobot.v1.LeRobotServicePromiseClient.prototype.runPolicyEpi }; +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.viam.common.v1.DoCommandRequest, + * !proto.viam.common.v1.DoCommandResponse>} + */ +const methodDescriptor_LeRobotService_DoCommand = new grpc.web.MethodDescriptor( + '/viam.service.lerobot.v1.LeRobotService/DoCommand', + grpc.web.MethodType.UNARY, + common_v1_common_pb.DoCommandRequest, + common_v1_common_pb.DoCommandResponse, + /** + * @param {!proto.viam.common.v1.DoCommandRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + common_v1_common_pb.DoCommandResponse.deserializeBinary +); + + +/** + * @param {!proto.viam.common.v1.DoCommandRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.RpcError, ?proto.viam.common.v1.DoCommandResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.viam.service.lerobot.v1.LeRobotServiceClient.prototype.doCommand = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/viam.service.lerobot.v1.LeRobotService/DoCommand', + request, + metadata || {}, + methodDescriptor_LeRobotService_DoCommand, + callback); +}; + + +/** + * @param {!proto.viam.common.v1.DoCommandRequest} request The + * request proto + * @param {?Object=} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.viam.service.lerobot.v1.LeRobotServicePromiseClient.prototype.doCommand = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/viam.service.lerobot.v1.LeRobotService/DoCommand', + request, + metadata || {}, + methodDescriptor_LeRobotService_DoCommand); +}; + + module.exports = proto.viam.service.lerobot.v1; diff --git a/gen/js/service/lerobot/v1/lerobot_pb.d.ts b/gen/js/service/lerobot/v1/lerobot_pb.d.ts index 11dfa4dd3..a9d195a52 100644 --- a/gen/js/service/lerobot/v1/lerobot_pb.d.ts +++ b/gen/js/service/lerobot/v1/lerobot_pb.d.ts @@ -2,6 +2,7 @@ // file: service/lerobot/v1/lerobot.proto import * as jspb from "google-protobuf"; +import * as common_v1_common_pb from "../../../common/v1/common_pb"; import * as google_api_annotations_pb from "../../../google/api/annotations_pb"; import * as google_protobuf_struct_pb from "google-protobuf/google/protobuf/struct_pb"; diff --git a/gen/js/service/lerobot/v1/lerobot_pb.js b/gen/js/service/lerobot/v1/lerobot_pb.js index dbffb19de..055ba1d47 100644 --- a/gen/js/service/lerobot/v1/lerobot_pb.js +++ b/gen/js/service/lerobot/v1/lerobot_pb.js @@ -15,6 +15,8 @@ var jspb = require('google-protobuf'); var goog = jspb; var global = (function() { return this || window || global || self || Function('return this')(); }).call(null); +var common_v1_common_pb = require('../../../common/v1/common_pb.js'); +goog.object.extend(proto, common_v1_common_pb); var google_api_annotations_pb = require('../../../google/api/annotations_pb.js'); goog.object.extend(proto, google_api_annotations_pb); var google_protobuf_struct_pb = require('google-protobuf/google/protobuf/struct_pb.js'); diff --git a/gen/js/service/lerobot/v1/lerobot_pb_service.d.ts b/gen/js/service/lerobot/v1/lerobot_pb_service.d.ts index b89c28335..d17d9e0c5 100644 --- a/gen/js/service/lerobot/v1/lerobot_pb_service.d.ts +++ b/gen/js/service/lerobot/v1/lerobot_pb_service.d.ts @@ -2,6 +2,7 @@ // file: service/lerobot/v1/lerobot.proto import * as service_lerobot_v1_lerobot_pb from "../../../service/lerobot/v1/lerobot_pb"; +import * as common_v1_common_pb from "../../../common/v1/common_pb"; import {grpc} from "@improbable-eng/grpc-web"; type LeRobotServiceStartRecording = { @@ -76,6 +77,15 @@ type LeRobotServiceRunPolicyEpisode = { readonly responseType: typeof service_lerobot_v1_lerobot_pb.RunPolicyEpisodeResponse; }; +type LeRobotServiceDoCommand = { + readonly methodName: string; + readonly service: typeof LeRobotService; + readonly requestStream: false; + readonly responseStream: false; + readonly requestType: typeof common_v1_common_pb.DoCommandRequest; + readonly responseType: typeof common_v1_common_pb.DoCommandResponse; +}; + export class LeRobotService { static readonly serviceName: string; static readonly StartRecording: LeRobotServiceStartRecording; @@ -86,6 +96,7 @@ export class LeRobotService { static readonly StopTeleoperation: LeRobotServiceStopTeleoperation; static readonly LoadPolicy: LeRobotServiceLoadPolicy; static readonly RunPolicyEpisode: LeRobotServiceRunPolicyEpisode; + static readonly DoCommand: LeRobotServiceDoCommand; } export type ServiceError = { message: string, code: number; metadata: grpc.Metadata } @@ -192,5 +203,14 @@ export class LeRobotServiceClient { requestMessage: service_lerobot_v1_lerobot_pb.RunPolicyEpisodeRequest, callback: (error: ServiceError|null, responseMessage: service_lerobot_v1_lerobot_pb.RunPolicyEpisodeResponse|null) => void ): UnaryResponse; + doCommand( + requestMessage: common_v1_common_pb.DoCommandRequest, + metadata: grpc.Metadata, + callback: (error: ServiceError|null, responseMessage: common_v1_common_pb.DoCommandResponse|null) => void + ): UnaryResponse; + doCommand( + requestMessage: common_v1_common_pb.DoCommandRequest, + callback: (error: ServiceError|null, responseMessage: common_v1_common_pb.DoCommandResponse|null) => void + ): UnaryResponse; } diff --git a/gen/js/service/lerobot/v1/lerobot_pb_service.js b/gen/js/service/lerobot/v1/lerobot_pb_service.js index 8bfd554c7..82de178eb 100644 --- a/gen/js/service/lerobot/v1/lerobot_pb_service.js +++ b/gen/js/service/lerobot/v1/lerobot_pb_service.js @@ -2,6 +2,7 @@ // file: service/lerobot/v1/lerobot.proto var service_lerobot_v1_lerobot_pb = require("../../../service/lerobot/v1/lerobot_pb"); +var common_v1_common_pb = require("../../../common/v1/common_pb"); var grpc = require("@improbable-eng/grpc-web").grpc; var LeRobotService = (function () { @@ -82,6 +83,15 @@ LeRobotService.RunPolicyEpisode = { responseType: service_lerobot_v1_lerobot_pb.RunPolicyEpisodeResponse }; +LeRobotService.DoCommand = { + methodName: "DoCommand", + service: LeRobotService, + requestStream: false, + responseStream: false, + requestType: common_v1_common_pb.DoCommandRequest, + responseType: common_v1_common_pb.DoCommandResponse +}; + exports.LeRobotService = LeRobotService; function LeRobotServiceClient(serviceHost, options) { @@ -337,5 +347,36 @@ LeRobotServiceClient.prototype.runPolicyEpisode = function runPolicyEpisode(requ }; }; +LeRobotServiceClient.prototype.doCommand = function doCommand(requestMessage, metadata, callback) { + if (arguments.length === 2) { + callback = arguments[1]; + } + var client = grpc.unary(LeRobotService.DoCommand, { + request: requestMessage, + host: this.serviceHost, + metadata: metadata, + transport: this.options.transport, + debug: this.options.debug, + onEnd: function (response) { + if (callback) { + if (response.status !== grpc.Code.OK) { + var err = new Error(response.statusMessage); + err.code = response.status; + err.metadata = response.trailers; + callback(err, null); + } else { + callback(null, response.message); + } + } + } + }); + return { + cancel: function () { + callback = null; + client.close(); + } + }; +}; + exports.LeRobotServiceClient = LeRobotServiceClient; diff --git a/proto/viam/service/lerobot/v1/lerobot.proto b/proto/viam/service/lerobot/v1/lerobot.proto index 87455307d..8b1960999 100644 --- a/proto/viam/service/lerobot/v1/lerobot.proto +++ b/proto/viam/service/lerobot/v1/lerobot.proto @@ -2,9 +2,9 @@ syntax = "proto3"; package viam.service.lerobot.v1; +import "common/v1/common.proto"; import "google/api/annotations.proto"; import "google/protobuf/struct.proto"; -import "common/v1/common.proto"; option go_package = "go.viam.com/api/service/lerobot/v1"; option java_package = "com.viam.service.lerobot.v1"; diff --git a/service/lerobot/v1/lerobot.pb.go b/service/lerobot/v1/lerobot.pb.go index 86d3c2579..346838cfe 100644 --- a/service/lerobot/v1/lerobot.pb.go +++ b/service/lerobot/v1/lerobot.pb.go @@ -7,6 +7,7 @@ package v1 import ( + v1 "go.viam.com/api/common/v1" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -1109,254 +1110,264 @@ var file_service_lerobot_v1_lerobot_proto_rawDesc = []byte{ 0x0a, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf5, 0x02, 0x0a, 0x14, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, - 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x70, 0x69, 0x73, 0x6f, - 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, - 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x40, 0x0a, 0x06, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x76, - 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, - 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x22, - 0x0a, 0x0d, 0x77, 0x61, 0x72, 0x6d, 0x75, 0x70, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x77, 0x61, 0x72, 0x6d, 0x75, 0x70, 0x54, 0x69, 0x6d, - 0x65, 0x53, 0x12, 0x24, 0x0a, 0x0e, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x70, 0x69, 0x73, - 0x6f, 0x64, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x12, 0x20, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x65, - 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x72, 0x65, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x70, - 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x66, 0x70, 0x73, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x61, 0x67, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, + 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x16, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0xf5, 0x02, 0x0a, 0x14, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, + 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x23, 0x0a, 0x0d, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x12, 0x40, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x77, 0x61, 0x72, 0x6d, 0x75, 0x70, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x77, + 0x61, 0x72, 0x6d, 0x75, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x12, 0x24, 0x0a, 0x0e, 0x65, 0x70, + 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x12, 0x20, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x53, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x70, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x66, 0x70, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x09, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, + 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x85, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, + 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x61, 0x63, 0x74, + 0x75, 0x61, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x12, 0x21, 0x0a, 0x0c, + 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, + 0x7d, 0x0a, 0x15, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, + 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x37, + 0x0a, 0x16, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x78, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x70, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, + 0x61, 0x22, 0x36, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, + 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x22, 0xb3, 0x01, 0x0a, 0x14, 0x52, 0x65, + 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, + 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, + 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x70, 0x69, + 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x10, + 0x0a, 0x03, 0x66, 0x70, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x66, 0x70, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, - 0x85, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, - 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6e, - 0x75, 0x6d, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x63, 0x74, 0x75, - 0x61, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x0f, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x69, 0x73, - 0x6f, 0x64, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, 0x7d, 0x0a, 0x15, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, - 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, + 0x66, 0x0a, 0x15, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x6e, 0x75, 0x6d, 0x5f, + 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x6e, 0x75, 0x6d, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, + 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x64, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x22, 0xc7, 0x01, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x65, 0x6c, + 0x65, 0x6f, 0x70, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x70, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x66, 0x70, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x61, 0x6d, 0x65, 0x72, + 0x61, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, + 0x61, 0x22, 0x3b, 0x0a, 0x1a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x7c, + 0x0a, 0x18, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, + 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3a, 0x0a, 0x19, + 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x64, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x22, 0x7c, 0x0a, 0x11, 0x4c, 0x6f, 0x61, 0x64, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x6f, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x52, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, - 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x37, 0x0a, 0x16, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, - 0x78, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, + 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x52, 0x0a, 0x12, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x79, 0x70, 0x65, 0x22, 0x9c, 0x02, 0x0a, 0x17, 0x52, + 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x73, + 0x74, 0x65, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x53, + 0x74, 0x65, 0x70, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x70, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x66, 0x70, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x54, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x73, + 0x65, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, + 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x70, + 0x69, 0x73, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x36, 0x0a, 0x15, 0x53, 0x74, 0x6f, - 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x22, 0xb3, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, - 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, - 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x70, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x03, 0x66, 0x70, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, - 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x66, 0x0a, 0x15, 0x52, 0x65, 0x70, 0x6c, 0x61, - 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2e, 0x0a, 0x13, 0x6e, 0x75, 0x6d, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x72, - 0x65, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x6e, - 0x75, 0x6d, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x22, - 0xc7, 0x01, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x5f, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, - 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x10, 0x0a, 0x03, 0x66, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x66, 0x70, - 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x63, 0x61, 0x6d, - 0x65, 0x72, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x43, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, - 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3b, 0x0a, 0x1a, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x7c, 0x0a, 0x18, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, - 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, - 0x78, 0x74, 0x72, 0x61, 0x22, 0x3a, 0x0a, 0x19, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x22, 0x7c, 0x0a, 0x11, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, - 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x52, - 0x0a, 0x12, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, - 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x79, - 0x70, 0x65, 0x22, 0x9c, 0x02, 0x0a, 0x17, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, - 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x74, 0x65, 0x70, 0x73, 0x12, 0x10, 0x0a, 0x03, - 0x66, 0x70, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x66, 0x70, 0x73, 0x12, 0x2a, - 0x0a, 0x11, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x54, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x61, - 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, - 0x0d, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, - 0x61, 0x22, 0x93, 0x01, 0x0a, 0x18, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, - 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x53, 0x74, 0x65, 0x70, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x64, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x69, 0x73, - 0x6f, 0x64, 0x65, 0x50, 0x61, 0x74, 0x68, 0x2a, 0x74, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x52, 0x45, - 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, - 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x54, 0x45, 0x4c, 0x45, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, - 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x10, 0x02, 0x32, 0xa1, 0x0b, - 0x0a, 0x0e, 0x4c, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0xae, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x22, 0x33, 0x2f, 0x76, + 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x93, 0x01, 0x0a, 0x18, 0x52, 0x75, + 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x74, + 0x65, 0x70, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x53, 0x74, + 0x65, 0x70, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x21, 0x0a, 0x0c, + 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x50, 0x61, 0x74, 0x68, 0x2a, + 0x74, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, + 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, + 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x45, 0x4c, 0x45, 0x4f, 0x50, 0x45, + 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x43, 0x4f, + 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x4c, + 0x49, 0x43, 0x59, 0x10, 0x02, 0x32, 0xac, 0x0c, 0x0a, 0x0e, 0x4c, 0x65, 0x52, 0x6f, 0x62, 0x6f, + 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xae, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x2e, 0x76, 0x69, + 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, + 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x76, 0x69, + 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, + 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x35, 0x22, 0x33, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, + 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, + 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x53, 0x74, + 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2d, 0x2e, 0x76, 0x69, + 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, + 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, + 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, + 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x72, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, + 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, + 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x65, 0x70, 0x69, 0x73, + 0x6f, 0x64, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, + 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, - 0x67, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, - 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, - 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, - 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, - 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0xaa, - 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, - 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, - 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, - 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x0d, - 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x2e, + 0x7d, 0x2f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, + 0x12, 0xbe, 0x01, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x76, 0x69, + 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, + 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x22, 0x37, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, + 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0xba, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x76, 0x69, 0x61, + 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, 0x36, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, + 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x70, + 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x9e, + 0x01, 0x0a, 0x0a, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2a, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, - 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, - 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, - 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, - 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, - 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, - 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, - 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0xbe, 0x01, 0x0a, 0x12, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x32, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, - 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, - 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, - 0x22, 0x37, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x6c, 0x65, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xba, 0x01, 0x0a, 0x11, 0x53, 0x74, - 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x31, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, - 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, - 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, - 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, 0x36, + 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x76, 0x69, 0x61, 0x6d, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x22, 0x2f, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x9e, 0x01, 0x0a, 0x0a, 0x4c, 0x6f, 0x61, 0x64, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2a, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2b, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x22, 0x2f, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, - 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6c, 0x6f, 0x61, 0x64, - 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0xb7, 0x01, 0x0a, 0x10, 0x52, 0x75, 0x6e, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x2e, 0x76, - 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, - 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, - 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, - 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, 0x36, 0x2f, 0x76, 0x69, 0x61, 0x6d, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, - 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, - 0x75, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, - 0x65, 0x42, 0x41, 0x0a, 0x1b, 0x63, 0x6f, 0x6d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, + 0x6d, 0x65, 0x7d, 0x2f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, + 0xb7, 0x01, 0x0a, 0x10, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, + 0x73, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, - 0x5a, 0x22, 0x67, 0x6f, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, - 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x38, 0x22, 0x36, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x75, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x09, 0x44, 0x6f, + 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x69, 0x61, 0x6d, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x43, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x30, 0x22, 0x2e, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, + 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x6f, 0x5f, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x41, 0x0a, 0x1b, 0x63, 0x6f, 0x6d, 0x2e, 0x76, 0x69, 0x61, 0x6d, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, + 0x2e, 0x76, 0x31, 0x5a, 0x22, 0x67, 0x6f, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, + 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1392,6 +1403,8 @@ var file_service_lerobot_v1_lerobot_proto_goTypes = []any{ (*RunPolicyEpisodeRequest)(nil), // 15: viam.service.lerobot.v1.RunPolicyEpisodeRequest (*RunPolicyEpisodeResponse)(nil), // 16: viam.service.lerobot.v1.RunPolicyEpisodeResponse (*structpb.Struct)(nil), // 17: google.protobuf.Struct + (*v1.DoCommandRequest)(nil), // 18: viam.common.v1.DoCommandRequest + (*v1.DoCommandResponse)(nil), // 19: viam.common.v1.DoCommandResponse } var file_service_lerobot_v1_lerobot_proto_depIdxs = []int32{ 0, // 0: viam.service.lerobot.v1.RecordEpisodeRequest.source:type_name -> viam.service.lerobot.v1.RecordingSource @@ -1411,16 +1424,18 @@ var file_service_lerobot_v1_lerobot_proto_depIdxs = []int32{ 11, // 14: viam.service.lerobot.v1.LeRobotService.StopTeleoperation:input_type -> viam.service.lerobot.v1.StopTeleoperationRequest 13, // 15: viam.service.lerobot.v1.LeRobotService.LoadPolicy:input_type -> viam.service.lerobot.v1.LoadPolicyRequest 15, // 16: viam.service.lerobot.v1.LeRobotService.RunPolicyEpisode:input_type -> viam.service.lerobot.v1.RunPolicyEpisodeRequest - 4, // 17: viam.service.lerobot.v1.LeRobotService.StartRecording:output_type -> viam.service.lerobot.v1.StartRecordingResponse - 6, // 18: viam.service.lerobot.v1.LeRobotService.StopRecording:output_type -> viam.service.lerobot.v1.StopRecordingResponse - 2, // 19: viam.service.lerobot.v1.LeRobotService.RecordEpisode:output_type -> viam.service.lerobot.v1.RecordEpisodeResponse - 8, // 20: viam.service.lerobot.v1.LeRobotService.ReplayEpisode:output_type -> viam.service.lerobot.v1.ReplayEpisodeResponse - 10, // 21: viam.service.lerobot.v1.LeRobotService.StartTeleoperation:output_type -> viam.service.lerobot.v1.StartTeleoperationResponse - 12, // 22: viam.service.lerobot.v1.LeRobotService.StopTeleoperation:output_type -> viam.service.lerobot.v1.StopTeleoperationResponse - 14, // 23: viam.service.lerobot.v1.LeRobotService.LoadPolicy:output_type -> viam.service.lerobot.v1.LoadPolicyResponse - 16, // 24: viam.service.lerobot.v1.LeRobotService.RunPolicyEpisode:output_type -> viam.service.lerobot.v1.RunPolicyEpisodeResponse - 17, // [17:25] is the sub-list for method output_type - 9, // [9:17] is the sub-list for method input_type + 18, // 17: viam.service.lerobot.v1.LeRobotService.DoCommand:input_type -> viam.common.v1.DoCommandRequest + 4, // 18: viam.service.lerobot.v1.LeRobotService.StartRecording:output_type -> viam.service.lerobot.v1.StartRecordingResponse + 6, // 19: viam.service.lerobot.v1.LeRobotService.StopRecording:output_type -> viam.service.lerobot.v1.StopRecordingResponse + 2, // 20: viam.service.lerobot.v1.LeRobotService.RecordEpisode:output_type -> viam.service.lerobot.v1.RecordEpisodeResponse + 8, // 21: viam.service.lerobot.v1.LeRobotService.ReplayEpisode:output_type -> viam.service.lerobot.v1.ReplayEpisodeResponse + 10, // 22: viam.service.lerobot.v1.LeRobotService.StartTeleoperation:output_type -> viam.service.lerobot.v1.StartTeleoperationResponse + 12, // 23: viam.service.lerobot.v1.LeRobotService.StopTeleoperation:output_type -> viam.service.lerobot.v1.StopTeleoperationResponse + 14, // 24: viam.service.lerobot.v1.LeRobotService.LoadPolicy:output_type -> viam.service.lerobot.v1.LoadPolicyResponse + 16, // 25: viam.service.lerobot.v1.LeRobotService.RunPolicyEpisode:output_type -> viam.service.lerobot.v1.RunPolicyEpisodeResponse + 19, // 26: viam.service.lerobot.v1.LeRobotService.DoCommand:output_type -> viam.common.v1.DoCommandResponse + 18, // [18:27] is the sub-list for method output_type + 9, // [9:18] is the sub-list for method input_type 9, // [9:9] is the sub-list for extension type_name 9, // [9:9] is the sub-list for extension extendee 0, // [0:9] is the sub-list for field type_name diff --git a/service/lerobot/v1/lerobot.pb.gw.go b/service/lerobot/v1/lerobot.pb.gw.go index 8a5ee9ef0..9b9f030c6 100644 --- a/service/lerobot/v1/lerobot.pb.gw.go +++ b/service/lerobot/v1/lerobot.pb.gw.go @@ -15,6 +15,7 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "go.viam.com/api/common/v1" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" @@ -591,6 +592,76 @@ func local_request_LeRobotService_RunPolicyEpisode_0(ctx context.Context, marsha } +var ( + filter_LeRobotService_DoCommand_0 = &utilities.DoubleArray{Encoding: map[string]int{"name": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_LeRobotService_DoCommand_0(ctx context.Context, marshaler runtime.Marshaler, client LeRobotServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq v1.DoCommandRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_LeRobotService_DoCommand_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.DoCommand(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_LeRobotService_DoCommand_0(ctx context.Context, marshaler runtime.Marshaler, server LeRobotServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq v1.DoCommandRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_LeRobotService_DoCommand_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.DoCommand(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterLeRobotServiceHandlerServer registers the http handlers for service LeRobotService to "mux". // UnaryRPC :call LeRobotServiceServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -797,6 +868,31 @@ func RegisterLeRobotServiceHandlerServer(ctx context.Context, mux *runtime.Serve }) + mux.Handle("POST", pattern_LeRobotService_DoCommand_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/viam.service.lerobot.v1.LeRobotService/DoCommand", runtime.WithHTTPPathPattern("/viam/api/v1/service/lerobot/{name}/do_command")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_LeRobotService_DoCommand_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_LeRobotService_DoCommand_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -1014,6 +1110,28 @@ func RegisterLeRobotServiceHandlerClient(ctx context.Context, mux *runtime.Serve }) + mux.Handle("POST", pattern_LeRobotService_DoCommand_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/viam.service.lerobot.v1.LeRobotService/DoCommand", runtime.WithHTTPPathPattern("/viam/api/v1/service/lerobot/{name}/do_command")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_LeRobotService_DoCommand_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_LeRobotService_DoCommand_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -1033,6 +1151,8 @@ var ( pattern_LeRobotService_LoadPolicy_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"viam", "api", "v1", "service", "lerobot", "name", "load_policy"}, "")) pattern_LeRobotService_RunPolicyEpisode_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"viam", "api", "v1", "service", "lerobot", "name", "run_policy_episode"}, "")) + + pattern_LeRobotService_DoCommand_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"viam", "api", "v1", "service", "lerobot", "name", "do_command"}, "")) ) var ( @@ -1051,4 +1171,6 @@ var ( forward_LeRobotService_LoadPolicy_0 = runtime.ForwardResponseMessage forward_LeRobotService_RunPolicyEpisode_0 = runtime.ForwardResponseMessage + + forward_LeRobotService_DoCommand_0 = runtime.ForwardResponseMessage ) diff --git a/service/lerobot/v1/lerobot_grpc.pb.go b/service/lerobot/v1/lerobot_grpc.pb.go index 51cafc172..3ff00123f 100644 --- a/service/lerobot/v1/lerobot_grpc.pb.go +++ b/service/lerobot/v1/lerobot_grpc.pb.go @@ -8,6 +8,7 @@ package v1 import ( context "context" + v1 "go.viam.com/api/common/v1" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" @@ -38,6 +39,8 @@ type LeRobotServiceClient interface { LoadPolicy(ctx context.Context, in *LoadPolicyRequest, opts ...grpc.CallOption) (*LoadPolicyResponse, error) // RunPolicyEpisode executes a loaded policy for a single episode. RunPolicyEpisode(ctx context.Context, in *RunPolicyEpisodeRequest, opts ...grpc.CallOption) (*RunPolicyEpisodeResponse, error) + // DoCommand sends/receives arbitrary commands + DoCommand(ctx context.Context, in *v1.DoCommandRequest, opts ...grpc.CallOption) (*v1.DoCommandResponse, error) } type leRobotServiceClient struct { @@ -120,6 +123,15 @@ func (c *leRobotServiceClient) RunPolicyEpisode(ctx context.Context, in *RunPoli return out, nil } +func (c *leRobotServiceClient) DoCommand(ctx context.Context, in *v1.DoCommandRequest, opts ...grpc.CallOption) (*v1.DoCommandResponse, error) { + out := new(v1.DoCommandResponse) + err := c.cc.Invoke(ctx, "/viam.service.lerobot.v1.LeRobotService/DoCommand", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // LeRobotServiceServer is the server API for LeRobotService service. // All implementations must embed UnimplementedLeRobotServiceServer // for forward compatibility @@ -140,6 +152,8 @@ type LeRobotServiceServer interface { LoadPolicy(context.Context, *LoadPolicyRequest) (*LoadPolicyResponse, error) // RunPolicyEpisode executes a loaded policy for a single episode. RunPolicyEpisode(context.Context, *RunPolicyEpisodeRequest) (*RunPolicyEpisodeResponse, error) + // DoCommand sends/receives arbitrary commands + DoCommand(context.Context, *v1.DoCommandRequest) (*v1.DoCommandResponse, error) mustEmbedUnimplementedLeRobotServiceServer() } @@ -171,6 +185,9 @@ func (UnimplementedLeRobotServiceServer) LoadPolicy(context.Context, *LoadPolicy func (UnimplementedLeRobotServiceServer) RunPolicyEpisode(context.Context, *RunPolicyEpisodeRequest) (*RunPolicyEpisodeResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RunPolicyEpisode not implemented") } +func (UnimplementedLeRobotServiceServer) DoCommand(context.Context, *v1.DoCommandRequest) (*v1.DoCommandResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DoCommand not implemented") +} func (UnimplementedLeRobotServiceServer) mustEmbedUnimplementedLeRobotServiceServer() {} // UnsafeLeRobotServiceServer may be embedded to opt out of forward compatibility for this service. @@ -328,6 +345,24 @@ func _LeRobotService_RunPolicyEpisode_Handler(srv interface{}, ctx context.Conte return interceptor(ctx, in, info, handler) } +func _LeRobotService_DoCommand_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(v1.DoCommandRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LeRobotServiceServer).DoCommand(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/viam.service.lerobot.v1.LeRobotService/DoCommand", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LeRobotServiceServer).DoCommand(ctx, req.(*v1.DoCommandRequest)) + } + return interceptor(ctx, in, info, handler) +} + // LeRobotService_ServiceDesc is the grpc.ServiceDesc for LeRobotService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -367,6 +402,10 @@ var LeRobotService_ServiceDesc = grpc.ServiceDesc{ MethodName: "RunPolicyEpisode", Handler: _LeRobotService_RunPolicyEpisode_Handler, }, + { + MethodName: "DoCommand", + Handler: _LeRobotService_DoCommand_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "service/lerobot/v1/lerobot.proto", From 4a9740008c9c5a46411216f6194be944e332916f Mon Sep 17 00:00:00 2001 From: Jalen Geason Date: Sun, 11 Jan 2026 09:31:05 -0500 Subject: [PATCH 05/12] Remove success field from RunPolicyEpisodeResponse in lerobot.proto --- proto/viam/service/lerobot/v1/lerobot.proto | 1 - 1 file changed, 1 deletion(-) diff --git a/proto/viam/service/lerobot/v1/lerobot.proto b/proto/viam/service/lerobot/v1/lerobot.proto index 8b1960999..ee3098022 100644 --- a/proto/viam/service/lerobot/v1/lerobot.proto +++ b/proto/viam/service/lerobot/v1/lerobot.proto @@ -162,6 +162,5 @@ message RunPolicyEpisodeRequest { message RunPolicyEpisodeResponse { int32 num_steps = 1; float duration_s = 2; - bool success = 3; // If task has success criteria string episode_path = 4; // If recorded } From 8093da5af3a7676d85d916eb2771f3427a8eade1 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 11 Jan 2026 14:31:49 +0000 Subject: [PATCH 06/12] Built new protos from 4a97400 --- gen/js/service/lerobot/v1/lerobot_pb.d.ts | 4 - gen/js/service/lerobot/v1/lerobot_pb.js | 30 --- service/lerobot/v1/lerobot.pb.go | 239 +++++++++++----------- 3 files changed, 115 insertions(+), 158 deletions(-) diff --git a/gen/js/service/lerobot/v1/lerobot_pb.d.ts b/gen/js/service/lerobot/v1/lerobot_pb.d.ts index a9d195a52..1e5ddb9a3 100644 --- a/gen/js/service/lerobot/v1/lerobot_pb.d.ts +++ b/gen/js/service/lerobot/v1/lerobot_pb.d.ts @@ -475,9 +475,6 @@ export class RunPolicyEpisodeResponse extends jspb.Message { getDurationS(): number; setDurationS(value: number): void; - getSuccess(): boolean; - setSuccess(value: boolean): void; - getEpisodePath(): string; setEpisodePath(value: string): void; @@ -495,7 +492,6 @@ export namespace RunPolicyEpisodeResponse { export type AsObject = { numSteps: number, durationS: number, - success: boolean, episodePath: string, } } diff --git a/gen/js/service/lerobot/v1/lerobot_pb.js b/gen/js/service/lerobot/v1/lerobot_pb.js index 055ba1d47..1ff4b06ef 100644 --- a/gen/js/service/lerobot/v1/lerobot_pb.js +++ b/gen/js/service/lerobot/v1/lerobot_pb.js @@ -3632,7 +3632,6 @@ proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.toObject = function(inclu var f, obj = { numSteps: jspb.Message.getFieldWithDefault(msg, 1, 0), durationS: jspb.Message.getFloatingPointFieldWithDefault(msg, 2, 0.0), - success: jspb.Message.getBooleanFieldWithDefault(msg, 3, false), episodePath: jspb.Message.getFieldWithDefault(msg, 4, "") }; @@ -3678,10 +3677,6 @@ proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.deserializeBinaryFromRead var value = /** @type {number} */ (reader.readFloat()); msg.setDurationS(value); break; - case 3: - var value = /** @type {boolean} */ (reader.readBool()); - msg.setSuccess(value); - break; case 4: var value = /** @type {string} */ (reader.readString()); msg.setEpisodePath(value); @@ -3729,13 +3724,6 @@ proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.serializeBinaryToWriter = f ); } - f = message.getSuccess(); - if (f) { - writer.writeBool( - 3, - f - ); - } f = message.getEpisodePath(); if (f.length > 0) { writer.writeString( @@ -3782,24 +3770,6 @@ proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.prototype.setDurationS = }; -/** - * optional bool success = 3; - * @return {boolean} - */ -proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.prototype.getSuccess = function() { - return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 3, false)); -}; - - -/** - * @param {boolean} value - * @return {!proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse} returns this - */ -proto.viam.service.lerobot.v1.RunPolicyEpisodeResponse.prototype.setSuccess = function(value) { - return jspb.Message.setProto3BooleanField(this, 3, value); -}; - - /** * optional string episode_path = 4; * @return {string} diff --git a/service/lerobot/v1/lerobot.pb.go b/service/lerobot/v1/lerobot.pb.go index 346838cfe..cf4ee19e9 100644 --- a/service/lerobot/v1/lerobot.pb.go +++ b/service/lerobot/v1/lerobot.pb.go @@ -1042,7 +1042,6 @@ type RunPolicyEpisodeResponse struct { NumSteps int32 `protobuf:"varint,1,opt,name=num_steps,json=numSteps,proto3" json:"num_steps,omitempty"` DurationS float32 `protobuf:"fixed32,2,opt,name=duration_s,json=durationS,proto3" json:"duration_s,omitempty"` - Success bool `protobuf:"varint,3,opt,name=success,proto3" json:"success,omitempty"` // If task has success criteria EpisodePath string `protobuf:"bytes,4,opt,name=episode_path,json=episodePath,proto3" json:"episode_path,omitempty"` // If recorded } @@ -1090,13 +1089,6 @@ func (x *RunPolicyEpisodeResponse) GetDurationS() float32 { return 0 } -func (x *RunPolicyEpisodeResponse) GetSuccess() bool { - if x != nil { - return x.Success - } - return false -} - func (x *RunPolicyEpisodeResponse) GetEpisodePath() string { if x != nil { return x.EpisodePath @@ -1247,127 +1239,126 @@ var file_service_lerobot_v1_lerobot_proto_rawDesc = []byte{ 0x69, 0x73, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x93, 0x01, 0x0a, 0x18, 0x52, 0x75, - 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x74, - 0x65, 0x70, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x53, 0x74, - 0x65, 0x70, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x21, 0x0a, 0x0c, - 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x50, 0x61, 0x74, 0x68, 0x2a, - 0x74, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, - 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x45, 0x4c, 0x45, 0x4f, 0x50, 0x45, - 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x43, 0x4f, - 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x4c, - 0x49, 0x43, 0x59, 0x10, 0x02, 0x32, 0xac, 0x0c, 0x0a, 0x0e, 0x4c, 0x65, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xae, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x2e, 0x76, 0x69, - 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, - 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x76, 0x69, - 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, - 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x35, 0x22, 0x33, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x79, 0x0a, 0x18, 0x52, 0x75, 0x6e, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x74, 0x65, + 0x70, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x53, 0x74, 0x65, + 0x70, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, + 0x50, 0x61, 0x74, 0x68, 0x2a, 0x74, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, + 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x52, 0x45, 0x43, 0x4f, 0x52, + 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, 0x52, 0x45, 0x43, + 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x45, + 0x4c, 0x45, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x1b, 0x0a, + 0x17, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x10, 0x02, 0x32, 0xac, 0x0c, 0x0a, 0x0e, 0x4c, + 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xae, 0x01, + 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, + 0x12, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2f, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x22, 0x33, 0x2f, 0x76, 0x69, 0x61, 0x6d, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, + 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0xaa, + 0x01, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, + 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, + 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, + 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, + 0x70, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0xaa, 0x01, 0x0a, 0x0d, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x2e, + 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, + 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, + 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, + 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, + 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, + 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, - 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, - 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x53, 0x74, - 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2d, 0x2e, 0x76, 0x69, - 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, - 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, + 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x70, + 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, - 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x72, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, - 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x65, 0x70, 0x69, 0x73, - 0x6f, 0x64, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, - 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, - 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x2f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, - 0x12, 0xbe, 0x01, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x76, 0x69, - 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, - 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x22, 0x37, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, - 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0xba, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x76, 0x69, 0x61, - 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, 0x36, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, - 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x70, - 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x9e, - 0x01, 0x0a, 0x0a, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2a, 0x2e, - 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, - 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x76, 0x69, 0x61, 0x6d, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, + 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x22, 0x2f, - 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x2f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, - 0xb7, 0x01, 0x0a, 0x10, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, - 0x73, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x38, 0x22, 0x36, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, - 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x75, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x09, 0x44, 0x6f, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x69, 0x61, 0x6d, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x30, 0x22, 0x2e, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, - 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x6f, 0x5f, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x41, 0x0a, 0x1b, 0x63, 0x6f, 0x6d, 0x2e, 0x76, 0x69, 0x61, 0x6d, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x65, 0x70, + 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0xbe, 0x01, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, + 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x2e, 0x76, + 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, + 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x33, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x22, 0x37, 0x2f, + 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xba, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x70, 0x54, + 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x76, + 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, + 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x32, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, + 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, + 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, 0x36, 0x2f, 0x76, 0x69, + 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x9e, 0x01, 0x0a, 0x0a, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x12, 0x2a, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, + 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, + 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, + 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x31, 0x22, 0x2f, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, + 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x12, 0xb7, 0x01, 0x0a, 0x10, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, - 0x2e, 0x76, 0x31, 0x5a, 0x22, 0x67, 0x6f, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, - 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, + 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x76, 0x69, + 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, + 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, + 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, 0x36, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, + 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x75, 0x6e, 0x5f, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x88, + 0x01, 0x0a, 0x09, 0x44, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x2e, 0x76, + 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, + 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, + 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x44, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x22, 0x2e, 0x2f, 0x76, 0x69, 0x61, 0x6d, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, + 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, + 0x6f, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x41, 0x0a, 0x1b, 0x63, 0x6f, 0x6d, + 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, + 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x5a, 0x22, 0x67, 0x6f, 0x2e, 0x76, 0x69, 0x61, + 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( From 7f13832570c1fa8f410913b3edc7d4dd3480b79a Mon Sep 17 00:00:00 2001 From: Jalen Geason Date: Sun, 11 Jan 2026 09:46:31 -0500 Subject: [PATCH 07/12] Add task field to RecordEpisodeRequest in lerobot.proto --- proto/viam/service/lerobot/v1/lerobot.proto | 1 + 1 file changed, 1 insertion(+) diff --git a/proto/viam/service/lerobot/v1/lerobot.proto b/proto/viam/service/lerobot/v1/lerobot.proto index ee3098022..743e785be 100644 --- a/proto/viam/service/lerobot/v1/lerobot.proto +++ b/proto/viam/service/lerobot/v1/lerobot.proto @@ -67,6 +67,7 @@ message RecordEpisodeRequest { int32 reset_time_s = 7; int32 fps = 8; repeated string tags = 9; + string task = 10; google.protobuf.Struct extra = 99; } From 64a635da6881aa14b460ce2831d901c350687412 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 11 Jan 2026 14:47:05 +0000 Subject: [PATCH 08/12] Built new protos from 7f13832 --- gen/js/service/lerobot/v1/lerobot_pb.d.ts | 4 + gen/js/service/lerobot/v1/lerobot_pb.js | 30 ++ service/lerobot/v1/lerobot.pb.go | 461 +++++++++++----------- 3 files changed, 269 insertions(+), 226 deletions(-) diff --git a/gen/js/service/lerobot/v1/lerobot_pb.d.ts b/gen/js/service/lerobot/v1/lerobot_pb.d.ts index 1e5ddb9a3..f12588286 100644 --- a/gen/js/service/lerobot/v1/lerobot_pb.d.ts +++ b/gen/js/service/lerobot/v1/lerobot_pb.d.ts @@ -36,6 +36,9 @@ export class RecordEpisodeRequest extends jspb.Message { setTagsList(value: Array): void; addTags(value: string, index?: number): string; + getTask(): string; + setTask(value: string): void; + hasExtra(): boolean; clearExtra(): void; getExtra(): google_protobuf_struct_pb.Struct | undefined; @@ -62,6 +65,7 @@ export namespace RecordEpisodeRequest { resetTimeS: number, fps: number, tagsList: Array, + task: string, extra?: google_protobuf_struct_pb.Struct.AsObject, } } diff --git a/gen/js/service/lerobot/v1/lerobot_pb.js b/gen/js/service/lerobot/v1/lerobot_pb.js index 1ff4b06ef..49483a7a7 100644 --- a/gen/js/service/lerobot/v1/lerobot_pb.js +++ b/gen/js/service/lerobot/v1/lerobot_pb.js @@ -422,6 +422,7 @@ proto.viam.service.lerobot.v1.RecordEpisodeRequest.toObject = function(includeIn resetTimeS: jspb.Message.getFieldWithDefault(msg, 7, 0), fps: jspb.Message.getFieldWithDefault(msg, 8, 0), tagsList: (f = jspb.Message.getRepeatedField(msg, 9)) == null ? undefined : f, + task: jspb.Message.getFieldWithDefault(msg, 10, ""), extra: (f = msg.getExtra()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f) }; @@ -495,6 +496,10 @@ proto.viam.service.lerobot.v1.RecordEpisodeRequest.deserializeBinaryFromReader = var value = /** @type {string} */ (reader.readString()); msg.addTags(value); break; + case 10: + var value = /** @type {string} */ (reader.readString()); + msg.setTask(value); + break; case 99: var value = new google_protobuf_struct_pb.Struct; reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader); @@ -592,6 +597,13 @@ proto.viam.service.lerobot.v1.RecordEpisodeRequest.serializeBinaryToWriter = fun f ); } + f = message.getTask(); + if (f.length > 0) { + writer.writeString( + 10, + f + ); + } f = message.getExtra(); if (f != null) { writer.writeMessage( @@ -784,6 +796,24 @@ proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.clearTagsList = fun }; +/** + * optional string task = 10; + * @return {string} + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.getTask = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 10, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.RecordEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RecordEpisodeRequest.prototype.setTask = function(value) { + return jspb.Message.setProto3StringField(this, 10, value); +}; + + /** * optional google.protobuf.Struct extra = 99; * @return {?proto.google.protobuf.Struct} diff --git a/service/lerobot/v1/lerobot.pb.go b/service/lerobot/v1/lerobot.pb.go index cf4ee19e9..d01a8a996 100644 --- a/service/lerobot/v1/lerobot.pb.go +++ b/service/lerobot/v1/lerobot.pb.go @@ -86,6 +86,7 @@ type RecordEpisodeRequest struct { ResetTimeS int32 `protobuf:"varint,7,opt,name=reset_time_s,json=resetTimeS,proto3" json:"reset_time_s,omitempty"` Fps int32 `protobuf:"varint,8,opt,name=fps,proto3" json:"fps,omitempty"` Tags []string `protobuf:"bytes,9,rep,name=tags,proto3" json:"tags,omitempty"` + Task string `protobuf:"bytes,10,opt,name=task,proto3" json:"task,omitempty"` Extra *structpb.Struct `protobuf:"bytes,99,opt,name=extra,proto3" json:"extra,omitempty"` } @@ -182,6 +183,13 @@ func (x *RecordEpisodeRequest) GetTags() []string { return nil } +func (x *RecordEpisodeRequest) GetTask() string { + if x != nil { + return x.Task + } + return "" +} + func (x *RecordEpisodeRequest) GetExtra() *structpb.Struct { if x != nil { return x.Extra @@ -1108,7 +1116,7 @@ var file_service_lerobot_v1_lerobot_proto_rawDesc = []byte{ 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0xf5, 0x02, 0x0a, 0x14, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, + 0x89, 0x03, 0x0a, 0x14, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, @@ -1128,237 +1136,238 @@ var file_service_lerobot_v1_lerobot_proto_rawDesc = []byte{ 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x70, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x66, 0x70, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x09, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, - 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x85, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, - 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x61, 0x63, 0x74, - 0x75, 0x61, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x12, 0x21, 0x0a, 0x0c, - 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, - 0x7d, 0x0a, 0x15, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, - 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x37, - 0x0a, 0x16, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x78, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x70, 0x52, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, - 0x61, 0x22, 0x36, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, - 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x22, 0xb3, 0x01, 0x0a, 0x14, 0x52, 0x65, - 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, - 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, - 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x70, 0x69, - 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x10, - 0x0a, 0x03, 0x66, 0x70, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x66, 0x70, 0x73, - 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, - 0x66, 0x0a, 0x15, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x6e, 0x75, 0x6d, 0x5f, - 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x6e, 0x75, 0x6d, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, - 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x22, 0xc7, 0x01, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x65, 0x6c, - 0x65, 0x6f, 0x70, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x44, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x70, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x66, 0x70, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, 0x61, 0x6d, 0x65, 0x72, - 0x61, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, - 0x61, 0x22, 0x3b, 0x0a, 0x1a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x7c, - 0x0a, 0x18, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, - 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, - 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3a, 0x0a, 0x19, - 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x64, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x22, 0x7c, 0x0a, 0x11, 0x4c, 0x6f, 0x61, 0x64, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x6f, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x52, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, - 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, - 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x52, 0x0a, 0x12, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x79, 0x70, 0x65, 0x22, 0x9c, 0x02, 0x0a, 0x17, 0x52, - 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x2d, 0x0a, 0x05, + 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x85, 0x01, 0x0a, 0x15, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x66, 0x72, 0x61, + 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x46, 0x72, + 0x61, 0x6d, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x64, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x0f, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x50, + 0x61, 0x74, 0x68, 0x22, 0x7d, 0x0a, 0x15, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, + 0x72, 0x61, 0x22, 0x37, 0x0a, 0x16, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x78, 0x0a, 0x14, 0x53, + 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, + 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, + 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x36, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, + 0x0a, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x22, 0xb3, 0x01, + 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x73, - 0x74, 0x65, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x53, - 0x74, 0x65, 0x70, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x70, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x03, 0x66, 0x70, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x54, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x73, - 0x65, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, - 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x70, - 0x69, 0x73, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, - 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x79, 0x0a, 0x18, 0x52, 0x75, 0x6e, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x74, 0x65, - 0x70, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x53, 0x74, 0x65, - 0x70, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, - 0x50, 0x61, 0x74, 0x68, 0x2a, 0x74, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, - 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x52, 0x45, 0x43, 0x4f, 0x52, - 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, 0x52, 0x45, 0x43, - 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x45, - 0x4c, 0x45, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x1b, 0x0a, - 0x17, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x10, 0x02, 0x32, 0xac, 0x0c, 0x0a, 0x0e, 0x4c, - 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xae, 0x01, - 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x12, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2f, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x22, 0x33, 0x2f, 0x76, 0x69, 0x61, 0x6d, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, - 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0xaa, - 0x01, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, - 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, - 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, - 0x70, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0xaa, 0x01, 0x0a, 0x0d, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x2e, - 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, - 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, - 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, - 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, - 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, - 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, - 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x70, - 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, - 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, - 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, - 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x65, 0x70, - 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0xbe, 0x01, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, - 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x2e, 0x76, - 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, - 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x33, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x22, 0x37, 0x2f, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x61, + 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, + 0x0d, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x70, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x66, 0x70, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, + 0x74, 0x72, 0x61, 0x22, 0x66, 0x0a, 0x15, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, + 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x13, + 0x6e, 0x75, 0x6d, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x61, + 0x79, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x6e, 0x75, 0x6d, 0x46, 0x72, + 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, + 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x22, 0xc7, 0x01, 0x0a, 0x19, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, + 0x12, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x65, 0x6c, 0x65, 0x6f, + 0x70, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x66, + 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x66, 0x70, 0x73, 0x12, 0x27, 0x0a, + 0x0f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, + 0x61, 0x6d, 0x65, 0x72, 0x61, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, + 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, + 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3b, 0x0a, 0x1a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, + 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x22, 0x7c, 0x0a, 0x18, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, + 0x22, 0x3a, 0x0a, 0x19, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x22, 0x7c, 0x0a, 0x11, + 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, + 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x65, + 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x52, 0x0a, 0x12, 0x4c, 0x6f, + 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, 0x1f, 0x0a, + 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x79, 0x70, 0x65, 0x22, 0x9c, + 0x02, 0x0a, 0x17, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, + 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, + 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, + 0x61, 0x78, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x6d, 0x61, 0x78, 0x53, 0x74, 0x65, 0x70, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x70, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x66, 0x70, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x54, 0x6f, 0x44, + 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, + 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, + 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x70, 0x69, + 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2d, + 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x79, 0x0a, + 0x18, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, + 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, 0x75, + 0x6d, 0x53, 0x74, 0x65, 0x70, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, + 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x69, + 0x73, 0x6f, 0x64, 0x65, 0x50, 0x61, 0x74, 0x68, 0x2a, 0x74, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x52, + 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x22, 0x0a, + 0x1e, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x54, 0x45, 0x4c, 0x45, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, + 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x10, 0x02, 0x32, 0xac, + 0x0c, 0x0a, 0x0e, 0x4c, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0xae, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x22, 0x33, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xba, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x70, 0x54, - 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x76, - 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, - 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x32, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, - 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, - 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, 0x36, 0x2f, 0x76, 0x69, + 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x67, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, + 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x9e, 0x01, 0x0a, 0x0a, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x12, 0x2a, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, - 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, - 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, - 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x31, 0x22, 0x2f, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, - 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x12, 0xb7, 0x01, 0x0a, 0x10, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x2e, 0x76, 0x69, 0x61, 0x6d, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, - 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x76, 0x69, - 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, - 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, - 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, 0x36, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, - 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x75, 0x6e, 0x5f, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x88, - 0x01, 0x0a, 0x09, 0x44, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x2e, 0x76, - 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, - 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x22, 0x2e, 0x2f, 0x76, 0x69, 0x61, 0x6d, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, - 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, - 0x6f, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x41, 0x0a, 0x1b, 0x63, 0x6f, 0x6d, + 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, + 0xaa, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, + 0x65, 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, + 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0xaa, 0x01, 0x0a, + 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, - 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x5a, 0x22, 0x67, 0x6f, 0x2e, 0x76, 0x69, 0x61, - 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, + 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, + 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, + 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, + 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, + 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x70, 0x6c, 0x61, + 0x79, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0xbe, 0x01, 0x0a, 0x12, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x32, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x39, 0x22, 0x37, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x6c, + 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xba, 0x01, 0x0a, 0x11, 0x53, + 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x31, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x54, + 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, + 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, + 0x36, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, + 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x9e, 0x01, 0x0a, 0x0a, 0x4c, 0x6f, 0x61, 0x64, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2a, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, + 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x22, 0x2f, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, + 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6c, 0x6f, 0x61, + 0x64, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0xb7, 0x01, 0x0a, 0x10, 0x52, 0x75, 0x6e, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x2e, + 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, + 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x31, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, + 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, 0x36, 0x2f, 0x76, 0x69, 0x61, + 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, + 0x72, 0x75, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, + 0x64, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x09, 0x44, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x12, 0x20, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x22, 0x2e, 0x2f, + 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x2f, 0x64, 0x6f, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x41, 0x0a, + 0x1b, 0x63, 0x6f, 0x6d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x5a, 0x22, 0x67, 0x6f, + 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x76, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( From e36c6aeea13c675292de41d087a690f1deb47ec5 Mon Sep 17 00:00:00 2001 From: Jalen Geason Date: Sun, 11 Jan 2026 09:56:51 -0500 Subject: [PATCH 09/12] Remove display_cameras field from StartTeleoperationRequest in lerobot.proto --- proto/viam/service/lerobot/v1/lerobot.proto | 1 - 1 file changed, 1 deletion(-) diff --git a/proto/viam/service/lerobot/v1/lerobot.proto b/proto/viam/service/lerobot/v1/lerobot.proto index 743e785be..aa3e35b31 100644 --- a/proto/viam/service/lerobot/v1/lerobot.proto +++ b/proto/viam/service/lerobot/v1/lerobot.proto @@ -120,7 +120,6 @@ message StartTeleoperationRequest { string name = 1; string teleop_device_type = 2; // e.g., "keyboard", "spacemouse", "leader_arm" int32 fps = 3; - bool display_cameras = 4; google.protobuf.Struct extra = 99; } From df71dccd8502ba07976d583fa59ddd81eccd872e Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 11 Jan 2026 14:57:29 +0000 Subject: [PATCH 10/12] Built new protos from e36c6ae --- gen/js/service/lerobot/v1/lerobot_pb.d.ts | 4 - gen/js/service/lerobot/v1/lerobot_pb.js | 30 -- service/lerobot/v1/lerobot.pb.go | 343 +++++++++++----------- 3 files changed, 166 insertions(+), 211 deletions(-) diff --git a/gen/js/service/lerobot/v1/lerobot_pb.d.ts b/gen/js/service/lerobot/v1/lerobot_pb.d.ts index f12588286..9e952579d 100644 --- a/gen/js/service/lerobot/v1/lerobot_pb.d.ts +++ b/gen/js/service/lerobot/v1/lerobot_pb.d.ts @@ -270,9 +270,6 @@ export class StartTeleoperationRequest extends jspb.Message { getFps(): number; setFps(value: number): void; - getDisplayCameras(): boolean; - setDisplayCameras(value: boolean): void; - hasExtra(): boolean; clearExtra(): void; getExtra(): google_protobuf_struct_pb.Struct | undefined; @@ -293,7 +290,6 @@ export namespace StartTeleoperationRequest { name: string, teleopDeviceType: string, fps: number, - displayCameras: boolean, extra?: google_protobuf_struct_pb.Struct.AsObject, } } diff --git a/gen/js/service/lerobot/v1/lerobot_pb.js b/gen/js/service/lerobot/v1/lerobot_pb.js index 49483a7a7..c41303d39 100644 --- a/gen/js/service/lerobot/v1/lerobot_pb.js +++ b/gen/js/service/lerobot/v1/lerobot_pb.js @@ -2189,7 +2189,6 @@ proto.viam.service.lerobot.v1.StartTeleoperationRequest.toObject = function(incl name: jspb.Message.getFieldWithDefault(msg, 1, ""), teleopDeviceType: jspb.Message.getFieldWithDefault(msg, 2, ""), fps: jspb.Message.getFieldWithDefault(msg, 3, 0), - displayCameras: jspb.Message.getBooleanFieldWithDefault(msg, 4, false), extra: (f = msg.getExtra()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f) }; @@ -2239,10 +2238,6 @@ proto.viam.service.lerobot.v1.StartTeleoperationRequest.deserializeBinaryFromRea var value = /** @type {number} */ (reader.readInt32()); msg.setFps(value); break; - case 4: - var value = /** @type {boolean} */ (reader.readBool()); - msg.setDisplayCameras(value); - break; case 99: var value = new google_protobuf_struct_pb.Struct; reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader); @@ -2298,13 +2293,6 @@ proto.viam.service.lerobot.v1.StartTeleoperationRequest.serializeBinaryToWriter f ); } - f = message.getDisplayCameras(); - if (f) { - writer.writeBool( - 4, - f - ); - } f = message.getExtra(); if (f != null) { writer.writeMessage( @@ -2370,24 +2358,6 @@ proto.viam.service.lerobot.v1.StartTeleoperationRequest.prototype.setFps = funct }; -/** - * optional bool display_cameras = 4; - * @return {boolean} - */ -proto.viam.service.lerobot.v1.StartTeleoperationRequest.prototype.getDisplayCameras = function() { - return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false)); -}; - - -/** - * @param {boolean} value - * @return {!proto.viam.service.lerobot.v1.StartTeleoperationRequest} returns this - */ -proto.viam.service.lerobot.v1.StartTeleoperationRequest.prototype.setDisplayCameras = function(value) { - return jspb.Message.setProto3BooleanField(this, 4, value); -}; - - /** * optional google.protobuf.Struct extra = 99; * @return {?proto.google.protobuf.Struct} diff --git a/service/lerobot/v1/lerobot.pb.go b/service/lerobot/v1/lerobot.pb.go index d01a8a996..de3096b88 100644 --- a/service/lerobot/v1/lerobot.pb.go +++ b/service/lerobot/v1/lerobot.pb.go @@ -608,7 +608,6 @@ type StartTeleoperationRequest struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` TeleopDeviceType string `protobuf:"bytes,2,opt,name=teleop_device_type,json=teleopDeviceType,proto3" json:"teleop_device_type,omitempty"` // e.g., "keyboard", "spacemouse", "leader_arm" Fps int32 `protobuf:"varint,3,opt,name=fps,proto3" json:"fps,omitempty"` - DisplayCameras bool `protobuf:"varint,4,opt,name=display_cameras,json=displayCameras,proto3" json:"display_cameras,omitempty"` Extra *structpb.Struct `protobuf:"bytes,99,opt,name=extra,proto3" json:"extra,omitempty"` } @@ -663,13 +662,6 @@ func (x *StartTeleoperationRequest) GetFps() int32 { return 0 } -func (x *StartTeleoperationRequest) GetDisplayCameras() bool { - if x != nil { - return x.DisplayCameras - } - return false -} - func (x *StartTeleoperationRequest) GetExtra() *structpb.Struct { if x != nil { return x.Extra @@ -1189,185 +1181,182 @@ var file_service_lerobot_v1_lerobot_proto_rawDesc = []byte{ 0x79, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x6e, 0x75, 0x6d, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, - 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x22, 0xc7, 0x01, 0x0a, 0x19, + 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x22, 0x9e, 0x01, 0x0a, 0x19, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x66, - 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x66, 0x70, 0x73, 0x12, 0x27, 0x0a, - 0x0f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x43, - 0x61, 0x6d, 0x65, 0x72, 0x61, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, - 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, - 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3b, 0x0a, 0x1a, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, - 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x22, 0x7c, 0x0a, 0x18, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, - 0x22, 0x3a, 0x0a, 0x19, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, - 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x22, 0x7c, 0x0a, 0x11, - 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x66, 0x70, 0x73, 0x12, 0x2d, 0x0a, + 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3b, 0x0a, 0x1a, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x7c, 0x0a, 0x18, 0x53, 0x74, 0x6f, + 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, + 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x3a, 0x0a, 0x19, 0x53, 0x74, 0x6f, 0x70, 0x54, + 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x22, 0x7c, 0x0a, 0x11, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x70, 0x6f, + 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, + 0x61, 0x22, 0x52, 0x0a, 0x12, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x54, 0x79, 0x70, 0x65, 0x22, 0x9c, 0x02, 0x0a, 0x17, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, - 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x65, - 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x52, 0x0a, 0x12, 0x4c, 0x6f, - 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, 0x1f, 0x0a, - 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x54, 0x79, 0x70, 0x65, 0x22, 0x9c, - 0x02, 0x0a, 0x17, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, - 0x61, 0x78, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x6d, 0x61, 0x78, 0x53, 0x74, 0x65, 0x70, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x70, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x66, 0x70, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x54, 0x6f, 0x44, - 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, - 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, - 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x70, 0x69, - 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2d, - 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x79, 0x0a, - 0x18, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, - 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, 0x75, - 0x6d, 0x53, 0x74, 0x65, 0x70, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, - 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x69, - 0x73, 0x6f, 0x64, 0x65, 0x50, 0x61, 0x74, 0x68, 0x2a, 0x74, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x52, - 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x22, 0x0a, - 0x1e, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x5f, 0x54, 0x45, 0x4c, 0x45, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, - 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x10, 0x02, 0x32, 0xac, - 0x0c, 0x0a, 0x0e, 0x4c, 0x65, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0xae, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x22, 0x33, 0x2f, - 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, - 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, - 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, - 0xaa, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, - 0x65, 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x53, 0x74, 0x65, 0x70, 0x73, 0x12, + 0x10, 0x0a, 0x03, 0x66, 0x70, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x66, 0x70, + 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x54, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x12, 0x21, 0x0a, + 0x0c, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, + 0x78, 0x74, 0x72, 0x61, 0x22, 0x79, 0x0a, 0x18, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x53, 0x74, 0x65, 0x70, 0x73, 0x12, 0x1d, 0x0a, + 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x12, 0x21, 0x0a, 0x0c, + 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x50, 0x61, 0x74, 0x68, 0x2a, + 0x74, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, + 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, + 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x45, 0x4c, 0x45, 0x4f, 0x50, 0x45, + 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x43, 0x4f, + 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x4c, + 0x49, 0x43, 0x59, 0x10, 0x02, 0x32, 0xac, 0x0c, 0x0a, 0x0e, 0x4c, 0x65, 0x52, 0x6f, 0x62, 0x6f, + 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xae, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x2e, 0x76, 0x69, + 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, + 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x76, 0x69, + 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, + 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x35, 0x22, 0x33, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, + 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, + 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x53, 0x74, + 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2d, 0x2e, 0x76, 0x69, + 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, + 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, + 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, + 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x72, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, + 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, + 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x65, 0x70, 0x69, 0x73, + 0x6f, 0x64, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, + 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, + 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x2f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, + 0x12, 0xbe, 0x01, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x76, 0x69, + 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, + 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x22, 0x37, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, - 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0xaa, 0x01, 0x0a, - 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x2d, - 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, - 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, - 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, + 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0xba, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x76, 0x69, 0x61, + 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, 0x36, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, + 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x70, + 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x9e, + 0x01, 0x0a, 0x0a, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2a, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, - 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, - 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, - 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x70, 0x6c, 0x61, - 0x79, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0xbe, 0x01, 0x0a, 0x12, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x32, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x39, 0x22, 0x37, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, - 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x6c, - 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xba, 0x01, 0x0a, 0x11, 0x53, - 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x31, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x54, - 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, - 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, - 0x36, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x9e, 0x01, 0x0a, 0x0a, 0x4c, 0x6f, 0x61, 0x64, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2a, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, + 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x76, 0x69, 0x61, 0x6d, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x22, 0x2f, + 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x2f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, + 0xb7, 0x01, 0x0a, 0x10, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, + 0x73, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, - 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x22, 0x2f, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, - 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6c, 0x6f, 0x61, - 0x64, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0xb7, 0x01, 0x0a, 0x10, 0x52, 0x75, 0x6e, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x2e, - 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, - 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x31, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, - 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, 0x36, 0x2f, 0x76, 0x69, 0x61, - 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, - 0x72, 0x75, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, - 0x64, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x09, 0x44, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x12, 0x20, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x22, 0x2e, 0x2f, - 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x2f, 0x64, 0x6f, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x41, 0x0a, - 0x1b, 0x63, 0x6f, 0x6d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x5a, 0x22, 0x67, 0x6f, - 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x76, 0x31, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x38, 0x22, 0x36, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x75, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x09, 0x44, 0x6f, + 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x69, 0x61, 0x6d, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x43, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x30, 0x22, 0x2e, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, + 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x6f, 0x5f, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x41, 0x0a, 0x1b, 0x63, 0x6f, 0x6d, 0x2e, 0x76, 0x69, 0x61, 0x6d, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, + 0x2e, 0x76, 0x31, 0x5a, 0x22, 0x67, 0x6f, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, + 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( From f5d73df299bb7444c617ba0c3a1a491d9f0d0be1 Mon Sep 17 00:00:00 2001 From: Jalen Geason Date: Sun, 11 Jan 2026 10:27:22 -0500 Subject: [PATCH 11/12] Add task field to RunPolicyEpisodeRequest in lerobot.proto --- proto/viam/service/lerobot/v1/lerobot.proto | 1 + 1 file changed, 1 insertion(+) diff --git a/proto/viam/service/lerobot/v1/lerobot.proto b/proto/viam/service/lerobot/v1/lerobot.proto index aa3e35b31..e51d5349f 100644 --- a/proto/viam/service/lerobot/v1/lerobot.proto +++ b/proto/viam/service/lerobot/v1/lerobot.proto @@ -156,6 +156,7 @@ message RunPolicyEpisodeRequest { bool record_to_dataset = 5; // Optional: record for evaluation string dataset_name = 6; int32 episode_index = 7; + string task = 8; google.protobuf.Struct extra = 99; } From 2cf422cc150f00ce77342159313c3cda8756f945 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 11 Jan 2026 15:27:59 +0000 Subject: [PATCH 12/12] Built new protos from f5d73df --- gen/js/service/lerobot/v1/lerobot_pb.d.ts | 4 + gen/js/service/lerobot/v1/lerobot_pb.js | 30 +++ service/lerobot/v1/lerobot.pb.go | 242 +++++++++++----------- 3 files changed, 160 insertions(+), 116 deletions(-) diff --git a/gen/js/service/lerobot/v1/lerobot_pb.d.ts b/gen/js/service/lerobot/v1/lerobot_pb.d.ts index 9e952579d..8c4db0cfe 100644 --- a/gen/js/service/lerobot/v1/lerobot_pb.d.ts +++ b/gen/js/service/lerobot/v1/lerobot_pb.d.ts @@ -440,6 +440,9 @@ export class RunPolicyEpisodeRequest extends jspb.Message { getEpisodeIndex(): number; setEpisodeIndex(value: number): void; + getTask(): string; + setTask(value: string): void; + hasExtra(): boolean; clearExtra(): void; getExtra(): google_protobuf_struct_pb.Struct | undefined; @@ -464,6 +467,7 @@ export namespace RunPolicyEpisodeRequest { recordToDataset: boolean, datasetName: string, episodeIndex: number, + task: string, extra?: google_protobuf_struct_pb.Struct.AsObject, } } diff --git a/gen/js/service/lerobot/v1/lerobot_pb.js b/gen/js/service/lerobot/v1/lerobot_pb.js index c41303d39..1eeb73e42 100644 --- a/gen/js/service/lerobot/v1/lerobot_pb.js +++ b/gen/js/service/lerobot/v1/lerobot_pb.js @@ -3276,6 +3276,7 @@ proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.toObject = function(includ recordToDataset: jspb.Message.getBooleanFieldWithDefault(msg, 5, false), datasetName: jspb.Message.getFieldWithDefault(msg, 6, ""), episodeIndex: jspb.Message.getFieldWithDefault(msg, 7, 0), + task: jspb.Message.getFieldWithDefault(msg, 8, ""), extra: (f = msg.getExtra()) && google_protobuf_struct_pb.Struct.toObject(includeInstance, f) }; @@ -3341,6 +3342,10 @@ proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.deserializeBinaryFromReade var value = /** @type {number} */ (reader.readInt32()); msg.setEpisodeIndex(value); break; + case 8: + var value = /** @type {string} */ (reader.readString()); + msg.setTask(value); + break; case 99: var value = new google_protobuf_struct_pb.Struct; reader.readMessage(value,google_protobuf_struct_pb.Struct.deserializeBinaryFromReader); @@ -3424,6 +3429,13 @@ proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.serializeBinaryToWriter = f ); } + f = message.getTask(); + if (f.length > 0) { + writer.writeString( + 8, + f + ); + } f = message.getExtra(); if (f != null) { writer.writeMessage( @@ -3561,6 +3573,24 @@ proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.setEpisodeIndex }; +/** + * optional string task = 8; + * @return {string} + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.getTask = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 8, "")); +}; + + +/** + * @param {string} value + * @return {!proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest} returns this + */ +proto.viam.service.lerobot.v1.RunPolicyEpisodeRequest.prototype.setTask = function(value) { + return jspb.Message.setProto3StringField(this, 8, value); +}; + + /** * optional google.protobuf.Struct extra = 99; * @return {?proto.google.protobuf.Struct} diff --git a/service/lerobot/v1/lerobot.pb.go b/service/lerobot/v1/lerobot.pb.go index de3096b88..82de48edd 100644 --- a/service/lerobot/v1/lerobot.pb.go +++ b/service/lerobot/v1/lerobot.pb.go @@ -946,6 +946,7 @@ type RunPolicyEpisodeRequest struct { RecordToDataset bool `protobuf:"varint,5,opt,name=record_to_dataset,json=recordToDataset,proto3" json:"record_to_dataset,omitempty"` // Optional: record for evaluation DatasetName string `protobuf:"bytes,6,opt,name=dataset_name,json=datasetName,proto3" json:"dataset_name,omitempty"` EpisodeIndex int32 `protobuf:"varint,7,opt,name=episode_index,json=episodeIndex,proto3" json:"episode_index,omitempty"` + Task string `protobuf:"bytes,8,opt,name=task,proto3" json:"task,omitempty"` Extra *structpb.Struct `protobuf:"bytes,99,opt,name=extra,proto3" json:"extra,omitempty"` } @@ -1028,6 +1029,13 @@ func (x *RunPolicyEpisodeRequest) GetEpisodeIndex() int32 { return 0 } +func (x *RunPolicyEpisodeRequest) GetTask() string { + if x != nil { + return x.Task + } + return "" +} + func (x *RunPolicyEpisodeRequest) GetExtra() *structpb.Struct { if x != nil { return x.Extra @@ -1220,7 +1228,7 @@ var file_service_lerobot_v1_lerobot_proto_rawDesc = []byte{ 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x54, 0x79, 0x70, 0x65, 0x22, 0x9c, 0x02, 0x0a, 0x17, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, + 0x79, 0x54, 0x79, 0x70, 0x65, 0x22, 0xb0, 0x02, 0x0a, 0x17, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, @@ -1235,128 +1243,130 @@ var file_service_lerobot_v1_lerobot_proto_rawDesc = []byte{ 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x18, 0x63, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x65, - 0x78, 0x74, 0x72, 0x61, 0x22, 0x79, 0x0a, 0x18, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x53, 0x74, 0x65, 0x70, 0x73, 0x12, 0x1d, 0x0a, - 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x12, 0x21, 0x0a, 0x0c, - 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x50, 0x61, 0x74, 0x68, 0x2a, - 0x74, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, - 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x45, 0x4c, 0x45, 0x4f, 0x50, 0x45, - 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x43, 0x4f, - 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x4c, - 0x49, 0x43, 0x59, 0x10, 0x02, 0x32, 0xac, 0x0c, 0x0a, 0x0e, 0x4c, 0x65, 0x52, 0x6f, 0x62, 0x6f, - 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xae, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x2e, 0x76, 0x69, - 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, - 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x76, 0x69, - 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, - 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x35, 0x22, 0x33, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, - 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, - 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x53, 0x74, - 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2d, 0x2e, 0x76, 0x69, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x73, 0x6b, 0x12, 0x2d, 0x0a, 0x05, 0x65, 0x78, 0x74, + 0x72, 0x61, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x52, 0x05, 0x65, 0x78, 0x74, 0x72, 0x61, 0x22, 0x79, 0x0a, 0x18, 0x52, 0x75, 0x6e, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x74, 0x65, 0x70, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x53, 0x74, 0x65, 0x70, + 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x50, + 0x61, 0x74, 0x68, 0x2a, 0x74, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, + 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, 0x52, 0x45, 0x43, 0x4f, + 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x45, 0x4c, + 0x45, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, + 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, + 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x10, 0x02, 0x32, 0xac, 0x0c, 0x0a, 0x0e, 0x4c, 0x65, + 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xae, 0x01, 0x0a, + 0x0e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, + 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, + 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2f, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, + 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x22, 0x33, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, + 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0xaa, 0x01, + 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, + 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, + 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, + 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, + 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, + 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x70, + 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x2e, 0x76, + 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, + 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, + 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, - 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, - 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, - 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x72, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, + 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, + 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, + 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, + 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, + 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, - 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x65, 0x70, 0x69, 0x73, - 0x6f, 0x64, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, - 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x32, 0x2f, 0x76, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, + 0x22, 0x32, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x65, 0x70, 0x69, + 0x73, 0x6f, 0x64, 0x65, 0x12, 0xbe, 0x01, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, + 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x2e, 0x76, 0x69, + 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, + 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x33, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, + 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, + 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x22, 0x37, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x2f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, - 0x12, 0xbe, 0x01, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x76, 0x69, + 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xba, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, + 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, - 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x22, 0x37, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, - 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0xba, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x76, 0x69, 0x61, - 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, 0x36, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, - 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x70, - 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x9e, - 0x01, 0x0a, 0x0a, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2a, 0x2e, + 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, 0x65, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, + 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, + 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x54, 0x65, 0x6c, + 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, 0x36, 0x2f, 0x76, 0x69, 0x61, + 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, + 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x9e, 0x01, 0x0a, 0x0a, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x12, 0x2a, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x76, 0x69, 0x61, 0x6d, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x22, 0x2f, - 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x2f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, - 0xb7, 0x01, 0x0a, 0x10, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, - 0x73, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x38, 0x22, 0x36, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, - 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x75, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x09, 0x44, 0x6f, - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x76, 0x69, 0x61, 0x6d, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x30, 0x22, 0x2e, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, - 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x6f, 0x5f, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x41, 0x0a, 0x1b, 0x63, 0x6f, 0x6d, 0x2e, 0x76, 0x69, 0x61, 0x6d, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, - 0x2e, 0x76, 0x31, 0x5a, 0x22, 0x67, 0x6f, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, - 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x31, 0x22, 0x2f, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, + 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x12, 0xb7, 0x01, 0x0a, 0x10, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x45, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x2e, 0x76, 0x69, 0x61, 0x6d, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, 0x69, 0x73, + 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x76, 0x69, 0x61, + 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x70, + 0x69, 0x73, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22, 0x36, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, 0x65, 0x72, 0x6f, + 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x75, 0x6e, 0x5f, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x65, 0x70, 0x69, 0x73, 0x6f, 0x64, 0x65, 0x12, 0x88, 0x01, + 0x0a, 0x09, 0x44, 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x20, 0x2e, 0x76, 0x69, + 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x43, + 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, + 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x6f, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x22, 0x2e, 0x2f, 0x76, 0x69, 0x61, 0x6d, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6c, + 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x6f, + 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, 0x41, 0x0a, 0x1b, 0x63, 0x6f, 0x6d, 0x2e, + 0x76, 0x69, 0x61, 0x6d, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x6c, 0x65, 0x72, + 0x6f, 0x62, 0x6f, 0x74, 0x2e, 0x76, 0x31, 0x5a, 0x22, 0x67, 0x6f, 0x2e, 0x76, 0x69, 0x61, 0x6d, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2f, 0x6c, 0x65, 0x72, 0x6f, 0x62, 0x6f, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var (