From 6b9898fd6f8e9869be9641b0cec0c76945dbd758 Mon Sep 17 00:00:00 2001 From: LXY1226 <767763591@qq.com> Date: Tue, 4 Aug 2020 15:16:44 +0800 Subject: [PATCH] Add Ptt --- client/builders.go | 38 +- client/client.go | 42 +- client/decoders.go | 26 +- client/entities.go | 13 + client/highway.go | 36 +- client/pb/cmd0x352/cmd0x352.pb.go | 2 +- client/pb/data.pb.go | 986 +++++++++++++++++++--------- client/pb/data.proto | 46 +- client/pb/longmsg/longmsg.pb.go | 2 +- client/pb/msg/msg.pb.go | 10 +- client/pb/msg/msg.proto | 2 +- client/pb/msg/objmsg.pb.go | 2 +- client/pb/multimsg/multimsg.pb.go | 2 +- client/pb/oidb/oidb.pb.go | 2 +- client/pb/structmsg/structmsg.pb.go | 2 +- go.mod | 3 +- go.sum | 33 +- message/elements.go | 5 + message/message.go | 17 +- utils/http.go | 66 +- 20 files changed, 965 insertions(+), 370 deletions(-) diff --git a/client/builders.go b/client/builders.go index e2158e47..5ce3867f 100644 --- a/client/builders.go +++ b/client/builders.go @@ -385,12 +385,17 @@ func (c *QQClient) buildDeleteOnlinePushPacket(uin int64, seq uint16, delMsg []j // MessageSvc.PbSendMsg func (c *QQClient) buildGroupSendingPacket(groupCode int64, r int32, forward bool, m *message.SendingMessage) (uint16, []byte) { seq := c.nextSeq() + if m.Ptt != nil { + m.Elements = []message.IMessageElement{} + } + req := &msg.SendMessageRequest{ RoutingHead: &msg.RoutingHead{Grp: &msg.Grp{GroupCode: groupCode}}, ContentHead: &msg.ContentHead{PkgNum: 1}, MsgBody: &msg.MessageBody{ RichText: &msg.RichText{ Elems: message.ToProtoElems(m.Elements, true), + Ptt: m.Ptt, }, }, MsgSeq: c.nextGroupSeq(), @@ -476,7 +481,7 @@ func (c *QQClient) buildGroupImageStorePacket(groupCode int64, md5 []byte, size req := &pb.D388ReqBody{ NetType: 3, Subcmd: 1, - MsgTryupImgReq: []*pb.TryUpImgReq{ + MsgTryUpImgReq: []*pb.TryUpImgReq{ { GroupCode: groupCode, SrcUin: c.Uin, @@ -546,6 +551,37 @@ func (c *QQClient) buildImageUploadPacket(data, updKey []byte, commandId int32, return } +// ImgStore.GroupPicUp +func (c *QQClient) buildGroupPttStorePacket(groupCode int64, md5 []byte, size, voiceLength int32) (uint16, []byte) { + seq := c.nextSeq() + req := &pb.D388ReqBody{ + NetType: 3, + Subcmd: 3, + MsgTryUpPttReq: []*pb.TryUpPttReq{ + { + GroupCode: groupCode, + SrcUin: c.Uin, + FileMd5: md5, + FileSize: int64(size), + FileName: md5, + SrcTerm: 5, + PlatformType: 9, + BuType: 4, + InnerIp: 0, + BuildVer: "6.5.5.663", + VoiceLength: voiceLength, + Codec: 0, + VoiceType: 1, + BoolNewUpChan: true, + }, + }, + Extension: EmptyBytes, + } + payload, _ := proto.Marshal(req) + packet := packets.BuildUniPacket(c.Uin, seq, "PttStore.GroupPttUp", 1, c.OutGoingPacketSessionId, EmptyBytes, c.sigInfo.d2Key, payload) + return seq, packet +} + // ProfileService.Pb.ReqSystemMsgNew.Group func (c *QQClient) buildSystemMsgNewGroupPacket() (uint16, []byte) { seq := c.nextSeq() diff --git a/client/client.go b/client/client.go index 870816b1..dc04c7f3 100644 --- a/client/client.go +++ b/client/client.go @@ -116,6 +116,7 @@ func NewClientMd5(uin int64, passwordMd5 [16]byte) *QQClient { "friendlist.GetTroopListReqV2": decodeGroupListResponse, "friendlist.GetTroopMemberListReq": decodeGroupMemberListResponse, "ImgStore.GroupPicUp": decodeGroupImageStoreResponse, + "PttStore.GroupPttUp": decodeGroupPttStoreResponse, "LongConn.OffPicUp": decodeOffPicUpResponse, "ProfileService.Pb.ReqSystemMsgNew.Group": decodeSystemMsgGroupPacket, "ProfileService.Pb.ReqSystemMsgNew.Friend": decodeSystemMsgFriendPacket, @@ -145,7 +146,7 @@ func (c *QQClient) Login() (*LoginResponse, error) { return nil, err } c.Online = true - go c.loop() + go c.netLoop() seq, packet := c.buildLoginPacket() rsp, err := c.sendAndWait(seq, packet) if err != nil { @@ -198,8 +199,7 @@ func (c *QQClient) GetFriendList() (*FriendListResponse, error) { list := rsp.(FriendListResponse) r.TotalCount = list.TotalCount r.List = append(r.List, list.List...) - curFriendCount += len(list.List) - if int32(curFriendCount) >= r.TotalCount { + if int32(len(r.List)) >= r.TotalCount { break } } @@ -417,6 +417,40 @@ func (c *QQClient) uploadPrivateImage(target int64, img []byte, count int) (*mes return e, nil } +func (c *QQClient) UploadGroupPtt(groupCode int64, voice []byte, voiceLength int32) (*message.GroupPtt, error) { + h := md5.Sum(voice) + seq, pkt := c.buildGroupPttStorePacket(groupCode, h[:], int32(len(voice)), voiceLength) + r, err := c.sendAndWait(seq, pkt) + if err != nil { + return nil, err + } + rsp := r.(pttUploadResponse) + if rsp.ResultCode != 0 { + return nil, errors.New(rsp.Message) + } + if rsp.IsExists { + goto ok + } + for i, ip := range rsp.UploadIp { + err := c.uploadGroupPtt(ip, rsp.UploadPort[i], rsp.UploadKey, rsp.FileKey, voice, h[:], 2) + if err != nil { + continue + } + goto ok + } + return nil, errors.New("upload failed") +ok: + return &message.GroupPtt{ + Ptt: msg.Ptt{ + FileType: 4, + FileMd5: h[:], + FileName: "01234567890123456789012345678901.amr", + FileSize: int32(len(voice)), + BoolValid: true, + PbReserve: []byte{0}, + }}, nil +} + func (c *QQClient) QueryGroupImage(groupCode int64, hash []byte, size int32) (*message.GroupImageElement, error) { r, err := c.sendAndWait(c.buildGroupImageStorePacket(groupCode, hash, size)) if err != nil { @@ -705,7 +739,7 @@ func (c *QQClient) sendAndWait(seq uint16, pkt []byte) (interface{}, error) { } } -func (c *QQClient) loop() { +func (c *QQClient) netLoop() { reader := binary.NewNetworkReader(c.Conn) retry := 0 for c.Online { diff --git a/client/decoders.go b/client/decoders.go index 2b51c0f5..bc0028f7 100644 --- a/client/decoders.go +++ b/client/decoders.go @@ -384,7 +384,7 @@ func decodeGroupImageStoreResponse(_ *QQClient, _ uint16, payload []byte) (inter if err != nil { return nil, err } - rsp := pkt.MsgTryupImgRsp[0] + rsp := pkt.MsgTryUpImgRsp[0] if rsp.Result != 0 { return imageUploadResponse{ ResultCode: rsp.Result, @@ -401,6 +401,30 @@ func decodeGroupImageStoreResponse(_ *QQClient, _ uint16, payload []byte) (inter }, nil } +func decodeGroupPttStoreResponse(_ *QQClient, _ uint16, payload []byte) (interface{}, error) { + pkt := pb.D388RespBody{} + err := proto.Unmarshal(payload, &pkt) + if err != nil { + return nil, err + } + rsp := pkt.MsgTryUpPttRsp[0] + if rsp.Result != 0 { + return pttUploadResponse{ + ResultCode: rsp.Result, + Message: rsp.FailMsg, + }, nil + } + if rsp.BoolFileExit { + return imageUploadResponse{IsExists: true}, nil + } + return pttUploadResponse{ + UploadKey: rsp.UpUkey, + UploadIp: rsp.Uint32UpIp, + UploadPort: rsp.Uint32UpPort, + FileKey: rsp.FileKey, + }, nil +} + func decodeOffPicUpResponse(c *QQClient, _ uint16, payload []byte) (interface{}, error) { rsp := cmd0x352.RspBody{} if err := proto.Unmarshal(payload, &rsp); err != nil { diff --git a/client/entities.go b/client/entities.go index cafffec1..d3ff738e 100644 --- a/client/entities.go +++ b/client/entities.go @@ -167,6 +167,19 @@ type ( UploadPort []int32 } + pttUploadResponse struct { + ResultCode int32 + Message string + + IsExists bool + + ResourceId string + UploadKey []byte + UploadIp []int32 + UploadPort []int32 + FileKey []byte + } + groupMessageReceiptEvent struct { Rand int32 Seq int32 diff --git a/client/highway.go b/client/highway.go index 71117466..31739c6a 100644 --- a/client/highway.go +++ b/client/highway.go @@ -2,11 +2,15 @@ package client import ( "crypto/md5" + binary2 "encoding/binary" + "encoding/hex" "errors" "github.com/Mrs4s/MiraiGo/binary" "github.com/Mrs4s/MiraiGo/client/pb" + "github.com/Mrs4s/MiraiGo/utils" "github.com/golang/protobuf/proto" "net" + "strconv" "time" ) @@ -15,8 +19,8 @@ func (c *QQClient) highwayUploadImage(ip uint32, port int, updKey, img []byte, c IP: make([]byte, 4), Port: port, } + binary2.LittleEndian.PutUint32(addr.IP, ip) conn, err := net.DialTCP("tcp", nil, &addr) - println("connected") if err != nil { return err } @@ -41,8 +45,8 @@ func (c *QQClient) highwayUploadImage(ip uint32, port int, updKey, img []byte, c _, _ = r.ReadBytes(4) payload, _ := r.ReadBytes(int(hl)) _ = conn.Close() - rsp := pb.RspDataHighwayHead{} - if err = proto.Unmarshal(payload, &rsp); err != nil { + rsp := new(pb.RspDataHighwayHead) + if err = proto.Unmarshal(payload, rsp); err != nil { return err } if rsp.ErrorCode != 0 { @@ -50,3 +54,29 @@ func (c *QQClient) highwayUploadImage(ip uint32, port int, updKey, img []byte, c } return nil } + +// 只是为了写的跟上面一样长(bushi,当然也应该是最快的玩法 +func (c *QQClient) uploadGroupPtt(ip, port int32, updKey, fileKey, data, md5 []byte, codec int64) error { + url := make([]byte, 512)[:0] + url = append(url, "http://"...) + url = append(url, binary.UInt32ToIPV4Address(uint32(ip))...) + url = append(url, ':') + url = strconv.AppendInt(url, int64(port), 10) + url = append(url, "/?ver=4679&ukey="...) + p := len(url) + url = url[:p+len(updKey)*2] + hex.Encode(url[p:], updKey) + url = append(url, "&filekey="...) + p = len(url) + url = url[:p+len(fileKey)*2] + hex.Encode(url[p:], fileKey) + url = append(url, "&filesize="...) + url = strconv.AppendInt(url, int64(len(data)), 10) + url = append(url, "&bmd5="...) + p = len(url) + url = url[:p+32] + hex.Encode(url[p:], md5) + url = append(url, "&mType=pttDu&voice_encodec=1"...) + _, err := utils.HttpPostBytes(string(url), data) + return err +} diff --git a/client/pb/cmd0x352/cmd0x352.pb.go b/client/pb/cmd0x352/cmd0x352.pb.go index 9e94f424..584505a6 100644 --- a/client/pb/cmd0x352/cmd0x352.pb.go +++ b/client/pb/cmd0x352/cmd0x352.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.11.4 +// protoc v3.12.3 // source: cmd0x352.proto package cmd0x352 diff --git a/client/pb/data.pb.go b/client/pb/data.pb.go index c05d66de..fdac4412 100644 --- a/client/pb/data.pb.go +++ b/client/pb/data.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.11.4 +// protoc v3.12.3 // source: data.proto package pb @@ -372,7 +372,8 @@ type D388ReqBody struct { NetType int32 `protobuf:"varint,1,opt,name=netType,proto3" json:"netType,omitempty"` Subcmd int32 `protobuf:"varint,2,opt,name=subcmd,proto3" json:"subcmd,omitempty"` - MsgTryupImgReq []*TryUpImgReq `protobuf:"bytes,3,rep,name=msgTryupImgReq,proto3" json:"msgTryupImgReq,omitempty"` + MsgTryUpImgReq []*TryUpImgReq `protobuf:"bytes,3,rep,name=msgTryUpImgReq,proto3" json:"msgTryUpImgReq,omitempty"` + MsgTryUpPttReq []*TryUpPttReq `protobuf:"bytes,5,rep,name=msgTryUpPttReq,proto3" json:"msgTryUpPttReq,omitempty"` CommandId int32 `protobuf:"varint,7,opt,name=commandId,proto3" json:"commandId,omitempty"` Extension []byte `protobuf:"bytes,1001,opt,name=extension,proto3" json:"extension,omitempty"` } @@ -423,9 +424,16 @@ func (x *D388ReqBody) GetSubcmd() int32 { return 0 } -func (x *D388ReqBody) GetMsgTryupImgReq() []*TryUpImgReq { +func (x *D388ReqBody) GetMsgTryUpImgReq() []*TryUpImgReq { if x != nil { - return x.MsgTryupImgReq + return x.MsgTryUpImgReq + } + return nil +} + +func (x *D388ReqBody) GetMsgTryUpPttReq() []*TryUpPttReq { + if x != nil { + return x.MsgTryUpPttReq } return nil } @@ -451,7 +459,8 @@ type D388RespBody struct { ClientIp int32 `protobuf:"varint,1,opt,name=clientIp,proto3" json:"clientIp,omitempty"` SubCmd int32 `protobuf:"varint,2,opt,name=subCmd,proto3" json:"subCmd,omitempty"` - MsgTryupImgRsp []*TryUpImgResp `protobuf:"bytes,3,rep,name=msgTryupImgRsp,proto3" json:"msgTryupImgRsp,omitempty"` + MsgTryUpImgRsp []*TryUpImgResp `protobuf:"bytes,3,rep,name=msgTryUpImgRsp,proto3" json:"msgTryUpImgRsp,omitempty"` + MsgTryUpPttRsp []*TryUpPttResp `protobuf:"bytes,5,rep,name=msgTryUpPttRsp,proto3" json:"msgTryUpPttRsp,omitempty"` } func (x *D388RespBody) Reset() { @@ -500,9 +509,16 @@ func (x *D388RespBody) GetSubCmd() int32 { return 0 } -func (x *D388RespBody) GetMsgTryupImgRsp() []*TryUpImgResp { +func (x *D388RespBody) GetMsgTryUpImgRsp() []*TryUpImgResp { if x != nil { - return x.MsgTryupImgRsp + return x.MsgTryUpImgRsp + } + return nil +} + +func (x *D388RespBody) GetMsgTryUpPttRsp() []*TryUpPttResp { + if x != nil { + return x.MsgTryUpPttRsp } return nil } @@ -1261,6 +1277,301 @@ func (x *TryUpImgResp) GetFid() int64 { return 0 } +type TryUpPttReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GroupCode int64 `protobuf:"varint,1,opt,name=groupCode,proto3" json:"groupCode,omitempty"` + SrcUin int64 `protobuf:"varint,2,opt,name=srcUin,proto3" json:"srcUin,omitempty"` + FileId int64 `protobuf:"varint,3,opt,name=fileId,proto3" json:"fileId,omitempty"` + FileMd5 []byte `protobuf:"bytes,4,opt,name=fileMd5,proto3" json:"fileMd5,omitempty"` + FileSize int64 `protobuf:"varint,5,opt,name=fileSize,proto3" json:"fileSize,omitempty"` + FileName []byte `protobuf:"bytes,6,opt,name=fileName,proto3" json:"fileName,omitempty"` + SrcTerm int32 `protobuf:"varint,7,opt,name=srcTerm,proto3" json:"srcTerm,omitempty"` + PlatformType int32 `protobuf:"varint,8,opt,name=platformType,proto3" json:"platformType,omitempty"` + BuType int32 `protobuf:"varint,9,opt,name=buType,proto3" json:"buType,omitempty"` + BuildVer string `protobuf:"bytes,10,opt,name=buildVer,proto3" json:"buildVer,omitempty"` + InnerIp int32 `protobuf:"varint,11,opt,name=innerIp,proto3" json:"innerIp,omitempty"` + VoiceLength int32 `protobuf:"varint,12,opt,name=voiceLength,proto3" json:"voiceLength,omitempty"` + BoolNewUpChan bool `protobuf:"varint,13,opt,name=boolNewUpChan,proto3" json:"boolNewUpChan,omitempty"` + Codec int32 `protobuf:"varint,14,opt,name=codec,proto3" json:"codec,omitempty"` + VoiceType int32 `protobuf:"varint,15,opt,name=voiceType,proto3" json:"voiceType,omitempty"` + BuId int32 `protobuf:"varint,16,opt,name=buId,proto3" json:"buId,omitempty"` +} + +func (x *TryUpPttReq) Reset() { + *x = TryUpPttReq{} + if protoimpl.UnsafeEnabled { + mi := &file_data_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TryUpPttReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TryUpPttReq) ProtoMessage() {} + +func (x *TryUpPttReq) ProtoReflect() protoreflect.Message { + mi := &file_data_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TryUpPttReq.ProtoReflect.Descriptor instead. +func (*TryUpPttReq) Descriptor() ([]byte, []int) { + return file_data_proto_rawDescGZIP(), []int{12} +} + +func (x *TryUpPttReq) GetGroupCode() int64 { + if x != nil { + return x.GroupCode + } + return 0 +} + +func (x *TryUpPttReq) GetSrcUin() int64 { + if x != nil { + return x.SrcUin + } + return 0 +} + +func (x *TryUpPttReq) GetFileId() int64 { + if x != nil { + return x.FileId + } + return 0 +} + +func (x *TryUpPttReq) GetFileMd5() []byte { + if x != nil { + return x.FileMd5 + } + return nil +} + +func (x *TryUpPttReq) GetFileSize() int64 { + if x != nil { + return x.FileSize + } + return 0 +} + +func (x *TryUpPttReq) GetFileName() []byte { + if x != nil { + return x.FileName + } + return nil +} + +func (x *TryUpPttReq) GetSrcTerm() int32 { + if x != nil { + return x.SrcTerm + } + return 0 +} + +func (x *TryUpPttReq) GetPlatformType() int32 { + if x != nil { + return x.PlatformType + } + return 0 +} + +func (x *TryUpPttReq) GetBuType() int32 { + if x != nil { + return x.BuType + } + return 0 +} + +func (x *TryUpPttReq) GetBuildVer() string { + if x != nil { + return x.BuildVer + } + return "" +} + +func (x *TryUpPttReq) GetInnerIp() int32 { + if x != nil { + return x.InnerIp + } + return 0 +} + +func (x *TryUpPttReq) GetVoiceLength() int32 { + if x != nil { + return x.VoiceLength + } + return 0 +} + +func (x *TryUpPttReq) GetBoolNewUpChan() bool { + if x != nil { + return x.BoolNewUpChan + } + return false +} + +func (x *TryUpPttReq) GetCodec() int32 { + if x != nil { + return x.Codec + } + return 0 +} + +func (x *TryUpPttReq) GetVoiceType() int32 { + if x != nil { + return x.VoiceType + } + return 0 +} + +func (x *TryUpPttReq) GetBuId() int32 { + if x != nil { + return x.BuId + } + return 0 +} + +type TryUpPttResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FileId int64 `protobuf:"varint,1,opt,name=fileId,proto3" json:"fileId,omitempty"` + Result int32 `protobuf:"varint,2,opt,name=result,proto3" json:"result,omitempty"` + FailMsg string `protobuf:"bytes,3,opt,name=failMsg,proto3" json:"failMsg,omitempty"` + BoolFileExit bool `protobuf:"varint,4,opt,name=boolFileExit,proto3" json:"boolFileExit,omitempty"` + Uint32UpIp []int32 `protobuf:"varint,5,rep,packed,name=uint32UpIp,proto3" json:"uint32UpIp,omitempty"` + Uint32UpPort []int32 `protobuf:"varint,6,rep,packed,name=uint32UpPort,proto3" json:"uint32UpPort,omitempty"` + UpUkey []byte `protobuf:"bytes,7,opt,name=upUkey,proto3" json:"upUkey,omitempty"` + // int64 fileid = 8; // + UpOffset int64 `protobuf:"varint,9,opt,name=upOffset,proto3" json:"upOffset,omitempty"` + BlockSize int64 `protobuf:"varint,10,opt,name=blockSize,proto3" json:"blockSize,omitempty"` + FileKey []byte `protobuf:"bytes,11,opt,name=fileKey,proto3" json:"fileKey,omitempty"` + ChannelType int32 `protobuf:"varint,12,opt,name=channelType,proto3" json:"channelType,omitempty"` +} + +func (x *TryUpPttResp) Reset() { + *x = TryUpPttResp{} + if protoimpl.UnsafeEnabled { + mi := &file_data_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TryUpPttResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TryUpPttResp) ProtoMessage() {} + +func (x *TryUpPttResp) ProtoReflect() protoreflect.Message { + mi := &file_data_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TryUpPttResp.ProtoReflect.Descriptor instead. +func (*TryUpPttResp) Descriptor() ([]byte, []int) { + return file_data_proto_rawDescGZIP(), []int{13} +} + +func (x *TryUpPttResp) GetFileId() int64 { + if x != nil { + return x.FileId + } + return 0 +} + +func (x *TryUpPttResp) GetResult() int32 { + if x != nil { + return x.Result + } + return 0 +} + +func (x *TryUpPttResp) GetFailMsg() string { + if x != nil { + return x.FailMsg + } + return "" +} + +func (x *TryUpPttResp) GetBoolFileExit() bool { + if x != nil { + return x.BoolFileExit + } + return false +} + +func (x *TryUpPttResp) GetUint32UpIp() []int32 { + if x != nil { + return x.Uint32UpIp + } + return nil +} + +func (x *TryUpPttResp) GetUint32UpPort() []int32 { + if x != nil { + return x.Uint32UpPort + } + return nil +} + +func (x *TryUpPttResp) GetUpUkey() []byte { + if x != nil { + return x.UpUkey + } + return nil +} + +func (x *TryUpPttResp) GetUpOffset() int64 { + if x != nil { + return x.UpOffset + } + return 0 +} + +func (x *TryUpPttResp) GetBlockSize() int64 { + if x != nil { + return x.BlockSize + } + return 0 +} + +func (x *TryUpPttResp) GetFileKey() []byte { + if x != nil { + return x.FileKey + } + return nil +} + +func (x *TryUpPttResp) GetChannelType() int32 { + if x != nil { + return x.ChannelType + } + return 0 +} + type ImgInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1276,7 +1587,7 @@ type ImgInfo struct { func (x *ImgInfo) Reset() { *x = ImgInfo{} if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[12] + mi := &file_data_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1289,7 +1600,7 @@ func (x *ImgInfo) String() string { func (*ImgInfo) ProtoMessage() {} func (x *ImgInfo) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[12] + mi := &file_data_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1302,7 +1613,7 @@ func (x *ImgInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ImgInfo.ProtoReflect.Descriptor instead. func (*ImgInfo) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{12} + return file_data_proto_rawDescGZIP(), []int{14} } func (x *ImgInfo) GetFileMd5() []byte { @@ -1351,7 +1662,7 @@ type DeleteMessageRequest struct { func (x *DeleteMessageRequest) Reset() { *x = DeleteMessageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[13] + mi := &file_data_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1364,7 +1675,7 @@ func (x *DeleteMessageRequest) String() string { func (*DeleteMessageRequest) ProtoMessage() {} func (x *DeleteMessageRequest) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[13] + mi := &file_data_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1377,7 +1688,7 @@ func (x *DeleteMessageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteMessageRequest.ProtoReflect.Descriptor instead. func (*DeleteMessageRequest) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{13} + return file_data_proto_rawDescGZIP(), []int{15} } func (x *DeleteMessageRequest) GetItems() []*MessageItem { @@ -1403,7 +1714,7 @@ type MessageItem struct { func (x *MessageItem) Reset() { *x = MessageItem{} if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[14] + mi := &file_data_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1416,7 +1727,7 @@ func (x *MessageItem) String() string { func (*MessageItem) ProtoMessage() {} func (x *MessageItem) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[14] + mi := &file_data_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1429,7 +1740,7 @@ func (x *MessageItem) ProtoReflect() protoreflect.Message { // Deprecated: Use MessageItem.ProtoReflect.Descriptor instead. func (*MessageItem) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{14} + return file_data_proto_rawDescGZIP(), []int{16} } func (x *MessageItem) GetFromUin() int64 { @@ -1486,7 +1797,7 @@ type NotifyMsgBody struct { func (x *NotifyMsgBody) Reset() { *x = NotifyMsgBody{} if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[15] + mi := &file_data_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1499,7 +1810,7 @@ func (x *NotifyMsgBody) String() string { func (*NotifyMsgBody) ProtoMessage() {} func (x *NotifyMsgBody) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[15] + mi := &file_data_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1512,7 +1823,7 @@ func (x *NotifyMsgBody) ProtoReflect() protoreflect.Message { // Deprecated: Use NotifyMsgBody.ProtoReflect.Descriptor instead. func (*NotifyMsgBody) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{15} + return file_data_proto_rawDescGZIP(), []int{17} } func (x *NotifyMsgBody) GetOptMsgRecall() *MessageRecallReminder { @@ -1546,7 +1857,7 @@ type MessageRecallReminder struct { func (x *MessageRecallReminder) Reset() { *x = MessageRecallReminder{} if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[16] + mi := &file_data_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1559,7 +1870,7 @@ func (x *MessageRecallReminder) String() string { func (*MessageRecallReminder) ProtoMessage() {} func (x *MessageRecallReminder) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[16] + mi := &file_data_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1572,7 +1883,7 @@ func (x *MessageRecallReminder) ProtoReflect() protoreflect.Message { // Deprecated: Use MessageRecallReminder.ProtoReflect.Descriptor instead. func (*MessageRecallReminder) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{16} + return file_data_proto_rawDescGZIP(), []int{18} } func (x *MessageRecallReminder) GetUin() int64 { @@ -1640,7 +1951,7 @@ type RecalledMessageMeta struct { func (x *RecalledMessageMeta) Reset() { *x = RecalledMessageMeta{} if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[17] + mi := &file_data_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1653,7 +1964,7 @@ func (x *RecalledMessageMeta) String() string { func (*RecalledMessageMeta) ProtoMessage() {} func (x *RecalledMessageMeta) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[17] + mi := &file_data_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1666,7 +1977,7 @@ func (x *RecalledMessageMeta) ProtoReflect() protoreflect.Message { // Deprecated: Use RecalledMessageMeta.ProtoReflect.Descriptor instead. func (*RecalledMessageMeta) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{17} + return file_data_proto_rawDescGZIP(), []int{19} } func (x *RecalledMessageMeta) GetSeq() int32 { @@ -1722,7 +2033,7 @@ type SubD4 struct { func (x *SubD4) Reset() { *x = SubD4{} if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[18] + mi := &file_data_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1735,7 +2046,7 @@ func (x *SubD4) String() string { func (*SubD4) ProtoMessage() {} func (x *SubD4) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[18] + mi := &file_data_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1748,7 +2059,7 @@ func (x *SubD4) ProtoReflect() protoreflect.Message { // Deprecated: Use SubD4.ProtoReflect.Descriptor instead. func (*SubD4) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{18} + return file_data_proto_rawDescGZIP(), []int{20} } func (x *SubD4) GetUin() int64 { @@ -1773,7 +2084,7 @@ type Sub8A struct { func (x *Sub8A) Reset() { *x = Sub8A{} if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[19] + mi := &file_data_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1786,7 +2097,7 @@ func (x *Sub8A) String() string { func (*Sub8A) ProtoMessage() {} func (x *Sub8A) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[19] + mi := &file_data_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1799,7 +2110,7 @@ func (x *Sub8A) ProtoReflect() protoreflect.Message { // Deprecated: Use Sub8A.ProtoReflect.Descriptor instead. func (*Sub8A) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{19} + return file_data_proto_rawDescGZIP(), []int{21} } func (x *Sub8A) GetMsgInfo() []*Sub8AMsgInfo { @@ -1856,7 +2167,7 @@ type Sub8AMsgInfo struct { func (x *Sub8AMsgInfo) Reset() { *x = Sub8AMsgInfo{} if protoimpl.UnsafeEnabled { - mi := &file_data_proto_msgTypes[20] + mi := &file_data_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1869,7 +2180,7 @@ func (x *Sub8AMsgInfo) String() string { func (*Sub8AMsgInfo) ProtoMessage() {} func (x *Sub8AMsgInfo) ProtoReflect() protoreflect.Message { - mi := &file_data_proto_msgTypes[20] + mi := &file_data_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1882,7 +2193,7 @@ func (x *Sub8AMsgInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use Sub8AMsgInfo.ProtoReflect.Descriptor instead. func (*Sub8AMsgInfo) Descriptor() ([]byte, []int) { - return file_data_proto_rawDescGZIP(), []int{20} + return file_data_proto_rawDescGZIP(), []int{22} } func (x *Sub8AMsgInfo) GetFromUin() int64 { @@ -2005,238 +2316,295 @@ var file_data_proto_rawDesc = []byte{ 0x75, 0x74, 0x75, 0x61, 0x6c, 0x6d, 0x61, 0x72, 0x6b, 0x4c, 0x62, 0x73, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x89, 0x86, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x72, 0x65, 0x71, 0x4d, 0x75, 0x74, 0x75, 0x61, 0x6c, 0x6d, 0x61, 0x72, 0x6b, 0x4c, 0x62, 0x73, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x22, 0xb2, 0x01, 0x0a, 0x0b, 0x44, 0x33, 0x38, 0x38, 0x52, 0x65, 0x71, 0x42, 0x6f, 0x64, 0x79, + 0x22, 0xe8, 0x01, 0x0a, 0x0b, 0x44, 0x33, 0x38, 0x38, 0x52, 0x65, 0x71, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x75, 0x62, 0x63, 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x75, 0x62, 0x63, - 0x6d, 0x64, 0x12, 0x34, 0x0a, 0x0e, 0x6d, 0x73, 0x67, 0x54, 0x72, 0x79, 0x75, 0x70, 0x49, 0x6d, + 0x6d, 0x64, 0x12, 0x34, 0x0a, 0x0e, 0x6d, 0x73, 0x67, 0x54, 0x72, 0x79, 0x55, 0x70, 0x49, 0x6d, 0x67, 0x52, 0x65, 0x71, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x54, 0x72, 0x79, 0x55, 0x70, 0x49, 0x6d, 0x67, 0x52, 0x65, 0x71, 0x52, 0x0e, 0x6d, 0x73, 0x67, 0x54, 0x72, 0x79, - 0x75, 0x70, 0x49, 0x6d, 0x67, 0x52, 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, - 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x79, 0x0a, 0x0c, 0x44, 0x33, 0x38, 0x38, 0x52, 0x65, 0x73, - 0x70, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, - 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, - 0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x75, 0x62, 0x43, 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x06, 0x73, 0x75, 0x62, 0x43, 0x6d, 0x64, 0x12, 0x35, 0x0a, 0x0e, 0x6d, 0x73, 0x67, - 0x54, 0x72, 0x79, 0x75, 0x70, 0x49, 0x6d, 0x67, 0x52, 0x73, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x54, 0x72, 0x79, 0x55, 0x70, 0x49, 0x6d, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x52, 0x0e, 0x6d, 0x73, 0x67, 0x54, 0x72, 0x79, 0x75, 0x70, 0x49, 0x6d, 0x67, 0x52, 0x73, 0x70, - 0x22, 0xb6, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x71, 0x44, 0x61, 0x74, 0x61, 0x48, 0x69, 0x67, 0x68, - 0x77, 0x61, 0x79, 0x48, 0x65, 0x61, 0x64, 0x12, 0x32, 0x0a, 0x0b, 0x6d, 0x73, 0x67, 0x42, 0x61, - 0x73, 0x65, 0x68, 0x65, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x44, - 0x61, 0x74, 0x61, 0x48, 0x69, 0x67, 0x68, 0x77, 0x61, 0x79, 0x48, 0x65, 0x61, 0x64, 0x52, 0x0b, - 0x6d, 0x73, 0x67, 0x42, 0x61, 0x73, 0x65, 0x68, 0x65, 0x61, 0x64, 0x12, 0x28, 0x0a, 0x0a, 0x6d, - 0x73, 0x67, 0x53, 0x65, 0x67, 0x68, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x08, 0x2e, 0x53, 0x65, 0x67, 0x48, 0x65, 0x61, 0x64, 0x52, 0x0a, 0x6d, 0x73, 0x67, 0x53, 0x65, - 0x67, 0x68, 0x65, 0x61, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x45, 0x78, 0x74, 0x65, - 0x6e, 0x64, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x72, 0x65, - 0x71, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xda, 0x02, 0x0a, 0x12, 0x52, 0x73, - 0x70, 0x44, 0x61, 0x74, 0x61, 0x48, 0x69, 0x67, 0x68, 0x77, 0x61, 0x79, 0x48, 0x65, 0x61, 0x64, - 0x12, 0x32, 0x0a, 0x0b, 0x6d, 0x73, 0x67, 0x42, 0x61, 0x73, 0x65, 0x68, 0x65, 0x61, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x69, 0x67, 0x68, - 0x77, 0x61, 0x79, 0x48, 0x65, 0x61, 0x64, 0x52, 0x0b, 0x6d, 0x73, 0x67, 0x42, 0x61, 0x73, 0x65, - 0x68, 0x65, 0x61, 0x64, 0x12, 0x28, 0x0a, 0x0a, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x67, 0x68, 0x65, - 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x53, 0x65, 0x67, 0x48, 0x65, - 0x61, 0x64, 0x52, 0x0a, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x67, 0x68, 0x65, 0x61, 0x64, 0x12, 0x1c, - 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x74, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, - 0x63, 0x61, 0x63, 0x68, 0x65, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x63, 0x61, 0x63, 0x68, 0x65, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x74, - 0x63, 0x6f, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x68, 0x74, 0x63, 0x6f, - 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x73, 0x70, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x69, - 0x6e, 0x66, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x72, 0x73, 0x70, 0x45, 0x78, - 0x74, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x69, 0x73, 0x52, 0x65, 0x73, 0x65, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x69, - 0x73, 0x52, 0x65, 0x73, 0x65, 0x74, 0x22, 0x91, 0x02, 0x0a, 0x0f, 0x44, 0x61, 0x74, 0x61, 0x48, - 0x69, 0x67, 0x68, 0x77, 0x61, 0x79, 0x48, 0x65, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, - 0x65, 0x71, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x74, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x74, 0x72, 0x79, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x05, 0x61, 0x70, 0x70, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, - 0x66, 0x6c, 0x61, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, - 0x66, 0x6c, 0x61, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, - 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56, 0x65, 0x72, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56, 0x65, 0x72, 0x12, 0x1a, - 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x49, 0x64, 0x22, 0xe5, 0x02, 0x0a, 0x07, 0x53, - 0x65, 0x67, 0x48, 0x65, 0x61, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x69, 0x7a, 0x65, - 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x12, 0x16, 0x0a, 0x06, 0x72, 0x74, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x72, 0x74, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x66, 0x6c, - 0x61, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x03, 0x6d, 0x64, 0x35, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x12, 0x1c, - 0x0a, 0x09, 0x63, 0x61, 0x63, 0x68, 0x65, 0x41, 0x64, 0x64, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x09, 0x63, 0x61, 0x63, 0x68, 0x65, 0x41, 0x64, 0x64, 0x72, 0x12, 0x1e, 0x0a, 0x0a, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0d, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x69, 0x70, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, - 0x69, 0x70, 0x22, 0xc5, 0x04, 0x0a, 0x0b, 0x54, 0x72, 0x79, 0x55, 0x70, 0x49, 0x6d, 0x67, 0x52, - 0x65, 0x71, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x72, 0x63, 0x55, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x73, 0x72, 0x63, 0x55, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x65, - 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, - 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x69, - 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x72, 0x63, 0x54, 0x65, 0x72, 0x6d, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x73, 0x72, 0x63, 0x54, 0x65, 0x72, 0x6d, 0x12, 0x22, 0x0a, 0x0c, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x62, 0x75, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x69, 0x63, 0x57, - 0x69, 0x64, 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x69, 0x63, 0x57, - 0x69, 0x64, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x69, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x69, 0x63, 0x48, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x70, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x6e, 0x65, - 0x72, 0x49, 0x70, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x69, 0x6e, 0x6e, 0x65, 0x72, - 0x49, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x50, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x50, 0x69, 0x63, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x69, - 0x63, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, - 0x6c, 0x50, 0x69, 0x63, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x73, 0x74, 0x55, 0x69, 0x6e, 0x18, 0x12, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x64, 0x73, 0x74, 0x55, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x72, - 0x76, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, - 0x72, 0x76, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x66, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x22, 0x94, 0x02, 0x0a, 0x0c, 0x54, - 0x72, 0x79, 0x55, 0x70, 0x49, 0x6d, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x66, - 0x69, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x66, 0x69, 0x6c, - 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x66, - 0x61, 0x69, 0x6c, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x61, - 0x69, 0x6c, 0x4d, 0x73, 0x67, 0x12, 0x22, 0x0a, 0x0c, 0x62, 0x6f, 0x6f, 0x6c, 0x46, 0x69, 0x6c, - 0x65, 0x45, 0x78, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x62, 0x6f, 0x6f, - 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x69, 0x74, 0x12, 0x28, 0x0a, 0x0a, 0x6d, 0x73, 0x67, - 0x49, 0x6d, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, - 0x49, 0x6d, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x6d, 0x73, 0x67, 0x49, 0x6d, 0x67, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x70, 0x49, - 0x70, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, - 0x70, 0x49, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x70, 0x50, - 0x6f, 0x72, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, - 0x32, 0x55, 0x70, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x55, 0x6b, 0x65, - 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x75, 0x70, 0x55, 0x6b, 0x65, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x66, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x66, 0x69, - 0x64, 0x22, 0x99, 0x01, 0x0a, 0x07, 0x49, 0x6d, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, - 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, - 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, - 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x12, 0x1e, 0x0a, - 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x0a, - 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x74, - 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x0b, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x72, 0x6f, - 0x6d, 0x55, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x72, 0x6f, 0x6d, - 0x55, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x18, 0x04, 0x20, + 0x55, 0x70, 0x49, 0x6d, 0x67, 0x52, 0x65, 0x71, 0x12, 0x34, 0x0a, 0x0e, 0x6d, 0x73, 0x67, 0x54, + 0x72, 0x79, 0x55, 0x70, 0x50, 0x74, 0x74, 0x52, 0x65, 0x71, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0c, 0x2e, 0x54, 0x72, 0x79, 0x55, 0x70, 0x50, 0x74, 0x74, 0x52, 0x65, 0x71, 0x52, 0x0e, + 0x6d, 0x73, 0x67, 0x54, 0x72, 0x79, 0x55, 0x70, 0x50, 0x74, 0x74, 0x52, 0x65, 0x71, 0x12, 0x1c, + 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x09, + 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xb0, 0x01, 0x0a, 0x0c, + 0x44, 0x33, 0x38, 0x38, 0x52, 0x65, 0x73, 0x70, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x1a, 0x0a, 0x08, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x75, 0x62, 0x43, + 0x6d, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x75, 0x62, 0x43, 0x6d, 0x64, + 0x12, 0x35, 0x0a, 0x0e, 0x6d, 0x73, 0x67, 0x54, 0x72, 0x79, 0x55, 0x70, 0x49, 0x6d, 0x67, 0x52, + 0x73, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x54, 0x72, 0x79, 0x55, 0x70, + 0x49, 0x6d, 0x67, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0e, 0x6d, 0x73, 0x67, 0x54, 0x72, 0x79, 0x55, + 0x70, 0x49, 0x6d, 0x67, 0x52, 0x73, 0x70, 0x12, 0x35, 0x0a, 0x0e, 0x6d, 0x73, 0x67, 0x54, 0x72, + 0x79, 0x55, 0x70, 0x50, 0x74, 0x74, 0x52, 0x73, 0x70, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x54, 0x72, 0x79, 0x55, 0x70, 0x50, 0x74, 0x74, 0x52, 0x65, 0x73, 0x70, 0x52, 0x0e, + 0x6d, 0x73, 0x67, 0x54, 0x72, 0x79, 0x55, 0x70, 0x50, 0x74, 0x74, 0x52, 0x73, 0x70, 0x22, 0xb6, + 0x01, 0x0a, 0x12, 0x52, 0x65, 0x71, 0x44, 0x61, 0x74, 0x61, 0x48, 0x69, 0x67, 0x68, 0x77, 0x61, + 0x79, 0x48, 0x65, 0x61, 0x64, 0x12, 0x32, 0x0a, 0x0b, 0x6d, 0x73, 0x67, 0x42, 0x61, 0x73, 0x65, + 0x68, 0x65, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x44, 0x61, 0x74, + 0x61, 0x48, 0x69, 0x67, 0x68, 0x77, 0x61, 0x79, 0x48, 0x65, 0x61, 0x64, 0x52, 0x0b, 0x6d, 0x73, + 0x67, 0x42, 0x61, 0x73, 0x65, 0x68, 0x65, 0x61, 0x64, 0x12, 0x28, 0x0a, 0x0a, 0x6d, 0x73, 0x67, + 0x53, 0x65, 0x67, 0x68, 0x65, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, + 0x53, 0x65, 0x67, 0x48, 0x65, 0x61, 0x64, 0x52, 0x0a, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x67, 0x68, + 0x65, 0x61, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, + 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xda, 0x02, 0x0a, 0x12, 0x52, 0x73, 0x70, 0x44, + 0x61, 0x74, 0x61, 0x48, 0x69, 0x67, 0x68, 0x77, 0x61, 0x79, 0x48, 0x65, 0x61, 0x64, 0x12, 0x32, + 0x0a, 0x0b, 0x6d, 0x73, 0x67, 0x42, 0x61, 0x73, 0x65, 0x68, 0x65, 0x61, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x69, 0x67, 0x68, 0x77, 0x61, + 0x79, 0x48, 0x65, 0x61, 0x64, 0x52, 0x0b, 0x6d, 0x73, 0x67, 0x42, 0x61, 0x73, 0x65, 0x68, 0x65, + 0x61, 0x64, 0x12, 0x28, 0x0a, 0x0a, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x67, 0x68, 0x65, 0x61, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x53, 0x65, 0x67, 0x48, 0x65, 0x61, 0x64, + 0x52, 0x0a, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x67, 0x68, 0x65, 0x61, 0x64, 0x12, 0x1c, 0x0a, 0x09, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x74, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x61, + 0x63, 0x68, 0x65, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, + 0x61, 0x63, 0x68, 0x65, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x74, 0x63, 0x6f, + 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x68, 0x74, 0x63, 0x6f, 0x73, 0x74, + 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x73, 0x70, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x66, + 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x72, 0x73, 0x70, 0x45, 0x78, 0x74, 0x65, + 0x6e, 0x64, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, + 0x52, 0x65, 0x73, 0x65, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x69, 0x73, 0x52, + 0x65, 0x73, 0x65, 0x74, 0x22, 0x91, 0x02, 0x0a, 0x0f, 0x44, 0x61, 0x74, 0x61, 0x48, 0x69, 0x67, + 0x68, 0x77, 0x61, 0x79, 0x48, 0x65, 0x61, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x75, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x71, + 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x74, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x74, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x61, 0x70, 0x70, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x66, 0x6c, + 0x61, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x66, 0x6c, + 0x61, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x49, 0x64, 0x22, 0xe5, 0x02, 0x0a, 0x07, 0x53, 0x65, 0x67, + 0x48, 0x65, 0x61, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1e, + 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1e, + 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x16, + 0x0a, 0x06, 0x72, 0x74, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x72, 0x74, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x66, 0x6c, 0x61, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, + 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6d, + 0x64, 0x35, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x12, 0x1c, 0x0a, 0x09, + 0x63, 0x61, 0x63, 0x68, 0x65, 0x41, 0x64, 0x64, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x09, 0x63, 0x61, 0x63, 0x68, 0x65, 0x41, 0x64, 0x64, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x69, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x69, 0x70, + 0x22, 0xc5, 0x04, 0x0a, 0x0b, 0x54, 0x72, 0x79, 0x55, 0x70, 0x49, 0x6d, 0x67, 0x52, 0x65, 0x71, + 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x72, 0x63, 0x55, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, + 0x73, 0x72, 0x63, 0x55, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x73, 0x72, 0x63, 0x54, 0x65, 0x72, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x73, 0x72, 0x63, 0x54, 0x65, 0x72, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x62, 0x75, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x62, 0x75, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x69, 0x63, 0x57, 0x69, 0x64, + 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x69, 0x63, 0x57, 0x69, 0x64, + 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x69, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x70, 0x69, 0x63, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x12, 0x18, 0x0a, 0x07, 0x70, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x70, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x56, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x56, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x49, + 0x70, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x49, 0x70, + 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x50, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0f, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x50, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, 0x69, 0x63, 0x18, + 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x50, + 0x69, 0x63, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x12, 0x16, 0x0a, 0x06, 0x64, 0x73, 0x74, 0x55, 0x69, 0x6e, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x06, 0x64, 0x73, 0x74, 0x55, 0x69, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x72, 0x76, 0x55, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x73, 0x72, 0x76, + 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x65, 0x72, 0x55, 0x72, 0x6c, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x22, 0x94, 0x02, 0x0a, 0x0c, 0x54, 0x72, 0x79, + 0x55, 0x70, 0x49, 0x6d, 0x67, 0x52, 0x65, 0x73, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, + 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x61, 0x69, + 0x6c, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, 0x61, 0x69, 0x6c, + 0x4d, 0x73, 0x67, 0x12, 0x22, 0x0a, 0x0c, 0x62, 0x6f, 0x6f, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x45, + 0x78, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x62, 0x6f, 0x6f, 0x6c, 0x46, + 0x69, 0x6c, 0x65, 0x45, 0x78, 0x69, 0x74, 0x12, 0x28, 0x0a, 0x0a, 0x6d, 0x73, 0x67, 0x49, 0x6d, + 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x49, 0x6d, + 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x6d, 0x73, 0x67, 0x49, 0x6d, 0x67, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x70, 0x49, 0x70, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x70, 0x49, + 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x70, 0x50, 0x6f, 0x72, + 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, + 0x70, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x55, 0x6b, 0x65, 0x79, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x75, 0x70, 0x55, 0x6b, 0x65, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x66, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x66, 0x69, 0x64, 0x22, + 0xc9, 0x03, 0x0a, 0x0b, 0x54, 0x72, 0x79, 0x55, 0x70, 0x50, 0x74, 0x74, 0x52, 0x65, 0x71, 0x12, + 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x72, 0x63, 0x55, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x73, + 0x72, 0x63, 0x55, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, + 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, + 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, + 0x69, 0x7a, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x73, 0x72, 0x63, 0x54, 0x65, 0x72, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x07, 0x73, 0x72, 0x63, 0x54, 0x65, 0x72, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0c, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x62, 0x75, 0x54, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x62, + 0x75, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56, 0x65, + 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56, 0x65, + 0x72, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x49, 0x70, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x07, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x49, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x76, + 0x6f, 0x69, 0x63, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0b, 0x76, 0x6f, 0x69, 0x63, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x24, 0x0a, + 0x0d, 0x62, 0x6f, 0x6f, 0x6c, 0x4e, 0x65, 0x77, 0x55, 0x70, 0x43, 0x68, 0x61, 0x6e, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x62, 0x6f, 0x6f, 0x6c, 0x4e, 0x65, 0x77, 0x55, 0x70, 0x43, + 0x68, 0x61, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x12, 0x1c, 0x0a, 0x09, 0x76, 0x6f, 0x69, + 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x76, 0x6f, + 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x75, 0x49, 0x64, 0x18, + 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x62, 0x75, 0x49, 0x64, 0x22, 0xce, 0x02, 0x0a, 0x0c, + 0x54, 0x72, 0x79, 0x55, 0x70, 0x50, 0x74, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x16, 0x0a, 0x06, + 0x66, 0x69, 0x6c, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x66, 0x69, + 0x6c, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x66, 0x61, 0x69, 0x6c, 0x4d, 0x73, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x66, + 0x61, 0x69, 0x6c, 0x4d, 0x73, 0x67, 0x12, 0x22, 0x0a, 0x0c, 0x62, 0x6f, 0x6f, 0x6c, 0x46, 0x69, + 0x6c, 0x65, 0x45, 0x78, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x62, 0x6f, + 0x6f, 0x6c, 0x46, 0x69, 0x6c, 0x65, 0x45, 0x78, 0x69, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x75, 0x69, + 0x6e, 0x74, 0x33, 0x32, 0x55, 0x70, 0x49, 0x70, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0a, + 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x70, 0x49, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x75, 0x69, + 0x6e, 0x74, 0x33, 0x32, 0x55, 0x70, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x70, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x75, 0x70, 0x55, 0x6b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, + 0x75, 0x70, 0x55, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x70, 0x4f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x75, 0x70, 0x4f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x69, 0x7a, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x22, 0x99, 0x01, 0x0a, + 0x07, 0x49, 0x6d, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, + 0x4d, 0x64, 0x35, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4d, + 0x64, 0x35, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, + 0x6c, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, + 0x69, 0x6c, 0x65, 0x57, 0x69, 0x64, 0x74, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x69, 0x6c, 0x65, + 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x66, 0x69, + 0x6c, 0x65, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x3a, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x22, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0c, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x69, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x69, 0x6e, 0x12, 0x14, + 0x0a, 0x05, 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, + 0x6f, 0x55, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, + 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x55, 0x69, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x55, 0x69, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x73, 0x69, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x73, 0x69, 0x67, + 0x22, 0x6d, 0x0a, 0x0d, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4d, 0x73, 0x67, 0x42, 0x6f, 0x64, + 0x79, 0x12, 0x3a, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x63, 0x61, 0x6c, + 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x52, + 0x0c, 0x6f, 0x70, 0x74, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x20, 0x0a, + 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, + 0xff, 0x01, 0x0a, 0x15, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x63, 0x61, 0x6c, + 0x6c, 0x52, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6e, + 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6e, + 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x0f, 0x72, 0x65, 0x63, 0x61, 0x6c, + 0x6c, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, + 0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x69, 0x6e, + 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0f, 0x72, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x64, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x64, 0x65, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x70, 0x54, 0x79, 0x70, + 0x65, 0x22, 0xab, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x09, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x12, 0x18, 0x0a, + 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x46, 0x6c, + 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x46, 0x6c, 0x61, + 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x55, 0x69, 0x6e, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x55, 0x69, 0x6e, 0x22, + 0x19, 0x0a, 0x05, 0x53, 0x75, 0x62, 0x44, 0x34, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x22, 0xa5, 0x01, 0x0a, 0x05, 0x53, + 0x75, 0x62, 0x38, 0x41, 0x12, 0x28, 0x0a, 0x08, 0x6d, 0x73, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x53, 0x75, 0x62, 0x38, 0x41, 0x4d, 0x73, + 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, + 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x61, + 0x70, 0x70, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x73, 0x74, 0x49, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x73, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, + 0x6c, 0x6f, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x6c, 0x6f, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x64, 0x22, 0xf2, 0x01, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x38, 0x41, 0x4d, 0x73, 0x67, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x69, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x69, 0x6e, 0x12, 0x14, 0x0a, + 0x05, 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, + 0x55, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x6d, - 0x73, 0x67, 0x55, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x73, 0x67, - 0x55, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x03, 0x73, 0x69, 0x67, 0x22, 0x6d, 0x0a, 0x0d, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4d, - 0x73, 0x67, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x3a, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x4d, 0x73, 0x67, - 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x6d, 0x69, - 0x6e, 0x64, 0x65, 0x72, 0x52, 0x0c, 0x6f, 0x70, 0x74, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x63, 0x61, - 0x6c, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x22, 0xff, 0x01, 0x0a, 0x15, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x10, - 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, - 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x0f, - 0x72, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0f, 0x72, 0x65, 0x63, - 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, - 0x72, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x72, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x64, 0x65, - 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x64, 0x65, 0x66, - 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, - 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x22, 0xab, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x63, 0x61, 0x6c, - 0x6c, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x10, - 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x71, - 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, - 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, - 0x6f, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x6d, 0x73, 0x67, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, - 0x73, 0x67, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x55, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x55, 0x69, 0x6e, 0x22, 0x19, 0x0a, 0x05, 0x53, 0x75, 0x62, 0x44, 0x34, 0x12, 0x10, 0x0a, - 0x03, 0x75, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x22, - 0xa5, 0x01, 0x0a, 0x05, 0x53, 0x75, 0x62, 0x38, 0x41, 0x12, 0x28, 0x0a, 0x08, 0x6d, 0x73, 0x67, - 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x53, 0x75, - 0x62, 0x38, 0x41, 0x4d, 0x73, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x73, - 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x73, 0x74, 0x49, - 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x6c, 0x6f, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x46, 0x6c, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x6c, 0x6f, 0x6e, 0x67, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x72, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x22, 0xf2, 0x01, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x38, - 0x41, 0x4d, 0x73, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x72, 0x6f, 0x6d, - 0x55, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, - 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x53, - 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, - 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x55, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x6d, 0x73, 0x67, 0x55, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, - 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, - 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6b, 0x67, 0x4e, 0x75, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x70, 0x6b, 0x67, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6b, 0x67, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x6b, 0x67, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x53, 0x65, 0x71, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x64, 0x65, 0x76, 0x53, 0x65, 0x71, 0x42, 0x06, 0x5a, 0x04, - 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x67, 0x55, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x73, 0x67, + 0x55, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x09, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x70, + 0x6b, 0x67, 0x4e, 0x75, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x70, 0x6b, 0x67, + 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6b, 0x67, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x6b, 0x67, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, + 0x16, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x53, 0x65, 0x71, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x64, 0x65, 0x76, 0x53, 0x65, 0x71, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2251,7 +2619,7 @@ func file_data_proto_rawDescGZIP() []byte { return file_data_proto_rawDescData } -var file_data_proto_msgTypes = make([]protoimpl.MessageInfo, 21) +var file_data_proto_msgTypes = make([]protoimpl.MessageInfo, 23) var file_data_proto_goTypes = []interface{}{ (*DeviceInfo)(nil), // 0: DeviceInfo (*RequestBody)(nil), // 1: RequestBody @@ -2265,34 +2633,38 @@ var file_data_proto_goTypes = []interface{}{ (*SegHead)(nil), // 9: SegHead (*TryUpImgReq)(nil), // 10: TryUpImgReq (*TryUpImgResp)(nil), // 11: TryUpImgResp - (*ImgInfo)(nil), // 12: ImgInfo - (*DeleteMessageRequest)(nil), // 13: DeleteMessageRequest - (*MessageItem)(nil), // 14: MessageItem - (*NotifyMsgBody)(nil), // 15: NotifyMsgBody - (*MessageRecallReminder)(nil), // 16: MessageRecallReminder - (*RecalledMessageMeta)(nil), // 17: RecalledMessageMeta - (*SubD4)(nil), // 18: SubD4 - (*Sub8A)(nil), // 19: Sub8A - (*Sub8AMsgInfo)(nil), // 20: Sub8AMsgInfo + (*TryUpPttReq)(nil), // 12: TryUpPttReq + (*TryUpPttResp)(nil), // 13: TryUpPttResp + (*ImgInfo)(nil), // 14: ImgInfo + (*DeleteMessageRequest)(nil), // 15: DeleteMessageRequest + (*MessageItem)(nil), // 16: MessageItem + (*NotifyMsgBody)(nil), // 17: NotifyMsgBody + (*MessageRecallReminder)(nil), // 18: MessageRecallReminder + (*RecalledMessageMeta)(nil), // 19: RecalledMessageMeta + (*SubD4)(nil), // 20: SubD4 + (*Sub8A)(nil), // 21: Sub8A + (*Sub8AMsgInfo)(nil), // 22: Sub8AMsgInfo } var file_data_proto_depIdxs = []int32{ 2, // 0: RequestBody.rpt_config_list:type_name -> ConfigSeq - 10, // 1: D388ReqBody.msgTryupImgReq:type_name -> TryUpImgReq - 11, // 2: D388RespBody.msgTryupImgRsp:type_name -> TryUpImgResp - 8, // 3: ReqDataHighwayHead.msgBasehead:type_name -> DataHighwayHead - 9, // 4: ReqDataHighwayHead.msgSeghead:type_name -> SegHead - 8, // 5: RspDataHighwayHead.msgBasehead:type_name -> DataHighwayHead - 9, // 6: RspDataHighwayHead.msgSeghead:type_name -> SegHead - 12, // 7: TryUpImgResp.msgImgInfo:type_name -> ImgInfo - 14, // 8: DeleteMessageRequest.items:type_name -> MessageItem - 16, // 9: NotifyMsgBody.optMsgRecall:type_name -> MessageRecallReminder - 17, // 10: MessageRecallReminder.recalledMsgList:type_name -> RecalledMessageMeta - 20, // 11: Sub8A.msg_info:type_name -> Sub8AMsgInfo - 12, // [12:12] is the sub-list for method output_type - 12, // [12:12] is the sub-list for method input_type - 12, // [12:12] is the sub-list for extension type_name - 12, // [12:12] is the sub-list for extension extendee - 0, // [0:12] is the sub-list for field type_name + 10, // 1: D388ReqBody.msgTryUpImgReq:type_name -> TryUpImgReq + 12, // 2: D388ReqBody.msgTryUpPttReq:type_name -> TryUpPttReq + 11, // 3: D388RespBody.msgTryUpImgRsp:type_name -> TryUpImgResp + 13, // 4: D388RespBody.msgTryUpPttRsp:type_name -> TryUpPttResp + 8, // 5: ReqDataHighwayHead.msgBasehead:type_name -> DataHighwayHead + 9, // 6: ReqDataHighwayHead.msgSeghead:type_name -> SegHead + 8, // 7: RspDataHighwayHead.msgBasehead:type_name -> DataHighwayHead + 9, // 8: RspDataHighwayHead.msgSeghead:type_name -> SegHead + 14, // 9: TryUpImgResp.msgImgInfo:type_name -> ImgInfo + 16, // 10: DeleteMessageRequest.items:type_name -> MessageItem + 18, // 11: NotifyMsgBody.optMsgRecall:type_name -> MessageRecallReminder + 19, // 12: MessageRecallReminder.recalledMsgList:type_name -> RecalledMessageMeta + 22, // 13: Sub8A.msg_info:type_name -> Sub8AMsgInfo + 14, // [14:14] is the sub-list for method output_type + 14, // [14:14] is the sub-list for method input_type + 14, // [14:14] is the sub-list for extension type_name + 14, // [14:14] is the sub-list for extension extendee + 0, // [0:14] is the sub-list for field type_name } func init() { file_data_proto_init() } @@ -2446,7 +2818,7 @@ func file_data_proto_init() { } } file_data_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ImgInfo); i { + switch v := v.(*TryUpPttReq); i { case 0: return &v.state case 1: @@ -2458,7 +2830,7 @@ func file_data_proto_init() { } } file_data_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteMessageRequest); i { + switch v := v.(*TryUpPttResp); i { case 0: return &v.state case 1: @@ -2470,7 +2842,7 @@ func file_data_proto_init() { } } file_data_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MessageItem); i { + switch v := v.(*ImgInfo); i { case 0: return &v.state case 1: @@ -2482,7 +2854,7 @@ func file_data_proto_init() { } } file_data_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyMsgBody); i { + switch v := v.(*DeleteMessageRequest); i { case 0: return &v.state case 1: @@ -2494,7 +2866,7 @@ func file_data_proto_init() { } } file_data_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MessageRecallReminder); i { + switch v := v.(*MessageItem); i { case 0: return &v.state case 1: @@ -2506,7 +2878,7 @@ func file_data_proto_init() { } } file_data_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RecalledMessageMeta); i { + switch v := v.(*NotifyMsgBody); i { case 0: return &v.state case 1: @@ -2518,7 +2890,7 @@ func file_data_proto_init() { } } file_data_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubD4); i { + switch v := v.(*MessageRecallReminder); i { case 0: return &v.state case 1: @@ -2530,7 +2902,7 @@ func file_data_proto_init() { } } file_data_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Sub8A); i { + switch v := v.(*RecalledMessageMeta); i { case 0: return &v.state case 1: @@ -2542,6 +2914,30 @@ func file_data_proto_init() { } } file_data_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubD4); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_data_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Sub8A); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_data_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Sub8AMsgInfo); i { case 0: return &v.state @@ -2560,7 +2956,7 @@ func file_data_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_data_proto_rawDesc, NumEnums: 0, - NumMessages: 21, + NumMessages: 23, NumExtensions: 0, NumServices: 0, }, diff --git a/client/pb/data.proto b/client/pb/data.proto index a312cef6..c21ede4a 100644 --- a/client/pb/data.proto +++ b/client/pb/data.proto @@ -41,7 +41,8 @@ message D50ReqBody { message D388ReqBody { int32 netType = 1; int32 subcmd = 2; - repeated TryUpImgReq msgTryupImgReq = 3; + repeated TryUpImgReq msgTryUpImgReq = 3; + repeated TryUpPttReq msgTryUpPttReq = 5; int32 commandId = 7; bytes extension = 1001; } @@ -49,7 +50,8 @@ message D388ReqBody { message D388RespBody { int32 clientIp = 1; int32 subCmd = 2; - repeated TryUpImgResp msgTryupImgRsp = 3; + repeated TryUpImgResp msgTryUpImgRsp = 3; + repeated TryUpPttResp msgTryUpPttRsp = 5; } message ReqDataHighwayHead { @@ -133,7 +135,45 @@ message TryUpImgResp { repeated int32 uint32UpIp = 6; repeated int32 uint32UpPort = 7; bytes upUkey = 8; - int64 fid = 9; + int64 fid = 9; +} + +message TryUpPttReq { + int64 groupCode = 1; + int64 srcUin = 2; + int64 fileId = 3; + bytes fileMd5 = 4; + int64 fileSize = 5; + bytes fileName = 6; + int32 srcTerm = 7; + int32 platformType = 8; + int32 buType = 9; + string buildVer = 10; + int32 innerIp = 11; + int32 voiceLength = 12; + bool boolNewUpChan = 13; + int32 codec = 14; + int32 voiceType = 15; + int32 buId = 16; + +} + +message TryUpPttResp { + int64 fileId = 1; + int32 result = 2; + string failMsg = 3; + bool boolFileExit = 4; + repeated int32 uint32UpIp = 5; + repeated int32 uint32UpPort = 6; + bytes upUkey = 7; + // int64 fileid = 8; // + int64 upOffset = 9; + int64 blockSize = 10; + bytes fileKey = 11; + int32 channelType = 12; + // List? msgUpIp6 = 26; + // bytes clientIp6 = 27; + } message ImgInfo { diff --git a/client/pb/longmsg/longmsg.pb.go b/client/pb/longmsg/longmsg.pb.go index f462802a..05a90664 100644 --- a/client/pb/longmsg/longmsg.pb.go +++ b/client/pb/longmsg/longmsg.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.11.4 +// protoc v3.12.3 // source: longmsg.proto package longmsg diff --git a/client/pb/msg/msg.pb.go b/client/pb/msg/msg.pb.go index 88267e84..ccf85710 100644 --- a/client/pb/msg/msg.pb.go +++ b/client/pb/msg/msg.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.11.4 +// protoc v3.12.3 // source: msg.proto package msg @@ -2020,7 +2020,7 @@ type Ptt struct { SrcUin int64 `protobuf:"varint,2,opt,name=srcUin,proto3" json:"srcUin,omitempty"` FileUuid []byte `protobuf:"bytes,3,opt,name=fileUuid,proto3" json:"fileUuid,omitempty"` FileMd5 []byte `protobuf:"bytes,4,opt,name=fileMd5,proto3" json:"fileMd5,omitempty"` - FileName []byte `protobuf:"bytes,5,opt,name=fileName,proto3" json:"fileName,omitempty"` + FileName string `protobuf:"bytes,5,opt,name=fileName,proto3" json:"fileName,omitempty"` FileSize int32 `protobuf:"varint,6,opt,name=fileSize,proto3" json:"fileSize,omitempty"` Reserve []byte `protobuf:"bytes,7,opt,name=reserve,proto3" json:"reserve,omitempty"` FileId int32 `protobuf:"varint,8,opt,name=fileId,proto3" json:"fileId,omitempty"` @@ -2102,11 +2102,11 @@ func (x *Ptt) GetFileMd5() []byte { return nil } -func (x *Ptt) GetFileName() []byte { +func (x *Ptt) GetFileName() string { if x != nil { return x.FileName } - return nil + return "" } func (x *Ptt) GetFileSize() int32 { @@ -5711,7 +5711,7 @@ var file_msg_proto_rawDesc = []byte{ 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x55, 0x75, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x64, 0x35, 0x12, 0x1a, 0x0a, 0x08, 0x66, - 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x66, + 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x18, 0x07, diff --git a/client/pb/msg/msg.proto b/client/pb/msg/msg.proto index 41a166ce..dab81f91 100644 --- a/client/pb/msg/msg.proto +++ b/client/pb/msg/msg.proto @@ -265,7 +265,7 @@ message Ptt { int64 srcUin = 2; bytes fileUuid = 3; bytes fileMd5 = 4; - bytes fileName = 5; + string fileName = 5; int32 fileSize = 6; bytes reserve = 7; int32 fileId = 8; diff --git a/client/pb/msg/objmsg.pb.go b/client/pb/msg/objmsg.pb.go index 21701791..13fc1605 100644 --- a/client/pb/msg/objmsg.pb.go +++ b/client/pb/msg/objmsg.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.11.4 +// protoc v3.12.3 // source: objmsg.proto package msg diff --git a/client/pb/multimsg/multimsg.pb.go b/client/pb/multimsg/multimsg.pb.go index 5e59b479..8f9a955a 100644 --- a/client/pb/multimsg/multimsg.pb.go +++ b/client/pb/multimsg/multimsg.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.11.4 +// protoc v3.12.3 // source: multimsg.proto package multimsg diff --git a/client/pb/oidb/oidb.pb.go b/client/pb/oidb/oidb.pb.go index 3443cc0a..22cc489f 100644 --- a/client/pb/oidb/oidb.pb.go +++ b/client/pb/oidb/oidb.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.11.4 +// protoc v3.12.3 // source: oidb.proto package oidb diff --git a/client/pb/structmsg/structmsg.pb.go b/client/pb/structmsg/structmsg.pb.go index 426e300e..a1cdfdda 100644 --- a/client/pb/structmsg/structmsg.pb.go +++ b/client/pb/structmsg/structmsg.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.25.0 -// protoc v3.11.4 +// protoc v3.12.3 // source: structmsg.proto package structmsg diff --git a/go.mod b/go.mod index b1874305..ea638fff 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/Mrs4s/MiraiGo go 1.14 require ( - github.com/golang/protobuf v1.4.1 + github.com/golang/protobuf v1.4.2 + github.com/valyala/fasthttp v1.15.1 google.golang.org/protobuf v1.25.0 ) diff --git a/go.sum b/go.sum index 26f8e2dc..1d0e3327 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/andybalholm/brotli v1.0.0 h1:7UCwP93aiSfvWpapti8g88vVVGp2qqtGyePsSuDafo4= +github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -7,7 +9,6 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= @@ -22,52 +23,46 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/ishbir/elliptic v0.0.0-20150227224012-7fa75501baae h1:p4rT8RR3B5Q6rXTG5v0Tns45zn4wJucqQKF5hzrjtgU= -github.com/ishbir/elliptic v0.0.0-20150227224012-7fa75501baae/go.mod h1:JPqapJUq3G3ojsWKJHZNsUK2OJmarnOxFN9afp3/Ovo= -github.com/jhump/protoreflect v1.6.1 h1:4/2yi5LyDPP7nN+Hiird1SAJ6YoxUm13/oxHGRnbPd8= -github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= +github.com/klauspost/compress v1.10.7 h1:7rix8v8GpI3ZBb0nSozFRgbtXKv+hOe+qfEpZqybrAg= +github.com/klauspost/compress v1.10.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.15.1 h1:eRb5jzWhbCn/cGu3gNJMcOfPUfXgXCcQIOHjh9ajAS8= +github.com/valyala/fasthttp v1.15.1/go.mod h1:YOKImeEosDdBPnxc0gy7INqi3m1zK6A+xl6TwOBhHCA= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= diff --git a/message/elements.go b/message/elements.go index 634ef306..e5220b64 100644 --- a/message/elements.go +++ b/message/elements.go @@ -2,6 +2,7 @@ package message import ( "fmt" + "github.com/Mrs4s/MiraiGo/client/pb/msg" "strconv" "strings" ) @@ -67,6 +68,10 @@ type ForwardElement struct { ResId string } +type GroupPtt struct { + Ptt msg.Ptt +} + func NewText(s string) *TextElement { return &TextElement{Content: s} } diff --git a/message/message.go b/message/message.go index 732e0d6c..f945657d 100644 --- a/message/message.go +++ b/message/message.go @@ -2,7 +2,6 @@ package message import ( "crypto/md5" - "encoding/hex" "github.com/Mrs4s/MiraiGo/binary" "github.com/Mrs4s/MiraiGo/client/pb/msg" "github.com/Mrs4s/MiraiGo/utils" @@ -45,6 +44,7 @@ type ( SendingMessage struct { Elements []IMessageElement + Ptt *msg.Ptt } ForwardMessage struct { @@ -80,7 +80,8 @@ const ( Reply Service Forward - File + File // Voice? + Voice ) func (s *Sender) IsAnonymous() bool { @@ -200,6 +201,9 @@ func (s *Sender) DisplayName() string { } func ToProtoElems(elems []IMessageElement, generalFlags bool) (r []*msg.Elem) { + if len(elems) == 0 { + return nil + } for _, elem := range elems { if reply, ok := elem.(*ReplyElement); ok { r = append(r, &msg.Elem{ @@ -330,10 +334,15 @@ func ToProtoElems(elems []IMessageElement, generalFlags bool) (r []*msg.Elem) { }) break L } - d, _ := hex.DecodeString("08097800C80100F00100F80100900200C80200980300A00320B00300C00300D00300E803008A04020803900480808010B80400C00400") + //d, _ := hex.DecodeString("08097800C80100F00100F80100900200C80200980300A00320B00300C00300D00300E803008A04020803900480808010B80400C00400") r = append(r, &msg.Elem{ GeneralFlags: &msg.GeneralFlags{ - PbReserve: d, + PbReserve: []byte{ + 0x08, 0x09, 0x78, 0x00, 0xC8, 0x01, 0x00, 0xF0, 0x01, 0x00, 0xF8, 0x01, 0x00, 0x90, 0x02, 0x00, + 0xC8, 0x02, 0x00, 0x98, 0x03, 0x00, 0xA0, 0x03, 0x20, 0xB0, 0x03, 0x00, 0xC0, 0x03, 0x00, 0xD0, + 0x03, 0x00, 0xE8, 0x03, 0x00, 0x8A, 0x04, 0x02, 0x08, 0x03, 0x90, 0x04, 0x80, 0x80, 0x80, 0x10, + 0xB8, 0x04, 0x00, 0xC0, 0x04, 0x00, + }, }, }) break L diff --git a/utils/http.go b/utils/http.go index 5a2a6e42..e442f928 100644 --- a/utils/http.go +++ b/utils/http.go @@ -1,35 +1,47 @@ package utils import ( - "bytes" - "compress/gzip" - "io/ioutil" - "net/http" - "strings" + "github.com/valyala/fasthttp" + "sync" ) -func HttpGetBytes(url string) ([]byte, error) { - req, err := http.NewRequest("GET", url, nil) +var reqPool = sync.Pool{New: func() interface{} { + req := new(fasthttp.Request) + req.Header.Set("User-Agent", "QQ/8.2.0.1296 CFNetwork/1126") + req.Header.Set("Net-Type", "Wifi") + return req +}} + +func HttpGetBytes(url string) (data []byte, err error) { + req := reqPool.Get().(*fasthttp.Request) + resp := fasthttp.AcquireResponse() + req.Header.SetMethod("GET") + req.SetRequestURI(url) + err = fasthttp.Do(req, resp) if err != nil { - return nil, err + goto end } - req.Header["User-Agent"] = []string{"QQ/8.2.0.1296 CFNetwork/1126"} - req.Header["Net-Type"] = []string{"Wifi"} - resp, err := http.DefaultClient.Do(req) - if err != nil { - return nil, err - } - defer resp.Body.Close() - body, err := ioutil.ReadAll(resp.Body) - if err != nil { - return nil, err - } - if strings.Contains(resp.Header.Get("Content-Encoding"), "gzip") { - buffer := bytes.NewBuffer(body) - r, _ := gzip.NewReader(buffer) - defer r.Close() - unCom, err := ioutil.ReadAll(r) - return unCom, err - } - return body, nil + data = resp.Body() +end: + reqPool.Put(req) + fasthttp.ReleaseResponse(resp) + return +} + +func HttpPostBytes(url string, body []byte) (data []byte, err error) { + req := reqPool.Get().(*fasthttp.Request) + resp := fasthttp.AcquireResponse() + req.Header.SetMethod("POST") + req.SetRequestURI(url) + req.SetBody(body) + err = fasthttp.Do(req, resp) + if err != nil { + goto end + } + data = resp.Body() +end: + req.ResetBody() + reqPool.Put(req) + fasthttp.ReleaseResponse(resp) + return }