From 29a1f5b4f79c073e452d924621cd0bdcf96f4409 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Feb 2023 15:20:59 +0800 Subject: [PATCH] errcode --- internal/crontask/clear_msg.go | 85 ++- internal/crontask/cron_task.go | 4 +- pkg/common/db/cache/redis.go | 66 +- pkg/common/db/controller/group.go | 8 + pkg/common/db/controller/msg.go | 272 +++++--- pkg/common/db/relation/group_model.go | 7 + pkg/common/db/table/unrelation/msg.go | 26 +- pkg/common/log/logrus.go | 11 - pkg/proto/msg/msg.proto | 9 +- pkg/proto/sdkws/ws.pb.go | 857 ++++++++++---------------- pkg/proto/sdkws/ws.proto | 28 +- pkg/utils/utils.go | 12 +- 12 files changed, 632 insertions(+), 753 deletions(-) diff --git a/internal/crontask/clear_msg.go b/internal/crontask/clear_msg.go index 0431e4d73..296d125e7 100644 --- a/internal/crontask/clear_msg.go +++ b/internal/crontask/clear_msg.go @@ -3,92 +3,77 @@ package cronTask import ( "Open_IM/pkg/common/config" "Open_IM/pkg/common/constant" - "Open_IM/pkg/common/db" - "Open_IM/pkg/common/db/cache" "Open_IM/pkg/common/db/controller" - "Open_IM/pkg/common/db/mongo" "Open_IM/pkg/common/log" "Open_IM/pkg/common/tracelog" - sdkws "Open_IM/pkg/proto/sdkws" "Open_IM/pkg/utils" "context" "math" - "strconv" - "strings" - - "github.com/go-redis/redis/v8" - "github.com/golang/protobuf/proto" ) -type SeqCheckInterface interface { - ClearAll() error + +type ClearMsgTool struct { + msgInterface controller.MsgInterface + userInterface controller.UserInterface + groupInterface controller.GroupInterface } -type ClearMsgCronTask struct { - msgModel controller.MsgInterface - userModel controller.UserInterface - groupModel controller.GroupInterface - cache cache.Cache -} - -func (c *ClearMsgCronTask) getCronTaskOperationID() string { +func (c *ClearMsgTool) getCronTaskOperationID() string { return cronTaskOperationID + utils.OperationIDGenerator() } -func (c *ClearMsgCronTask) ClearAll() { +func (c *ClearMsgTool) ClearAll() { operationID := c.getCronTaskOperationID() ctx := context.Background() tracelog.SetOperationID(ctx, operationID) - log.NewInfo(operationID, "========================= start del cron task =========================") + log.NewInfo(operationID, "============================ start del cron task ============================") var err error - userIDList, err := c.userModel.GetAllUserID(ctx) + userIDList, err := c.userInterface.GetAllUserID(ctx) if err == nil { - c.StartClearMsg(operationID, userIDList) + c.ClearUsersMsg(ctx, userIDList) } else { log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) } // working group msg clear - workingGroupIDList, err := im_mysql_model.GetGroupIDListByGroupType(constant.WorkingGroup) + workingGroupIDList, err := c.groupInterface.GetGroupIDsByGroupType(ctx, constant.WorkingGroup) if err == nil { - c.StartClearWorkingGroupMsg(operationID, workingGroupIDList) + c.ClearSuperGroupMsg(ctx, workingGroupIDList) } else { log.NewError(operationID, utils.GetSelfFuncName(), err.Error()) } - - log.NewInfo(operationID, "========================= start del cron finished =========================") + log.NewInfo(operationID, "============================ start del cron finished ============================") } -func (c *ClearMsgCronTask) StartClearMsg(operationID string, userIDList []string) { - log.NewDebug(operationID, utils.GetSelfFuncName(), "userIDList: ", userIDList) +func (c *ClearMsgTool) ClearUsersMsg(ctx context.Context, userIDList []string) { for _, userID := range userIDList { - if err := DeleteUserMsgsAndSetMinSeq(operationID, userID); err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), userID) + if err := c.msgInterface.DeleteUserMsgsAndSetMinSeq(ctx, userID, int64(config.Config.Mongo.DBRetainChatRecords * 24 *60 *60)); err != nil { + log.NewError(tracelog.GetOperationID(ctx), utils.GetSelfFuncName(), err.Error(), userID) } - if err := checkMaxSeqWithMongo(operationID, userID, constant.WriteDiffusion); err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), userID, err) - } - } -} - -func (c *ClearMsgCronTask) StartClearWorkingGroupMsg(operationID string, workingGroupIDList []string) { - log.NewDebug(operationID, utils.GetSelfFuncName(), "workingGroupIDList: ", workingGroupIDList) - for _, groupID := range workingGroupIDList { - userIDList, err := rocksCache.GetGroupMemberIDListFromCache(groupID) + minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache, err := c.msgInterface.GetUserMinMaxSeqInMongoAndCache(ctx, userID) if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), groupID) + log.NewError(tracelog.GetOperationID(ctx), utils.GetSelfFuncName(), err.Error(), "GetUserMinMaxSeqInMongoAndCache failed", userID) continue } - log.NewDebug(operationID, utils.GetSelfFuncName(), "groupID:", groupID, "workingGroupIDList:", userIDList) - if err := DeleteUserSuperGroupMsgsAndSetMinSeq(operationID, groupID, userIDList); err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), groupID, userIDList) - } - if err := checkMaxSeqWithMongo(operationID, groupID, constant.ReadDiffusion); err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), groupID, err) - } + if } } -func checkMaxSeqWithMongo(operationID, sourceID string, diffusionType int) error { +func (c *ClearMsgTool) ClearSuperGroupMsg(ctx context.Context, workingGroupIDList []string) { + for _, groupID := range workingGroupIDList { + userIDs, err := c.groupInterface.FindGroupMemberUserID(ctx, groupID) + if err != nil { + log.NewError(tracelog.GetOperationID(ctx), utils.GetSelfFuncName(), "FindGroupMemberUserID", err.Error(), groupID) + continue + } + if err := c.msgInterface.DeleteUserSuperGroupMsgsAndSetMinSeq(ctx, groupID, userIDs, int64(config.Config.Mongo.DBRetainChatRecords * 24 *60 *60)); err != nil { + //log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), groupID, userIDList) + } + minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache, err := c.msgInterface.GetSuperGroupMinMaxSeqInMongoAndCache(ctx, groupID) + + } +} + +func (c *ClearMsgTool) checkMaxSeqWithMongo(ctx context.Context, sourceID string, diffusionType int) error { var seqRedis uint64 var err error if diffusionType == constant.WriteDiffusion { diff --git a/internal/crontask/cron_task.go b/internal/crontask/cron_task.go index ece45f399..be1094661 100644 --- a/internal/crontask/cron_task.go +++ b/internal/crontask/cron_task.go @@ -19,11 +19,11 @@ func StartCronTask(userID, workingGroupID string) { fmt.Println("cron task start, config", config.Config.Mongo.ChatRecordsClearTime) if userID != "" { operationID := getCronTaskOperationID() - StartClearMsg(operationID, []string{userID}) + ClearUsersMsg(operationID, []string{userID}) } if workingGroupID != "" { operationID := getCronTaskOperationID() - StartClearWorkingGroupMsg(operationID, []string{workingGroupID}) + ClearSuperGroupMsg(operationID, []string{workingGroupID}) } if userID != "" || workingGroupID != "" { fmt.Println("clear msg finished") diff --git a/pkg/common/db/cache/redis.go b/pkg/common/db/cache/redis.go index e68ece6e7..c649368f5 100644 --- a/pkg/common/db/cache/redis.go +++ b/pkg/common/db/cache/redis.go @@ -38,22 +38,24 @@ const ( ) type Cache interface { - IncrUserSeq(ctx context.Context, userID string) (uint64, error) - GetUserMaxSeq(ctx context.Context, userID string) (uint64, error) - SetUserMaxSeq(ctx context.Context, userID string, maxSeq uint64) error - SetUserMinSeq(ctx context.Context, userID string, minSeq uint64) (err error) - GetUserMinSeq(ctx context.Context, userID string) (uint64, error) - SetGroupUserMinSeq(ctx context.Context, groupID, userID string, minSeq uint64) (err error) - GetGroupUserMinSeq(ctx context.Context, groupID, userID string) (uint64, error) - GetGroupMaxSeq(ctx context.Context, groupID string) (uint64, error) - IncrGroupMaxSeq(ctx context.Context, groupID string) (uint64, error) - SetGroupMaxSeq(ctx context.Context, groupID string, maxSeq uint64) error - SetGroupMinSeq(ctx context.Context, groupID string, minSeq uint32) error + IncrUserSeq(ctx context.Context, userID string) (int64, error) + GetUserMaxSeq(ctx context.Context, userID string) (int64, error) + SetUserMaxSeq(ctx context.Context, userID string, maxSeq int64) error + SetUserMinSeq(ctx context.Context, userID string, minSeq int64) (err error) + GetUserMinSeq(ctx context.Context, userID string) (int64, error) + + SetGroupUserMinSeq(ctx context.Context, groupID, userID string, minSeq int64) (err error) + GetGroupUserMinSeq(ctx context.Context, groupID, userID string) (int64, error) + GetGroupMaxSeq(ctx context.Context, groupID string) (int64, error) + IncrGroupMaxSeq(ctx context.Context, groupID string) (int64, error) + SetGroupMaxSeq(ctx context.Context, groupID string, maxSeq int64) error + SetGroupMinSeq(ctx context.Context, groupID string, minSeq int64) error + AddTokenFlag(ctx context.Context, userID string, platformID int, token string, flag int) error GetTokenMapByUidPid(ctx context.Context, userID, platformID string) (map[string]int, error) SetTokenMapByUidPid(ctx context.Context, userID string, platformID int, m map[string]int) error DeleteTokenByUidPid(ctx context.Context, userID string, platformID int, fields []string) error - GetMessageListBySeq(ctx context.Context, userID string, seqList []uint32) (seqMsg []*sdkws.MsgData, failedSeqList []uint32, err error) + GetMessageListBySeq(ctx context.Context, userID string, seqList []int64) (seqMsg []*sdkws.MsgData, failedSeqList []int64, err error) SetMessageToCache(ctx context.Context, userID string, msgList []*pbChat.MsgDataToMQ) (int, error) DeleteMessageFromCache(ctx context.Context, userID string, msgList []*pbChat.MsgDataToMQ) error CleanUpOneUserAllMsg(ctx context.Context, userID string) error @@ -61,7 +63,7 @@ type Cache interface { GetSignalInfoFromCacheByClientMsgID(ctx context.Context, clientMsgID string) (invitationInfo *pbRtc.SignalInviteReq, err error) GetAvailableSignalInvitationInfo(ctx context.Context, userID string) (invitationInfo *pbRtc.SignalInviteReq, err error) DelUserSignalList(ctx context.Context, userID string) error - DelMsgFromCache(ctx context.Context, userID string, seqList []uint32) error + DelMsgFromCache(ctx context.Context, userID string, seqList []int64) error SetGetuiToken(ctx context.Context, token string, expireTime int64) error GetGetuiToken(ctx context.Context) (string, error) @@ -138,66 +140,66 @@ func NewRedisClient(rdb redis.UniversalClient) *RedisClient { } // Perform seq auto-increment operation of user messages -func (r *RedisClient) IncrUserSeq(ctx context.Context, uid string) (uint64, error) { +func (r *RedisClient) IncrUserSeq(ctx context.Context, uid string) (int64, error) { key := userIncrSeq + uid seq, err := r.rdb.Incr(context.Background(), key).Result() - return uint64(seq), err + return seq, err } // Get the largest Seq -func (r *RedisClient) GetUserMaxSeq(ctx context.Context, uid string) (uint64, error) { +func (r *RedisClient) GetUserMaxSeq(ctx context.Context, uid string) (int64, error) { key := userIncrSeq + uid seq, err := r.rdb.Get(context.Background(), key).Result() - return uint64(utils.StringToInt(seq)), err + return int64(utils.StringToInt(seq)), err } // set the largest Seq -func (r *RedisClient) SetUserMaxSeq(ctx context.Context, uid string, maxSeq uint64) error { +func (r *RedisClient) SetUserMaxSeq(ctx context.Context, uid string, maxSeq int64) error { key := userIncrSeq + uid return r.rdb.Set(context.Background(), key, maxSeq, 0).Err() } // Set the user's minimum seq -func (r *RedisClient) SetUserMinSeq(ctx context.Context, uid string, minSeq uint64) (err error) { +func (r *RedisClient) SetUserMinSeq(ctx context.Context, uid string, minSeq int64) (err error) { key := userMinSeq + uid return r.rdb.Set(context.Background(), key, minSeq, 0).Err() } // Get the smallest Seq -func (r *RedisClient) GetUserMinSeq(ctx context.Context, uid string) (uint64, error) { +func (r *RedisClient) GetUserMinSeq(ctx context.Context, uid string) (int64, error) { key := userMinSeq + uid seq, err := r.rdb.Get(context.Background(), key).Result() - return uint64(utils.StringToInt(seq)), err + return int64(utils.StringToInt(seq)), err } -func (r *RedisClient) SetGroupUserMinSeq(ctx context.Context, groupID, userID string, minSeq uint64) (err error) { +func (r *RedisClient) SetGroupUserMinSeq(ctx context.Context, groupID, userID string, minSeq int64) (err error) { key := groupUserMinSeq + "g:" + groupID + "u:" + userID return r.rdb.Set(context.Background(), key, minSeq, 0).Err() } -func (r *RedisClient) GetGroupUserMinSeq(ctx context.Context, groupID, userID string) (uint64, error) { +func (r *RedisClient) GetGroupUserMinSeq(ctx context.Context, groupID, userID string) (int64, error) { key := groupUserMinSeq + "g:" + groupID + "u:" + userID seq, err := r.rdb.Get(context.Background(), key).Result() - return uint64(utils.StringToInt(seq)), err + return int64(utils.StringToInt(seq)), err } -func (r *RedisClient) GetGroupMaxSeq(ctx context.Context, groupID string) (uint64, error) { +func (r *RedisClient) GetGroupMaxSeq(ctx context.Context, groupID string) (int64, error) { key := groupMaxSeq + groupID seq, err := r.rdb.Get(context.Background(), key).Result() - return uint64(utils.StringToInt(seq)), err + return int64(utils.StringToInt(seq)), err } -func (r *RedisClient) IncrGroupMaxSeq(ctx context.Context, groupID string) (uint64, error) { +func (r *RedisClient) IncrGroupMaxSeq(ctx context.Context, groupID string) (int64, error) { key := groupMaxSeq + groupID seq, err := r.rdb.Incr(context.Background(), key).Result() - return uint64(seq), err + return seq, err } -func (r *RedisClient) SetGroupMaxSeq(ctx context.Context, groupID string, maxSeq uint64) error { +func (r *RedisClient) SetGroupMaxSeq(ctx context.Context, groupID string, maxSeq int64) error { key := groupMaxSeq + groupID return r.rdb.Set(context.Background(), key, maxSeq, 0).Err() } -func (r *RedisClient) SetGroupMinSeq(ctx context.Context, groupID string, minSeq uint32) error { +func (r *RedisClient) SetGroupMinSeq(ctx context.Context, groupID string, minSeq int64) error { key := groupMinSeq + groupID return r.rdb.Set(context.Background(), key, minSeq, 0).Err() } @@ -231,7 +233,7 @@ func (r *RedisClient) DeleteTokenByUidPid(ctx context.Context, userID string, pl return r.rdb.HDel(context.Background(), key, fields...).Err() } -func (r *RedisClient) GetMessageListBySeq(ctx context.Context, userID string, seqList []uint32, operationID string) (seqMsg []*sdkws.MsgData, failedSeqList []uint32, err2 error) { +func (r *RedisClient) GetMessageListBySeq(ctx context.Context, userID string, seqList []int64, operationID string) (seqMsg []*sdkws.MsgData, failedSeqList []int64, err2 error) { for _, v := range seqList { //MESSAGE_CACHE:169.254.225.224_reliability1653387820_0_1 key := messageCache + userID + "_" + strconv.Itoa(int(v)) @@ -398,7 +400,7 @@ func (r *RedisClient) DelUserSignalList(ctx context.Context, userID string) erro return err } -func (r *RedisClient) DelMsgFromCache(ctx context.Context, uid string, seqList []uint32, operationID string) { +func (r *RedisClient) DelMsgFromCache(ctx context.Context, uid string, seqList []int64, operationID string) { for _, seq := range seqList { key := messageCache + uid + "_" + strconv.Itoa(int(seq)) result, err := r.rdb.Get(context.Background(), key).Result() diff --git a/pkg/common/db/controller/group.go b/pkg/common/db/controller/group.go index ce40c10f2..e772d17c6 100644 --- a/pkg/common/db/controller/group.go +++ b/pkg/common/db/controller/group.go @@ -26,6 +26,7 @@ type GroupInterface interface { SearchGroup(ctx context.Context, keyword string, pageNumber, showNumber int32) (uint32, []*relationTb.GroupModel, error) UpdateGroup(ctx context.Context, groupID string, data map[string]any) error DismissGroup(ctx context.Context, groupID string) error // 解散群,并删除群成员 + GetGroupIDsByGroupType(ctx context.Context, groupType int) (groupIDs []string, err error) // GroupMember TakeGroupMember(ctx context.Context, groupID string, userID string) (groupMember *relationTb.GroupMemberModel, err error) TakeGroupOwner(ctx context.Context, groupID string) (*relationTb.GroupMemberModel, error) @@ -91,6 +92,10 @@ func (g *GroupController) DismissGroup(ctx context.Context, groupID string) erro return g.database.DismissGroup(ctx, groupID) } +func (g *GroupController) GetGroupIDsByGroupType(ctx context.Context, groupType int) (groupIDs []string, err error) { + return g.database. +} + func (g *GroupController) TakeGroupMember(ctx context.Context, groupID string, userID string) (groupMember *relationTb.GroupMemberModel, err error) { return g.database.TakeGroupMember(ctx, groupID, userID) } @@ -182,6 +187,7 @@ type Group interface { SearchGroup(ctx context.Context, keyword string, pageNumber, showNumber int32) (uint32, []*relationTb.GroupModel, error) UpdateGroup(ctx context.Context, groupID string, data map[string]any) error DismissGroup(ctx context.Context, groupID string) error // 解散群,并删除群成员 + GetGroupIDsByGroupType(ctx context.Context, groupType int) (groupIDs []string, err error) } type GroupMember interface { @@ -229,6 +235,8 @@ type GroupDataBaseInterface interface { SearchGroup(ctx context.Context, keyword string, pageNumber, showNumber int32) (uint32, []*relationTb.GroupModel, error) UpdateGroup(ctx context.Context, groupID string, data map[string]any) error DismissGroup(ctx context.Context, groupID string) error // 解散群,并删除群成员 + GetGroupIDsByGroupType(ctx context.Context, groupType int) (groupIDs []string, err error) + // GroupMember TakeGroupMember(ctx context.Context, groupID string, userID string) (groupMember *relationTb.GroupMemberModel, err error) TakeGroupOwner(ctx context.Context, groupID string) (*relationTb.GroupMemberModel, error) diff --git a/pkg/common/db/controller/msg.go b/pkg/common/db/controller/msg.go index 49f73afbf..751ff1530 100644 --- a/pkg/common/db/controller/msg.go +++ b/pkg/common/db/controller/msg.go @@ -11,7 +11,6 @@ import ( "github.com/gogo/protobuf/sortkeys" "sync" - //"Open_IM/pkg/common/log" pbMsg "Open_IM/pkg/proto/msg" "Open_IM/pkg/proto/sdkws" "Open_IM/pkg/utils" @@ -25,30 +24,31 @@ import ( type MsgInterface interface { // 批量插入消息到db - BatchInsertChat2DB(ctx context.Context, ID string, msgList []*pbMsg.MsgDataToMQ, currentMaxSeq uint64) error + BatchInsertChat2DB(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ, currentMaxSeq int64) error // 刪除redis中消息缓存 - DeleteMessageFromCache(ctx context.Context, userID string, msgList []*pbMsg.MsgDataToMQ) error + DeleteMessageFromCache(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ) error // incrSeq然后批量插入缓存 - BatchInsertChat2Cache(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ) (uint64, error) + BatchInsertChat2Cache(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ) (int64, error) // 删除消息 返回不存在的seqList - DelMsgBySeqs(ctx context.Context, userID string, seqs []uint32) (totalUnExistSeqs []uint32, err error) - // 获取群ID或者UserID最新一条在db里面的消息 - GetNewestMsg(ctx context.Context, sourceID string) (msg *sdkws.MsgData, err error) - // 获取群ID或者UserID最老一条在db里面的消息 - GetOldestMsg(ctx context.Context, sourceID string) (msg *sdkws.MsgData, err error) + DelMsgBySeqs(ctx context.Context, userID string, seqs []int64) (totalUnExistSeqs []int64, err error) // 通过seqList获取db中写扩散消息 - GetMsgBySeqs(ctx context.Context, userID string, seqs []uint32) (seqMsg []*sdkws.MsgData, err error) + GetMsgBySeqs(ctx context.Context, userID string, seqs []int64) (seqMsg []*sdkws.MsgData, err error) // 通过seqList获取大群在db里面的消息 - GetSuperGroupMsgBySeqs(ctx context.Context, groupID string, seqs []uint32) (seqMsg []*sdkws.MsgData, err error) + GetSuperGroupMsgBySeqs(ctx context.Context, groupID string, seqs []int64) (seqMsg []*sdkws.MsgData, err error) // 删除用户所有消息/cache/db然后重置seq CleanUpUserMsg(ctx context.Context, userID string) error // 删除大群消息重置群成员最小群seq, remainTime为消息保留的时间单位秒,超时消息删除, 传0删除所有消息(此方法不删除 redis cache) - DeleteUserSuperGroupMsgsAndSetMinSeq(ctx context.Context, groupID string, userID string, remainTime int64) error + DeleteUserSuperGroupMsgsAndSetMinSeq(ctx context.Context, groupID string, userID []string, remainTime int64) error // 删除用户消息重置最小seq, remainTime为消息保留的时间单位秒,超时消息删除, 传0删除所有消息(此方法不删除redis cache) DeleteUserMsgsAndSetMinSeq(ctx context.Context, userID string, remainTime int64) error - - // SetSendMsgStatus - // GetSendMsgStatus + // 获取用户 seq mongo和redis + GetUserMinMaxSeqInMongoAndCache(ctx context.Context, userID string) (minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache int64, err error) + // 获取群 seq mongo和redis + GetSuperGroupMinMaxSeqInMongoAndCache(ctx context.Context, groupID string) (minSeqMongo, maxSeqMongo, maxSeqCache int64, err error) + // 设置群用户最小seq 直接调用cache + SetGroupUserMinSeq(ctx context.Context, groupID, userID string, minSeq int64) (err error) + // 设置用户最小seq 直接调用cache + SetUserMinSeq(ctx context.Context, userID string, minSeq int64) (err error) } func NewMsgController(mgo *mongo.Client, rdb redis.UniversalClient) MsgInterface { @@ -59,35 +59,27 @@ type MsgController struct { database MsgDatabase } -func (m *MsgController) BatchInsertChat2DB(ctx context.Context, ID string, msgList []*pbMsg.MsgDataToMQ, currentMaxSeq uint64) error { +func (m *MsgController) BatchInsertChat2DB(ctx context.Context, ID string, msgList []*pbMsg.MsgDataToMQ, currentMaxSeq int64) error { return m.database.BatchInsertChat2DB(ctx, ID, msgList, currentMaxSeq) } -func (m *MsgController) DeleteMessageFromCache(ctx context.Context, userID string, msgList []*pbMsg.MsgDataToMQ) error { - return m.database.DeleteMessageFromCache(ctx, userID, msgList) +func (m *MsgController) DeleteMessageFromCache(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ) error { + return m.database.DeleteMessageFromCache(ctx, sourceID, msgList) } -func (m *MsgController) BatchInsertChat2Cache(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ) (uint64, error) { +func (m *MsgController) BatchInsertChat2Cache(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ) (int64, error) { return m.database.BatchInsertChat2Cache(ctx, sourceID, msgList) } -func (m *MsgController) DelMsgBySeqs(ctx context.Context, userID string, seqs []uint32) (totalUnExistSeqs []uint32, err error) { +func (m *MsgController) DelMsgBySeqs(ctx context.Context, userID string, seqs []int64) (totalUnExistSeqs []int64, err error) { return m.database.DelMsgBySeqs(ctx, userID, seqs) } -func (m *MsgController) GetNewestMsg(ctx context.Context, ID string) (msg *sdkws.MsgData, err error) { - return m.database.GetNewestMsg(ctx, ID) -} - -func (m *MsgController) GetOldestMsg(ctx context.Context, ID string) (msg *sdkws.MsgData, err error) { - return m.database.GetOldestMsg(ctx, ID) -} - -func (m *MsgController) GetMsgBySeqs(ctx context.Context, userID string, seqs []uint32) (seqMsg []*sdkws.MsgData, err error) { +func (m *MsgController) GetMsgBySeqs(ctx context.Context, userID string, seqs []int64) (seqMsg []*sdkws.MsgData, err error) { return m.database.GetMsgBySeqs(ctx, userID, seqs) } -func (m *MsgController) GetSuperGroupMsgBySeqs(ctx context.Context, groupID string, seqs []uint32) (seqMsg []*sdkws.MsgData, err error) { +func (m *MsgController) GetSuperGroupMsgBySeqs(ctx context.Context, groupID string, seqs []int64) (seqMsg []*sdkws.MsgData, err error) { return m.database.GetSuperGroupMsgBySeqs(ctx, groupID, seqs) } @@ -95,66 +87,87 @@ func (m *MsgController) CleanUpUserMsg(ctx context.Context, userID string) error return m.database.CleanUpUserMsg(ctx, userID) } -func (m *MsgController) DeleteUserSuperGroupMsgsAndSetMinSeq(ctx context.Context, groupID string, userID string, remainTime int64) error { - return m.database.DeleteUserMsgsAndSetMinSeq(ctx, userID, remainTime) +func (m *MsgController) DeleteUserSuperGroupMsgsAndSetMinSeq(ctx context.Context, groupID string, userIDs []string, remainTime int64) error { + return m.database.DeleteUserSuperGroupMsgsAndSetMinSeq(ctx, groupID, userIDs, remainTime) } func (m *MsgController) DeleteUserMsgsAndSetMinSeq(ctx context.Context, userID string, remainTime int64) error { return m.database.DeleteUserMsgsAndSetMinSeq(ctx, userID, remainTime) } +func (m *MsgController) GetUserMinMaxSeqInMongoAndCache(ctx context.Context, userID string) (minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache int64, err error) { + return m.database.GetUserMinMaxSeqInMongoAndCache(ctx, userID) +} + +func (m *MsgController) GetSuperGroupMinMaxSeqInMongoAndCache(ctx context.Context, groupID string) (minSeqMongo, maxSeqMongo, maxSeqCache int64, err error) { + return m.database.GetSuperGroupMinMaxSeqInMongoAndCache(ctx, groupID) +} + +func (m *MsgController) SetGroupUserMinSeq(ctx context.Context, groupID, userID string, minSeq int64) (err error) { + return m.database.SetGroupUserMinSeq(ctx, groupID, userID, minSeq) +} + +func (m *MsgController) SetUserMinSeq(ctx context.Context, userID string, minSeq int64) (err error) { + return m.database.SetUserMinSeq(ctx, userID, minSeq) +} + type MsgDatabaseInterface interface { // 批量插入消息 - BatchInsertChat2DB(ctx context.Context, ID string, msgList []*pbMsg.MsgDataToMQ, currentMaxSeq uint64) error + BatchInsertChat2DB(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ, currentMaxSeq int64) error // 刪除redis中消息缓存 - DeleteMessageFromCache(ctx context.Context, userID string, msgList []*pbMsg.MsgDataToMQ) error + DeleteMessageFromCache(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ) error // incrSeq然后批量插入缓存 - BatchInsertChat2Cache(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ) (uint64, error) + BatchInsertChat2Cache(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ) (int64, error) // 删除消息 返回不存在的seqList - DelMsgBySeqs(ctx context.Context, userID string, seqs []uint32) (totalUnExistSeqs []uint32, err error) + DelMsgBySeqs(ctx context.Context, userID string, seqs []int64) (totalUnExistSeqs []int64, err error) // 获取群ID或者UserID最新一条在mongo里面的消息 - GetNewestMsg(ctx context.Context, sourceID string) (msg *sdkws.MsgData, err error) - // 获取群ID或者UserID最老一条在mongo里面的消息 - GetOldestMsg(ctx context.Context, sourceID string) (msg *sdkws.MsgData, err error) // 通过seqList获取mongo中写扩散消息 - GetMsgBySeqs(ctx context.Context, userID string, seqs []uint32) (seqMsg []*sdkws.MsgData, err error) + GetMsgBySeqs(ctx context.Context, userID string, seqs []int64) (seqMsg []*sdkws.MsgData, err error) // 通过seqList获取大群在 mongo里面的消息 - GetSuperGroupMsgBySeqs(ctx context.Context, groupID string, seqs []uint32) (seqMsg []*sdkws.MsgData, err error) + GetSuperGroupMsgBySeqs(ctx context.Context, groupID string, seqs []int64) (seqMsg []*sdkws.MsgData, err error) // 删除用户所有消息/redis/mongo然后重置seq CleanUpUserMsg(ctx context.Context, userID string) error // 删除大群消息重置群成员最小群seq, remainTime为消息保留的时间单位秒,超时消息删除, 传0删除所有消息(此方法不删除 redis cache) - DeleteUserSuperGroupMsgsAndSetMinSeq(ctx context.Context, groupID string, userID []string, remainTime int64) error + DeleteUserSuperGroupMsgsAndSetMinSeq(ctx context.Context, groupID string, userIDs []string, remainTime int64) error // 删除用户消息重置最小seq, remainTime为消息保留的时间单位秒,超时消息删除, 传0删除所有消息(此方法不删除redis cache) DeleteUserMsgsAndSetMinSeq(ctx context.Context, userID string, remainTime int64) error + // 获取用户 seq mongo和redis + GetUserMinMaxSeqInMongoAndCache(ctx context.Context, userID string) (minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache int64, err error) + // 获取群 seq mongo和redis + GetSuperGroupMinMaxSeqInMongoAndCache(ctx context.Context, groupID string) (minSeqMongo, maxSeqMongo, maxSeqCache int64, err error) + // 设置群用户最小seq 直接调用cache + SetGroupUserMinSeq(ctx context.Context, groupID, userID string, minSeq int64) (err error) + // 设置用户最小seq 直接调用cache + SetUserMinSeq(ctx context.Context, userID string, minSeq int64) (err error) } type MsgDatabase struct { - msgModel unRelationTb.MsgDocModelInterface - msgCache cache.Cache - msg unRelationTb.MsgDocModel + mgo unRelationTb.MsgDocModelInterface + cache cache.Cache + msg unRelationTb.MsgDocModel } func NewMsgDatabase(mgo *mongo.Client, rdb redis.UniversalClient) MsgDatabaseInterface { return &MsgDatabase{} } -func (db *MsgDatabase) BatchInsertChat2DB(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ, currentMaxSeq uint64) error { +func (db *MsgDatabase) BatchInsertChat2DB(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ, currentMaxSeq int64) error { //newTime := utils.GetCurrentTimestampByMill() - if len(msgList) > db.msg.GetSingleGocMsgNum() { + if int64(len(msgList)) > db.msg.GetSingleGocMsgNum() { return errors.New("too large") } - var remain uint64 - blk0 := uint64(db.msg.GetSingleGocMsgNum() - 1) + var remain int64 + blk0 := db.msg.GetSingleGocMsgNum() - 1 //currentMaxSeq 4998 - if currentMaxSeq < uint64(db.msg.GetSingleGocMsgNum()) { + if currentMaxSeq < db.msg.GetSingleGocMsgNum() { remain = blk0 - currentMaxSeq //1 } else { excludeBlk0 := currentMaxSeq - blk0 //=1 //(5000-1)%5000 == 4999 - remain = (uint64(db.msg.GetSingleGocMsgNum()) - (excludeBlk0 % uint64(db.msg.GetSingleGocMsgNum()))) % uint64(db.msg.GetSingleGocMsgNum()) + remain = (db.msg.GetSingleGocMsgNum() - (excludeBlk0 % db.msg.GetSingleGocMsgNum())) % db.msg.GetSingleGocMsgNum() } //remain=1 - insertCounter := uint64(0) + var insertCounter int64 msgsToMongo := make([]unRelationTb.MsgInfoModel, 0) msgsToMongoNext := make([]unRelationTb.MsgInfoModel, 0) docID := "" @@ -165,18 +178,18 @@ func (db *MsgDatabase) BatchInsertChat2DB(ctx context.Context, sourceID string, currentMaxSeq++ sMsg := unRelationTb.MsgInfoModel{} sMsg.SendTime = m.MsgData.SendTime - m.MsgData.Seq = uint32(currentMaxSeq) + m.MsgData.Seq = currentMaxSeq if sMsg.Msg, err = proto.Marshal(m.MsgData); err != nil { return utils.Wrap(err, "") } if insertCounter < remain { msgsToMongo = append(msgsToMongo, sMsg) insertCounter++ - docID = db.msg.GetDocID(sourceID, uint32(currentMaxSeq)) + docID = db.msg.GetDocID(sourceID, currentMaxSeq) //log.Debug(operationID, "msgListToMongo ", seqUid, m.MsgData.Seq, m.MsgData.ClientMsgID, insertCounter, remain, "userID: ", userID) } else { msgsToMongoNext = append(msgsToMongoNext, sMsg) - docIDNext = db.msg.GetDocID(sourceID, uint32(currentMaxSeq)) + docIDNext = db.msg.GetDocID(sourceID, currentMaxSeq) //log.Debug(operationID, "msgListToMongoNext ", seqUidNext, m.MsgData.Seq, m.MsgData.ClientMsgID, insertCounter, remain, "userID: ", userID) } } @@ -185,13 +198,13 @@ func (db *MsgDatabase) BatchInsertChat2DB(ctx context.Context, sourceID string, //filter := bson.M{"uid": seqUid} //log.NewDebug(operationID, "filter ", seqUid, "list ", msgListToMongo, "userID: ", userID) //err := c.FindOneAndUpdate(ctx, filter, bson.M{"$push": bson.M{"msg": bson.M{"$each": msgsToMongo}}}).Err() - err = db.msgModel.PushMsgsToDoc(ctx, docID, msgsToMongo) + err = db.mgo.PushMsgsToDoc(ctx, docID, msgsToMongo) if err != nil { if err == mongo.ErrNoDocuments { doc := &unRelationTb.MsgDocModel{} doc.DocID = docID doc.Msg = msgsToMongo - if err = db.msgModel.Create(ctx, doc); err != nil { + if err = db.mgo.Create(ctx, doc); err != nil { prome.PromeInc(prome.MsgInsertMongoFailedCounter) //log.NewError(operationID, "InsertOne failed", filter, err.Error(), sChat) return utils.Wrap(err, "") @@ -211,7 +224,7 @@ func (db *MsgDatabase) BatchInsertChat2DB(ctx context.Context, sourceID string, nextDoc.DocID = docIDNext nextDoc.Msg = msgsToMongoNext //log.NewDebug(operationID, "filter ", seqUidNext, "list ", msgListToMongoNext, "userID: ", userID) - if err = db.msgModel.Create(ctx, nextDoc); err != nil { + if err = db.mgo.Create(ctx, nextDoc); err != nil { prome.PromeInc(prome.MsgInsertMongoFailedCounter) //log.NewError(operationID, "InsertOne failed", filter, err.Error(), sChat) return utils.Wrap(err, "") @@ -223,26 +236,26 @@ func (db *MsgDatabase) BatchInsertChat2DB(ctx context.Context, sourceID string, } func (db *MsgDatabase) DeleteMessageFromCache(ctx context.Context, userID string, msgs []*pbMsg.MsgDataToMQ) error { - return db.msgCache.DeleteMessageFromCache(ctx, userID, msgs) + return db.cache.DeleteMessageFromCache(ctx, userID, msgs) } -func (db *MsgDatabase) BatchInsertChat2Cache(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ) (uint64, error) { +func (db *MsgDatabase) BatchInsertChat2Cache(ctx context.Context, sourceID string, msgList []*pbMsg.MsgDataToMQ) (int64, error) { //newTime := utils.GetCurrentTimestampByMill() lenList := len(msgList) - if lenList > db.msg.GetSingleGocMsgNum() { + if int64(lenList) > db.msg.GetSingleGocMsgNum() { return 0, errors.New("too large") } if lenList < 1 { return 0, errors.New("too short as 0") } // judge sessionType to get seq - var currentMaxSeq uint64 + var currentMaxSeq int64 var err error if msgList[0].MsgData.SessionType == constant.SuperGroupChatType { - currentMaxSeq, err = db.msgCache.GetGroupMaxSeq(ctx, sourceID) + currentMaxSeq, err = db.cache.GetGroupMaxSeq(ctx, sourceID) //log.Debug(operationID, "constant.SuperGroupChatType lastMaxSeq before add ", currentMaxSeq, "userID ", sourceID, err) } else { - currentMaxSeq, err = db.msgCache.GetUserMaxSeq(ctx, sourceID) + currentMaxSeq, err = db.cache.GetUserMaxSeq(ctx, sourceID) //log.Debug(operationID, "constant.SingleChatType lastMaxSeq before add ", currentMaxSeq, "userID ", sourceID, err) } if err != nil && err != redis.Nil { @@ -253,11 +266,11 @@ func (db *MsgDatabase) BatchInsertChat2Cache(ctx context.Context, sourceID strin lastMaxSeq := currentMaxSeq for _, m := range msgList { currentMaxSeq++ - m.MsgData.Seq = uint32(currentMaxSeq) + m.MsgData.Seq = currentMaxSeq //log.Debug(operationID, "cache msg node ", m.String(), m.MsgData.ClientMsgID, "userID: ", sourceID, "seq: ", currentMaxSeq) } //log.Debug(operationID, "SetMessageToCache ", sourceID, len(msgList)) - failedNum, err := db.msgCache.SetMessageToCache(ctx, sourceID, msgList) + failedNum, err := db.cache.SetMessageToCache(ctx, sourceID, msgList) if err != nil { prome.PromeAdd(prome.MsgInsertRedisFailedCounter, failedNum) //log.Error(operationID, "setMessageToCache failed, continue ", err.Error(), len(msgList), sourceID) @@ -266,9 +279,9 @@ func (db *MsgDatabase) BatchInsertChat2Cache(ctx context.Context, sourceID strin } //log.Debug(operationID, "batch to redis cost time ", mongo2.getCurrentTimestampByMill()-newTime, sourceID, len(msgList)) if msgList[0].MsgData.SessionType == constant.SuperGroupChatType { - err = db.msgCache.SetGroupMaxSeq(ctx, sourceID, currentMaxSeq) + err = db.cache.SetGroupMaxSeq(ctx, sourceID, currentMaxSeq) } else { - err = db.msgCache.SetUserMaxSeq(ctx, sourceID, currentMaxSeq) + err = db.cache.SetUserMaxSeq(ctx, sourceID, currentMaxSeq) } if err != nil { prome.PromeInc(prome.SeqSetFailedCounter) @@ -278,14 +291,14 @@ func (db *MsgDatabase) BatchInsertChat2Cache(ctx context.Context, sourceID strin return lastMaxSeq, utils.Wrap(err, "") } -func (db *MsgDatabase) DelMsgBySeqs(ctx context.Context, userID string, seqs []uint32) (totalUnExistSeqs []uint32, err error) { - sortkeys.Uint32s(seqs) +func (db *MsgDatabase) DelMsgBySeqs(ctx context.Context, userID string, seqs []int64) (totalUnExistSeqs []int64, err error) { + sortkeys.Int64s(seqs) docIDSeqsMap := db.msg.GetDocIDSeqsMap(userID, seqs) lock := sync.Mutex{} var wg sync.WaitGroup wg.Add(len(docIDSeqsMap)) for k, v := range docIDSeqsMap { - go func(docID string, seqs []uint32) { + go func(docID string, seqs []int64) { defer wg.Done() unExistSeqList, err := db.DelMsgBySeqsInOneDoc(ctx, docID, seqs) if err != nil { @@ -299,26 +312,26 @@ func (db *MsgDatabase) DelMsgBySeqs(ctx context.Context, userID string, seqs []u return totalUnExistSeqs, nil } -func (db *MsgDatabase) DelMsgBySeqsInOneDoc(ctx context.Context, docID string, seqs []uint32) (unExistSeqs []uint32, err error) { +func (db *MsgDatabase) DelMsgBySeqsInOneDoc(ctx context.Context, docID string, seqs []int64) (unExistSeqs []int64, err error) { seqMsgs, indexes, unExistSeqs, err := db.GetMsgAndIndexBySeqsInOneDoc(ctx, docID, seqs) if err != nil { return nil, err } for i, v := range seqMsgs { - if err = db.msgModel.UpdateMsgStatusByIndexInOneDoc(ctx, docID, v, indexes[i], constant.MsgDeleted); err != nil { + if err = db.mgo.UpdateMsgStatusByIndexInOneDoc(ctx, docID, v, indexes[i], constant.MsgDeleted); err != nil { return nil, err } } return unExistSeqs, nil } -func (db *MsgDatabase) GetMsgAndIndexBySeqsInOneDoc(ctx context.Context, docID string, seqs []uint32) (seqMsgs []*sdkws.MsgData, indexes []int, unExistSeqs []uint32, err error) { - doc, err := db.msgModel.FindOneByDocID(ctx, docID) +func (db *MsgDatabase) GetMsgAndIndexBySeqsInOneDoc(ctx context.Context, docID string, seqs []int64) (seqMsgs []*sdkws.MsgData, indexes []int, unExistSeqs []int64, err error) { + doc, err := db.mgo.FindOneByDocID(ctx, docID) if err != nil { return nil, nil, nil, err } singleCount := 0 - var hasSeqList []uint32 + var hasSeqList []int64 for i := 0; i < len(doc.Msg); i++ { msgPb, err := db.unmarshalMsg(&doc.Msg[i]) if err != nil { @@ -344,7 +357,7 @@ func (db *MsgDatabase) GetMsgAndIndexBySeqsInOneDoc(ctx context.Context, docID s } func (db *MsgDatabase) GetNewestMsg(ctx context.Context, sourceID string) (msgPb *sdkws.MsgData, err error) { - msgInfo, err := db.msgModel.GetNewestMsg(ctx, sourceID) + msgInfo, err := db.mgo.GetNewestMsg(ctx, sourceID) if err != nil { return nil, err } @@ -352,7 +365,7 @@ func (db *MsgDatabase) GetNewestMsg(ctx context.Context, sourceID string) (msgPb } func (db *MsgDatabase) GetOldestMsg(ctx context.Context, sourceID string) (msgPb *sdkws.MsgData, err error) { - msgInfo, err := db.msgModel.GetOldestMsg(ctx, sourceID) + msgInfo, err := db.mgo.GetOldestMsg(ctx, sourceID) if err != nil { return nil, err } @@ -368,12 +381,12 @@ func (db *MsgDatabase) unmarshalMsg(msgInfo *unRelationTb.MsgInfoModel) (msgPb * return msgPb, nil } -func (db *MsgDatabase) getMsgBySeqs(ctx context.Context, sourceID string, seqs []uint32, diffusionType int) (seqMsg []*sdkws.MsgData, err error) { - var hasSeqs []uint32 +func (db *MsgDatabase) getMsgBySeqs(ctx context.Context, sourceID string, seqs []int64, diffusionType int) (seqMsg []*sdkws.MsgData, err error) { + var hasSeqs []int64 singleCount := 0 m := db.msg.GetDocIDSeqsMap(sourceID, seqs) for docID, value := range m { - doc, err := db.msgModel.FindOneByDocID(ctx, docID) + doc, err := db.mgo.FindOneByDocID(ctx, docID) if err != nil { //log.NewError(operationID, "not find seqUid", seqUid, value, uid, seqList, err.Error()) continue @@ -396,7 +409,7 @@ func (db *MsgDatabase) getMsgBySeqs(ctx context.Context, sourceID string, seqs [ } } if len(hasSeqs) != len(seqs) { - var diff []uint32 + var diff []int64 var exceptionMsg []*sdkws.MsgData diff = utils.Difference(hasSeqs, seqs) if diffusionType == constant.WriteDiffusion { @@ -409,8 +422,8 @@ func (db *MsgDatabase) getMsgBySeqs(ctx context.Context, sourceID string, seqs [ return seqMsg, nil } -func (db *MsgDatabase) GetMsgBySeqs(ctx context.Context, userID string, seqs []uint32) (seqMsg []*sdkws.MsgData, err error) { - successMsgs, failedSeqs, err := db.msgCache.GetMessageListBySeq(ctx, userID, seqs) +func (db *MsgDatabase) GetMsgBySeqs(ctx context.Context, userID string, seqs []int64) (seqMsg []*sdkws.MsgData, err error) { + successMsgs, failedSeqs, err := db.cache.GetMessageListBySeq(ctx, userID, seqs) if err != nil { if err != redis.Nil { prome.PromeAdd(prome.MsgPullFromRedisFailedCounter, len(failedSeqs)) @@ -430,8 +443,8 @@ func (db *MsgDatabase) GetMsgBySeqs(ctx context.Context, userID string, seqs []u return successMsgs, nil } -func (db *MsgDatabase) GetSuperGroupMsgBySeqs(ctx context.Context, groupID string, seqs []uint32) (seqMsg []*sdkws.MsgData, err error) { - successMsgs, failedSeqs, err := db.msgCache.GetMessageListBySeq(ctx, groupID, seqs) +func (db *MsgDatabase) GetSuperGroupMsgBySeqs(ctx context.Context, groupID string, seqs []int64) (seqMsg []*sdkws.MsgData, err error) { + successMsgs, failedSeqs, err := db.cache.GetMessageListBySeq(ctx, groupID, seqs) if err != nil { if err != redis.Nil { prome.PromeAdd(prome.MsgPullFromRedisFailedCounter, len(failedSeqs)) @@ -456,7 +469,7 @@ func (db *MsgDatabase) CleanUpUserMsg(ctx context.Context, userID string) error if err != nil { return err } - err = db.msgCache.CleanUpOneUserAllMsg(ctx, userID) + err = db.cache.CleanUpOneUserAllMsg(ctx, userID) return utils.Wrap(err, "") } @@ -471,15 +484,15 @@ func (db *MsgDatabase) DeleteUserSuperGroupMsgsAndSetMinSeq(ctx context.Context, } //log.NewDebug(operationID, utils.GetSelfFuncName(), "delMsgIDList:", delStruct, "minSeq", minSeq) for _, userID := range userIDs { - userMinSeq, err := db.msgCache.GetGroupUserMinSeq(ctx, groupID, userID) + userMinSeq, err := db.cache.GetGroupUserMinSeq(ctx, groupID, userID) if err != nil && err != redis.Nil { //log.NewError(operationID, utils.GetSelfFuncName(), "GetGroupUserMinSeq failed", groupID, userID, err.Error()) continue } - if userMinSeq > uint64(minSeq) { - err = db.msgCache.SetGroupUserMinSeq(ctx, groupID, userID, userMinSeq) + if userMinSeq > minSeq { + err = db.cache.SetGroupUserMinSeq(ctx, groupID, userID, userMinSeq) } else { - err = db.msgCache.SetGroupUserMinSeq(ctx, groupID, userID, uint64(minSeq)) + err = db.cache.SetGroupUserMinSeq(ctx, groupID, userID, minSeq) } if err != nil { //log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), groupID, userID, userMinSeq, minSeq) @@ -497,16 +510,16 @@ func (db *MsgDatabase) DeleteUserMsgsAndSetMinSeq(ctx context.Context, userID st if minSeq == 0 { return nil } - return db.msgCache.SetUserMinSeq(ctx, userID, uint64(minSeq)) + return db.cache.SetUserMinSeq(ctx, userID, minSeq) } // this is struct for recursion type delMsgRecursionStruct struct { - minSeq uint32 + minSeq int64 delDocIDList []string } -func (d *delMsgRecursionStruct) getSetMinSeq() uint32 { +func (d *delMsgRecursionStruct) getSetMinSeq() int64 { return d.minSeq } @@ -514,9 +527,9 @@ func (d *delMsgRecursionStruct) getSetMinSeq() uint32 { // seq 70 // set minSeq 21 // recursion 删除list并且返回设置的最小seq -func (db *MsgDatabase) deleteMsgRecursion(ctx context.Context, sourceID string, index int64, delStruct *delMsgRecursionStruct, remainTime int64) (uint32, error) { +func (db *MsgDatabase) deleteMsgRecursion(ctx context.Context, sourceID string, index int64, delStruct *delMsgRecursionStruct, remainTime int64) (int64, error) { // find from oldest list - msgs, err := db.msgModel.GetMsgsByIndex(ctx, sourceID, index) + msgs, err := db.mgo.GetMsgsByIndex(ctx, sourceID, index) if err != nil || msgs.DocID == "" { if err != nil { if err == unrelation.ErrMsgListNotExist { @@ -526,14 +539,14 @@ func (db *MsgDatabase) deleteMsgRecursion(ctx context.Context, sourceID string, } } // 获取报错,或者获取不到了,物理删除并且返回seq delMongoMsgsPhysical(delStruct.delDocIDList) - err = db.msgModel.Delete(ctx, delStruct.delDocIDList) + err = db.mgo.Delete(ctx, delStruct.delDocIDList) if err != nil { return 0, err } return delStruct.getSetMinSeq() + 1, nil } //log.NewDebug(operationID, "ID:", sourceID, "index:", index, "uid:", msgs.UID, "len:", len(msgs.Msg)) - if len(msgs.Msg) > db.msg.GetSingleGocMsgNum() { + if int64(len(msgs.Msg)) > db.msg.GetSingleGocMsgNum() { log.NewWarn(tracelog.GetOperationID(ctx), utils.GetSelfFuncName(), "msgs too large:", len(msgs.Msg), "docID:", msgs.DocID) } if msgs.Msg[len(msgs.Msg)-1].SendTime+(remainTime*1000) < utils.GetCurrentTimestampByMill() && msgs.IsFull() { @@ -561,11 +574,11 @@ func (db *MsgDatabase) deleteMsgRecursion(ctx context.Context, sourceID string, msg.SendTime = 0 hasMarkDelFlag = true } else { - if err := db.msgModel.Delete(ctx, delStruct.delDocIDList); err != nil { + if err := db.mgo.Delete(ctx, delStruct.delDocIDList); err != nil { return 0, err } if hasMarkDelFlag { - if err := db.msgModel.UpdateOneDoc(ctx, msgs); err != nil { + if err := db.mgo.UpdateOneDoc(ctx, msgs); err != nil { return delStruct.getSetMinSeq(), utils.Wrap(err, "") } } @@ -578,3 +591,62 @@ func (db *MsgDatabase) deleteMsgRecursion(ctx context.Context, sourceID string, seq, err := db.deleteMsgRecursion(ctx, sourceID, index+1, delStruct, remainTime) return seq, utils.Wrap(err, "deleteMsg failed") } + +func (db *MsgDatabase) GetUserMinMaxSeqInMongoAndCache(ctx context.Context, userID string) (minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache int64, err error) { + minSeqMongo, maxSeqMongo, err = db.GetMinMaxSeqMongo(ctx, userID) + if err != nil { + return 0, 0, 0, 0, err + } + // from cache + minSeqCache, err = db.cache.GetUserMinSeq(ctx, userID) + if err != nil { + return 0, 0, 0, 0, err + } + maxSeqCache, err = db.cache.GetUserMaxSeq(ctx, userID) + if err != nil { + return 0, 0, 0, 0, err + } + return +} + +func (db *MsgDatabase) GetSuperGroupMinMaxSeqInMongoAndCache(ctx context.Context, groupID string) (minSeqMongo, maxSeqMongo, maxSeqCache int64, err error) { + minSeqMongo, maxSeqMongo, err = db.GetMinMaxSeqMongo(ctx, groupID) + if err != nil { + return 0, 0, 0, err + } + maxSeqCache, err = db.cache.GetGroupMaxSeq(ctx, groupID) + if err != nil { + return 0, 0, 0, err + } + return +} + +func (db *MsgDatabase) GetMinMaxSeqMongo(ctx context.Context, sourceID string) (minSeqMongo, maxSeqMongo int64, err error) { + oldestMsgMongo, err := db.mgo.GetOldestMsg(ctx, sourceID) + if err != nil { + return 0, 0, err + } + msgPb, err := db.unmarshalMsg(oldestMsgMongo) + if err != nil { + return 0, 0, err + } + minSeqMongo = msgPb.Seq + newestMsgMongo, err := db.mgo.GetNewestMsg(ctx, sourceID) + if err != nil { + return 0, 0, err + } + msgPb, err = db.unmarshalMsg(newestMsgMongo) + if err != nil { + return 0, 0, err + } + maxSeqMongo = msgPb.Seq + return +} + +func (db *MsgDatabase) SetGroupUserMinSeq(ctx context.Context, groupID, userID string, minSeq int64) (err error) { + return db.cache.SetGroupUserMinSeq(ctx, groupID, userID, minSeq) +} + +func (db *MsgDatabase) SetUserMinSeq(ctx context.Context, userID string, minSeq int64) (err error) { + return db.cache.SetUserMinSeq(ctx, userID, minSeq) +} diff --git a/pkg/common/db/relation/group_model.go b/pkg/common/db/relation/group_model.go index bc97aba66..b0cc99f5d 100644 --- a/pkg/common/db/relation/group_model.go +++ b/pkg/common/db/relation/group_model.go @@ -67,3 +67,10 @@ func (g *GroupGorm) Search(ctx context.Context, keyword string, pageNumber, show }() return gormSearch[relation.GroupModel](getDBConn(g.DB, tx), []string{"name"}, keyword, pageNumber, showNumber) } + +func (g *GroupGorm) GetGroupIDsByGroupType(ctx context.Context, groupType int) (groupIDs []string, err error) { + if err := g.DB.Model(&relation.GroupModel{}).Where("group_type = ? ", groupType).Pluck("group_id", &groupIDs).Error; err != nil { + return nil, utils.Wrap(err, "") + } + return groupIDs, nil +} diff --git a/pkg/common/db/table/unrelation/msg.go b/pkg/common/db/table/unrelation/msg.go index 78adb1e8f..75a784c6d 100644 --- a/pkg/common/db/table/unrelation/msg.go +++ b/pkg/common/db/table/unrelation/msg.go @@ -41,7 +41,7 @@ func (MsgDocModel) TableName() string { return CChat } -func (MsgDocModel) GetSingleGocMsgNum() int { +func (MsgDocModel) GetSingleGocMsgNum() int64 { return singleGocMsgNum } @@ -59,36 +59,36 @@ func (m *MsgDocModel) IsFull() bool { return false } -func (m MsgDocModel) GetDocID(sourceID string, seq uint32) string { +func (m MsgDocModel) GetDocID(sourceID string, seq int64) string { seqSuffix := seq / singleGocMsgNum return m.indexGen(sourceID, seqSuffix) } -func (m MsgDocModel) GetSeqDocIDList(userID string, maxSeq uint32) []string { +func (m MsgDocModel) GetSeqDocIDList(userID string, maxSeq int64) []string { seqMaxSuffix := maxSeq / singleGocMsgNum var seqUserIDs []string for i := 0; i <= int(seqMaxSuffix); i++ { - seqUserID := m.indexGen(userID, uint32(i)) + seqUserID := m.indexGen(userID, int64(i)) seqUserIDs = append(seqUserIDs, seqUserID) } return seqUserIDs } -func (m MsgDocModel) getSeqSuperGroupID(groupID string, seq uint32) string { +func (m MsgDocModel) getSeqSuperGroupID(groupID string, seq int64) string { seqSuffix := seq / singleGocMsgNum return m.superGroupIndexGen(groupID, seqSuffix) } -func (m MsgDocModel) superGroupIndexGen(groupID string, seqSuffix uint32) string { +func (m MsgDocModel) superGroupIndexGen(groupID string, seqSuffix int64) string { return "super_group_" + groupID + ":" + strconv.FormatInt(int64(seqSuffix), 10) } -func (m MsgDocModel) GetDocIDSeqsMap(sourceID string, seqs []uint32) map[string][]uint32 { - t := make(map[string][]uint32) +func (m MsgDocModel) GetDocIDSeqsMap(sourceID string, seqs []int64) map[string][]int64 { + t := make(map[string][]int64) for i := 0; i < len(seqs); i++ { docID := m.GetDocID(sourceID, seqs[i]) if value, ok := t[docID]; !ok { - var temp []uint32 + var temp []int64 t[docID] = append(temp, seqs[i]) } else { t[docID] = append(value, seqs[i]) @@ -108,11 +108,11 @@ func (m MsgDocModel) getMsgIndex(seq uint32) int { return int(index) } -func (m MsgDocModel) indexGen(sourceID string, seqSuffix uint32) string { - return sourceID + ":" + strconv.FormatInt(int64(seqSuffix), 10) +func (m MsgDocModel) indexGen(sourceID string, seqSuffix int64) string { + return sourceID + ":" + strconv.FormatInt(seqSuffix, 10) } -func (MsgDocModel) GenExceptionMessageBySeqs(seqs []uint32) (exceptionMsg []*sdkws.MsgData) { +func (MsgDocModel) GenExceptionMessageBySeqs(seqs []int64) (exceptionMsg []*sdkws.MsgData) { for _, v := range seqs { msg := new(sdkws.MsgData) msg.Seq = v @@ -121,7 +121,7 @@ func (MsgDocModel) GenExceptionMessageBySeqs(seqs []uint32) (exceptionMsg []*sdk return exceptionMsg } -func (MsgDocModel) GenExceptionSuperGroupMessageBySeqs(seqs []uint32, groupID string) (exceptionMsg []*sdkws.MsgData) { +func (MsgDocModel) GenExceptionSuperGroupMessageBySeqs(seqs []int64, groupID string) (exceptionMsg []*sdkws.MsgData) { for _, v := range seqs { msg := new(sdkws.MsgData) msg.Seq = v diff --git a/pkg/common/log/logrus.go b/pkg/common/log/logrus.go index d3c4f37e7..133f42d12 100644 --- a/pkg/common/log/logrus.go +++ b/pkg/common/log/logrus.go @@ -239,17 +239,6 @@ func NewWarn(OperationID string, args ...interface{}) { func ShowLog(ctx context.Context) { t := ctx.Value(tracelog.TraceLogKey).(*tracelog.ApiInfo) OperationID := tracelog.GetOperationID(ctx) - //if ctx.Value(tracelog.TraceLogKey).(*tracelog.ApiInfo).GinCtx != nil { - // ctxLogger.WithFields(logrus.Fields{ - // "OperationID": OperationID, - // "PID": ctxLogger.Pid, - // }).Infoln("api: ", t.ApiName) - //} else { - // ctxLogger.WithFields(logrus.Fields{ - // "OperationID": OperationID, - // "PID": ctxLogger.Pid, - // }).Infoln("rpc: ", t.ApiName) - //} for _, v := range *t.Funcs { if v.Err != nil { diff --git a/pkg/proto/msg/msg.proto b/pkg/proto/msg/msg.proto index 45962720a..563732e87 100644 --- a/pkg/proto/msg/msg.proto +++ b/pkg/proto/msg/msg.proto @@ -223,6 +223,13 @@ message MsgDataToModifyByMQ{ string triggerID = 3; } +message DelMsgListReq{ + string userID = 2; + repeated uint32 seqList = 3; +} + +message DelMsgListResp{ +} service msg { //获取最小最大seq(包括用户的,以及指定群组的) @@ -232,7 +239,7 @@ service msg { //发送消息 rpc SendMsg(SendMsgReq) returns(SendMsgResp); //删除某人消息 - rpc DelMsgList(sdkws.DelMsgListReq) returns(sdkws.DelMsgListResp); + rpc DelMsgList(DelMsgListReq) returns(DelMsgListResp); //删除某个用户某个大群消息 rpc DelSuperGroupMsg(DelSuperGroupMsgReq) returns(DelSuperGroupMsgResp); //清空某人所有消息 diff --git a/pkg/proto/sdkws/ws.pb.go b/pkg/proto/sdkws/ws.pb.go index 265075a49..2e0524c1a 100644 --- a/pkg/proto/sdkws/ws.pb.go +++ b/pkg/proto/sdkws/ws.pb.go @@ -46,7 +46,7 @@ func (m *GroupInfo) Reset() { *m = GroupInfo{} } func (m *GroupInfo) String() string { return proto.CompactTextString(m) } func (*GroupInfo) ProtoMessage() {} func (*GroupInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{0} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{0} } func (m *GroupInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfo.Unmarshal(m, b) @@ -204,7 +204,7 @@ func (m *GroupInfoForSet) Reset() { *m = GroupInfoForSet{} } func (m *GroupInfoForSet) String() string { return proto.CompactTextString(m) } func (*GroupInfoForSet) ProtoMessage() {} func (*GroupInfoForSet) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{1} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{1} } func (m *GroupInfoForSet) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoForSet.Unmarshal(m, b) @@ -309,7 +309,7 @@ func (m *GroupMemberFullInfo) Reset() { *m = GroupMemberFullInfo{} } func (m *GroupMemberFullInfo) String() string { return proto.CompactTextString(m) } func (*GroupMemberFullInfo) ProtoMessage() {} func (*GroupMemberFullInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{2} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{2} } func (m *GroupMemberFullInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberFullInfo.Unmarshal(m, b) @@ -428,7 +428,7 @@ func (m *PublicUserInfo) Reset() { *m = PublicUserInfo{} } func (m *PublicUserInfo) String() string { return proto.CompactTextString(m) } func (*PublicUserInfo) ProtoMessage() {} func (*PublicUserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{3} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{3} } func (m *PublicUserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PublicUserInfo.Unmarshal(m, b) @@ -505,7 +505,7 @@ func (m *UserInfo) Reset() { *m = UserInfo{} } func (m *UserInfo) String() string { return proto.CompactTextString(m) } func (*UserInfo) ProtoMessage() {} func (*UserInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{4} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{4} } func (m *UserInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfo.Unmarshal(m, b) @@ -626,7 +626,7 @@ func (m *FriendInfo) Reset() { *m = FriendInfo{} } func (m *FriendInfo) String() string { return proto.CompactTextString(m) } func (*FriendInfo) ProtoMessage() {} func (*FriendInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{5} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{5} } func (m *FriendInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfo.Unmarshal(m, b) @@ -711,7 +711,7 @@ func (m *BlackInfo) Reset() { *m = BlackInfo{} } func (m *BlackInfo) String() string { return proto.CompactTextString(m) } func (*BlackInfo) ProtoMessage() {} func (*BlackInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{6} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{6} } func (m *BlackInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackInfo.Unmarshal(m, b) @@ -794,7 +794,7 @@ func (m *GroupRequest) Reset() { *m = GroupRequest{} } func (m *GroupRequest) String() string { return proto.CompactTextString(m) } func (*GroupRequest) ProtoMessage() {} func (*GroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{7} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{7} } func (m *GroupRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupRequest.Unmarshal(m, b) @@ -916,7 +916,7 @@ func (m *FriendRequest) Reset() { *m = FriendRequest{} } func (m *FriendRequest) String() string { return proto.CompactTextString(m) } func (*FriendRequest) ProtoMessage() {} func (*FriendRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{8} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{8} } func (m *FriendRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendRequest.Unmarshal(m, b) @@ -1044,7 +1044,7 @@ func (m *FriendRequest) GetEx() string { // /////////////////////////////////base end///////////////////////////////////// type PullMessageBySeqListReq struct { UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` - SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` + Seqs []int64 `protobuf:"varint,3,rep,packed,name=seqs" json:"seqs,omitempty"` GroupSeqList map[string]*SeqList `protobuf:"bytes,4,rep,name=groupSeqList" json:"groupSeqList,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1055,7 +1055,7 @@ func (m *PullMessageBySeqListReq) Reset() { *m = PullMessageBySeqListReq func (m *PullMessageBySeqListReq) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListReq) ProtoMessage() {} func (*PullMessageBySeqListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{9} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{9} } func (m *PullMessageBySeqListReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListReq.Unmarshal(m, b) @@ -1082,9 +1082,9 @@ func (m *PullMessageBySeqListReq) GetUserID() string { return "" } -func (m *PullMessageBySeqListReq) GetSeqList() []uint32 { +func (m *PullMessageBySeqListReq) GetSeqs() []int64 { if m != nil { - return m.SeqList + return m.Seqs } return nil } @@ -1097,7 +1097,7 @@ func (m *PullMessageBySeqListReq) GetGroupSeqList() map[string]*SeqList { } type SeqList struct { - SeqList []uint32 `protobuf:"varint,1,rep,packed,name=seqList" json:"seqList,omitempty"` + Seqs []int64 `protobuf:"varint,1,rep,packed,name=seqs" json:"seqs,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1107,7 +1107,7 @@ func (m *SeqList) Reset() { *m = SeqList{} } func (m *SeqList) String() string { return proto.CompactTextString(m) } func (*SeqList) ProtoMessage() {} func (*SeqList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{10} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{10} } func (m *SeqList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SeqList.Unmarshal(m, b) @@ -1127,9 +1127,9 @@ func (m *SeqList) XXX_DiscardUnknown() { var xxx_messageInfo_SeqList proto.InternalMessageInfo -func (m *SeqList) GetSeqList() []uint32 { +func (m *SeqList) GetSeqs() []int64 { if m != nil { - return m.SeqList + return m.Seqs } return nil } @@ -1145,7 +1145,7 @@ func (m *MsgDataList) Reset() { *m = MsgDataList{} } func (m *MsgDataList) String() string { return proto.CompactTextString(m) } func (*MsgDataList) ProtoMessage() {} func (*MsgDataList) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{11} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{11} } func (m *MsgDataList) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgDataList.Unmarshal(m, b) @@ -1186,7 +1186,7 @@ func (m *PullMessageBySeqListResp) Reset() { *m = PullMessageBySeqListRe func (m *PullMessageBySeqListResp) String() string { return proto.CompactTextString(m) } func (*PullMessageBySeqListResp) ProtoMessage() {} func (*PullMessageBySeqListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{12} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{12} } func (m *PullMessageBySeqListResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_PullMessageBySeqListResp.Unmarshal(m, b) @@ -1246,7 +1246,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} } func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqReq) ProtoMessage() {} func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{13} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{13} } func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b) @@ -1281,8 +1281,8 @@ func (m *GetMaxAndMinSeqReq) GetUserID() string { } type MaxAndMinSeq struct { - MaxSeq uint32 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` - MinSeq uint32 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` + MaxSeq int64 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` + MinSeq int64 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1292,7 +1292,7 @@ func (m *MaxAndMinSeq) Reset() { *m = MaxAndMinSeq{} } func (m *MaxAndMinSeq) String() string { return proto.CompactTextString(m) } func (*MaxAndMinSeq) ProtoMessage() {} func (*MaxAndMinSeq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{14} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{14} } func (m *MaxAndMinSeq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MaxAndMinSeq.Unmarshal(m, b) @@ -1312,14 +1312,14 @@ func (m *MaxAndMinSeq) XXX_DiscardUnknown() { var xxx_messageInfo_MaxAndMinSeq proto.InternalMessageInfo -func (m *MaxAndMinSeq) GetMaxSeq() uint32 { +func (m *MaxAndMinSeq) GetMaxSeq() int64 { if m != nil { return m.MaxSeq } return 0 } -func (m *MaxAndMinSeq) GetMinSeq() uint32 { +func (m *MaxAndMinSeq) GetMinSeq() int64 { if m != nil { return m.MinSeq } @@ -1327,8 +1327,8 @@ func (m *MaxAndMinSeq) GetMinSeq() uint32 { } type GetMaxAndMinSeqResp struct { - MaxSeq uint32 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` - MinSeq uint32 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` + MaxSeq int64 `protobuf:"varint,1,opt,name=maxSeq" json:"maxSeq,omitempty"` + MinSeq int64 `protobuf:"varint,2,opt,name=minSeq" json:"minSeq,omitempty"` GroupMaxAndMinSeq map[string]*MaxAndMinSeq `protobuf:"bytes,5,rep,name=groupMaxAndMinSeq" json:"groupMaxAndMinSeq,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1339,7 +1339,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} } func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) } func (*GetMaxAndMinSeqResp) ProtoMessage() {} func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{15} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{15} } func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b) @@ -1359,14 +1359,14 @@ func (m *GetMaxAndMinSeqResp) XXX_DiscardUnknown() { var xxx_messageInfo_GetMaxAndMinSeqResp proto.InternalMessageInfo -func (m *GetMaxAndMinSeqResp) GetMaxSeq() uint32 { +func (m *GetMaxAndMinSeqResp) GetMaxSeq() int64 { if m != nil { return m.MaxSeq } return 0 } -func (m *GetMaxAndMinSeqResp) GetMinSeq() uint32 { +func (m *GetMaxAndMinSeqResp) GetMinSeq() int64 { if m != nil { return m.MinSeq } @@ -1393,7 +1393,7 @@ func (m *UserSendMsgResp) Reset() { *m = UserSendMsgResp{} } func (m *UserSendMsgResp) String() string { return proto.CompactTextString(m) } func (*UserSendMsgResp) ProtoMessage() {} func (*UserSendMsgResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{16} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{16} } func (m *UserSendMsgResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserSendMsgResp.Unmarshal(m, b) @@ -1447,7 +1447,7 @@ type MsgData struct { MsgFrom int32 `protobuf:"varint,10,opt,name=msgFrom" json:"msgFrom,omitempty"` ContentType int32 `protobuf:"varint,11,opt,name=contentType" json:"contentType,omitempty"` Content []byte `protobuf:"bytes,12,opt,name=content,proto3" json:"content,omitempty"` - Seq uint32 `protobuf:"varint,14,opt,name=seq" json:"seq,omitempty"` + Seq int64 `protobuf:"varint,14,opt,name=seq" json:"seq,omitempty"` SendTime int64 `protobuf:"varint,15,opt,name=sendTime" json:"sendTime,omitempty"` CreateTime int64 `protobuf:"varint,16,opt,name=createTime" json:"createTime,omitempty"` Status int32 `protobuf:"varint,17,opt,name=status" json:"status,omitempty"` @@ -1466,7 +1466,7 @@ func (m *MsgData) Reset() { *m = MsgData{} } func (m *MsgData) String() string { return proto.CompactTextString(m) } func (*MsgData) ProtoMessage() {} func (*MsgData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{17} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{17} } func (m *MsgData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MsgData.Unmarshal(m, b) @@ -1570,7 +1570,7 @@ func (m *MsgData) GetContent() []byte { return nil } -func (m *MsgData) GetSeq() uint32 { +func (m *MsgData) GetSeq() int64 { if m != nil { return m.Seq } @@ -1655,7 +1655,7 @@ func (m *OfflinePushInfo) Reset() { *m = OfflinePushInfo{} } func (m *OfflinePushInfo) String() string { return proto.CompactTextString(m) } func (*OfflinePushInfo) ProtoMessage() {} func (*OfflinePushInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{18} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{18} } func (m *OfflinePushInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OfflinePushInfo.Unmarshal(m, b) @@ -1723,7 +1723,7 @@ func (m *TipsComm) Reset() { *m = TipsComm{} } func (m *TipsComm) String() string { return proto.CompactTextString(m) } func (*TipsComm) ProtoMessage() {} func (*TipsComm) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{19} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{19} } func (m *TipsComm) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_TipsComm.Unmarshal(m, b) @@ -1764,7 +1764,7 @@ func (m *TipsComm) GetJsonDetail() string { return "" } -// OnGroupCreated() +// OnGroupCreated() type GroupCreatedTips struct { Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` @@ -1780,7 +1780,7 @@ func (m *GroupCreatedTips) Reset() { *m = GroupCreatedTips{} } func (m *GroupCreatedTips) String() string { return proto.CompactTextString(m) } func (*GroupCreatedTips) ProtoMessage() {} func (*GroupCreatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{20} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{20} } func (m *GroupCreatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCreatedTips.Unmarshal(m, b) @@ -1835,7 +1835,7 @@ func (m *GroupCreatedTips) GetGroupOwnerUser() *GroupMemberFullInfo { return nil } -// OnGroupInfoSet() +// OnGroupInfoSet() type GroupInfoSetTips struct { OpUser *GroupMemberFullInfo `protobuf:"bytes,1,opt,name=opUser" json:"opUser,omitempty"` MuteTime int64 `protobuf:"varint,2,opt,name=muteTime" json:"muteTime,omitempty"` @@ -1849,7 +1849,7 @@ func (m *GroupInfoSetTips) Reset() { *m = GroupInfoSetTips{} } func (m *GroupInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupInfoSetTips) ProtoMessage() {} func (*GroupInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{21} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{21} } func (m *GroupInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupInfoSetTips.Unmarshal(m, b) @@ -1890,7 +1890,7 @@ func (m *GroupInfoSetTips) GetGroup() *GroupInfo { return nil } -// OnJoinGroupApplication() +// OnJoinGroupApplication() type JoinGroupApplicationTips struct { Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` Applicant *PublicUserInfo `protobuf:"bytes,2,opt,name=applicant" json:"applicant,omitempty"` @@ -1904,7 +1904,7 @@ func (m *JoinGroupApplicationTips) Reset() { *m = JoinGroupApplicationTi func (m *JoinGroupApplicationTips) String() string { return proto.CompactTextString(m) } func (*JoinGroupApplicationTips) ProtoMessage() {} func (*JoinGroupApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{22} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{22} } func (m *JoinGroupApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_JoinGroupApplicationTips.Unmarshal(m, b) @@ -1945,8 +1945,7 @@ func (m *JoinGroupApplicationTips) GetReqMsg() string { return "" } -// OnQuitGroup() -// +// OnQuitGroup() // Actively leave the group type MemberQuitTips struct { Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` @@ -1961,7 +1960,7 @@ func (m *MemberQuitTips) Reset() { *m = MemberQuitTips{} } func (m *MemberQuitTips) String() string { return proto.CompactTextString(m) } func (*MemberQuitTips) ProtoMessage() {} func (*MemberQuitTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{23} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{23} } func (m *MemberQuitTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberQuitTips.Unmarshal(m, b) @@ -2002,7 +2001,7 @@ func (m *MemberQuitTips) GetOperationTime() int64 { return 0 } -// OnApplicationGroupAccepted() +// OnApplicationGroupAccepted() type GroupApplicationAcceptedTips struct { Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` @@ -2017,7 +2016,7 @@ func (m *GroupApplicationAcceptedTips) Reset() { *m = GroupApplicationAc func (m *GroupApplicationAcceptedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationAcceptedTips) ProtoMessage() {} func (*GroupApplicationAcceptedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{24} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{24} } func (m *GroupApplicationAcceptedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationAcceptedTips.Unmarshal(m, b) @@ -2065,7 +2064,7 @@ func (m *GroupApplicationAcceptedTips) GetReceiverAs() int32 { return 0 } -// OnApplicationGroupRejected() +// OnApplicationGroupRejected() type GroupApplicationRejectedTips struct { Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` @@ -2080,7 +2079,7 @@ func (m *GroupApplicationRejectedTips) Reset() { *m = GroupApplicationRe func (m *GroupApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*GroupApplicationRejectedTips) ProtoMessage() {} func (*GroupApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{25} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{25} } func (m *GroupApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupApplicationRejectedTips.Unmarshal(m, b) @@ -2128,7 +2127,7 @@ func (m *GroupApplicationRejectedTips) GetReceiverAs() int32 { return 0 } -// OnTransferGroupOwner() +// OnTransferGroupOwner() type GroupOwnerTransferredTips struct { Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` @@ -2143,7 +2142,7 @@ func (m *GroupOwnerTransferredTips) Reset() { *m = GroupOwnerTransferred func (m *GroupOwnerTransferredTips) String() string { return proto.CompactTextString(m) } func (*GroupOwnerTransferredTips) ProtoMessage() {} func (*GroupOwnerTransferredTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{26} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{26} } func (m *GroupOwnerTransferredTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupOwnerTransferredTips.Unmarshal(m, b) @@ -2191,7 +2190,7 @@ func (m *GroupOwnerTransferredTips) GetOperationTime() int64 { return 0 } -// OnMemberKicked() +// OnMemberKicked() type MemberKickedTips struct { Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` @@ -2206,7 +2205,7 @@ func (m *MemberKickedTips) Reset() { *m = MemberKickedTips{} } func (m *MemberKickedTips) String() string { return proto.CompactTextString(m) } func (*MemberKickedTips) ProtoMessage() {} func (*MemberKickedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{27} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{27} } func (m *MemberKickedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberKickedTips.Unmarshal(m, b) @@ -2254,7 +2253,7 @@ func (m *MemberKickedTips) GetOperationTime() int64 { return 0 } -// OnMemberInvited() +// OnMemberInvited() type MemberInvitedTips struct { Group *GroupInfo `protobuf:"bytes,1,opt,name=group" json:"group,omitempty"` OpUser *GroupMemberFullInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` @@ -2269,7 +2268,7 @@ func (m *MemberInvitedTips) Reset() { *m = MemberInvitedTips{} } func (m *MemberInvitedTips) String() string { return proto.CompactTextString(m) } func (*MemberInvitedTips) ProtoMessage() {} func (*MemberInvitedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{28} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{28} } func (m *MemberInvitedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberInvitedTips.Unmarshal(m, b) @@ -2331,7 +2330,7 @@ func (m *MemberEnterTips) Reset() { *m = MemberEnterTips{} } func (m *MemberEnterTips) String() string { return proto.CompactTextString(m) } func (*MemberEnterTips) ProtoMessage() {} func (*MemberEnterTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{29} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{29} } func (m *MemberEnterTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MemberEnterTips.Unmarshal(m, b) @@ -2385,7 +2384,7 @@ func (m *GroupDismissedTips) Reset() { *m = GroupDismissedTips{} } func (m *GroupDismissedTips) String() string { return proto.CompactTextString(m) } func (*GroupDismissedTips) ProtoMessage() {} func (*GroupDismissedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{30} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{30} } func (m *GroupDismissedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupDismissedTips.Unmarshal(m, b) @@ -2441,7 +2440,7 @@ func (m *GroupMemberMutedTips) Reset() { *m = GroupMemberMutedTips{} } func (m *GroupMemberMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberMutedTips) ProtoMessage() {} func (*GroupMemberMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{31} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{31} } func (m *GroupMemberMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberMutedTips.Unmarshal(m, b) @@ -2510,7 +2509,7 @@ func (m *GroupMemberCancelMutedTips) Reset() { *m = GroupMemberCancelMut func (m *GroupMemberCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberCancelMutedTips) ProtoMessage() {} func (*GroupMemberCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{32} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{32} } func (m *GroupMemberCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberCancelMutedTips.Unmarshal(m, b) @@ -2571,7 +2570,7 @@ func (m *GroupMutedTips) Reset() { *m = GroupMutedTips{} } func (m *GroupMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupMutedTips) ProtoMessage() {} func (*GroupMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{33} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{33} } func (m *GroupMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMutedTips.Unmarshal(m, b) @@ -2625,7 +2624,7 @@ func (m *GroupCancelMutedTips) Reset() { *m = GroupCancelMutedTips{} } func (m *GroupCancelMutedTips) String() string { return proto.CompactTextString(m) } func (*GroupCancelMutedTips) ProtoMessage() {} func (*GroupCancelMutedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{34} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{34} } func (m *GroupCancelMutedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupCancelMutedTips.Unmarshal(m, b) @@ -2680,7 +2679,7 @@ func (m *GroupMemberInfoSetTips) Reset() { *m = GroupMemberInfoSetTips{} func (m *GroupMemberInfoSetTips) String() string { return proto.CompactTextString(m) } func (*GroupMemberInfoSetTips) ProtoMessage() {} func (*GroupMemberInfoSetTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{35} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{35} } func (m *GroupMemberInfoSetTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GroupMemberInfoSetTips.Unmarshal(m, b) @@ -2728,52 +2727,6 @@ func (m *GroupMemberInfoSetTips) GetChangedUser() *GroupMemberFullInfo { return nil } -type OrganizationChangedTips struct { - OpUser *UserInfo `protobuf:"bytes,2,opt,name=opUser" json:"opUser,omitempty"` - OperationTime int64 `protobuf:"varint,3,opt,name=operationTime" json:"operationTime,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *OrganizationChangedTips) Reset() { *m = OrganizationChangedTips{} } -func (m *OrganizationChangedTips) String() string { return proto.CompactTextString(m) } -func (*OrganizationChangedTips) ProtoMessage() {} -func (*OrganizationChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{36} -} -func (m *OrganizationChangedTips) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_OrganizationChangedTips.Unmarshal(m, b) -} -func (m *OrganizationChangedTips) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_OrganizationChangedTips.Marshal(b, m, deterministic) -} -func (dst *OrganizationChangedTips) XXX_Merge(src proto.Message) { - xxx_messageInfo_OrganizationChangedTips.Merge(dst, src) -} -func (m *OrganizationChangedTips) XXX_Size() int { - return xxx_messageInfo_OrganizationChangedTips.Size(m) -} -func (m *OrganizationChangedTips) XXX_DiscardUnknown() { - xxx_messageInfo_OrganizationChangedTips.DiscardUnknown(m) -} - -var xxx_messageInfo_OrganizationChangedTips proto.InternalMessageInfo - -func (m *OrganizationChangedTips) GetOpUser() *UserInfo { - if m != nil { - return m.OpUser - } - return nil -} - -func (m *OrganizationChangedTips) GetOperationTime() int64 { - if m != nil { - return m.OperationTime - } - return 0 -} - type FriendApplication struct { AddTime int64 `protobuf:"varint,1,opt,name=addTime" json:"addTime,omitempty"` AddSource string `protobuf:"bytes,2,opt,name=addSource" json:"addSource,omitempty"` @@ -2787,7 +2740,7 @@ func (m *FriendApplication) Reset() { *m = FriendApplication{} } func (m *FriendApplication) String() string { return proto.CompactTextString(m) } func (*FriendApplication) ProtoMessage() {} func (*FriendApplication) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{37} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{36} } func (m *FriendApplication) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplication.Unmarshal(m, b) @@ -2840,7 +2793,7 @@ func (m *FromToUserID) Reset() { *m = FromToUserID{} } func (m *FromToUserID) String() string { return proto.CompactTextString(m) } func (*FromToUserID) ProtoMessage() {} func (*FromToUserID) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{38} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{37} } func (m *FromToUserID) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FromToUserID.Unmarshal(m, b) @@ -2886,7 +2839,7 @@ func (m *FriendApplicationTips) Reset() { *m = FriendApplicationTips{} } func (m *FriendApplicationTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationTips) ProtoMessage() {} func (*FriendApplicationTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{39} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{38} } func (m *FriendApplicationTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationTips.Unmarshal(m, b) @@ -2926,7 +2879,7 @@ func (m *FriendApplicationApprovedTips) Reset() { *m = FriendApplication func (m *FriendApplicationApprovedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationApprovedTips) ProtoMessage() {} func (*FriendApplicationApprovedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{40} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{39} } func (m *FriendApplicationApprovedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationApprovedTips.Unmarshal(m, b) @@ -2973,7 +2926,7 @@ func (m *FriendApplicationRejectedTips) Reset() { *m = FriendApplication func (m *FriendApplicationRejectedTips) String() string { return proto.CompactTextString(m) } func (*FriendApplicationRejectedTips) ProtoMessage() {} func (*FriendApplicationRejectedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{41} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{40} } func (m *FriendApplicationRejectedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendApplicationRejectedTips.Unmarshal(m, b) @@ -3021,7 +2974,7 @@ func (m *FriendAddedTips) Reset() { *m = FriendAddedTips{} } func (m *FriendAddedTips) String() string { return proto.CompactTextString(m) } func (*FriendAddedTips) ProtoMessage() {} func (*FriendAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{42} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{41} } func (m *FriendAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendAddedTips.Unmarshal(m, b) @@ -3074,7 +3027,7 @@ func (m *FriendDeletedTips) Reset() { *m = FriendDeletedTips{} } func (m *FriendDeletedTips) String() string { return proto.CompactTextString(m) } func (*FriendDeletedTips) ProtoMessage() {} func (*FriendDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{43} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{42} } func (m *FriendDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendDeletedTips.Unmarshal(m, b) @@ -3112,7 +3065,7 @@ func (m *BlackAddedTips) Reset() { *m = BlackAddedTips{} } func (m *BlackAddedTips) String() string { return proto.CompactTextString(m) } func (*BlackAddedTips) ProtoMessage() {} func (*BlackAddedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{44} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{43} } func (m *BlackAddedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackAddedTips.Unmarshal(m, b) @@ -3150,7 +3103,7 @@ func (m *BlackDeletedTips) Reset() { *m = BlackDeletedTips{} } func (m *BlackDeletedTips) String() string { return proto.CompactTextString(m) } func (*BlackDeletedTips) ProtoMessage() {} func (*BlackDeletedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{45} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{44} } func (m *BlackDeletedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_BlackDeletedTips.Unmarshal(m, b) @@ -3188,7 +3141,7 @@ func (m *FriendInfoChangedTips) Reset() { *m = FriendInfoChangedTips{} } func (m *FriendInfoChangedTips) String() string { return proto.CompactTextString(m) } func (*FriendInfoChangedTips) ProtoMessage() {} func (*FriendInfoChangedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{46} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{45} } func (m *FriendInfoChangedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_FriendInfoChangedTips.Unmarshal(m, b) @@ -3227,7 +3180,7 @@ func (m *UserInfoUpdatedTips) Reset() { *m = UserInfoUpdatedTips{} } func (m *UserInfoUpdatedTips) String() string { return proto.CompactTextString(m) } func (*UserInfoUpdatedTips) ProtoMessage() {} func (*UserInfoUpdatedTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{47} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{46} } func (m *UserInfoUpdatedTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UserInfoUpdatedTips.Unmarshal(m, b) @@ -3268,7 +3221,7 @@ func (m *ConversationUpdateTips) Reset() { *m = ConversationUpdateTips{} func (m *ConversationUpdateTips) String() string { return proto.CompactTextString(m) } func (*ConversationUpdateTips) ProtoMessage() {} func (*ConversationUpdateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{48} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{47} } func (m *ConversationUpdateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationUpdateTips.Unmarshal(m, b) @@ -3322,7 +3275,7 @@ func (m *ConversationSetPrivateTips) Reset() { *m = ConversationSetPriva func (m *ConversationSetPrivateTips) String() string { return proto.CompactTextString(m) } func (*ConversationSetPrivateTips) ProtoMessage() {} func (*ConversationSetPrivateTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{49} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{48} } func (m *ConversationSetPrivateTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ConversationSetPrivateTips.Unmarshal(m, b) @@ -3367,7 +3320,7 @@ func (m *ConversationSetPrivateTips) GetIsPrivate() bool { type DeleteMessageTips struct { OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"` UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` - SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` + Seqs []int64 `protobuf:"varint,3,rep,packed,name=seqs" json:"seqs,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -3377,7 +3330,7 @@ func (m *DeleteMessageTips) Reset() { *m = DeleteMessageTips{} } func (m *DeleteMessageTips) String() string { return proto.CompactTextString(m) } func (*DeleteMessageTips) ProtoMessage() {} func (*DeleteMessageTips) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{50} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{49} } func (m *DeleteMessageTips) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DeleteMessageTips.Unmarshal(m, b) @@ -3411,9 +3364,9 @@ func (m *DeleteMessageTips) GetUserID() string { return "" } -func (m *DeleteMessageTips) GetSeqList() []uint32 { +func (m *DeleteMessageTips) GetSeqs() []int64 { if m != nil { - return m.SeqList + return m.Seqs } return nil } @@ -3431,7 +3384,7 @@ func (m *RequestPagination) Reset() { *m = RequestPagination{} } func (m *RequestPagination) String() string { return proto.CompactTextString(m) } func (*RequestPagination) ProtoMessage() {} func (*RequestPagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{51} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{50} } func (m *RequestPagination) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RequestPagination.Unmarshal(m, b) @@ -3488,7 +3441,7 @@ func (m *SignalReq) Reset() { *m = SignalReq{} } func (m *SignalReq) String() string { return proto.CompactTextString(m) } func (*SignalReq) ProtoMessage() {} func (*SignalReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{52} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{51} } func (m *SignalReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalReq.Unmarshal(m, b) @@ -3877,7 +3830,7 @@ func (m *SignalResp) Reset() { *m = SignalResp{} } func (m *SignalResp) String() string { return proto.CompactTextString(m) } func (*SignalResp) ProtoMessage() {} func (*SignalResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{53} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{52} } func (m *SignalResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalResp.Unmarshal(m, b) @@ -4207,7 +4160,7 @@ func (m *InvitationInfo) Reset() { *m = InvitationInfo{} } func (m *InvitationInfo) String() string { return proto.CompactTextString(m) } func (*InvitationInfo) ProtoMessage() {} func (*InvitationInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{54} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{53} } func (m *InvitationInfo) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_InvitationInfo.Unmarshal(m, b) @@ -4317,7 +4270,7 @@ func (m *ParticipantMetaData) Reset() { *m = ParticipantMetaData{} } func (m *ParticipantMetaData) String() string { return proto.CompactTextString(m) } func (*ParticipantMetaData) ProtoMessage() {} func (*ParticipantMetaData) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{55} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{54} } func (m *ParticipantMetaData) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ParticipantMetaData.Unmarshal(m, b) @@ -4372,7 +4325,7 @@ func (m *SignalInviteReq) Reset() { *m = SignalInviteReq{} } func (m *SignalInviteReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteReq) ProtoMessage() {} func (*SignalInviteReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{56} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{55} } func (m *SignalInviteReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReq.Unmarshal(m, b) @@ -4434,7 +4387,7 @@ func (m *SignalInviteReply) Reset() { *m = SignalInviteReply{} } func (m *SignalInviteReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteReply) ProtoMessage() {} func (*SignalInviteReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{57} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{56} } func (m *SignalInviteReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteReply.Unmarshal(m, b) @@ -4496,7 +4449,7 @@ func (m *SignalInviteInGroupReq) Reset() { *m = SignalInviteInGroupReq{} func (m *SignalInviteInGroupReq) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReq) ProtoMessage() {} func (*SignalInviteInGroupReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{58} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{57} } func (m *SignalInviteInGroupReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReq.Unmarshal(m, b) @@ -4558,7 +4511,7 @@ func (m *SignalInviteInGroupReply) Reset() { *m = SignalInviteInGroupRep func (m *SignalInviteInGroupReply) String() string { return proto.CompactTextString(m) } func (*SignalInviteInGroupReply) ProtoMessage() {} func (*SignalInviteInGroupReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{59} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{58} } func (m *SignalInviteInGroupReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalInviteInGroupReply.Unmarshal(m, b) @@ -4620,7 +4573,7 @@ func (m *SignalCancelReq) Reset() { *m = SignalCancelReq{} } func (m *SignalCancelReq) String() string { return proto.CompactTextString(m) } func (*SignalCancelReq) ProtoMessage() {} func (*SignalCancelReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{60} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{59} } func (m *SignalCancelReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReq.Unmarshal(m, b) @@ -4678,7 +4631,7 @@ func (m *SignalCancelReply) Reset() { *m = SignalCancelReply{} } func (m *SignalCancelReply) String() string { return proto.CompactTextString(m) } func (*SignalCancelReply) ProtoMessage() {} func (*SignalCancelReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{61} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{60} } func (m *SignalCancelReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalCancelReply.Unmarshal(m, b) @@ -4713,7 +4666,7 @@ func (m *SignalAcceptReq) Reset() { *m = SignalAcceptReq{} } func (m *SignalAcceptReq) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReq) ProtoMessage() {} func (*SignalAcceptReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{62} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{61} } func (m *SignalAcceptReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReq.Unmarshal(m, b) @@ -4781,7 +4734,7 @@ func (m *SignalAcceptReply) Reset() { *m = SignalAcceptReply{} } func (m *SignalAcceptReply) String() string { return proto.CompactTextString(m) } func (*SignalAcceptReply) ProtoMessage() {} func (*SignalAcceptReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{63} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{62} } func (m *SignalAcceptReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalAcceptReply.Unmarshal(m, b) @@ -4835,7 +4788,7 @@ func (m *SignalHungUpReq) Reset() { *m = SignalHungUpReq{} } func (m *SignalHungUpReq) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReq) ProtoMessage() {} func (*SignalHungUpReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{64} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{63} } func (m *SignalHungUpReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReq.Unmarshal(m, b) @@ -4886,7 +4839,7 @@ func (m *SignalHungUpReply) Reset() { *m = SignalHungUpReply{} } func (m *SignalHungUpReply) String() string { return proto.CompactTextString(m) } func (*SignalHungUpReply) ProtoMessage() {} func (*SignalHungUpReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{65} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{64} } func (m *SignalHungUpReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalHungUpReply.Unmarshal(m, b) @@ -4921,7 +4874,7 @@ func (m *SignalRejectReq) Reset() { *m = SignalRejectReq{} } func (m *SignalRejectReq) String() string { return proto.CompactTextString(m) } func (*SignalRejectReq) ProtoMessage() {} func (*SignalRejectReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{66} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{65} } func (m *SignalRejectReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReq.Unmarshal(m, b) @@ -4986,7 +4939,7 @@ func (m *SignalRejectReply) Reset() { *m = SignalRejectReply{} } func (m *SignalRejectReply) String() string { return proto.CompactTextString(m) } func (*SignalRejectReply) ProtoMessage() {} func (*SignalRejectReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{67} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{66} } func (m *SignalRejectReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalRejectReply.Unmarshal(m, b) @@ -5019,7 +4972,7 @@ func (m *SignalGetRoomByGroupIDReq) Reset() { *m = SignalGetRoomByGroupI func (m *SignalGetRoomByGroupIDReq) String() string { return proto.CompactTextString(m) } func (*SignalGetRoomByGroupIDReq) ProtoMessage() {} func (*SignalGetRoomByGroupIDReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{68} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{67} } func (m *SignalGetRoomByGroupIDReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalGetRoomByGroupIDReq.Unmarshal(m, b) @@ -5073,7 +5026,7 @@ func (m *SignalGetRoomByGroupIDReply) Reset() { *m = SignalGetRoomByGrou func (m *SignalGetRoomByGroupIDReply) String() string { return proto.CompactTextString(m) } func (*SignalGetRoomByGroupIDReply) ProtoMessage() {} func (*SignalGetRoomByGroupIDReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{69} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{68} } func (m *SignalGetRoomByGroupIDReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalGetRoomByGroupIDReply.Unmarshal(m, b) @@ -5127,7 +5080,7 @@ func (m *SignalOnRoomParticipantConnectedReq) Reset() { *m = SignalOnRoo func (m *SignalOnRoomParticipantConnectedReq) String() string { return proto.CompactTextString(m) } func (*SignalOnRoomParticipantConnectedReq) ProtoMessage() {} func (*SignalOnRoomParticipantConnectedReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{70} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{69} } func (m *SignalOnRoomParticipantConnectedReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalOnRoomParticipantConnectedReq.Unmarshal(m, b) @@ -5183,7 +5136,7 @@ func (m *SignalOnRoomParticipantDisconnectedReq) Reset() { func (m *SignalOnRoomParticipantDisconnectedReq) String() string { return proto.CompactTextString(m) } func (*SignalOnRoomParticipantDisconnectedReq) ProtoMessage() {} func (*SignalOnRoomParticipantDisconnectedReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{71} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{70} } func (m *SignalOnRoomParticipantDisconnectedReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalOnRoomParticipantDisconnectedReq.Unmarshal(m, b) @@ -5238,7 +5191,7 @@ func (m *SignalGetTokenByRoomIDReq) Reset() { *m = SignalGetTokenByRoomI func (m *SignalGetTokenByRoomIDReq) String() string { return proto.CompactTextString(m) } func (*SignalGetTokenByRoomIDReq) ProtoMessage() {} func (*SignalGetTokenByRoomIDReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{72} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{71} } func (m *SignalGetTokenByRoomIDReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalGetTokenByRoomIDReq.Unmarshal(m, b) @@ -5298,7 +5251,7 @@ func (m *SignalGetTokenByRoomIDReply) Reset() { *m = SignalGetTokenByRoo func (m *SignalGetTokenByRoomIDReply) String() string { return proto.CompactTextString(m) } func (*SignalGetTokenByRoomIDReply) ProtoMessage() {} func (*SignalGetTokenByRoomIDReply) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{73} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{72} } func (m *SignalGetTokenByRoomIDReply) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SignalGetTokenByRoomIDReply.Unmarshal(m, b) @@ -5332,82 +5285,6 @@ func (m *SignalGetTokenByRoomIDReply) GetLiveURL() string { return "" } -type DelMsgListReq struct { - UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"` - SeqList []uint32 `protobuf:"varint,3,rep,packed,name=seqList" json:"seqList,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DelMsgListReq) Reset() { *m = DelMsgListReq{} } -func (m *DelMsgListReq) String() string { return proto.CompactTextString(m) } -func (*DelMsgListReq) ProtoMessage() {} -func (*DelMsgListReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{74} -} -func (m *DelMsgListReq) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DelMsgListReq.Unmarshal(m, b) -} -func (m *DelMsgListReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DelMsgListReq.Marshal(b, m, deterministic) -} -func (dst *DelMsgListReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_DelMsgListReq.Merge(dst, src) -} -func (m *DelMsgListReq) XXX_Size() int { - return xxx_messageInfo_DelMsgListReq.Size(m) -} -func (m *DelMsgListReq) XXX_DiscardUnknown() { - xxx_messageInfo_DelMsgListReq.DiscardUnknown(m) -} - -var xxx_messageInfo_DelMsgListReq proto.InternalMessageInfo - -func (m *DelMsgListReq) GetUserID() string { - if m != nil { - return m.UserID - } - return "" -} - -func (m *DelMsgListReq) GetSeqList() []uint32 { - if m != nil { - return m.SeqList - } - return nil -} - -type DelMsgListResp struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DelMsgListResp) Reset() { *m = DelMsgListResp{} } -func (m *DelMsgListResp) String() string { return proto.CompactTextString(m) } -func (*DelMsgListResp) ProtoMessage() {} -func (*DelMsgListResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{75} -} -func (m *DelMsgListResp) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DelMsgListResp.Unmarshal(m, b) -} -func (m *DelMsgListResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DelMsgListResp.Marshal(b, m, deterministic) -} -func (dst *DelMsgListResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_DelMsgListResp.Merge(dst, src) -} -func (m *DelMsgListResp) XXX_Size() int { - return xxx_messageInfo_DelMsgListResp.Size(m) -} -func (m *DelMsgListResp) XXX_DiscardUnknown() { - xxx_messageInfo_DelMsgListResp.DiscardUnknown(m) -} - -var xxx_messageInfo_DelMsgListResp proto.InternalMessageInfo - type SetAppBackgroundStatusReq struct { UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"` IsBackground bool `protobuf:"varint,2,opt,name=isBackground" json:"isBackground,omitempty"` @@ -5420,7 +5297,7 @@ func (m *SetAppBackgroundStatusReq) Reset() { *m = SetAppBackgroundStatu func (m *SetAppBackgroundStatusReq) String() string { return proto.CompactTextString(m) } func (*SetAppBackgroundStatusReq) ProtoMessage() {} func (*SetAppBackgroundStatusReq) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{76} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{73} } func (m *SetAppBackgroundStatusReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetAppBackgroundStatusReq.Unmarshal(m, b) @@ -5466,7 +5343,7 @@ func (m *SetAppBackgroundStatusResp) Reset() { *m = SetAppBackgroundStat func (m *SetAppBackgroundStatusResp) String() string { return proto.CompactTextString(m) } func (*SetAppBackgroundStatusResp) ProtoMessage() {} func (*SetAppBackgroundStatusResp) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{77} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{74} } func (m *SetAppBackgroundStatusResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_SetAppBackgroundStatusResp.Unmarshal(m, b) @@ -5516,7 +5393,7 @@ func (m *ExtendMsgSet) Reset() { *m = ExtendMsgSet{} } func (m *ExtendMsgSet) String() string { return proto.CompactTextString(m) } func (*ExtendMsgSet) ProtoMessage() {} func (*ExtendMsgSet) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{78} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{75} } func (m *ExtendMsgSet) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExtendMsgSet.Unmarshal(m, b) @@ -5593,7 +5470,7 @@ func (m *ExtendMsg) Reset() { *m = ExtendMsg{} } func (m *ExtendMsg) String() string { return proto.CompactTextString(m) } func (*ExtendMsg) ProtoMessage() {} func (*ExtendMsg) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{79} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{76} } func (m *ExtendMsg) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ExtendMsg.Unmarshal(m, b) @@ -5661,7 +5538,7 @@ func (m *KeyValue) Reset() { *m = KeyValue{} } func (m *KeyValue) String() string { return proto.CompactTextString(m) } func (*KeyValue) ProtoMessage() {} func (*KeyValue) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{80} + return fileDescriptor_ws_2c814dd0dc73fa33, []int{77} } func (m *KeyValue) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_KeyValue.Unmarshal(m, b) @@ -5702,52 +5579,6 @@ func (m *KeyValue) GetLatestUpdateTime() int64 { return 0 } -type ResponsePagination struct { - CurrentPage int32 `protobuf:"varint,5,opt,name=CurrentPage" json:"CurrentPage,omitempty"` - ShowNumber int32 `protobuf:"varint,6,opt,name=ShowNumber" json:"ShowNumber,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ResponsePagination) Reset() { *m = ResponsePagination{} } -func (m *ResponsePagination) String() string { return proto.CompactTextString(m) } -func (*ResponsePagination) ProtoMessage() {} -func (*ResponsePagination) Descriptor() ([]byte, []int) { - return fileDescriptor_ws_a0747f665ef3b307, []int{81} -} -func (m *ResponsePagination) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ResponsePagination.Unmarshal(m, b) -} -func (m *ResponsePagination) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ResponsePagination.Marshal(b, m, deterministic) -} -func (dst *ResponsePagination) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResponsePagination.Merge(dst, src) -} -func (m *ResponsePagination) XXX_Size() int { - return xxx_messageInfo_ResponsePagination.Size(m) -} -func (m *ResponsePagination) XXX_DiscardUnknown() { - xxx_messageInfo_ResponsePagination.DiscardUnknown(m) -} - -var xxx_messageInfo_ResponsePagination proto.InternalMessageInfo - -func (m *ResponsePagination) GetCurrentPage() int32 { - if m != nil { - return m.CurrentPage - } - return 0 -} - -func (m *ResponsePagination) GetShowNumber() int32 { - if m != nil { - return m.ShowNumber - } - return 0 -} - func init() { proto.RegisterType((*GroupInfo)(nil), "sdkws.GroupInfo") proto.RegisterType((*GroupInfoForSet)(nil), "sdkws.GroupInfoForSet") @@ -5789,7 +5620,6 @@ func init() { proto.RegisterType((*GroupMutedTips)(nil), "sdkws.GroupMutedTips") proto.RegisterType((*GroupCancelMutedTips)(nil), "sdkws.GroupCancelMutedTips") proto.RegisterType((*GroupMemberInfoSetTips)(nil), "sdkws.GroupMemberInfoSetTips") - proto.RegisterType((*OrganizationChangedTips)(nil), "sdkws.OrganizationChangedTips") proto.RegisterType((*FriendApplication)(nil), "sdkws.FriendApplication") proto.RegisterType((*FromToUserID)(nil), "sdkws.FromToUserID") proto.RegisterType((*FriendApplicationTips)(nil), "sdkws.FriendApplicationTips") @@ -5827,8 +5657,6 @@ func init() { proto.RegisterType((*SignalOnRoomParticipantDisconnectedReq)(nil), "sdkws.SignalOnRoomParticipantDisconnectedReq") proto.RegisterType((*SignalGetTokenByRoomIDReq)(nil), "sdkws.SignalGetTokenByRoomIDReq") proto.RegisterType((*SignalGetTokenByRoomIDReply)(nil), "sdkws.SignalGetTokenByRoomIDReply") - proto.RegisterType((*DelMsgListReq)(nil), "sdkws.DelMsgListReq") - proto.RegisterType((*DelMsgListResp)(nil), "sdkws.DelMsgListResp") proto.RegisterType((*SetAppBackgroundStatusReq)(nil), "sdkws.SetAppBackgroundStatusReq") proto.RegisterType((*SetAppBackgroundStatusResp)(nil), "sdkws.SetAppBackgroundStatusResp") proto.RegisterType((*ExtendMsgSet)(nil), "sdkws.ExtendMsgSet") @@ -5836,247 +5664,240 @@ func init() { proto.RegisterType((*ExtendMsg)(nil), "sdkws.ExtendMsg") proto.RegisterMapType((map[string]*KeyValue)(nil), "sdkws.ExtendMsg.ReactionExtensionListEntry") proto.RegisterType((*KeyValue)(nil), "sdkws.KeyValue") - proto.RegisterType((*ResponsePagination)(nil), "sdkws.ResponsePagination") } -func init() { proto.RegisterFile("sdkws/ws.proto", fileDescriptor_ws_a0747f665ef3b307) } +func init() { proto.RegisterFile("sdkws/ws.proto", fileDescriptor_ws_2c814dd0dc73fa33) } -var fileDescriptor_ws_a0747f665ef3b307 = []byte{ - // 3765 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5b, 0xcf, 0x6f, 0x1b, 0xd7, - 0xf1, 0xcf, 0x92, 0x22, 0x45, 0x0e, 0x25, 0x8a, 0x5a, 0xdb, 0x0a, 0xc3, 0xc4, 0x8e, 0xb0, 0xc9, - 0xd7, 0x5f, 0xc7, 0x8d, 0xe5, 0x44, 0x69, 0xd2, 0x20, 0x09, 0xda, 0x58, 0x92, 0x2d, 0x2b, 0x36, - 0x2d, 0x75, 0x69, 0x27, 0x48, 0x7b, 0x08, 0x56, 0xdc, 0x27, 0x6a, 0xa3, 0xe5, 0xee, 0x6a, 0x7f, - 0xc8, 0x66, 0x7b, 0x2a, 0x50, 0x14, 0x45, 0x7b, 0x48, 0x1b, 0xa4, 0x41, 0x2f, 0xed, 0xb1, 0x87, - 0xa2, 0x40, 0x2f, 0x05, 0xda, 0x53, 0xff, 0x85, 0x02, 0x3d, 0x15, 0x08, 0xd0, 0xf4, 0xd0, 0x43, - 0x81, 0xa2, 0x97, 0x1e, 0x7a, 0x6d, 0xf1, 0xe6, 0xbd, 0xdd, 0x7d, 0x6f, 0x77, 0x49, 0x51, 0x4e, - 0xea, 0x18, 0xee, 0x45, 0xd0, 0xcc, 0xce, 0xcc, 0x7b, 0x33, 0xf3, 0x79, 0xf3, 0x7e, 0x12, 0x9a, - 0x81, 0x79, 0x70, 0x37, 0xb8, 0x7c, 0x37, 0x58, 0xf1, 0x7c, 0x37, 0x74, 0xd5, 0x0a, 0xd2, 0x9d, - 0x4b, 0xdb, 0x1e, 0x71, 0x2e, 0x6d, 0x75, 0x2f, 0xf5, 0x88, 0x7f, 0x44, 0xfc, 0xcb, 0xde, 0xc1, - 0xe0, 0x32, 0x0a, 0x5c, 0xe6, 0xf2, 0xbe, 0xe1, 0x79, 0xc4, 0xe7, 0x5a, 0xda, 0xa7, 0x33, 0x50, - 0xdf, 0xf4, 0xdd, 0xc8, 0xdb, 0x72, 0xf6, 0x5c, 0xb5, 0x0d, 0xb3, 0x03, 0x24, 0x36, 0xda, 0xca, - 0xb2, 0x72, 0xa1, 0xae, 0xc7, 0xa4, 0xfa, 0x14, 0xd4, 0xf1, 0xdf, 0x5b, 0xc6, 0x90, 0xb4, 0x4b, - 0xf8, 0x2d, 0x65, 0xa8, 0x1a, 0xcc, 0x39, 0x6e, 0x68, 0xed, 0x59, 0x7d, 0x23, 0xb4, 0x5c, 0xa7, - 0x5d, 0x46, 0x01, 0x89, 0x47, 0x65, 0x2c, 0x27, 0xf4, 0x5d, 0x33, 0xea, 0xa3, 0xcc, 0x0c, 0x93, - 0x11, 0x79, 0xb4, 0xfd, 0x3d, 0xa3, 0x4f, 0xee, 0xe8, 0x37, 0xdb, 0x15, 0xd6, 0x3e, 0x27, 0xd5, - 0x65, 0x68, 0xb8, 0x77, 0x1d, 0xe2, 0xdf, 0x09, 0x88, 0xbf, 0xb5, 0xd1, 0xae, 0xe2, 0x57, 0x91, - 0xa5, 0x9e, 0x03, 0xe8, 0xfb, 0xc4, 0x08, 0xc9, 0x6d, 0x6b, 0x48, 0xda, 0xb3, 0xcb, 0xca, 0x85, - 0xb2, 0x2e, 0x70, 0xa8, 0x85, 0x21, 0x19, 0xee, 0x12, 0x7f, 0xdd, 0x8d, 0x9c, 0xb0, 0x5d, 0x5b, - 0x56, 0x2e, 0xcc, 0xeb, 0x22, 0x4b, 0x6d, 0x42, 0x89, 0xdc, 0x6b, 0xd7, 0xd1, 0x74, 0x89, 0xdc, - 0x53, 0x97, 0xa0, 0x1a, 0x84, 0x46, 0x18, 0x05, 0x6d, 0x58, 0x56, 0x2e, 0x54, 0x74, 0x4e, 0xa9, - 0xcf, 0xc2, 0x3c, 0xda, 0x75, 0xe3, 0xde, 0x34, 0x50, 0x45, 0x66, 0x26, 0x11, 0xbb, 0x3d, 0xf2, - 0x48, 0x7b, 0x0e, 0x0d, 0xa4, 0x0c, 0xf5, 0x22, 0xb4, 0x1c, 0x42, 0xcc, 0xb7, 0x89, 0x9f, 0x46, - 0x6d, 0x1e, 0x85, 0x72, 0x7c, 0xf5, 0x3c, 0x34, 0x6d, 0xd7, 0x3d, 0xe8, 0x62, 0x57, 0x69, 0x9e, - 0xda, 0x4d, 0x94, 0xcc, 0x70, 0xd5, 0xe7, 0x61, 0xd1, 0xf0, 0x3c, 0x7b, 0xc4, 0x58, 0xd7, 0x7c, - 0x8b, 0x38, 0x66, 0x7b, 0x01, 0x45, 0xf3, 0x1f, 0xd4, 0x57, 0x60, 0x49, 0xcc, 0xcf, 0x1d, 0xcf, - 0x8c, 0x63, 0xd7, 0xc2, 0xd8, 0x8d, 0xf9, 0xaa, 0xae, 0x80, 0x2a, 0x7d, 0x61, 0x21, 0x58, 0xc4, - 0x10, 0x14, 0x7c, 0xd1, 0x3e, 0x2a, 0xc3, 0x42, 0x82, 0xb0, 0x6b, 0xae, 0xdf, 0x23, 0xe1, 0x43, - 0x8c, 0x33, 0x86, 0x81, 0x6a, 0x82, 0x81, 0xcd, 0x82, 0x3c, 0x51, 0x6c, 0x35, 0x56, 0x9f, 0x5c, - 0x19, 0xb8, 0xee, 0xc0, 0x26, 0x6c, 0x20, 0xed, 0x46, 0x7b, 0x2b, 0x5b, 0x4e, 0xf8, 0xd2, 0xea, - 0xdb, 0x86, 0x1d, 0x91, 0x82, 0x24, 0xae, 0xe7, 0x92, 0x58, 0x3b, 0xde, 0x4c, 0x36, 0xc3, 0x5b, - 0x45, 0x19, 0xae, 0x1f, 0x6f, 0x27, 0xaf, 0xa5, 0xfd, 0xbb, 0x04, 0xa7, 0x30, 0x2d, 0x9c, 0x1b, - 0xd9, 0xf6, 0x31, 0x25, 0x60, 0x09, 0xaa, 0x11, 0x4b, 0x36, 0xcb, 0x0b, 0xa7, 0x68, 0xca, 0x7c, - 0xd7, 0x26, 0x37, 0xc9, 0x11, 0xb1, 0x31, 0x23, 0x15, 0x3d, 0x65, 0xa8, 0x1d, 0xa8, 0xbd, 0xef, - 0x5a, 0x0e, 0x02, 0x6b, 0x06, 0x81, 0x95, 0xd0, 0xf4, 0x9b, 0x63, 0xf5, 0x0f, 0x1c, 0x9a, 0x6b, - 0x96, 0x87, 0x84, 0x16, 0x53, 0x54, 0x95, 0x53, 0x74, 0x1e, 0x9a, 0x86, 0xe7, 0x75, 0x0d, 0x67, - 0x40, 0x7c, 0xd6, 0xe8, 0x2c, 0x1b, 0x0e, 0x32, 0x97, 0x16, 0x04, 0xda, 0x52, 0xcf, 0x8d, 0xfc, - 0x3e, 0xc1, 0x68, 0x57, 0x74, 0x81, 0x43, 0xed, 0xb8, 0x1e, 0xf1, 0x85, 0x71, 0xcc, 0x86, 0x7e, - 0x86, 0xcb, 0x21, 0x01, 0x09, 0x24, 0x68, 0x21, 0x89, 0x42, 0x72, 0xd5, 0x31, 0xd1, 0xa9, 0x06, - 0x3a, 0x25, 0xb2, 0x68, 0x81, 0xb0, 0x9c, 0x23, 0x2b, 0x4c, 0xca, 0xd5, 0x1c, 0x2b, 0x10, 0x12, - 0x53, 0xfb, 0x9e, 0x02, 0xcd, 0x9d, 0x68, 0xd7, 0xb6, 0xfa, 0xc8, 0xa0, 0xc1, 0x4f, 0x43, 0xac, - 0x48, 0x21, 0x16, 0x03, 0x55, 0x1a, 0x1f, 0xa8, 0xb2, 0x1c, 0xa8, 0x25, 0xa8, 0x0e, 0x88, 0x63, - 0x12, 0x1f, 0x03, 0x5f, 0xd1, 0x39, 0xc5, 0x1d, 0xaa, 0xc4, 0x0e, 0x69, 0x7f, 0x2e, 0x41, 0xed, - 0x01, 0x77, 0x61, 0x19, 0x1a, 0xde, 0xbe, 0xeb, 0x90, 0x5b, 0x11, 0x05, 0x1f, 0xef, 0x8b, 0xc8, - 0x52, 0x4f, 0x43, 0x65, 0xd7, 0xf2, 0xc3, 0x7d, 0xcc, 0xfe, 0xbc, 0xce, 0x08, 0xca, 0x25, 0x43, - 0xc3, 0x62, 0x29, 0xaf, 0xeb, 0x8c, 0xe0, 0x0e, 0xd5, 0x92, 0x0c, 0xc9, 0x53, 0x41, 0x3d, 0x37, - 0x15, 0xe4, 0x11, 0x04, 0x85, 0x08, 0xba, 0x08, 0xad, 0x81, 0xed, 0xee, 0x1a, 0xb6, 0x4e, 0xfa, - 0x47, 0xdd, 0x60, 0xb0, 0xed, 0x85, 0x98, 0xee, 0x8a, 0x9e, 0xe3, 0xd3, 0xf8, 0x60, 0x17, 0x4d, - 0x63, 0x84, 0x85, 0xbc, 0xac, 0x27, 0xb4, 0xf6, 0x0f, 0x05, 0x80, 0x0d, 0x3b, 0x0c, 0x71, 0x66, - 0x2e, 0x53, 0xf2, 0x73, 0xd9, 0x12, 0x54, 0x7d, 0x32, 0x34, 0xfc, 0x83, 0x78, 0xa8, 0x31, 0x2a, - 0xe3, 0x58, 0x39, 0xe7, 0xd8, 0x65, 0x80, 0x3d, 0x6c, 0x87, 0xda, 0xc1, 0x90, 0x37, 0x56, 0x17, - 0x56, 0x70, 0xe2, 0x5f, 0x89, 0x33, 0xac, 0x0b, 0x22, 0x74, 0xec, 0x1a, 0xa6, 0xc9, 0x87, 0x48, - 0x85, 0x8d, 0xdd, 0x84, 0x51, 0x30, 0x42, 0xaa, 0x13, 0x46, 0xc8, 0x6c, 0x02, 0xa8, 0xbf, 0x28, - 0x50, 0x5f, 0xb3, 0x8d, 0xfe, 0xc1, 0x94, 0xee, 0xca, 0x6e, 0x95, 0x72, 0x6e, 0xbd, 0x0e, 0xf3, - 0xbb, 0xd4, 0x5c, 0xec, 0x02, 0x7a, 0xde, 0x58, 0x3d, 0xc3, 0x3d, 0x93, 0x07, 0x91, 0x2e, 0xcb, - 0xca, 0x2e, 0xce, 0x1c, 0xef, 0x62, 0x65, 0x82, 0x8b, 0xc9, 0xbc, 0x40, 0xcb, 0xe7, 0x1c, 0x96, - 0x4f, 0x9d, 0x1c, 0x46, 0x24, 0x08, 0xd5, 0x17, 0xa1, 0x16, 0xc5, 0xdd, 0x53, 0x26, 0x75, 0x2f, - 0x11, 0x53, 0x57, 0xf8, 0x5c, 0x87, 0x3a, 0x25, 0xd4, 0x69, 0x71, 0x9d, 0x64, 0xc2, 0xd4, 0x53, - 0x11, 0x3a, 0xb3, 0xed, 0x1b, 0x8e, 0x69, 0x13, 0x9d, 0x04, 0x91, 0x1d, 0xf2, 0x5a, 0x2b, 0xf1, - 0x18, 0x72, 0x0e, 0xbb, 0xc1, 0x80, 0xcf, 0x7b, 0x9c, 0xa2, 0x51, 0x60, 0x72, 0xf4, 0x13, 0x73, - 0x31, 0x65, 0xd0, 0x01, 0xec, 0x93, 0x43, 0x8c, 0x7e, 0x15, 0xa3, 0x1f, 0x93, 0x69, 0x9b, 0x3c, - 0x3a, 0x2c, 0xc9, 0x12, 0x8f, 0xa6, 0x8f, 0xd1, 0x68, 0xa0, 0xc6, 0xd2, 0x97, 0x72, 0x72, 0xeb, - 0x2a, 0xb9, 0x30, 0x43, 0xae, 0x30, 0xe7, 0xca, 0x67, 0xa3, 0xa8, 0x7c, 0x7e, 0x52, 0x86, 0x79, - 0x36, 0xa8, 0xe2, 0x14, 0x9c, 0xa3, 0xe8, 0x77, 0x87, 0x12, 0xce, 0x04, 0x0e, 0xf5, 0x85, 0x52, - 0xb7, 0xe4, 0x32, 0x26, 0xf1, 0x28, 0x58, 0x29, 0x7d, 0x4d, 0x2a, 0x67, 0x22, 0x2b, 0x6e, 0x65, - 0x53, 0x2c, 0x6b, 0x02, 0x87, 0x16, 0x82, 0xd0, 0x95, 0xb0, 0x94, 0xd0, 0x54, 0x37, 0x74, 0x93, - 0xf6, 0x19, 0x9a, 0x04, 0x0e, 0xcd, 0x52, 0xe8, 0xc6, 0x6d, 0xb3, 0x50, 0xa7, 0x0c, 0x66, 0x99, - 0xb7, 0xcb, 0xa6, 0xb3, 0x84, 0xce, 0x61, 0xa3, 0x3e, 0x11, 0x1b, 0x20, 0x61, 0x43, 0x1e, 0x7e, - 0x8d, 0xdc, 0xf0, 0x7b, 0x16, 0xe6, 0x99, 0x9d, 0xcc, 0x74, 0x26, 0x31, 0x65, 0x84, 0xcd, 0x67, - 0x11, 0x26, 0x63, 0xa4, 0x39, 0x06, 0x23, 0x0b, 0xc9, 0xf8, 0xfa, 0xa7, 0x02, 0x8f, 0xef, 0x44, - 0xb6, 0xdd, 0x25, 0x41, 0x60, 0x0c, 0xc8, 0xda, 0xa8, 0x47, 0x0e, 0x6f, 0x5a, 0x41, 0xa8, 0x93, - 0xc3, 0xb1, 0x53, 0x54, 0x1b, 0x66, 0x03, 0x26, 0xd5, 0x2e, 0x2f, 0x97, 0x2f, 0xcc, 0xeb, 0x31, - 0xa9, 0xde, 0x86, 0x39, 0x1c, 0x46, 0xdc, 0x48, 0x7b, 0x66, 0xb9, 0x7c, 0xa1, 0xb1, 0xfa, 0x42, - 0x32, 0x40, 0x0b, 0xdb, 0x61, 0x83, 0x90, 0xd3, 0x57, 0x9d, 0xd0, 0x1f, 0xe9, 0x92, 0x95, 0xce, - 0x36, 0x2c, 0xe6, 0x44, 0xd4, 0x16, 0x94, 0x0f, 0xc8, 0x88, 0xf7, 0x8c, 0xfe, 0xab, 0x3e, 0x0b, - 0x95, 0x23, 0xba, 0x0a, 0xe3, 0x43, 0xbc, 0xc9, 0x5b, 0xe5, 0x7d, 0xd3, 0xd9, 0xc7, 0xd7, 0x4a, - 0xaf, 0x2a, 0xda, 0x33, 0x89, 0x03, 0xa2, 0x2f, 0x8a, 0xe4, 0x8b, 0xf6, 0x35, 0x68, 0x74, 0x83, - 0xc1, 0x86, 0x11, 0x1a, 0x28, 0xf8, 0x02, 0x34, 0x86, 0x29, 0x89, 0xc2, 0x69, 0x1b, 0x5c, 0x50, - 0x17, 0x45, 0xb4, 0x5f, 0x95, 0xa0, 0x5d, 0xec, 0x72, 0xe0, 0xd1, 0x76, 0x89, 0xef, 0xaf, 0xbb, - 0x26, 0x41, 0x17, 0x2a, 0x7a, 0x4c, 0xd2, 0xa8, 0x13, 0xdf, 0xa7, 0xc9, 0xe5, 0x73, 0x12, 0xa3, - 0x54, 0x0d, 0x66, 0xec, 0x38, 0xe4, 0xf9, 0x96, 0xf1, 0x9b, 0x6a, 0x40, 0x0b, 0x23, 0x27, 0x74, - 0x9c, 0xe7, 0xe0, 0xe5, 0x89, 0x39, 0x08, 0x3c, 0x96, 0x04, 0x41, 0x8f, 0x25, 0x22, 0x67, 0xae, - 0xf3, 0x0e, 0x9c, 0x29, 0x14, 0x2d, 0x48, 0xc8, 0x05, 0x39, 0x21, 0xaa, 0xdc, 0xe5, 0x6c, 0x52, - 0x6e, 0x81, 0xba, 0x49, 0xc2, 0xae, 0x71, 0xef, 0x8a, 0x63, 0x76, 0x2d, 0xa7, 0x47, 0x0e, 0x29, - 0x06, 0x97, 0xa1, 0xc1, 0xd7, 0xc5, 0x49, 0xd8, 0xeb, 0xba, 0xc8, 0x1a, 0xb7, 0x5c, 0xd6, 0xbe, - 0x0a, 0x73, 0xa2, 0x31, 0x2a, 0x37, 0x34, 0xee, 0xf5, 0xc8, 0x21, 0x76, 0x71, 0x5e, 0xe7, 0x14, - 0xf2, 0x51, 0x02, 0xf5, 0x29, 0x1f, 0x29, 0xed, 0x3b, 0x74, 0xe1, 0x9e, 0xed, 0x50, 0xe0, 0x9d, - 0xd4, 0x8e, 0xfa, 0x1e, 0x2c, 0xb2, 0x20, 0x0a, 0x86, 0xda, 0x15, 0x4c, 0xca, 0x8b, 0xf1, 0x2c, - 0x94, 0x6f, 0x86, 0xe7, 0x43, 0xe0, 0xb2, 0x84, 0xe4, 0x6d, 0x75, 0xde, 0x85, 0xa5, 0x62, 0xe1, - 0x82, 0x94, 0x3c, 0x27, 0xa7, 0xe4, 0x54, 0x9c, 0x12, 0xb1, 0x75, 0x21, 0x27, 0x87, 0xb0, 0x40, - 0xab, 0x4e, 0x8f, 0x38, 0x66, 0x37, 0x18, 0xa0, 0xfb, 0xcb, 0xd0, 0x08, 0xf0, 0xc4, 0xa3, 0x1b, - 0x0c, 0xd2, 0x55, 0x86, 0xc0, 0xa2, 0x12, 0x7d, 0xdb, 0x22, 0x4e, 0xc8, 0x24, 0x58, 0x56, 0x44, - 0x16, 0x2d, 0xb0, 0x01, 0xe1, 0xcb, 0x7a, 0xb6, 0xb8, 0x4a, 0x68, 0xed, 0xe7, 0x55, 0x98, 0xe5, - 0x08, 0xc1, 0x83, 0x01, 0xba, 0x98, 0x4b, 0x0a, 0x10, 0xa3, 0x58, 0x81, 0xed, 0x1f, 0xa5, 0x29, - 0x67, 0x94, 0xb8, 0xa7, 0x2a, 0xcb, 0x7b, 0xaa, 0x4c, 0x9f, 0x66, 0xf2, 0x7d, 0xca, 0xf8, 0x55, - 0xc9, 0xfb, 0x75, 0x11, 0x5a, 0x01, 0x4e, 0x02, 0x3b, 0xb6, 0x11, 0xee, 0xb9, 0xfe, 0x90, 0xaf, - 0xd3, 0x2a, 0x7a, 0x8e, 0x4f, 0x97, 0x3b, 0x8c, 0x97, 0x4c, 0x42, 0x6c, 0x96, 0xc9, 0x70, 0x69, - 0xc9, 0x67, 0x9c, 0x78, 0x32, 0x62, 0x8b, 0x6b, 0x99, 0xc9, 0xfa, 0x16, 0x04, 0x96, 0xeb, 0xe0, - 0x21, 0x07, 0x9b, 0x73, 0x44, 0x16, 0xf5, 0x7c, 0x18, 0x0c, 0xae, 0xf9, 0xee, 0x90, 0xcf, 0xf3, - 0x31, 0x89, 0x9e, 0xbb, 0x4e, 0x48, 0x9c, 0x10, 0x75, 0xd9, 0xb2, 0x5a, 0x64, 0x51, 0x5d, 0x4e, - 0xe2, 0x84, 0x33, 0xa7, 0xc7, 0x24, 0xc5, 0x4f, 0x40, 0x0e, 0x71, 0x16, 0x99, 0xd7, 0xe9, 0xbf, - 0x52, 0xe6, 0x16, 0xe4, 0xcc, 0x65, 0xa6, 0xb7, 0x56, 0x6e, 0x7a, 0x4b, 0x8f, 0x79, 0x16, 0xa5, - 0x63, 0x9e, 0x97, 0x61, 0xd6, 0xf5, 0xe8, 0xde, 0x3d, 0x68, 0xab, 0x38, 0x2c, 0x9e, 0x94, 0x0b, - 0xc5, 0xca, 0x36, 0xfb, 0xca, 0x06, 0x40, 0x2c, 0xab, 0xbe, 0x09, 0x0b, 0xee, 0xde, 0x9e, 0x6d, - 0x39, 0x64, 0x27, 0x0a, 0xf6, 0x71, 0x6d, 0x77, 0x0a, 0x41, 0xbd, 0xc4, 0xd5, 0xb7, 0xe5, 0xaf, - 0x7a, 0x56, 0x9c, 0xce, 0xe5, 0x46, 0xc8, 0x66, 0x55, 0x2c, 0x2e, 0xa7, 0xb1, 0xb8, 0x48, 0x3c, - 0xdc, 0x84, 0x0a, 0xc5, 0xf4, 0x0c, 0x06, 0x48, 0x64, 0x31, 0x2b, 0xa1, 0xd1, 0xdf, 0x27, 0xb8, - 0xeb, 0x68, 0x2f, 0xb1, 0xd5, 0x8e, 0xc8, 0xe3, 0xb3, 0xee, 0xe3, 0xf1, 0xac, 0xdb, 0x79, 0x0d, - 0xe6, 0x44, 0xa7, 0x0a, 0x06, 0xea, 0x69, 0x71, 0xa0, 0xd6, 0xc4, 0x31, 0xf9, 0x13, 0x05, 0x16, - 0x32, 0xae, 0x51, 0xe9, 0xd0, 0x0a, 0x6d, 0xc2, 0x2d, 0x30, 0x42, 0x55, 0x61, 0xc6, 0x24, 0x41, - 0x9f, 0x0f, 0x12, 0xfc, 0x9f, 0xf7, 0xa4, 0x9c, 0xac, 0x11, 0x35, 0x98, 0xb3, 0xb6, 0x7b, 0xd4, - 0x50, 0xcf, 0x8d, 0x1c, 0x33, 0x39, 0xc5, 0x11, 0x78, 0xb8, 0x4e, 0xdc, 0xee, 0xad, 0x19, 0xe6, - 0x80, 0xb0, 0x33, 0xbd, 0x0a, 0xf6, 0x49, 0x66, 0x6a, 0x26, 0xd4, 0x6e, 0x5b, 0x5e, 0xb0, 0xee, - 0x0e, 0x87, 0x34, 0xd5, 0x26, 0x09, 0xe9, 0xfe, 0x51, 0xc1, 0x80, 0x71, 0x8a, 0x46, 0xd3, 0x24, - 0x7b, 0x46, 0x64, 0x87, 0x54, 0x34, 0x2e, 0x0d, 0x02, 0x0b, 0xd7, 0xac, 0x81, 0xeb, 0x6c, 0x30, - 0x6d, 0xd6, 0x4f, 0x81, 0xa3, 0x7d, 0x54, 0x82, 0x16, 0x56, 0xbb, 0x75, 0x04, 0x96, 0x89, 0x4a, - 0xe7, 0xa1, 0x82, 0x03, 0x9d, 0x6f, 0x08, 0xf2, 0x8b, 0x7b, 0xf6, 0x59, 0x5d, 0x85, 0xaa, 0xeb, - 0xe1, 0x96, 0x8d, 0x95, 0xbf, 0x8e, 0x28, 0x28, 0x9f, 0xcf, 0xe8, 0x5c, 0x52, 0x7d, 0x0d, 0x80, - 0x9d, 0x5d, 0xde, 0x4c, 0x27, 0xdf, 0x49, 0x7a, 0x82, 0x34, 0x0d, 0x1c, 0xdb, 0xde, 0xd0, 0x61, - 0x9a, 0x1e, 0xcc, 0xc8, 0x4c, 0x75, 0x0d, 0x9a, 0xd8, 0xbd, 0xed, 0x78, 0xa7, 0x86, 0xf1, 0x9d, - 0xdc, 0x4a, 0x46, 0x43, 0xfb, 0x81, 0xc2, 0xc3, 0x42, 0xbf, 0xf6, 0x08, 0x8b, 0x65, 0xea, 0xae, - 0x32, 0xb5, 0xbb, 0x1d, 0xa8, 0x0d, 0x23, 0x69, 0x83, 0x98, 0xd0, 0x69, 0x98, 0xcb, 0x13, 0xc3, - 0xac, 0x7d, 0xa0, 0x40, 0xfb, 0x2d, 0xd7, 0x72, 0xf0, 0xc3, 0x15, 0xcf, 0xb3, 0xf9, 0xd9, 0xdc, - 0x89, 0x72, 0xf5, 0x12, 0xd4, 0x0d, 0xa6, 0xea, 0x84, 0x3c, 0x5d, 0x63, 0x36, 0x7a, 0xa9, 0x9c, - 0xb0, 0xf2, 0x2e, 0x8b, 0x2b, 0x6f, 0xed, 0x63, 0x05, 0x9a, 0xcc, 0xe1, 0xaf, 0x47, 0x56, 0x78, - 0xa2, 0x7e, 0xbc, 0x02, 0xb5, 0xc3, 0xc8, 0x0a, 0xa7, 0x44, 0x4d, 0x22, 0x9b, 0xcf, 0x7d, 0xb9, - 0x20, 0xf7, 0xda, 0xef, 0x14, 0x78, 0x2a, 0x1b, 0xa6, 0x2b, 0xfd, 0x3e, 0xf1, 0x1e, 0x04, 0xb4, - 0xa5, 0x9d, 0xc4, 0x4c, 0xc1, 0x4e, 0xc2, 0x27, 0x7d, 0x62, 0x1d, 0x11, 0xff, 0x4a, 0xc0, 0xcf, - 0x2c, 0x04, 0x4e, 0x61, 0xd7, 0x75, 0xf2, 0x3e, 0xe9, 0x3f, 0xfc, 0x5d, 0xff, 0x54, 0x81, 0x27, - 0x36, 0x93, 0x01, 0x74, 0xdb, 0x37, 0x9c, 0x60, 0x8f, 0xf8, 0xfe, 0x03, 0xe8, 0xf7, 0x9b, 0x30, - 0xef, 0x90, 0xbb, 0x69, 0xdb, 0x7c, 0x28, 0x4d, 0x52, 0x95, 0x15, 0xa6, 0xab, 0x29, 0xda, 0x9f, - 0x14, 0x68, 0x31, 0x3b, 0x37, 0xac, 0xfe, 0xc1, 0x03, 0x70, 0x6c, 0x0d, 0x9a, 0x07, 0xd8, 0x12, - 0xa5, 0xa6, 0x2c, 0x95, 0x19, 0x8d, 0x29, 0x5d, 0xfb, 0x44, 0x81, 0xc5, 0xf8, 0xa8, 0xfe, 0xc8, - 0x7a, 0x10, 0x60, 0xdb, 0x80, 0x05, 0x76, 0x24, 0x72, 0x12, 0xe7, 0xb2, 0x2a, 0x53, 0x7a, 0xf7, - 0x33, 0x05, 0x16, 0x98, 0xa5, 0xab, 0x4e, 0x48, 0xfc, 0x13, 0xf9, 0xf6, 0x06, 0x34, 0x88, 0x13, - 0xfa, 0x86, 0x33, 0x6d, 0xb5, 0x12, 0xc5, 0xa7, 0x2c, 0x58, 0x1f, 0x2b, 0xa0, 0xa2, 0xa9, 0x0d, - 0x2b, 0x18, 0x5a, 0x41, 0xf0, 0x00, 0xc2, 0x3f, 0x5d, 0xc7, 0xfe, 0xa5, 0xc0, 0x69, 0xc1, 0x4a, - 0x37, 0x0a, 0x1f, 0x96, 0xae, 0xa9, 0xaf, 0x42, 0x9d, 0xce, 0xa1, 0xe2, 0x61, 0xf1, 0x24, 0xe3, - 0xa9, 0x30, 0x5d, 0x9d, 0x21, 0xd1, 0x23, 0x7d, 0xd7, 0x31, 0x59, 0x29, 0x9b, 0xd7, 0x25, 0x1e, - 0x1d, 0xea, 0x1d, 0xc1, 0xcc, 0xba, 0xe1, 0xf4, 0x89, 0xfd, 0x48, 0xb8, 0xaf, 0x7d, 0xa8, 0x40, - 0x93, 0x89, 0x3c, 0x3c, 0xee, 0x68, 0x3f, 0x8d, 0x81, 0xf6, 0xd0, 0x45, 0x9a, 0x42, 0x61, 0x49, - 0xb0, 0x22, 0xae, 0x05, 0xbf, 0x78, 0x18, 0xbc, 0x01, 0x8d, 0xfe, 0xbe, 0xe1, 0x0c, 0xa6, 0x06, - 0x82, 0x28, 0xae, 0xed, 0xc3, 0xe3, 0xdb, 0xfe, 0xc0, 0x70, 0xac, 0x6f, 0xa1, 0xc5, 0x75, 0xf6, - 0x09, 0x5d, 0xfb, 0xff, 0x4c, 0x97, 0x73, 0x17, 0x31, 0x27, 0x0b, 0xe2, 0x01, 0x2c, 0xb2, 0xe3, - 0x6e, 0x61, 0x5d, 0x43, 0xf7, 0xc8, 0x86, 0xc9, 0xb6, 0xbd, 0x0a, 0x3b, 0xb8, 0xe7, 0xa4, 0x7c, - 0xed, 0xc1, 0x2f, 0xd2, 0xd3, 0x6b, 0x8f, 0x73, 0x00, 0x86, 0x69, 0xbe, 0xe3, 0xfa, 0xa6, 0xe5, - 0xc4, 0x8b, 0x52, 0x81, 0xa3, 0xbd, 0x05, 0x73, 0x74, 0x97, 0x7e, 0x5b, 0x38, 0xb8, 0x9e, 0x78, - 0xb4, 0x2e, 0x1e, 0x7a, 0x97, 0xe4, 0x43, 0x6f, 0x6d, 0x07, 0xce, 0xe4, 0x3a, 0x8e, 0x01, 0xfa, - 0x0a, 0x3b, 0x8f, 0x8f, 0x1b, 0xe1, 0x10, 0x88, 0xcf, 0x7e, 0xc4, 0xf6, 0x75, 0x49, 0x50, 0x3b, - 0x82, 0xb3, 0x39, 0x8b, 0x57, 0x3c, 0xcf, 0x77, 0x8f, 0x78, 0xe8, 0xef, 0xd7, 0xb2, 0xbc, 0x7e, - 0x2b, 0x65, 0xd6, 0x6f, 0x85, 0xed, 0x4a, 0x4b, 0xcb, 0xff, 0x52, 0xbb, 0x3f, 0x56, 0x60, 0x81, - 0x37, 0x6c, 0x9a, 0xbc, 0xa9, 0xe7, 0xa0, 0xca, 0xee, 0xf1, 0x78, 0x23, 0x8b, 0x49, 0x23, 0xf1, - 0x3d, 0xa3, 0xce, 0x05, 0xf2, 0xf8, 0x2a, 0x15, 0x8d, 0x83, 0x4b, 0x09, 0x5c, 0x27, 0xde, 0xae, - 0x71, 0x21, 0xed, 0x66, 0x0c, 0xc7, 0x0d, 0x62, 0x93, 0xcf, 0xea, 0xbf, 0xb6, 0x05, 0x4d, 0xbc, - 0x30, 0x4c, 0xfd, 0xbb, 0x6f, 0x53, 0x37, 0xa0, 0x85, 0xa6, 0x3e, 0x97, 0x7e, 0x25, 0xd8, 0xa5, - 0xbe, 0x8b, 0x83, 0xfb, 0xbe, 0x2d, 0x5e, 0x82, 0x53, 0x71, 0x2c, 0xd9, 0xa3, 0x1a, 0x66, 0x6f, - 0xcc, 0x9d, 0x06, 0x5d, 0xd7, 0x2c, 0xad, 0xbb, 0xce, 0x11, 0xf1, 0x03, 0xe9, 0x21, 0x0e, 0x53, - 0x91, 0xc6, 0x23, 0xa7, 0xd4, 0x15, 0x50, 0xfb, 0x82, 0x06, 0x3f, 0x44, 0x2a, 0xe1, 0x21, 0x52, - 0xc1, 0x17, 0xf5, 0xcb, 0x70, 0x26, 0x42, 0xab, 0x77, 0x1c, 0x9f, 0x18, 0x26, 0x9e, 0x9a, 0x08, - 0x65, 0xa8, 0xf8, 0xa3, 0xf6, 0x3e, 0x74, 0xc4, 0x7e, 0xf5, 0x48, 0xb8, 0xe3, 0x5b, 0x47, 0x42, - 0xdf, 0xf8, 0x49, 0xa8, 0x22, 0x9d, 0x84, 0xa6, 0x27, 0xa7, 0x25, 0xe9, 0xe4, 0xf4, 0x29, 0xa8, - 0x5b, 0x01, 0x37, 0x80, 0xed, 0xd6, 0xf4, 0x94, 0xa1, 0x19, 0xb0, 0xc8, 0xb2, 0xc9, 0x6f, 0x08, - 0xb0, 0x89, 0x0e, 0xd4, 0x18, 0x14, 0x93, 0x46, 0x12, 0x7a, 0xec, 0x53, 0x95, 0xb1, 0x37, 0x44, - 0x5a, 0x0f, 0x16, 0xf9, 0x35, 0xe2, 0x8e, 0x31, 0xb0, 0x1c, 0x56, 0x5d, 0xcf, 0x01, 0x78, 0xc6, - 0x20, 0x7e, 0xa4, 0xc0, 0xee, 0x43, 0x04, 0x0e, 0xfd, 0x1e, 0xec, 0xbb, 0x77, 0xf9, 0xf7, 0x12, - 0xfb, 0x9e, 0x72, 0xb4, 0xbf, 0x55, 0xa0, 0xde, 0xb3, 0x06, 0x8e, 0x61, 0xeb, 0xe4, 0x50, 0x7d, - 0x01, 0xaa, 0x6c, 0xed, 0xcd, 0xc1, 0x12, 0x9f, 0x07, 0x32, 0x09, 0xb6, 0x69, 0xd0, 0xc9, 0xe1, - 0xf5, 0xc7, 0x74, 0x2e, 0xa7, 0x5e, 0x8d, 0x2f, 0x42, 0xb7, 0xd8, 0x99, 0x05, 0x9f, 0x48, 0xce, - 0x16, 0x28, 0x72, 0x09, 0xa6, 0x2f, 0x6b, 0xd1, 0x86, 0xfb, 0xb8, 0x26, 0xe0, 0x23, 0x5b, 0x6e, - 0x98, 0x2d, 0x17, 0x78, 0xc3, 0x4c, 0x8e, 0x6a, 0x18, 0xb8, 0xdb, 0xe7, 0xd3, 0xa1, 0xac, 0xc1, - 0x0e, 0x02, 0xb8, 0x06, 0x93, 0xa3, 0x1a, 0xfb, 0x91, 0x33, 0xb8, 0xe3, 0xf1, 0x43, 0x22, 0x59, - 0xe3, 0x3a, 0x7e, 0xe2, 0x1a, 0x4c, 0x8e, 0x6a, 0xf8, 0x58, 0x3b, 0xf1, 0xb0, 0x3a, 0xab, 0xc1, - 0xca, 0x2a, 0xd7, 0x60, 0x72, 0xea, 0x2d, 0x68, 0x0d, 0x48, 0xa8, 0xbb, 0xee, 0x70, 0x6d, 0xb4, - 0xc9, 0xcf, 0xd3, 0xd9, 0x5b, 0xac, 0x65, 0x49, 0x77, 0x33, 0x23, 0xc4, 0xac, 0xe4, 0x74, 0x55, - 0x1f, 0xce, 0xba, 0x0e, 0x65, 0xed, 0x18, 0x7e, 0x68, 0xf5, 0x2d, 0xcf, 0x70, 0xc2, 0x75, 0xd7, - 0x71, 0xb0, 0x9e, 0xeb, 0xe4, 0x90, 0xbf, 0xd0, 0xba, 0x28, 0x19, 0xdf, 0x9e, 0xa4, 0x71, 0xfd, - 0x31, 0x7d, 0xb2, 0x49, 0xf5, 0xdb, 0xb0, 0x9c, 0x13, 0xd8, 0xb0, 0x82, 0xbe, 0xd8, 0x2c, 0x7b, - 0xd0, 0x75, 0x69, 0x72, 0xb3, 0x19, 0xa5, 0xeb, 0x8f, 0xe9, 0xc7, 0x1a, 0xe6, 0x01, 0xbc, 0xed, - 0x1e, 0x10, 0x67, 0x6d, 0x44, 0x65, 0xb7, 0x36, 0xf0, 0x58, 0xbe, 0x20, 0x80, 0x92, 0x50, 0x1a, - 0x40, 0x89, 0xbd, 0x56, 0x87, 0x59, 0xcf, 0x18, 0xd9, 0xae, 0x61, 0x6a, 0xdf, 0x9f, 0x01, 0x88, - 0x33, 0x17, 0xe0, 0x72, 0x4d, 0xc2, 0x7a, 0xbb, 0x10, 0xeb, 0x9e, 0x3d, 0x12, 0xd0, 0xbe, 0x59, - 0x8c, 0xf6, 0xa7, 0x27, 0xa1, 0x9d, 0x59, 0xc8, 0xe0, 0x7d, 0x35, 0x83, 0xf7, 0x76, 0x21, 0xde, - 0x79, 0xe3, 0x1c, 0xf1, 0xab, 0x19, 0xc4, 0xb7, 0x0b, 0x11, 0xcf, 0x75, 0x38, 0xe6, 0x57, 0x33, - 0x98, 0x6f, 0x17, 0x62, 0x9e, 0xeb, 0x70, 0xd4, 0xaf, 0x66, 0x50, 0xdf, 0x2e, 0x44, 0x3d, 0xd7, - 0xe1, 0xb8, 0xdf, 0x19, 0x8b, 0x7b, 0xed, 0x18, 0xdc, 0x33, 0x3b, 0x79, 0xe4, 0xef, 0x14, 0x00, - 0xa1, 0x56, 0x6c, 0x31, 0x03, 0x84, 0xd4, 0xe2, 0x58, 0x28, 0x7c, 0xb7, 0x0c, 0x4d, 0x4c, 0x13, - 0x9b, 0x64, 0x9c, 0x3d, 0x37, 0xff, 0xa2, 0x43, 0x29, 0x78, 0xd1, 0xa1, 0x3e, 0x0f, 0x8b, 0x8c, - 0x41, 0x84, 0xcb, 0x0f, 0x36, 0x6f, 0xe5, 0x3f, 0xe0, 0xb5, 0x4e, 0x14, 0x84, 0xee, 0x70, 0xc3, - 0x08, 0x8d, 0x78, 0x09, 0x9b, 0x72, 0xc4, 0x4b, 0xb7, 0x99, 0xdc, 0x43, 0x46, 0x9f, 0xf9, 0x5c, - 0xe1, 0x93, 0x13, 0x52, 0x54, 0x23, 0xb4, 0x86, 0xc4, 0x8d, 0x42, 0x7e, 0x7f, 0x16, 0x93, 0x74, - 0x7a, 0x1a, 0x12, 0xd3, 0x32, 0xf0, 0xaa, 0x8a, 0xbf, 0xcb, 0x48, 0x18, 0x38, 0x4d, 0xa4, 0x57, - 0x6f, 0xfc, 0xa1, 0x61, 0xca, 0x99, 0xe2, 0x9a, 0x0c, 0xdf, 0xac, 0x5a, 0xa1, 0x15, 0x5f, 0x52, - 0xb1, 0xbb, 0x32, 0x89, 0x47, 0xa7, 0xf5, 0xdd, 0x28, 0x18, 0xdd, 0xb4, 0x1c, 0x31, 0x3c, 0x0d, - 0x36, 0xad, 0xe7, 0xbf, 0x68, 0xbf, 0x57, 0xe0, 0x94, 0x50, 0x0b, 0xba, 0x24, 0x34, 0x30, 0x2e, - 0xd2, 0xab, 0x23, 0xe5, 0xf8, 0x57, 0x47, 0x1b, 0xb0, 0x30, 0x90, 0xf7, 0x6e, 0x53, 0x6c, 0xc1, - 0xb2, 0x2a, 0xd2, 0xf3, 0xa8, 0xf2, 0x54, 0xcf, 0xa3, 0xb4, 0xbf, 0x2a, 0xb0, 0x90, 0x99, 0x1b, - 0x27, 0x4e, 0xfa, 0x2f, 0x03, 0x58, 0x09, 0xec, 0x32, 0x47, 0xf3, 0x32, 0x1e, 0x75, 0x41, 0xb0, - 0xe8, 0xbe, 0xae, 0x7c, 0xb2, 0xfb, 0xba, 0x37, 0xa0, 0xe1, 0xa5, 0x81, 0xce, 0xec, 0x20, 0x0b, - 0x52, 0xa0, 0x8b, 0xe2, 0xda, 0x0f, 0x15, 0x58, 0xcc, 0x95, 0x45, 0xbc, 0x39, 0xa3, 0x03, 0x2c, - 0xb9, 0x39, 0xa3, 0x84, 0x80, 0xdc, 0x52, 0x16, 0xb9, 0xb6, 0x75, 0x24, 0x3e, 0xc0, 0xe4, 0xe4, - 0x18, 0xd4, 0xcc, 0x8c, 0x45, 0xcd, 0xdf, 0x15, 0x58, 0x2a, 0x5e, 0x57, 0x3c, 0x8a, 0xb1, 0xff, - 0x50, 0x81, 0xf6, 0xb8, 0x79, 0xe5, 0x0b, 0x4b, 0x41, 0x8a, 0xfb, 0x64, 0x69, 0xf6, 0x28, 0xc6, - 0xfe, 0x54, 0x0c, 0x7b, 0x61, 0x42, 0xd6, 0x7e, 0x54, 0x8a, 0x7d, 0x4f, 0x16, 0x99, 0x8f, 0xa0, - 0xef, 0xea, 0x45, 0x68, 0x31, 0x17, 0x84, 0x27, 0x1b, 0xec, 0x3a, 0x28, 0xc7, 0xd7, 0xbe, 0x19, - 0xc7, 0x49, 0x58, 0x84, 0x7c, 0x5e, 0xd8, 0xd4, 0x7e, 0x91, 0x60, 0x2d, 0x59, 0xa2, 0x3f, 0x94, - 0xf1, 0x4e, 0xd1, 0x22, 0x2c, 0xab, 0x04, 0xb4, 0x24, 0xdb, 0x85, 0xff, 0x75, 0xb4, 0x24, 0x71, - 0x12, 0x96, 0x92, 0xda, 0x07, 0x0a, 0x3c, 0x31, 0x76, 0x6b, 0x34, 0x31, 0x62, 0xc2, 0x22, 0xaa, - 0x24, 0x2f, 0xa2, 0x32, 0x2e, 0x95, 0x4f, 0x36, 0xf8, 0x7f, 0xa9, 0xc0, 0x93, 0x13, 0x16, 0xad, - 0x99, 0x4c, 0x29, 0xd3, 0x66, 0x2a, 0xd3, 0xa9, 0x92, 0x74, 0x1b, 0x76, 0x6c, 0x9c, 0xd3, 0xe1, - 0x53, 0x16, 0x87, 0x8f, 0xf6, 0x1b, 0x05, 0x9e, 0x99, 0x62, 0xf3, 0xf7, 0xc5, 0x74, 0x7a, 0xec, - 0xdb, 0x32, 0xed, 0xb7, 0x0a, 0x9c, 0x9f, 0x6e, 0xf3, 0xf8, 0xb0, 0xf5, 0xfc, 0xd7, 0x22, 0x5e, - 0xb3, 0x3b, 0x51, 0x21, 0x4d, 0x8a, 0x54, 0xe5, 0x44, 0x1c, 0x97, 0x32, 0x38, 0xfe, 0x4c, 0x68, - 0xc5, 0x5f, 0x30, 0xc4, 0x67, 0xa5, 0xe9, 0x2b, 0x3d, 0x81, 0xa5, 0x75, 0x05, 0x38, 0xe7, 0x77, - 0x4c, 0x63, 0xca, 0xb5, 0x50, 0x96, 0x4b, 0x72, 0x59, 0xbe, 0x02, 0xf3, 0x1b, 0xc4, 0xee, 0x06, - 0x83, 0xfc, 0x93, 0xe7, 0x69, 0x0f, 0xb4, 0x5a, 0xd0, 0x14, 0x4d, 0x04, 0x9e, 0xf6, 0x0e, 0x3c, - 0xd1, 0x23, 0xe1, 0x15, 0xcf, 0x5b, 0x33, 0xfa, 0x07, 0x34, 0xd4, 0x8e, 0xd9, 0xc3, 0x97, 0x6e, - 0x93, 0xde, 0x54, 0xd3, 0x9d, 0x49, 0x90, 0x2a, 0xf0, 0x67, 0x5f, 0x12, 0x4f, 0xbb, 0x05, 0x9d, - 0x71, 0x86, 0xef, 0xe7, 0x45, 0xb1, 0xf6, 0xc7, 0x12, 0xcc, 0x5d, 0xbd, 0x17, 0xb2, 0xc7, 0x9d, - 0x3d, 0x82, 0xbf, 0xad, 0x09, 0xf0, 0xde, 0x22, 0xad, 0x50, 0x31, 0x9d, 0xdd, 0x5c, 0x95, 0xf2, - 0x9b, 0xab, 0x75, 0x00, 0x12, 0x5b, 0x0b, 0xf8, 0x0d, 0xf9, 0x33, 0x3c, 0xf5, 0x62, 0x33, 0x29, - 0xc1, 0x9f, 0xf4, 0x09, 0x6a, 0xb4, 0x06, 0x77, 0x8d, 0x7b, 0xdd, 0x60, 0x20, 0xfc, 0x4e, 0x92, - 0x5d, 0x94, 0xe7, 0xf8, 0x34, 0x66, 0x89, 0xe6, 0xad, 0x68, 0xc8, 0x6b, 0xb5, 0xc4, 0xcb, 0x3c, - 0x4a, 0xac, 0x66, 0x1f, 0x25, 0x76, 0xb6, 0x61, 0x21, 0xd3, 0x9d, 0x82, 0xc7, 0x78, 0xe7, 0xe5, - 0x57, 0xb3, 0xad, 0xac, 0x53, 0xe2, 0xf3, 0xbc, 0x3f, 0x94, 0xa0, 0x9e, 0x7c, 0x50, 0x0d, 0x38, - 0xe3, 0x13, 0x03, 0x7f, 0x0c, 0x89, 0x4c, 0x1a, 0x2c, 0xe1, 0xfd, 0xf8, 0x97, 0xb2, 0x96, 0x56, - 0xf4, 0x22, 0x69, 0x16, 0xa6, 0x62, 0x4b, 0x53, 0x3c, 0xb7, 0x5d, 0x01, 0x75, 0x18, 0x0c, 0xae, - 0x59, 0x7e, 0x10, 0x76, 0x5d, 0xd3, 0xda, 0x1b, 0x09, 0xa7, 0xce, 0x05, 0x5f, 0x72, 0x2f, 0x1a, - 0x67, 0xc6, 0xbe, 0x68, 0x4c, 0x7e, 0xdb, 0xd6, 0x79, 0x17, 0x3a, 0xe3, 0xbb, 0x5e, 0x10, 0xd2, - 0xff, 0x93, 0x43, 0x1a, 0xdf, 0xd9, 0xdd, 0x20, 0x23, 0xf6, 0x4b, 0x4a, 0x21, 0xa2, 0x7b, 0x50, - 0x8b, 0xd9, 0x78, 0x74, 0x30, 0xf2, 0xc8, 0x8d, 0xc4, 0x58, 0x4c, 0xca, 0x0f, 0x26, 0xeb, 0x5c, - 0x9f, 0xc2, 0xc9, 0x36, 0x42, 0x12, 0x84, 0x02, 0x9c, 0x98, 0xe3, 0x39, 0xbe, 0xf6, 0x36, 0xa8, - 0x74, 0x20, 0xb9, 0x4e, 0x40, 0x84, 0xb3, 0xe9, 0x65, 0x68, 0xac, 0x47, 0xbe, 0x4f, 0x9c, 0x70, - 0xc7, 0x18, 0xc4, 0xbf, 0xdd, 0x12, 0x59, 0x14, 0x62, 0xbd, 0xf4, 0x74, 0x9a, 0x9d, 0x68, 0x08, - 0x9c, 0xb5, 0xa7, 0xbf, 0x71, 0x76, 0xdb, 0x23, 0xce, 0x7b, 0x5b, 0xdd, 0xec, 0x8f, 0xc4, 0x5f, - 0xc7, 0xbf, 0xbb, 0x55, 0x64, 0xbd, 0xf4, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6b, 0x54, 0x95, - 0x23, 0x6a, 0x3e, 0x00, 0x00, +var fileDescriptor_ws_2c814dd0dc73fa33 = []byte{ + // 3680 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5b, 0xcf, 0x6f, 0xdc, 0xd6, + 0xf1, 0x0f, 0x77, 0xb5, 0x92, 0x76, 0x56, 0x3f, 0x69, 0x5b, 0xd9, 0x6c, 0x62, 0x47, 0x60, 0xf2, + 0x35, 0x1c, 0x7f, 0x63, 0x39, 0x51, 0x9a, 0x34, 0x48, 0x82, 0x36, 0x96, 0x64, 0xcb, 0x8a, 0xbd, + 0x96, 0xca, 0xb5, 0x13, 0xa4, 0x3d, 0x04, 0xd4, 0xf2, 0x69, 0xc5, 0x88, 0x4b, 0x52, 0x24, 0x57, + 0xb6, 0xd0, 0x53, 0x81, 0xa2, 0x28, 0xda, 0x43, 0xda, 0x20, 0x0d, 0x7a, 0x69, 0x8f, 0x3d, 0x14, + 0x05, 0x7a, 0x29, 0xd0, 0x9e, 0xfa, 0x2f, 0x14, 0xe8, 0xa9, 0x40, 0x80, 0xa6, 0x87, 0x1e, 0x0a, + 0xb4, 0xbd, 0xf6, 0xda, 0xe2, 0xcd, 0x3c, 0x92, 0xef, 0x91, 0xdc, 0xd5, 0x3a, 0x49, 0x1d, 0xc3, + 0xbd, 0x08, 0x7a, 0xc3, 0x99, 0x79, 0x6f, 0x66, 0x3e, 0x6f, 0xe6, 0xfd, 0x5a, 0x98, 0x8b, 0xec, + 0x83, 0xbb, 0xd1, 0xe5, 0xbb, 0xd1, 0x4a, 0x10, 0xfa, 0xb1, 0xaf, 0xd7, 0xb0, 0xdd, 0xba, 0xb4, + 0x1d, 0x30, 0xef, 0xd2, 0x56, 0xfb, 0x52, 0x87, 0x85, 0x47, 0x2c, 0xbc, 0x1c, 0x1c, 0xf4, 0x2e, + 0x23, 0xc3, 0x65, 0xc1, 0x1f, 0x5a, 0x41, 0xc0, 0x42, 0x21, 0x65, 0x7c, 0x3a, 0x01, 0xf5, 0xcd, + 0xd0, 0x1f, 0x04, 0x5b, 0xde, 0x9e, 0xaf, 0x37, 0x61, 0xaa, 0x87, 0x8d, 0x8d, 0xa6, 0xb6, 0xac, + 0x5d, 0xa8, 0x9b, 0x49, 0x53, 0x7f, 0x0a, 0xea, 0xf8, 0xef, 0x2d, 0xab, 0xcf, 0x9a, 0x15, 0xfc, + 0x96, 0x11, 0x74, 0x03, 0x66, 0x3c, 0x3f, 0x76, 0xf6, 0x9c, 0xae, 0x15, 0x3b, 0xbe, 0xd7, 0xac, + 0x22, 0x83, 0x42, 0xe3, 0x3c, 0x8e, 0x17, 0x87, 0xbe, 0x3d, 0xe8, 0x22, 0xcf, 0x04, 0xf1, 0xc8, + 0x34, 0xde, 0xff, 0x9e, 0xd5, 0x65, 0x77, 0xcc, 0x9b, 0xcd, 0x1a, 0xf5, 0x2f, 0x9a, 0xfa, 0x32, + 0x34, 0xfc, 0xbb, 0x1e, 0x0b, 0xef, 0x44, 0x2c, 0xdc, 0xda, 0x68, 0x4e, 0xe2, 0x57, 0x99, 0xa4, + 0x9f, 0x03, 0xe8, 0x86, 0xcc, 0x8a, 0xd9, 0x6d, 0xa7, 0xcf, 0x9a, 0x53, 0xcb, 0xda, 0x85, 0xaa, + 0x29, 0x51, 0xb8, 0x86, 0x3e, 0xeb, 0xef, 0xb2, 0x70, 0xdd, 0x1f, 0x78, 0x71, 0x73, 0x7a, 0x59, + 0xbb, 0x30, 0x6b, 0xca, 0x24, 0x7d, 0x0e, 0x2a, 0xec, 0x5e, 0xb3, 0x8e, 0xaa, 0x2b, 0xec, 0x9e, + 0xbe, 0x04, 0x93, 0x51, 0x6c, 0xc5, 0x83, 0xa8, 0x09, 0xcb, 0xda, 0x85, 0x9a, 0x29, 0x5a, 0xfa, + 0xb3, 0x30, 0x8b, 0x7a, 0xfd, 0x64, 0x34, 0x0d, 0x14, 0x51, 0x89, 0xa9, 0xc7, 0x6e, 0x1f, 0x07, + 0xac, 0x39, 0x83, 0x0a, 0x32, 0x82, 0x7e, 0x11, 0x16, 0x3c, 0xc6, 0xec, 0xb7, 0x59, 0x98, 0x79, + 0x6d, 0x16, 0x99, 0x0a, 0x74, 0xfd, 0x3c, 0xcc, 0xb9, 0xbe, 0x7f, 0xd0, 0xc6, 0xa1, 0xf2, 0x38, + 0x35, 0xe7, 0x90, 0x33, 0x47, 0xd5, 0x9f, 0x87, 0x45, 0x2b, 0x08, 0xdc, 0x63, 0x22, 0x5d, 0x0b, + 0x1d, 0xe6, 0xd9, 0xcd, 0x79, 0x64, 0x2d, 0x7e, 0xd0, 0x5f, 0x81, 0x25, 0x39, 0x3e, 0x77, 0x02, + 0x3b, 0xf1, 0xdd, 0x02, 0xfa, 0x6e, 0xc8, 0x57, 0x7d, 0x05, 0x74, 0xe5, 0x0b, 0xb9, 0x60, 0x11, + 0x5d, 0x50, 0xf2, 0xc5, 0xf8, 0xa8, 0x0a, 0xf3, 0x29, 0xc2, 0xae, 0xf9, 0x61, 0x87, 0xc5, 0x0f, + 0x31, 0xce, 0x08, 0x03, 0x93, 0x29, 0x06, 0x36, 0x4b, 0xe2, 0xc4, 0xb1, 0xd5, 0x58, 0x7d, 0x72, + 0xa5, 0xe7, 0xfb, 0x3d, 0x97, 0xd1, 0x44, 0xda, 0x1d, 0xec, 0xad, 0x6c, 0x79, 0xf1, 0x4b, 0xab, + 0x6f, 0x5b, 0xee, 0x80, 0x95, 0x04, 0x71, 0xbd, 0x10, 0xc4, 0xe9, 0x93, 0xd5, 0xe4, 0x23, 0xbc, + 0x55, 0x16, 0xe1, 0xfa, 0xc9, 0x7a, 0x8a, 0x52, 0xc6, 0xbf, 0x2b, 0x70, 0x0a, 0xc3, 0x22, 0xa8, + 0x03, 0xd7, 0x3d, 0x21, 0x05, 0x2c, 0xc1, 0xe4, 0x80, 0x82, 0x4d, 0x71, 0x11, 0x2d, 0x1e, 0xb2, + 0xd0, 0x77, 0xd9, 0x4d, 0x76, 0xc4, 0x5c, 0x8c, 0x48, 0xcd, 0xcc, 0x08, 0x7a, 0x0b, 0xa6, 0xdf, + 0xf7, 0x1d, 0x0f, 0x81, 0x35, 0x81, 0xc0, 0x4a, 0xdb, 0xfc, 0x9b, 0xe7, 0x74, 0x0f, 0x3c, 0x1e, + 0x6b, 0x8a, 0x43, 0xda, 0x96, 0x43, 0x34, 0xa9, 0x86, 0xe8, 0x3c, 0xcc, 0x59, 0x41, 0xd0, 0xb6, + 0xbc, 0x1e, 0x0b, 0xa9, 0xd3, 0x29, 0x9a, 0x0e, 0x2a, 0x95, 0x27, 0x04, 0xde, 0x53, 0xc7, 0x1f, + 0x84, 0x5d, 0x86, 0xde, 0xae, 0x99, 0x12, 0x85, 0xeb, 0xf1, 0x03, 0x16, 0x4a, 0xf3, 0x98, 0xa6, + 0x7e, 0x8e, 0x2a, 0x20, 0x01, 0x29, 0x24, 0x78, 0x22, 0x19, 0xc4, 0xec, 0xaa, 0x67, 0xa3, 0x51, + 0x0d, 0x34, 0x4a, 0x26, 0xf1, 0x04, 0xe1, 0x78, 0x47, 0x4e, 0x9c, 0xa6, 0xab, 0x19, 0x4a, 0x10, + 0x0a, 0xd1, 0xf8, 0x9e, 0x06, 0x73, 0x3b, 0x83, 0x5d, 0xd7, 0xe9, 0x22, 0x81, 0x3b, 0x3f, 0x73, + 0xb1, 0xa6, 0xb8, 0x58, 0x76, 0x54, 0x65, 0xb8, 0xa3, 0xaa, 0xaa, 0xa3, 0x96, 0x60, 0xb2, 0xc7, + 0x3c, 0x9b, 0x85, 0xe8, 0xf8, 0x9a, 0x29, 0x5a, 0xc2, 0xa0, 0x5a, 0x62, 0x90, 0xf1, 0xe7, 0x0a, + 0x4c, 0x3f, 0xe0, 0x21, 0x2c, 0x43, 0x23, 0xd8, 0xf7, 0x3d, 0x76, 0x6b, 0xc0, 0xc1, 0x27, 0xc6, + 0x22, 0x93, 0xf4, 0xd3, 0x50, 0xdb, 0x75, 0xc2, 0x78, 0x1f, 0xa3, 0x3f, 0x6b, 0x52, 0x83, 0x53, + 0x59, 0xdf, 0x72, 0x28, 0xe4, 0x75, 0x93, 0x1a, 0xc2, 0xa0, 0xe9, 0x34, 0x42, 0x6a, 0x29, 0xa8, + 0x17, 0x4a, 0x41, 0x11, 0x41, 0x50, 0x8a, 0xa0, 0x8b, 0xb0, 0xd0, 0x73, 0xfd, 0x5d, 0xcb, 0x35, + 0x59, 0xf7, 0xa8, 0x1d, 0xf5, 0xb6, 0x83, 0x18, 0xc3, 0x5d, 0x33, 0x0b, 0x74, 0xee, 0x1f, 0x1c, + 0xa2, 0x6d, 0x1d, 0x63, 0x22, 0xaf, 0x9a, 0x69, 0xdb, 0xf8, 0xa7, 0x06, 0x40, 0xd3, 0x0e, 0x5d, + 0x9c, 0xab, 0x65, 0x5a, 0xb1, 0x96, 0x2d, 0xc1, 0x64, 0xc8, 0xfa, 0x56, 0x78, 0x90, 0x4c, 0x35, + 0x6a, 0xe5, 0x0c, 0xab, 0x16, 0x0c, 0xbb, 0x0c, 0xb0, 0x87, 0xfd, 0x70, 0x3d, 0xe8, 0xf2, 0xc6, + 0xea, 0xfc, 0x0a, 0x16, 0xfe, 0x95, 0x24, 0xc2, 0xa6, 0xc4, 0xc2, 0xe7, 0xae, 0x65, 0xdb, 0x62, + 0x8a, 0xd4, 0x68, 0xee, 0xa6, 0x84, 0x92, 0x19, 0x32, 0x39, 0x62, 0x86, 0x4c, 0xa5, 0x80, 0xfa, + 0x8b, 0x06, 0xf5, 0x35, 0xd7, 0xea, 0x1e, 0x8c, 0x69, 0xae, 0x6a, 0x56, 0xa5, 0x60, 0xd6, 0xeb, + 0x30, 0xbb, 0xcb, 0xd5, 0x25, 0x26, 0xa0, 0xe5, 0x8d, 0xd5, 0x33, 0xc2, 0x32, 0x75, 0x12, 0x99, + 0x2a, 0xaf, 0x6a, 0xe2, 0xc4, 0xc9, 0x26, 0xd6, 0x46, 0x98, 0x98, 0xd6, 0x05, 0x9e, 0x3e, 0x67, + 0x30, 0x7d, 0x9a, 0xec, 0x70, 0xc0, 0xa2, 0x58, 0x7f, 0x11, 0xa6, 0x07, 0xc9, 0xf0, 0xb4, 0x51, + 0xc3, 0x4b, 0xd9, 0xf4, 0x15, 0x51, 0xeb, 0x50, 0xa6, 0x82, 0x32, 0x0b, 0x42, 0x26, 0x2d, 0x98, + 0x66, 0xc6, 0xc2, 0x2b, 0xdb, 0xbe, 0xe5, 0xd9, 0x2e, 0x33, 0x59, 0x34, 0x70, 0x63, 0x91, 0x6b, + 0x15, 0x1a, 0x21, 0xe7, 0xb0, 0x1d, 0xf5, 0x44, 0xdd, 0x13, 0x2d, 0xee, 0x05, 0xe2, 0xe3, 0x9f, + 0xc8, 0xc4, 0x8c, 0xc0, 0x27, 0x70, 0xc8, 0x0e, 0xd1, 0xfb, 0x93, 0xe8, 0xfd, 0xa4, 0x99, 0xf5, + 0x29, 0xbc, 0x43, 0x41, 0x56, 0x68, 0x3c, 0x7c, 0xd4, 0x46, 0x05, 0xd3, 0x14, 0xbe, 0x8c, 0x52, + 0x58, 0x57, 0xa9, 0x89, 0x19, 0x0a, 0x89, 0xb9, 0x90, 0x3e, 0x1b, 0x65, 0xe9, 0xf3, 0x93, 0x2a, + 0xcc, 0xd2, 0xa4, 0x4a, 0x42, 0x70, 0x8e, 0xa3, 0xdf, 0xef, 0x2b, 0x38, 0x93, 0x28, 0xdc, 0x16, + 0xde, 0xba, 0xa5, 0xa6, 0x31, 0x85, 0xc6, 0xc1, 0xca, 0xdb, 0xd7, 0x94, 0x74, 0x26, 0x93, 0x92, + 0x5e, 0x36, 0xe5, 0xb4, 0x26, 0x51, 0x78, 0x22, 0x88, 0x7d, 0x05, 0x4b, 0x69, 0x9b, 0xcb, 0xc6, + 0x7e, 0xda, 0x3f, 0xa1, 0x49, 0xa2, 0xf0, 0x28, 0xc5, 0x7e, 0xd2, 0x37, 0xb9, 0x3a, 0x23, 0x90, + 0x66, 0xd1, 0x2f, 0x95, 0xb3, 0xb4, 0x5d, 0xc0, 0x46, 0x7d, 0x24, 0x36, 0x40, 0xc1, 0x86, 0x3a, + 0xfd, 0x1a, 0x85, 0xe9, 0xf7, 0x2c, 0xcc, 0x92, 0x9e, 0x5c, 0x39, 0x53, 0x88, 0x2a, 0xc2, 0x66, + 0xf3, 0x08, 0x53, 0x31, 0x32, 0x37, 0x04, 0x23, 0xf3, 0xe9, 0xfc, 0xfa, 0x87, 0x06, 0x8f, 0xef, + 0x0c, 0x5c, 0xb7, 0xcd, 0xa2, 0xc8, 0xea, 0xb1, 0xb5, 0xe3, 0x0e, 0x3b, 0xbc, 0xe9, 0x44, 0xb1, + 0xc9, 0x0e, 0x87, 0x96, 0x28, 0x1d, 0x26, 0x22, 0x76, 0x18, 0x35, 0xab, 0xcb, 0xd5, 0x0b, 0x55, + 0x13, 0xff, 0xd7, 0x6f, 0xc3, 0x0c, 0x4e, 0x20, 0x21, 0xde, 0x9c, 0x58, 0xae, 0x5e, 0x68, 0xac, + 0xbe, 0x90, 0x4e, 0xcd, 0xd2, 0x1e, 0x68, 0xfa, 0x89, 0xf6, 0x55, 0x2f, 0x0e, 0x8f, 0x4d, 0x45, + 0x4b, 0x6b, 0x1b, 0x16, 0x0b, 0x2c, 0xfa, 0x02, 0x54, 0x0f, 0xd8, 0xb1, 0x18, 0x13, 0xff, 0x57, + 0x7f, 0x16, 0x6a, 0x47, 0x7c, 0xfd, 0x25, 0x26, 0xf7, 0x9c, 0xe8, 0x35, 0x12, 0x1d, 0xd1, 0xc7, + 0xd7, 0x2a, 0xaf, 0x6a, 0xc6, 0x59, 0x98, 0x12, 0xd4, 0xd4, 0x0a, 0x2d, 0xb3, 0xc2, 0xf8, 0x3a, + 0x34, 0xda, 0x51, 0x6f, 0xc3, 0x8a, 0x2d, 0x64, 0x79, 0x01, 0x1a, 0xfd, 0xac, 0x89, 0x9c, 0x99, + 0x76, 0xc1, 0x68, 0xca, 0x2c, 0xc6, 0xaf, 0x2a, 0xd0, 0x2c, 0x37, 0x36, 0x0a, 0xf8, 0xec, 0x67, + 0x61, 0xb8, 0xee, 0xdb, 0x0c, 0x07, 0x5f, 0x33, 0x93, 0x26, 0xf7, 0x34, 0x0b, 0x43, 0x1e, 0x50, + 0x51, 0x87, 0xa8, 0xa5, 0x1b, 0x30, 0xe1, 0xf2, 0x9e, 0xab, 0xa5, 0x3d, 0xe3, 0x37, 0xdd, 0x82, + 0x05, 0xf4, 0x99, 0x34, 0x70, 0xe1, 0xfd, 0x97, 0x47, 0x7a, 0x3f, 0x0a, 0xc8, 0xfd, 0x92, 0x1c, + 0x85, 0xa0, 0xa0, 0xae, 0xf5, 0x0e, 0x9c, 0x29, 0x65, 0x2d, 0x09, 0xc5, 0x05, 0x35, 0x14, 0xba, + 0x3a, 0xe4, 0x7c, 0x38, 0x6e, 0x81, 0xbe, 0xc9, 0xe2, 0xb6, 0x75, 0xef, 0x8a, 0x67, 0xb7, 0x1d, + 0xaf, 0xc3, 0x0e, 0x39, 0xee, 0x96, 0xa1, 0x21, 0xd6, 0xc2, 0xa9, 0xdb, 0xeb, 0xa6, 0x4c, 0x1a, + 0xb6, 0x44, 0x36, 0xbe, 0x06, 0x33, 0xb2, 0x32, 0xce, 0xd7, 0xb7, 0xee, 0x75, 0xd8, 0x21, 0x0e, + 0xb1, 0x6a, 0x8a, 0x16, 0xd2, 0x91, 0x43, 0x14, 0x41, 0xd1, 0x32, 0xbe, 0xc3, 0x17, 0xeb, 0xf9, + 0x01, 0x45, 0xc1, 0xfd, 0xea, 0xd1, 0xdf, 0x83, 0x45, 0x72, 0xa2, 0xa4, 0xa8, 0x59, 0xc3, 0xa0, + 0xbc, 0x98, 0x54, 0x9e, 0x62, 0x37, 0x22, 0x1e, 0x12, 0x95, 0x02, 0x52, 0xd4, 0xd5, 0x7a, 0x17, + 0x96, 0xca, 0x99, 0x4b, 0x42, 0xf2, 0x9c, 0x1a, 0x92, 0x53, 0x49, 0x48, 0xe4, 0xde, 0xa5, 0x98, + 0x1c, 0xc2, 0x3c, 0xcf, 0x34, 0x1d, 0xe6, 0xd9, 0xed, 0xa8, 0x87, 0xe6, 0x2f, 0x43, 0x23, 0xc2, + 0x53, 0x8e, 0x76, 0xd4, 0xcb, 0x56, 0x16, 0x12, 0x89, 0x73, 0x74, 0x5d, 0x87, 0x79, 0x31, 0x71, + 0x50, 0x54, 0x64, 0x12, 0x4f, 0xaa, 0x11, 0x13, 0x4b, 0x79, 0x5a, 0x50, 0xa5, 0x6d, 0xe3, 0xe7, + 0x93, 0x30, 0x25, 0x10, 0x82, 0x87, 0x01, 0x7c, 0x01, 0x97, 0x26, 0x1d, 0x6a, 0x51, 0x52, 0xed, + 0x1e, 0x65, 0x21, 0xa7, 0x96, 0xbc, 0x8f, 0xaa, 0xaa, 0xfb, 0xa8, 0xdc, 0x98, 0x26, 0x8a, 0x63, + 0xca, 0xd9, 0x55, 0x2b, 0xda, 0x75, 0x11, 0x16, 0x22, 0x4c, 0xfc, 0x3b, 0xae, 0x15, 0xef, 0xf9, + 0x61, 0x5f, 0xac, 0xcd, 0x6a, 0x66, 0x81, 0xce, 0x97, 0x38, 0x44, 0x4b, 0x0b, 0x0f, 0x55, 0x96, + 0x1c, 0x95, 0xa7, 0x79, 0xa2, 0x24, 0x05, 0x88, 0x16, 0xd4, 0x2a, 0x91, 0xc6, 0x16, 0x45, 0x8e, + 0xef, 0xe1, 0xc1, 0x06, 0xd5, 0x19, 0x99, 0xc4, 0x2d, 0xef, 0x47, 0xbd, 0x6b, 0xa1, 0xdf, 0x17, + 0xb5, 0x3d, 0x69, 0xa2, 0xe5, 0xbe, 0x17, 0x33, 0x2f, 0x46, 0x59, 0x5a, 0x4a, 0xcb, 0x24, 0x2e, + 0x2b, 0x9a, 0x58, 0x64, 0x66, 0xcc, 0xa4, 0xc9, 0xf1, 0x13, 0xb1, 0x43, 0x51, 0x39, 0xf8, 0xbf, + 0x4a, 0xe4, 0xe6, 0xd5, 0xc8, 0xe5, 0x4a, 0xda, 0x42, 0xa1, 0xa4, 0x65, 0x47, 0x3b, 0x8b, 0xca, + 0xd1, 0xce, 0xcb, 0x30, 0xe5, 0x07, 0x7c, 0xbf, 0x1e, 0x35, 0x75, 0x9c, 0x16, 0x4f, 0xaa, 0x89, + 0x62, 0x65, 0x9b, 0xbe, 0xd2, 0x04, 0x48, 0x78, 0xf5, 0x37, 0x61, 0xde, 0xdf, 0xdb, 0x73, 0x1d, + 0x8f, 0xed, 0x0c, 0xa2, 0x7d, 0x5c, 0xcf, 0x9d, 0x42, 0x50, 0x2f, 0x09, 0xf1, 0x6d, 0xf5, 0xab, + 0x99, 0x67, 0xe7, 0xf5, 0xdb, 0x8a, 0xa9, 0x92, 0x62, 0x72, 0x39, 0x8d, 0xc9, 0x45, 0xa1, 0xe1, + 0xc6, 0x53, 0x4a, 0xa6, 0x67, 0xd0, 0x41, 0x32, 0x89, 0xb4, 0xc4, 0x56, 0x77, 0x9f, 0xe1, 0x4e, + 0xa3, 0xb9, 0x44, 0x2b, 0x1c, 0x99, 0x26, 0x2a, 0xed, 0xe3, 0x49, 0xa5, 0x6d, 0xbd, 0x06, 0x33, + 0xb2, 0x51, 0x25, 0x13, 0xf5, 0xb4, 0x3c, 0x51, 0xa7, 0xe5, 0x39, 0xf9, 0x13, 0x0d, 0xe6, 0x73, + 0xa6, 0x71, 0xee, 0xd8, 0x89, 0x5d, 0x26, 0x34, 0x50, 0x83, 0x57, 0x35, 0x9b, 0x45, 0x5d, 0x31, + 0x49, 0xf0, 0x7f, 0x31, 0x92, 0x6a, 0xba, 0x2e, 0x34, 0x60, 0xc6, 0xd9, 0xee, 0x70, 0x45, 0x1d, + 0x7f, 0xe0, 0xd9, 0xe9, 0xc9, 0x8d, 0x44, 0xc3, 0xb5, 0xe1, 0x76, 0x67, 0xcd, 0xb2, 0x7b, 0x8c, + 0xce, 0xf1, 0x6a, 0x38, 0x26, 0x95, 0x68, 0xd8, 0x30, 0x7d, 0xdb, 0x09, 0xa2, 0x75, 0xbf, 0xdf, + 0xe7, 0xa1, 0xb6, 0x59, 0xcc, 0xf7, 0x8c, 0x1a, 0x3a, 0x4c, 0xb4, 0xb8, 0x37, 0x6d, 0xb6, 0x67, + 0x0d, 0xdc, 0x98, 0xb3, 0x26, 0xa9, 0x41, 0x22, 0xe1, 0x3a, 0x35, 0xf2, 0xbd, 0x0d, 0x92, 0xa6, + 0x71, 0x4a, 0x14, 0xe3, 0xa3, 0x0a, 0x2c, 0x60, 0xb6, 0x5b, 0x47, 0x60, 0xd9, 0x28, 0x74, 0x1e, + 0x6a, 0x38, 0xd1, 0xc5, 0x26, 0xa0, 0xb8, 0xa0, 0xa7, 0xcf, 0xfa, 0x2a, 0x4c, 0xfa, 0x01, 0x6e, + 0xd3, 0x28, 0xfd, 0xb5, 0x64, 0x46, 0xf5, 0x4c, 0xc6, 0x14, 0x9c, 0xfa, 0x6b, 0x00, 0x74, 0x5e, + 0x79, 0x33, 0x2b, 0xbe, 0xa3, 0xe4, 0x24, 0x6e, 0xee, 0x38, 0xda, 0xd2, 0xf0, 0x69, 0x9a, 0x1d, + 0xc6, 0xa8, 0x44, 0x7d, 0x0d, 0xe6, 0x70, 0x78, 0xdb, 0xc9, 0xee, 0x0c, 0xfd, 0x3b, 0xba, 0x97, + 0x9c, 0x84, 0xf1, 0x03, 0x4d, 0xb8, 0x85, 0x7f, 0xed, 0x30, 0xf2, 0x65, 0x66, 0xae, 0x36, 0xb6, + 0xb9, 0x2d, 0x98, 0xee, 0x0f, 0x94, 0x4d, 0x61, 0xda, 0xce, 0xdc, 0x5c, 0x1d, 0xe9, 0x66, 0xe3, + 0x03, 0x0d, 0x9a, 0x6f, 0xf9, 0x8e, 0x87, 0x1f, 0xae, 0x04, 0x81, 0x2b, 0xce, 0xe3, 0xee, 0x2b, + 0x56, 0x2f, 0x41, 0xdd, 0x22, 0x51, 0x2f, 0x16, 0xe1, 0x1a, 0xb2, 0xb9, 0xcb, 0xf8, 0xa4, 0xd5, + 0x76, 0x55, 0x5e, 0x6d, 0x1b, 0x1f, 0x6b, 0x30, 0x47, 0x06, 0x7f, 0x63, 0xe0, 0xc4, 0xf7, 0x35, + 0x8e, 0x57, 0x60, 0xfa, 0x70, 0xe0, 0xc4, 0x63, 0xa2, 0x26, 0xe5, 0x2d, 0xc6, 0xbe, 0x5a, 0x12, + 0x7b, 0xe3, 0x77, 0x1a, 0x3c, 0x95, 0x77, 0xd3, 0x95, 0x6e, 0x97, 0x05, 0x0f, 0x02, 0xda, 0xca, + 0xee, 0x61, 0xa2, 0x64, 0xf7, 0x10, 0xb2, 0x2e, 0x73, 0x8e, 0x58, 0x78, 0x25, 0x12, 0xe7, 0x14, + 0x12, 0xa5, 0x74, 0xe8, 0x26, 0x7b, 0x9f, 0x75, 0x1f, 0xfe, 0xa1, 0x7f, 0xaa, 0xc1, 0x13, 0x9b, + 0xe9, 0x04, 0xba, 0x1d, 0x5a, 0x5e, 0xb4, 0xc7, 0xc2, 0xf0, 0x01, 0x8c, 0xfb, 0x4d, 0x98, 0xf5, + 0xd8, 0xdd, 0xac, 0x6f, 0x31, 0x95, 0x46, 0x89, 0xaa, 0x02, 0xe3, 0xe5, 0x14, 0xe3, 0x4f, 0x1a, + 0x2c, 0x90, 0x9e, 0x1b, 0x4e, 0xf7, 0xe0, 0x01, 0x18, 0xb6, 0x06, 0x73, 0x07, 0xd8, 0x13, 0x6f, + 0x8d, 0x99, 0x2a, 0x73, 0x12, 0x63, 0x9a, 0xf6, 0x89, 0x06, 0x8b, 0xc9, 0xf1, 0xfc, 0x91, 0xf3, + 0x20, 0xc0, 0xb6, 0x01, 0xf3, 0x74, 0x0c, 0x72, 0x3f, 0xc6, 0xe5, 0x45, 0xc6, 0xb4, 0xee, 0x67, + 0x1a, 0xcc, 0x93, 0xa6, 0xab, 0x5e, 0xcc, 0xc2, 0xfb, 0xb2, 0xed, 0x0d, 0x68, 0x30, 0x2f, 0x0e, + 0x2d, 0x6f, 0xdc, 0x6c, 0x25, 0xb3, 0x8f, 0x99, 0xb0, 0x3e, 0xd6, 0x40, 0x47, 0x55, 0x1b, 0x4e, + 0xd4, 0x77, 0xa2, 0xe8, 0x01, 0xb8, 0x7f, 0xbc, 0x81, 0xfd, 0x4b, 0x83, 0xd3, 0x92, 0x96, 0xf6, + 0x20, 0x7e, 0x58, 0x86, 0xa6, 0xbf, 0x0a, 0x75, 0x5e, 0x43, 0xe5, 0x03, 0xe2, 0x51, 0xca, 0x33, + 0x66, 0xbe, 0x3a, 0xc3, 0x46, 0x87, 0x75, 0x7d, 0xcf, 0xa6, 0x54, 0x36, 0x6b, 0x2a, 0x34, 0x3e, + 0xd5, 0x5b, 0x92, 0x9a, 0x75, 0xcb, 0xeb, 0x32, 0xf7, 0x91, 0x30, 0xdf, 0xf8, 0x50, 0x83, 0x39, + 0x62, 0x79, 0x78, 0xcc, 0x31, 0x7e, 0x9a, 0x00, 0xed, 0xa1, 0xf3, 0x34, 0x87, 0xc2, 0x92, 0xa4, + 0x45, 0x5e, 0x0b, 0x7e, 0xf9, 0x30, 0x78, 0x03, 0x1a, 0xdd, 0x7d, 0xcb, 0xeb, 0x8d, 0x0d, 0x04, + 0x99, 0xdd, 0x38, 0x80, 0x45, 0x3a, 0x78, 0x96, 0x56, 0x1b, 0x7c, 0xe7, 0x6a, 0xd9, 0xb4, 0x19, + 0xa5, 0xb3, 0x98, 0xa4, 0xa9, 0x5e, 0x40, 0x88, 0x2b, 0xed, 0xec, 0x02, 0xe2, 0x1c, 0x80, 0x65, + 0xdb, 0xef, 0xf8, 0xa1, 0xed, 0x78, 0xc9, 0x52, 0x51, 0xa2, 0x18, 0x6f, 0xc1, 0x0c, 0xdf, 0x3b, + 0xdf, 0x96, 0x8e, 0x90, 0x47, 0x1e, 0x72, 0xcb, 0xc7, 0xcf, 0x15, 0xf5, 0xf8, 0xd9, 0xd8, 0x81, + 0x33, 0x85, 0x81, 0x63, 0x44, 0xbe, 0x4a, 0x27, 0xe3, 0x49, 0x27, 0x22, 0x30, 0xc9, 0x89, 0x8c, + 0xdc, 0xbf, 0xa9, 0x30, 0x1a, 0x47, 0x70, 0xb6, 0xa0, 0xf1, 0x4a, 0x10, 0x84, 0xfe, 0x91, 0x00, + 0xe2, 0x67, 0xd5, 0xac, 0xae, 0xaa, 0x2a, 0xb9, 0x55, 0x55, 0x69, 0xbf, 0xca, 0x82, 0xef, 0xbf, + 0xd4, 0xef, 0x8f, 0x35, 0x98, 0x17, 0x1d, 0xdb, 0xb6, 0xe8, 0xea, 0x39, 0x98, 0xa4, 0x1b, 0x35, + 0xd1, 0xc9, 0x62, 0xda, 0x49, 0x72, 0xe3, 0x67, 0x0a, 0x86, 0x22, 0x3a, 0x2b, 0x65, 0xe8, 0xbc, + 0x94, 0xe2, 0x7e, 0xe4, 0x3d, 0x97, 0x60, 0x32, 0x6e, 0x26, 0x70, 0xdc, 0x60, 0x2e, 0xfb, 0xbc, + 0xf6, 0x1b, 0x5b, 0x30, 0x87, 0x57, 0x77, 0x99, 0x7d, 0x9f, 0x59, 0xd5, 0x0d, 0x58, 0x40, 0x55, + 0x5f, 0xc8, 0xb8, 0x52, 0xec, 0x72, 0xdb, 0xd7, 0x69, 0x36, 0x7e, 0x3e, 0x8d, 0x97, 0xe0, 0x54, + 0xe2, 0x4b, 0x7a, 0xde, 0x42, 0xfa, 0x86, 0xdc, 0x2e, 0xf0, 0xd5, 0xc6, 0xd2, 0xba, 0xef, 0x1d, + 0xb1, 0x30, 0x52, 0x9e, 0xc4, 0x90, 0x88, 0x32, 0x1f, 0x45, 0x4b, 0x5f, 0x01, 0xbd, 0x2b, 0x49, + 0x88, 0xa3, 0x9d, 0x0a, 0x1e, 0xed, 0x94, 0x7c, 0xd1, 0xbf, 0x02, 0x67, 0x06, 0xa8, 0xf5, 0x8e, + 0x17, 0x32, 0xcb, 0xc6, 0xb3, 0x0c, 0x29, 0x89, 0x95, 0x7f, 0x34, 0xde, 0x87, 0x96, 0x3c, 0xae, + 0x0e, 0x8b, 0x77, 0x42, 0xe7, 0x48, 0x1a, 0x9b, 0x38, 0x9f, 0xd4, 0x94, 0xf3, 0xc9, 0xec, 0x3c, + 0xb3, 0xa2, 0x9c, 0x67, 0x3e, 0x05, 0x75, 0x27, 0x12, 0x0a, 0xb0, 0xdf, 0x69, 0x33, 0x23, 0x18, + 0xdf, 0x82, 0x45, 0x8a, 0xa6, 0x38, 0xb7, 0xc7, 0x2e, 0x5a, 0x30, 0x4d, 0x50, 0x4c, 0x3b, 0x49, + 0xdb, 0x43, 0x1f, 0x8d, 0x94, 0xdc, 0xd5, 0x18, 0x1d, 0x58, 0x14, 0x57, 0x79, 0x3b, 0x56, 0xcf, + 0xf1, 0x28, 0xaf, 0x9e, 0x03, 0x08, 0xac, 0x5e, 0xf2, 0x50, 0x80, 0xee, 0x27, 0x24, 0x0a, 0xff, + 0x1e, 0xed, 0xfb, 0x77, 0xc5, 0xf7, 0x0a, 0x7d, 0xcf, 0x28, 0xc6, 0xdf, 0x6a, 0x50, 0xef, 0x38, + 0x3d, 0xcf, 0x72, 0x4d, 0x76, 0xa8, 0xbf, 0x00, 0x93, 0xb4, 0x16, 0x16, 0x30, 0x49, 0xce, 0xe7, + 0x88, 0x83, 0x16, 0xf1, 0x26, 0x3b, 0xbc, 0xfe, 0x98, 0x29, 0xf8, 0xf4, 0xab, 0xc9, 0x65, 0xe4, + 0x16, 0x9d, 0x21, 0x88, 0x5a, 0x74, 0xb6, 0x44, 0x50, 0x70, 0x90, 0xbc, 0x2a, 0xc5, 0x3b, 0xee, + 0x62, 0x8d, 0x16, 0x73, 0x5a, 0xed, 0x98, 0xca, 0xb7, 0xe8, 0x98, 0xf8, 0xb8, 0x84, 0x85, 0xbb, + 0x6f, 0x51, 0x9e, 0x54, 0x09, 0xda, 0x98, 0x0b, 0x09, 0xe2, 0xe3, 0x12, 0xfb, 0x03, 0xaf, 0x77, + 0x27, 0x10, 0x87, 0x36, 0xaa, 0xc4, 0x75, 0xfc, 0x24, 0x24, 0x88, 0x8f, 0x4b, 0x84, 0x98, 0x35, + 0xf1, 0xf0, 0x38, 0x2f, 0x41, 0x09, 0x55, 0x48, 0x10, 0x9f, 0x7e, 0x0b, 0x16, 0x7a, 0x2c, 0x36, + 0x7d, 0xbf, 0xbf, 0x76, 0xbc, 0x29, 0xce, 0xb7, 0xe9, 0x3d, 0xd4, 0xb2, 0x22, 0xbb, 0x99, 0x63, + 0x22, 0x2d, 0x05, 0x59, 0x3d, 0x84, 0xb3, 0xbe, 0xc7, 0x49, 0x3b, 0x56, 0x18, 0x3b, 0x5d, 0x27, + 0xb0, 0xbc, 0x78, 0xdd, 0xf7, 0x3c, 0xcc, 0xe4, 0x26, 0x3b, 0x14, 0xaf, 0xa4, 0x2e, 0x2a, 0xca, + 0xb7, 0x47, 0x49, 0x5c, 0x7f, 0xcc, 0x1c, 0xad, 0x52, 0xff, 0x36, 0x2c, 0x17, 0x18, 0x36, 0x9c, + 0xa8, 0x2b, 0x77, 0x4b, 0x8f, 0xaa, 0x2e, 0x8d, 0xee, 0x36, 0x27, 0x74, 0xfd, 0x31, 0xf3, 0x44, + 0xc5, 0xc2, 0x81, 0xb7, 0xfd, 0x03, 0xe6, 0xad, 0x1d, 0x73, 0xde, 0xad, 0x0d, 0x3c, 0x26, 0x2f, + 0x71, 0xa0, 0xc2, 0x94, 0x39, 0x50, 0x21, 0xaf, 0xd5, 0x61, 0x2a, 0xb0, 0x8e, 0x5d, 0xdf, 0xb2, + 0x8d, 0xef, 0x4f, 0x00, 0x24, 0x91, 0x8b, 0x70, 0xf9, 0xa4, 0x60, 0xbd, 0x59, 0x8a, 0xf5, 0xc0, + 0x3d, 0x96, 0xd0, 0xbe, 0x59, 0x8e, 0xf6, 0xa7, 0x47, 0xa1, 0x9d, 0x34, 0xe4, 0xf0, 0xbe, 0x9a, + 0xc3, 0x7b, 0xb3, 0x14, 0xef, 0xa2, 0x73, 0x81, 0xf8, 0xd5, 0x1c, 0xe2, 0x9b, 0xa5, 0x88, 0x17, + 0x32, 0x02, 0xf3, 0xab, 0x39, 0xcc, 0x37, 0x4b, 0x31, 0x2f, 0x64, 0x04, 0xea, 0x57, 0x73, 0xa8, + 0x6f, 0x96, 0xa2, 0x5e, 0xc8, 0x08, 0xdc, 0xef, 0x0c, 0xc5, 0xbd, 0x71, 0x02, 0xee, 0x49, 0x4f, + 0x11, 0xf9, 0x3b, 0x25, 0x40, 0x98, 0x2e, 0xd7, 0x98, 0x03, 0x42, 0xa6, 0x71, 0x28, 0x14, 0xbe, + 0x5b, 0x85, 0x39, 0x0c, 0x13, 0x95, 0x17, 0x6f, 0xcf, 0x2f, 0xbe, 0xaa, 0xd0, 0x4a, 0x5e, 0x55, + 0xe8, 0xcf, 0xc3, 0x22, 0x11, 0x98, 0x74, 0x19, 0x41, 0x15, 0xab, 0xf8, 0x01, 0xaf, 0x59, 0x06, + 0x51, 0xec, 0xf7, 0x37, 0xac, 0xd8, 0x4a, 0x16, 0xaf, 0x19, 0x45, 0xbe, 0x04, 0x9b, 0x28, 0x3c, + 0x26, 0x0c, 0xc9, 0xe6, 0x9a, 0x28, 0x4b, 0xd8, 0xe2, 0x12, 0xb1, 0xd3, 0x67, 0xfe, 0x20, 0x16, + 0xf7, 0x59, 0x49, 0x93, 0x17, 0xa6, 0x3e, 0xb3, 0x1d, 0x0b, 0xaf, 0x8e, 0xc4, 0xdb, 0x88, 0x94, + 0x80, 0x65, 0x22, 0xbb, 0x0a, 0x13, 0x8f, 0xfd, 0x32, 0xca, 0x18, 0xd7, 0x56, 0xf8, 0x6e, 0xd4, + 0x89, 0x9d, 0xe4, 0xd2, 0x88, 0xee, 0xae, 0x14, 0x1a, 0x2f, 0xe8, 0xbb, 0x83, 0xe8, 0xf8, 0xa6, + 0xe3, 0xc9, 0xee, 0x69, 0x50, 0x41, 0x2f, 0x7e, 0x31, 0x7e, 0xaf, 0xc1, 0x29, 0x29, 0x17, 0xb4, + 0x59, 0x6c, 0xa1, 0x5f, 0x94, 0x97, 0x3f, 0xda, 0xc9, 0x2f, 0x7f, 0x36, 0x60, 0xbe, 0xa7, 0xee, + 0xa5, 0xc6, 0xd8, 0x12, 0xe5, 0x45, 0x94, 0x27, 0x4a, 0xd5, 0xb1, 0x9e, 0x28, 0x19, 0x7f, 0xd5, + 0x60, 0x3e, 0x57, 0x1b, 0x47, 0x96, 0xfb, 0x97, 0x01, 0x9c, 0x14, 0x76, 0xb9, 0xa3, 0x72, 0x15, + 0x8f, 0xa6, 0xc4, 0x58, 0x76, 0x7f, 0x56, 0xbd, 0xbf, 0xfb, 0xb3, 0x37, 0xa0, 0x11, 0x64, 0x8e, + 0xce, 0xed, 0xe8, 0x4a, 0x42, 0x60, 0xca, 0xec, 0xc6, 0x0f, 0x35, 0x58, 0x2c, 0xa4, 0x45, 0xbc, + 0xc9, 0xe2, 0x13, 0x2c, 0xbd, 0xc9, 0xe2, 0x0d, 0x09, 0xb9, 0x95, 0x3c, 0x72, 0x5d, 0xe7, 0x48, + 0x7e, 0x04, 0x29, 0x9a, 0x43, 0x50, 0x33, 0x31, 0x14, 0x35, 0x7f, 0xd7, 0x60, 0xa9, 0x7c, 0x5d, + 0xf1, 0x28, 0xfa, 0xfe, 0x43, 0x0d, 0x9a, 0xc3, 0xea, 0xca, 0x97, 0x16, 0x82, 0x0c, 0xf7, 0xe9, + 0xd2, 0xec, 0x51, 0xf4, 0xfd, 0xa9, 0x04, 0xf6, 0x52, 0x41, 0x36, 0x7e, 0x54, 0x49, 0x6c, 0x4f, + 0x17, 0x99, 0x8f, 0xa0, 0xed, 0xfa, 0x45, 0x58, 0x20, 0x13, 0xa4, 0x27, 0x14, 0x74, 0x3d, 0x53, + 0xa0, 0xf3, 0x6d, 0x4f, 0x61, 0x11, 0xf2, 0x45, 0x61, 0xd3, 0xf8, 0x45, 0x8a, 0xb5, 0x74, 0x89, + 0xfe, 0x50, 0xfa, 0x3b, 0x43, 0x8b, 0xb4, 0xac, 0x92, 0xd0, 0x92, 0x6e, 0x17, 0xfe, 0xd7, 0xd1, + 0x92, 0xfa, 0x49, 0x5a, 0x4a, 0x1a, 0x1f, 0x68, 0xf0, 0xc4, 0xd0, 0xad, 0xd1, 0x48, 0x8f, 0x49, + 0x8b, 0xa8, 0x8a, 0xba, 0x88, 0xca, 0x99, 0x54, 0xbd, 0xbf, 0xc9, 0xff, 0x4b, 0x0d, 0x9e, 0x1c, + 0xb1, 0x68, 0xcd, 0x45, 0x4a, 0x1b, 0x37, 0x52, 0xb9, 0x41, 0x55, 0x94, 0xdb, 0xa9, 0x13, 0xfd, + 0x9c, 0x4d, 0x9f, 0xaa, 0x3c, 0x7d, 0x8c, 0xdf, 0x68, 0xf0, 0xcc, 0x18, 0x9b, 0xbf, 0x2f, 0x67, + 0xd0, 0x43, 0xdf, 0x7a, 0x19, 0xbf, 0xd5, 0xe0, 0xfc, 0x78, 0x9b, 0xc7, 0x87, 0x6d, 0xe4, 0xbf, + 0x96, 0xf1, 0x9a, 0xdf, 0x89, 0x4a, 0x61, 0xd2, 0x94, 0x2c, 0x27, 0xe3, 0xb8, 0x92, 0xc3, 0xf1, + 0xe7, 0x42, 0x2b, 0xfe, 0x8a, 0x20, 0x39, 0x25, 0xcd, 0x5e, 0xcd, 0x49, 0x24, 0xa3, 0x2d, 0xc1, + 0xb9, 0xb8, 0x63, 0x1a, 0x92, 0xae, 0xa5, 0xb4, 0x5c, 0x51, 0xd3, 0xf2, 0x3b, 0xf0, 0x44, 0x87, + 0xc5, 0x57, 0x82, 0x60, 0xcd, 0xea, 0x1e, 0x70, 0xaf, 0x78, 0x76, 0x07, 0x1f, 0x89, 0x8d, 0x7a, + 0x82, 0xcc, 0x37, 0x11, 0x51, 0x26, 0x20, 0x5e, 0x4c, 0x29, 0x34, 0xe3, 0x16, 0xb4, 0x86, 0x29, + 0xfe, 0x2c, 0x8f, 0x71, 0x8d, 0x3f, 0x56, 0x60, 0xe6, 0xea, 0xbd, 0x98, 0xde, 0x45, 0x76, 0x18, + 0xfe, 0x14, 0x25, 0xc2, 0xcb, 0x85, 0x2c, 0x99, 0x24, 0xed, 0xfc, 0x3e, 0xa8, 0x52, 0xdc, 0x07, + 0xad, 0x03, 0xb0, 0x44, 0x5b, 0x24, 0x2e, 0x97, 0x9f, 0x11, 0x51, 0x92, 0xbb, 0xc9, 0x1a, 0xe2, + 0x35, 0x9c, 0x24, 0xc6, 0xd3, 0x65, 0xdb, 0xba, 0xd7, 0x8e, 0x7a, 0xd2, 0xcf, 0x0a, 0xe9, 0x8e, + 0xb9, 0x40, 0xe7, 0x3e, 0x4b, 0x25, 0x6f, 0x0d, 0xfa, 0x22, 0xad, 0x2a, 0xb4, 0xdc, 0x7b, 0xbe, + 0xc9, 0xfc, 0x7b, 0xbe, 0xd6, 0x36, 0xcc, 0xe7, 0x86, 0x53, 0xf2, 0x8e, 0xed, 0xbc, 0xfa, 0xe0, + 0x74, 0x21, 0x6f, 0x94, 0xfc, 0xb2, 0xed, 0x0f, 0x15, 0xa8, 0xa7, 0x1f, 0x74, 0x0b, 0xce, 0x84, + 0xcc, 0xc2, 0xdf, 0x0e, 0x22, 0x91, 0x3b, 0x4b, 0x7a, 0x7a, 0xfd, 0xff, 0x79, 0x4d, 0x2b, 0x66, + 0x19, 0x37, 0xb9, 0xa9, 0x5c, 0xd3, 0x18, 0x2f, 0x55, 0x57, 0x40, 0xef, 0x47, 0xbd, 0x6b, 0x4e, + 0x18, 0xc5, 0x6d, 0xdf, 0x76, 0xf6, 0x8e, 0xa5, 0xa3, 0xe1, 0x92, 0x2f, 0x85, 0xc7, 0x80, 0x13, + 0x43, 0x1f, 0x03, 0xa6, 0x3f, 0x05, 0x6b, 0xbd, 0x0b, 0xad, 0xe1, 0x43, 0x2f, 0x71, 0xe9, 0xff, + 0xa9, 0x2e, 0x4d, 0x7e, 0x6b, 0x74, 0x83, 0x1d, 0xd3, 0x0f, 0x0f, 0x25, 0x8f, 0xee, 0xc1, 0x74, + 0x42, 0xc6, 0x5d, 0xfe, 0x71, 0xc0, 0x6e, 0xa4, 0xca, 0x92, 0xa6, 0xfa, 0xd6, 0xb0, 0x2e, 0xe4, + 0x39, 0x9c, 0x5c, 0x2b, 0x66, 0x51, 0x2c, 0xc1, 0x89, 0x0c, 0x2f, 0xd0, 0xd7, 0x9e, 0xfe, 0xe6, + 0xd9, 0xed, 0x80, 0x79, 0xef, 0x6d, 0xb5, 0xf3, 0xbf, 0x7d, 0x7e, 0x1d, 0xff, 0xee, 0x4e, 0x22, + 0xe9, 0xa5, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x32, 0x0e, 0x63, 0xcf, 0x41, 0x3d, 0x00, 0x00, } diff --git a/pkg/proto/sdkws/ws.proto b/pkg/proto/sdkws/ws.proto index cc369a3c0..1daa1747e 100644 --- a/pkg/proto/sdkws/ws.proto +++ b/pkg/proto/sdkws/ws.proto @@ -132,12 +132,12 @@ message FriendRequest{ ///////////////////////////////////base end///////////////////////////////////// message PullMessageBySeqListReq{ string userID = 1; - repeated uint32 seqList = 3; + repeated int64 seqs = 3; map groupSeqList = 4; } message seqList { - repeated uint32 seqList = 1; + repeated int64 seqs = 1; } @@ -159,12 +159,12 @@ message GetMaxAndMinSeqReq { string userID = 2; } message MaxAndMinSeq{ - uint32 maxSeq = 1; - uint32 minSeq = 2; + int64 maxSeq = 1; + int64 minSeq = 2; } message GetMaxAndMinSeqResp { - uint32 maxSeq = 1; - uint32 minSeq = 2; + int64 maxSeq = 1; + int64 minSeq = 2; map groupMaxAndMinSeq = 5; } @@ -187,7 +187,7 @@ message MsgData { int32 msgFrom = 10; int32 contentType = 11; bytes content = 12; - uint32 seq = 14; + int64 seq = 14; int64 sendTime = 15; int64 createTime = 16; int32 status = 17; @@ -426,7 +426,7 @@ message ConversationSetPrivateTips{ message DeleteMessageTips{ string opUserID = 1; string userID = 2; - repeated uint32 seqList = 3; + repeated int64 seqs = 3; } ///cms message RequestPagination { @@ -601,13 +601,7 @@ message SignalGetTokenByRoomIDReply { } -message DelMsgListReq{ - string userID = 2; - repeated uint32 seqList = 3; -} -message DelMsgListResp{ -} message SetAppBackgroundStatusReq { string userID = 1; @@ -642,9 +636,3 @@ message KeyValue { int64 latestUpdateTime = 3; } - -message ResponsePagination { - int32 CurrentPage = 5; - int32 ShowNumber = 6; -} - diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 140f2586d..48a228021 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -57,9 +57,9 @@ func cleanUpFuncName(funcName string) string { } // Get the intersection of two slices -func Intersect(slice1, slice2 []uint32) []uint32 { - m := make(map[uint32]bool) - n := make([]uint32, 0) +func Intersect(slice1, slice2 []int64) []int64 { + m := make(map[int64]bool) + n := make([]int64, 0) for _, v := range slice1 { m[v] = true } @@ -73,9 +73,9 @@ func Intersect(slice1, slice2 []uint32) []uint32 { } // Get the diff of two slices -func Difference(slice1, slice2 []uint32) []uint32 { - m := make(map[uint32]bool) - n := make([]uint32, 0) +func Difference(slice1, slice2 []int64) []int64 { + m := make(map[int64]bool) + n := make([]int64, 0) inter := Intersect(slice1, slice2) for _, v := range inter { m[v] = true