Merge branch 'v2.3.0release' of github.com:OpenIMSDK/Open-IM-Server into v2.3.0release

# Conflicts:
#	internal/rpc/group/group.go
#	internal/rpc/user/user.go
#	pkg/common/db/mysql_model/im_mysql_model/group_model.go
This commit is contained in:
wangchuxiao 2022-07-14 14:06:30 +08:00
commit 1e6a93b4b6
23 changed files with 914 additions and 583 deletions

@ -1 +1 @@
Subproject commit 588c9bb77b9bd89a9261964006568b8655233cb6 Subproject commit 3cf486771bbe7ecb33f7e7c3cdf733f28b16d8b7

View File

@ -139,15 +139,16 @@ func main() {
chatGroup.POST("/send_msg", apiChat.SendMsg) chatGroup.POST("/send_msg", apiChat.SendMsg)
chatGroup.POST("/pull_msg_by_seq", apiChat.PullMsgBySeqList) chatGroup.POST("/pull_msg_by_seq", apiChat.PullMsgBySeqList)
chatGroup.POST("/del_msg", apiChat.DelMsg) chatGroup.POST("/del_msg", apiChat.DelMsg)
chatGroup.POST("/del_super_group_msg", apiChat.DelSuperGroupMsg)
chatGroup.POST("/clear_msg", apiChat.ClearMsg) chatGroup.POST("/clear_msg", apiChat.ClearMsg)
chatGroup.POST("/manage_send_msg", manage.ManagementSendMsg) chatGroup.POST("/manage_send_msg", manage.ManagementSendMsg)
chatGroup.POST("/batch_send_msg", manage.ManagementBatchSendMsg) chatGroup.POST("/batch_send_msg", manage.ManagementBatchSendMsg)
} }
//Manager //Manager
managementGroup := r.Group("/manager") //managementGroup := r.Group("/manager")
{ //{
managementGroup.POST("/delete_user", manage.DeleteUser) //1 // managementGroup.POST("/delete_user", manage.DeleteUser) //1
} //}
//Conversation //Conversation
conversationGroup := r.Group("/conversation") conversationGroup := r.Group("/conversation")
{ //1 { //1

View File

@ -38,6 +38,7 @@ redis:
dbMaxIdle: 128 dbMaxIdle: 128
dbMaxActive: 0 dbMaxActive: 0
dbIdleTimeout: 120 dbIdleTimeout: 120
dbUserName: #only redis version 6.0+ need username
dbPassWord: openIM #redis密码 建议修改 dbPassWord: openIM #redis密码 建议修改
enableCluster: false #如果外部redis以集群方式启动需要打开此开关 enableCluster: false #如果外部redis以集群方式启动需要打开此开关

View File

@ -12,6 +12,7 @@ import (
"Open_IM/pkg/utils" "Open_IM/pkg/utils"
"context" "context"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/golang/protobuf/proto"
"net/http" "net/http"
"strings" "strings"
) )
@ -72,6 +73,83 @@ func DelMsg(c *gin.Context) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), resp) log.NewInfo(req.OperationID, utils.GetSelfFuncName(), resp)
c.JSON(http.StatusOK, resp) c.JSON(http.StatusOK, resp)
} }
func DelSuperGroupMsg(c *gin.Context) {
var (
req api.DelSuperGroupMsgReq
resp api.DelSuperGroupMsgResp
)
if err := c.BindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return
}
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req)
ok, opUserID, errInfo := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
if !ok {
errMsg := req.OperationID + " " + opUserID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
log.NewError(req.OperationID, errMsg)
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
options := make(map[string]bool, 5)
utils.SetSwitchFromOptions(options, constant.IsConversationUpdate, false)
utils.SetSwitchFromOptions(options, constant.IsSenderConversationUpdate, false)
utils.SetSwitchFromOptions(options, constant.IsUnreadCount, false)
utils.SetSwitchFromOptions(options, constant.IsOfflinePush, false)
pbData := rpc.SendMsgReq{
OperationID: req.OperationID,
MsgData: &pbCommon.MsgData{
SendID: req.UserID,
RecvID: req.UserID,
ClientMsgID: utils.GetMsgID(req.UserID),
SessionType: constant.SingleChatType,
MsgFrom: constant.SysMsgType,
ContentType: constant.MsgDeleteNotification,
// ForceList: params.ForceList,
CreateTime: utils.GetCurrentTimestampByMill(),
Options: options,
},
}
var tips pbCommon.TipsComm
deleteMsg := api.MsgDeleteNotificationElem{
GroupID: req.GroupID,
IsAllDelete: req.IsAllDelete,
SeqList: req.SeqList,
}
tips.JsonDetail = utils.StructToJsonString(deleteMsg)
var err error
pbData.MsgData.Content, err = proto.Marshal(&tips)
if err != nil {
log.Error(req.OperationID, "Marshal failed ", err.Error(), tips.String())
resp.ErrCode = 400
resp.ErrMsg = err.Error()
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), resp)
c.JSON(http.StatusOK, resp)
}
log.Info(req.OperationID, "", "api DelSuperGroupMsg call start..., [data: %s]", pbData.String())
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, req.OperationID)
if etcdConn == nil {
errMsg := req.OperationID + "getcdv3.GetConn == nil"
log.NewError(req.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := rpc.NewChatClient(etcdConn)
log.Info(req.OperationID, "", "api DelSuperGroupMsg call, api call rpc...")
RpcResp, err := client.SendMsg(context.Background(), &pbData)
if err != nil {
log.NewError(req.OperationID, "call delete UserSendMsg rpc server failed", err.Error())
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call UserSendMsg rpc server failed"})
return
}
log.Info(req.OperationID, "", "api DelSuperGroupMsg call end..., [data: %s] [reply: %s]", pbData.String(), RpcResp.String())
resp.ErrCode = RpcResp.ErrCode
resp.ErrMsg = RpcResp.ErrMsg
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), resp)
c.JSON(http.StatusOK, resp)
}
// @Summary 清空用户消息 // @Summary 清空用户消息
// @Description 清空用户消息 // @Description 清空用户消息

View File

@ -3,6 +3,7 @@ package group
import ( import (
api "Open_IM/pkg/base_info" api "Open_IM/pkg/base_info"
"Open_IM/pkg/common/config" "Open_IM/pkg/common/config"
"Open_IM/pkg/common/constant"
"Open_IM/pkg/common/log" "Open_IM/pkg/common/log"
"Open_IM/pkg/common/token_verify" "Open_IM/pkg/common/token_verify"
"Open_IM/pkg/grpc-etcdv3/getcdv3" "Open_IM/pkg/grpc-etcdv3/getcdv3"
@ -316,7 +317,12 @@ func InviteUserToGroup(c *gin.Context) {
} }
req := &rpc.InviteUserToGroupReq{} req := &rpc.InviteUserToGroupReq{}
utils.CopyStructFields(req, &params) utils.CopyStructFields(req, &params)
if len(req.InvitedUserIDList) > constant.MaxNotificationNum {
errMsg := req.OperationID + " too many, Limit: " + utils.IntToString(constant.MaxNotificationNum)
log.NewError(req.OperationID, errMsg, len(req.InvitedUserIDList))
c.JSON(http.StatusRequestEntityTooLarge, gin.H{"errCode": 400, "errMsg": errMsg})
return
}
var ok bool var ok bool
var errInfo string var errInfo string
ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
@ -779,12 +785,7 @@ func SetGroupInfo(c *gin.Context) {
req := &rpc.SetGroupInfoReq{GroupInfoForSet: &open_im_sdk.GroupInfoForSet{}} req := &rpc.SetGroupInfoReq{GroupInfoForSet: &open_im_sdk.GroupInfoForSet{}}
utils.CopyStructFields(req.GroupInfoForSet, &params) utils.CopyStructFields(req.GroupInfoForSet, &params)
req.OperationID = params.OperationID req.OperationID = params.OperationID
argsHandle(&params, req)
if params.NeedVerification != nil {
req.GroupInfoForSet.NeedVerification = &wrappers.Int32Value{Value: *params.NeedVerification}
log.NewInfo(req.OperationID, "NeedVerification ", req.GroupInfoForSet.NeedVerification)
}
var ok bool var ok bool
var errInfo string var errInfo string
ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
@ -815,6 +816,20 @@ func SetGroupInfo(c *gin.Context) {
c.JSON(http.StatusOK, resp) c.JSON(http.StatusOK, resp)
log.NewInfo(req.OperationID, "SetGroupInfo api return ", resp) log.NewInfo(req.OperationID, "SetGroupInfo api return ", resp)
} }
func argsHandle(params *api.SetGroupInfoReq, req *rpc.SetGroupInfoReq) {
if params.NeedVerification != nil {
req.GroupInfoForSet.NeedVerification = &wrappers.Int32Value{Value: *params.NeedVerification}
log.NewInfo(req.OperationID, "NeedVerification ", req.GroupInfoForSet.NeedVerification)
}
if params.LookMemberInfo != nil {
req.GroupInfoForSet.LookMemberInfo = &wrappers.Int32Value{Value: *params.LookMemberInfo}
log.NewInfo(req.OperationID, "LookMemberInfo ", req.GroupInfoForSet.LookMemberInfo)
}
if params.ApplyMemberFriend != nil {
req.GroupInfoForSet.ApplyMemberFriend = &wrappers.Int32Value{Value: *params.ApplyMemberFriend}
log.NewInfo(req.OperationID, "ApplyMemberFriend ", req.GroupInfoForSet.ApplyMemberFriend)
}
}
// @Summary 转让群主 // @Summary 转让群主
// @Description 转让群主 // @Description 转让群主

View File

@ -123,7 +123,7 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB) return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB)
} }
//to group member //to group member
groupMember = db.GroupMember{GroupID: groupId, RoleLevel: constant.GroupOwner, OperatorUserID: req.OpUserID} groupMember = db.GroupMember{GroupID: groupId, RoleLevel: constant.GroupOwner, OperatorUserID: req.OpUserID, JoinSource: constant.JoinByInvitation, InviterUserID: req.OpUserID}
utils.CopyStructFields(&groupMember, us) utils.CopyStructFields(&groupMember, us)
err = imdb.InsertIntoGroupMember(groupMember) err = imdb.InsertIntoGroupMember(groupMember)
if err != nil { if err != nil {
@ -144,6 +144,8 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
continue continue
} }
groupMember.RoleLevel = user.RoleLevel groupMember.RoleLevel = user.RoleLevel
groupMember.JoinSource = constant.JoinByInvitation
groupMember.InviterUserID = req.OpUserID
utils.CopyStructFields(&groupMember, us) utils.CopyStructFields(&groupMember, us)
err = imdb.InsertIntoGroupMember(groupMember) err = imdb.InsertIntoGroupMember(groupMember)
if err != nil { if err != nil {
@ -227,13 +229,22 @@ func (s *groupServer) GetJoinedGroupList(ctx context.Context, req *pbGroup.GetJo
//group, err := imdb.GetGroupInfoByGroupID(v) //group, err := imdb.GetGroupInfoByGroupID(v)
if num > 0 && owner != nil && err2 == nil && group != nil && err == nil { if num > 0 && owner != nil && err2 == nil && group != nil && err == nil {
if group.Status == constant.GroupStatusDismissed {
log.NewError(req.OperationID, "constant.GroupStatusDismissed ", group)
continue
}
utils.CopyStructFields(&groupNode, group) utils.CopyStructFields(&groupNode, group)
groupNode.CreateTime = uint32(group.CreateTime.Unix()) groupNode.CreateTime = uint32(group.CreateTime.Unix())
groupNode.MemberCount = uint32(num) groupNode.NotificationUpdateTime = uint32(group.NotificationUpdateTime.Unix())
if group.NotificationUpdateTime.Unix() < 0 {
groupNode.NotificationUpdateTime = 0
}
groupNode.MemberCount = num
groupNode.OwnerUserID = owner.UserID groupNode.OwnerUserID = owner.UserID
resp.GroupList = append(resp.GroupList, &groupNode) resp.GroupList = append(resp.GroupList, &groupNode)
} else { } else {
log.NewError(req.OperationID, "check nil ", num, owner, err, group) log.NewError(req.OperationID, "check nil ", num, owner, err, group, err2)
continue continue
} }
log.NewDebug(req.OperationID, "joinedGroup ", groupNode) log.NewDebug(req.OperationID, "joinedGroup ", groupNode)
@ -267,6 +278,8 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
var groupRequest db.GroupRequest var groupRequest db.GroupRequest
groupRequest.UserID = v groupRequest.UserID = v
groupRequest.GroupID = req.GroupID groupRequest.GroupID = req.GroupID
groupRequest.JoinSource = constant.JoinByInvitation
groupRequest.InviterUserID = req.OpUserID
err = imdb.InsertIntoGroupRequest(groupRequest) err = imdb.InsertIntoGroupRequest(groupRequest)
if err != nil { if err != nil {
var resultNode pbGroup.Id2Result var resultNode pbGroup.Id2Result
@ -320,6 +333,8 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
toInsertInfo.GroupID = req.GroupID toInsertInfo.GroupID = req.GroupID
toInsertInfo.RoleLevel = constant.GroupOrdinaryUsers toInsertInfo.RoleLevel = constant.GroupOrdinaryUsers
toInsertInfo.OperatorUserID = req.OpUserID toInsertInfo.OperatorUserID = req.OpUserID
toInsertInfo.InviterUserID = req.OpUserID
toInsertInfo.JoinSource = constant.JoinByInvitation
err = imdb.InsertIntoGroupMember(toInsertInfo) err = imdb.InsertIntoGroupMember(toInsertInfo)
if err != nil { if err != nil {
log.NewError(req.OperationID, "InsertIntoGroupMember failed ", req.GroupID, toUserInfo.UserID, toUserInfo.Nickname, toUserInfo.FaceURL) log.NewError(req.OperationID, "InsertIntoGroupMember failed ", req.GroupID, toUserInfo.UserID, toUserInfo.Nickname, toUserInfo.FaceURL)
@ -776,10 +791,14 @@ func (s *groupServer) GroupApplicationResponse(_ context.Context, req *pbGroup.G
} }
err := imdb.UpdateGroupRequest(groupRequest) err := imdb.UpdateGroupRequest(groupRequest)
if err != nil { if err != nil {
//{openIM002 7836e478bc43ce1d3b8889cac983f59b 1 ok 0001-01-01 00:00:00 +0000 UTC openIM001 0001-01-01 00:00:00 +0000 UTC }
log.NewError(req.OperationID, "GroupApplicationResponse failed ", err.Error(), groupRequest) log.NewError(req.OperationID, "GroupApplicationResponse failed ", err.Error(), groupRequest)
return &pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil return &pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
} }
request, err := imdb.GetGroupRequestByGroupIDAndUserID(req.GroupID, req.FromUserID)
if err != nil {
log.NewError(req.OperationID, "GroupApplicationResponse failed ", err.Error(), req.GroupID, req.FromUserID)
return &pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
}
if req.HandleResult == constant.GroupResponseAgree { if req.HandleResult == constant.GroupResponseAgree {
user, err := imdb.GetUserByUserID(req.FromUserID) user, err := imdb.GetUserByUserID(req.FromUserID)
@ -794,7 +813,8 @@ func (s *groupServer) GroupApplicationResponse(_ context.Context, req *pbGroup.G
member.OperatorUserID = req.OpUserID member.OperatorUserID = req.OpUserID
member.FaceURL = user.FaceURL member.FaceURL = user.FaceURL
member.Nickname = user.Nickname member.Nickname = user.Nickname
member.JoinSource = request.JoinSource
member.InviterUserID = request.InviterUserID
err = imdb.InsertIntoGroupMember(member) err = imdb.InsertIntoGroupMember(member)
if err != nil { if err != nil {
log.NewError(req.OperationID, "GroupApplicationResponse failed ", err.Error(), member) log.NewError(req.OperationID, "GroupApplicationResponse failed ", err.Error(), member)
@ -945,6 +965,7 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq)
groupRequest.UserID = req.OpUserID groupRequest.UserID = req.OpUserID
groupRequest.ReqMsg = req.ReqMessage groupRequest.ReqMsg = req.ReqMessage
groupRequest.GroupID = req.GroupID groupRequest.GroupID = req.GroupID
groupRequest.JoinSource = req.JoinSource
err = imdb.InsertIntoGroupRequest(groupRequest) err = imdb.InsertIntoGroupRequest(groupRequest)
if err != nil { if err != nil {
log.NewError(req.OperationID, "InsertIntoGroupRequest failed ", err.Error(), groupRequest) log.NewError(req.OperationID, "InsertIntoGroupRequest failed ", err.Error(), groupRequest)
@ -1114,7 +1135,24 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf
return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, http.WrapError(constant.ErrDB) return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, http.WrapError(constant.ErrDB)
} }
} }
if req.GroupInfoForSet.LookMemberInfo != nil {
changedType = changedType | (1 << 5)
m := make(map[string]interface{})
m["look_member_info"] = req.GroupInfoForSet.LookMemberInfo.Value
if err := imdb.UpdateGroupInfoDefaultZero(req.GroupInfoForSet.GroupID, m); err != nil {
log.NewError(req.OperationID, "UpdateGroupInfoDefaultZero failed ", err.Error(), m)
return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, http.WrapError(constant.ErrDB)
}
}
if req.GroupInfoForSet.ApplyMemberFriend != nil {
changedType = changedType | (1 << 6)
m := make(map[string]interface{})
m["apply_member_friend"] = req.GroupInfoForSet.ApplyMemberFriend.Value
if err := imdb.UpdateGroupInfoDefaultZero(req.GroupInfoForSet.GroupID, m); err != nil {
log.NewError(req.OperationID, "UpdateGroupInfoDefaultZero failed ", err.Error(), m)
return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, http.WrapError(constant.ErrDB)
}
}
// //
//if req.RoleLevel != nil { //if req.RoleLevel != nil {
// //
@ -1122,6 +1160,10 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf
//only administrators can set group information //only administrators can set group information
var groupInfo db.Group var groupInfo db.Group
utils.CopyStructFields(&groupInfo, req.GroupInfoForSet) utils.CopyStructFields(&groupInfo, req.GroupInfoForSet)
if req.GroupInfoForSet.Notification != "" {
groupInfo.NotificationUserID = req.OpUserID
groupInfo.NotificationUpdateTime = time.Now()
}
err = imdb.SetGroupInfo(groupInfo) err = imdb.SetGroupInfo(groupInfo)
if err != nil { if err != nil {
log.NewError(req.OperationID, "SetGroupInfo failed ", err.Error(), groupInfo) log.NewError(req.OperationID, "SetGroupInfo failed ", err.Error(), groupInfo)

View File

@ -232,6 +232,9 @@ func GroupCreatedNotification(operationID, opUserID, groupID string, initMemberL
continue continue
} }
GroupCreatedTips.MemberList = append(GroupCreatedTips.MemberList, &groupMemberInfo) GroupCreatedTips.MemberList = append(GroupCreatedTips.MemberList, &groupMemberInfo)
if len(GroupCreatedTips.MemberList) == constant.MaxNotificationNum {
break
}
} }
groupNotification(constant.GroupCreatedNotification, &GroupCreatedTips, opUserID, groupID, "", operationID) groupNotification(constant.GroupCreatedNotification, &GroupCreatedTips, opUserID, groupID, "", operationID)
} }
@ -536,7 +539,6 @@ func MemberInvitedNotification(operationID, groupID, opUserID, reason string, in
} }
MemberInvitedTips.InvitedUserList = append(MemberInvitedTips.InvitedUserList, &groupMemberInfo) MemberInvitedTips.InvitedUserList = append(MemberInvitedTips.InvitedUserList, &groupMemberInfo)
} }
groupNotification(constant.MemberInvitedNotification, &MemberInvitedTips, opUserID, groupID, "", operationID) groupNotification(constant.MemberInvitedNotification, &MemberInvitedTips, opUserID, groupID, "", operationID)
} }

View File

@ -379,6 +379,13 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI
return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
} }
oldNickname := ""
if req.UserInfo.Nickname != "" {
u, err := imdb.GetUserByUserID(req.UserInfo.UserID)
if err == nil {
oldNickname = u.Nickname
}
}
var user db.User var user db.User
utils.CopyStructFields(&user, req.UserInfo) utils.CopyStructFields(&user, req.UserInfo)
if req.UserInfo.Birth != 0 { if req.UserInfo.Birth != 0 {
@ -420,6 +427,24 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI
if req.UserInfo.FaceURL != "" { if req.UserInfo.FaceURL != "" {
go s.SyncJoinedGroupMemberFaceURL(req.UserInfo.UserID, req.UserInfo.FaceURL, req.OperationID, req.OpUserID) go s.SyncJoinedGroupMemberFaceURL(req.UserInfo.UserID, req.UserInfo.FaceURL, req.OperationID, req.OpUserID)
} }
if req.UserInfo.Nickname != "" {
go s.SyncJoinedGroupMemberNickname(req.UserInfo.UserID, req.UserInfo.Nickname, oldNickname, req.OperationID, req.OpUserID)
}
//updateUserInfoToCacheReq := &cache.UpdateUserInfoToCacheReq{
// OperationID: req.OperationID,
// UserInfoList: []*sdkws.UserInfo{req.UserInfo},
//}
//cacheEtcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImCacheName)
//cacheClient := cache.NewCacheClient(cacheEtcdConn)
//resp, err := cacheClient.UpdateUserInfoToCache(context.Background(), updateUserInfoToCacheReq)
//if err != nil {
// log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error(), updateUserInfoToCacheReq.String())
// return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrServer.ErrCode, ErrMsg: err.Error()}}, nil
//}
//if resp.CommonResp.ErrCode != 0 {
// log.NewError(req.OperationID, utils.GetSelfFuncName(), resp.String())
// return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrServer.ErrCode, ErrMsg: resp.CommonResp.ErrMsg}}, nil
//}
return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{}}, nil return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{}}, nil
} }
func (s *userServer) SetGlobalRecvMessageOpt(ctx context.Context, req *pbUser.SetGlobalRecvMessageOptReq) (*pbUser.SetGlobalRecvMessageOptResp, error) { func (s *userServer) SetGlobalRecvMessageOpt(ctx context.Context, req *pbUser.SetGlobalRecvMessageOptReq) (*pbUser.SetGlobalRecvMessageOptResp, error) {
@ -444,6 +469,7 @@ func (s *userServer) SetGlobalRecvMessageOpt(ctx context.Context, req *pbUser.Se
chat.UserInfoUpdatedNotification(req.OperationID, req.UserID, req.UserID) chat.UserInfoUpdatedNotification(req.OperationID, req.UserID, req.UserID)
return &pbUser.SetGlobalRecvMessageOptResp{CommonResp: &pbUser.CommonResp{}}, nil return &pbUser.SetGlobalRecvMessageOptResp{CommonResp: &pbUser.CommonResp{}}, nil
} }
func (s *userServer) SyncJoinedGroupMemberFaceURL(userID string, faceURL string, operationID string, opUserID string) { func (s *userServer) SyncJoinedGroupMemberFaceURL(userID string, faceURL string, operationID string, opUserID string) {
joinedGroupIDList, err := rocksCache.GetJoinedGroupIDListFromCache(userID) joinedGroupIDList, err := rocksCache.GetJoinedGroupIDListFromCache(userID)
if err != nil { if err != nil {
@ -464,6 +490,33 @@ func (s *userServer) SyncJoinedGroupMemberFaceURL(userID string, faceURL string,
} }
} }
func (s *userServer) SyncJoinedGroupMemberNickname(userID string, newNickname, oldNickname string, operationID string, opUserID string) {
joinedGroupIDList, err := imdb.GetJoinedGroupIDListByUserID(userID)
if err != nil {
log.NewWarn(operationID, "GetJoinedGroupIDListByUserID failed ", userID, err.Error())
return
}
for _, v := range joinedGroupIDList {
member, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(v, userID)
if err != nil {
log.NewWarn(operationID, "GetGroupMemberInfoByGroupIDAndUserID failed ", err.Error(), v, userID)
continue
}
if member.Nickname == oldNickname {
groupMemberInfo := db.GroupMember{UserID: userID, GroupID: v, Nickname: newNickname}
if err := imdb.UpdateGroupMemberInfo(groupMemberInfo); err != nil {
log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), groupMemberInfo)
continue
}
if err := rocksCache.DelAllGroupMembersInfoFromCache(v); err != nil {
log.NewError(operationID, utils.GetSelfFuncName(), err.Error(), v)
continue
}
chat.GroupMemberInfoSetNotification(operationID, opUserID, v, userID)
}
}
}
func (s *userServer) GetUsersByName(ctx context.Context, req *pbUser.GetUsersByNameReq) (*pbUser.GetUsersByNameResp, error) { func (s *userServer) GetUsersByName(ctx context.Context, req *pbUser.GetUsersByNameReq) (*pbUser.GetUsersByNameResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req.String()) log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req.String())
resp := &pbUser.GetUsersByNameResp{} resp := &pbUser.GetUsersByNameResp{}

View File

@ -72,7 +72,7 @@ type GetBlackListResp struct {
type SetFriendRemarkReq struct { type SetFriendRemarkReq struct {
ParamsCommFriend ParamsCommFriend
Remark string `json:"remark" binding:"required"` Remark string `json:"remark"`
} }
type SetFriendRemarkResp struct { type SetFriendRemarkResp struct {
CommResp CommResp

View File

@ -161,10 +161,13 @@ type ApplicationGroupResponseResp struct {
} }
type JoinGroupReq struct { type JoinGroupReq struct {
GroupID string `json:"groupID" binding:"required"` GroupID string `json:"groupID" binding:"required"`
ReqMessage string `json:"reqMessage"` ReqMessage string `json:"reqMessage"`
OperationID string `json:"operationID" binding:"required"` OperationID string `json:"operationID" binding:"required"`
JoinSource int32 `json:"joinSource"`
InviterUserID string `json:"inviterUserID"`
} }
type JoinGroupResp struct { type JoinGroupResp struct {
CommResp CommResp
} }
@ -178,14 +181,16 @@ type QuitGroupResp struct {
} }
type SetGroupInfoReq struct { type SetGroupInfoReq struct {
GroupID string `json:"groupID" binding:"required"` GroupID string `json:"groupID" binding:"required"`
GroupName string `json:"groupName"` GroupName string `json:"groupName"`
Notification string `json:"notification"` Notification string `json:"notification"`
Introduction string `json:"introduction"` Introduction string `json:"introduction"`
FaceURL string `json:"faceURL"` FaceURL string `json:"faceURL"`
Ex string `json:"ex"` Ex string `json:"ex"`
OperationID string `json:"operationID" binding:"required"` OperationID string `json:"operationID" binding:"required"`
NeedVerification *int32 `json:"needVerification" binding "oneof=0 1 2"` NeedVerification *int32 `json:"needVerification" `
LookMemberInfo *int32 `json:"lookMemberInfo"`
ApplyMemberFriend *int32 `json:"applyMemberFriend"`
} }
type SetGroupInfoResp struct { type SetGroupInfoResp struct {

View File

@ -18,3 +18,19 @@ type CleanUpMsgReq struct {
type CleanUpMsgResp struct { type CleanUpMsgResp struct {
CommResp CommResp
} }
type DelSuperGroupMsgReq struct {
UserID string `json:"userID,omitempty" binding:"required"`
GroupID string `json:"groupID,omitempty" binding:"required"`
SeqList []uint32 `json:"seqList,omitempty"`
IsAllDelete bool `json:"isAllDelete"`
OperationID string `json:"operationID,omitempty" binding:"required"`
}
type DelSuperGroupMsgResp struct {
CommResp
}
type MsgDeleteNotificationElem struct {
GroupID string `json:"groupID"`
IsAllDelete bool `json:"isAllDelete"`
SeqList []uint32 `json:"seqList"`
}

View File

@ -32,7 +32,7 @@ type ApiUserInfo struct {
type GroupAddMemberInfo struct { type GroupAddMemberInfo struct {
UserID string `json:"userID" binding:"required"` UserID string `json:"userID" binding:"required"`
RoleLevel int32 `json:"roleLevel" binding:"required"` RoleLevel int32 `json:"roleLevel" binding:"required,oneof= 1 3"`
} }
func SetErrCodeMsg(c *gin.Context, status int) *CommResp { func SetErrCodeMsg(c *gin.Context, status int) *CommResp {

View File

@ -106,6 +106,7 @@ type config struct {
DBMaxIdle int `yaml:"dbMaxIdle"` DBMaxIdle int `yaml:"dbMaxIdle"`
DBMaxActive int `yaml:"dbMaxActive"` DBMaxActive int `yaml:"dbMaxActive"`
DBIdleTimeout int `yaml:"dbIdleTimeout"` DBIdleTimeout int `yaml:"dbIdleTimeout"`
DBUserName string `yaml:"dbUserName"`
DBPassWord string `yaml:"dbPassWord"` DBPassWord string `yaml:"dbPassWord"`
EnableCluster bool `yaml:"enableCluster"` EnableCluster bool `yaml:"enableCluster"`
} }

View File

@ -58,6 +58,7 @@ const (
FriendRemarkSetNotification = 1206 //set_friend_remark? FriendRemarkSetNotification = 1206 //set_friend_remark?
BlackAddedNotification = 1207 //add_black BlackAddedNotification = 1207 //add_black
BlackDeletedNotification = 1208 //remove_black BlackDeletedNotification = 1208 //remove_black
MsgDeleteNotification = 1209
ConversationOptChangeNotification = 1300 // change conversation opt ConversationOptChangeNotification = 1300 // change conversation opt
@ -171,6 +172,10 @@ const (
//UserJoinGroupSource //UserJoinGroupSource
JoinByAdmin = 1 JoinByAdmin = 1
JoinByInvitation = 2
JoinBySearch = 3
JoinByQRCode = 4
//Minio //Minio
MinioDurationTimes = 3600 MinioDurationTimes = 3600
@ -298,3 +303,5 @@ const BigVersion = "v2"
const LogFileName = "OpenIM.log" const LogFileName = "OpenIM.log"
const StatisticsTimeInterval = 60 const StatisticsTimeInterval = 60
const MaxNotificationNum = 100

View File

@ -118,11 +118,14 @@ func init() {
// ) // )
// }, // },
//} //}
fmt.Println("tes", config.Config.Redis.DBUserName, config.Config.Redis.DBPassWord)
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel() defer cancel()
if config.Config.Redis.EnableCluster { if config.Config.Redis.EnableCluster {
DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{ DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{
Addrs: config.Config.Redis.DBAddress, Addrs: config.Config.Redis.DBAddress,
Username: config.Config.Redis.DBUserName,
Password: config.Config.Redis.DBPassWord, // no password set
PoolSize: 50, PoolSize: 50,
}) })
_, err = DB.rdb.Ping(ctx).Result() _, err = DB.rdb.Ping(ctx).Result()
@ -132,6 +135,7 @@ func init() {
} else { } else {
DB.rdb = go_redis.NewClient(&go_redis.Options{ DB.rdb = go_redis.NewClient(&go_redis.Options{
Addr: config.Config.Redis.DBAddress[0], Addr: config.Config.Redis.DBAddress[0],
Username: config.Config.Redis.DBUserName,
Password: config.Config.Redis.DBPassWord, // no password set Password: config.Config.Redis.DBPassWord, // no password set
DB: 0, // use default DB DB: 0, // use default DB
PoolSize: 100, // 连接池大小 PoolSize: 100, // 连接池大小

View File

@ -77,17 +77,21 @@ func (FriendRequest) TableName() string {
type Group struct { type Group struct {
//`json:"operationID" binding:"required"` //`json:"operationID" binding:"required"`
//`protobuf:"bytes,1,opt,name=GroupID" json:"GroupID,omitempty"` `json:"operationID" binding:"required"` //`protobuf:"bytes,1,opt,name=GroupID" json:"GroupID,omitempty"` `json:"operationID" binding:"required"`
GroupID string `gorm:"column:group_id;primary_key;size:64" json:"groupID" binding:"required"` GroupID string `gorm:"column:group_id;primary_key;size:64" json:"groupID" binding:"required"`
GroupName string `gorm:"column:name;size:255" json:"groupName"` GroupName string `gorm:"column:name;size:255" json:"groupName"`
Notification string `gorm:"column:notification;size:255" json:"notification"` Notification string `gorm:"column:notification;size:255" json:"notification"`
Introduction string `gorm:"column:introduction;size:255" json:"introduction"` Introduction string `gorm:"column:introduction;size:255" json:"introduction"`
FaceURL string `gorm:"column:face_url;size:255" json:"faceURL"` FaceURL string `gorm:"column:face_url;size:255" json:"faceURL"`
CreateTime time.Time `gorm:"column:create_time"` CreateTime time.Time `gorm:"column:create_time"`
Ex string `gorm:"column:ex" json:"ex;size:1024" json:"ex"` Ex string `gorm:"column:ex" json:"ex;size:1024" json:"ex"`
Status int32 `gorm:"column:status"` Status int32 `gorm:"column:status"`
CreatorUserID string `gorm:"column:creator_user_id;size:64"` CreatorUserID string `gorm:"column:creator_user_id;size:64"`
GroupType int32 `gorm:"column:group_type"` GroupType int32 `gorm:"column:group_type"`
NeedVerification int32 `gorm:"column:need_verification"` NeedVerification int32 `gorm:"column:need_verification"`
LookMemberInfo int32 `gorm:"column:look_member_info" json:"lookMemberInfo"`
ApplyMemberFriend int32 `gorm:"column:apply_member_friend" json:"applyMemberFriend"`
NotificationUpdateTime time.Time `gorm:"column:notification_update_time"`
NotificationUserID string `gorm:"column:notification_user_id;size:64"`
} }
//message GroupMemberFullInfo { //message GroupMemberFullInfo {
@ -110,6 +114,7 @@ type GroupMember struct {
RoleLevel int32 `gorm:"column:role_level"` RoleLevel int32 `gorm:"column:role_level"`
JoinTime time.Time `gorm:"column:join_time"` JoinTime time.Time `gorm:"column:join_time"`
JoinSource int32 `gorm:"column:join_source"` JoinSource int32 `gorm:"column:join_source"`
InviterUserID string `gorm:"column:inviter_user_id;size:64"`
OperatorUserID string `gorm:"column:operator_user_id;size:64"` OperatorUserID string `gorm:"column:operator_user_id;size:64"`
MuteEndTime time.Time `gorm:"column:mute_end_time"` MuteEndTime time.Time `gorm:"column:mute_end_time"`
Ex string `gorm:"column:ex;size:1024"` Ex string `gorm:"column:ex;size:1024"`
@ -127,15 +132,17 @@ type GroupMember struct {
//string Ex = 9; //string Ex = 9;
//}open_im_sdk.GroupRequest == imdb.GroupRequest //}open_im_sdk.GroupRequest == imdb.GroupRequest
type GroupRequest struct { type GroupRequest struct {
UserID string `gorm:"column:user_id;primary_key;size:64"` UserID string `gorm:"column:user_id;primary_key;size:64"`
GroupID string `gorm:"column:group_id;primary_key;size:64"` GroupID string `gorm:"column:group_id;primary_key;size:64"`
HandleResult int32 `gorm:"column:handle_result"` HandleResult int32 `gorm:"column:handle_result"`
ReqMsg string `gorm:"column:req_msg;size:1024"` ReqMsg string `gorm:"column:req_msg;size:1024"`
HandledMsg string `gorm:"column:handle_msg;size:1024"` HandledMsg string `gorm:"column:handle_msg;size:1024"`
ReqTime time.Time `gorm:"column:req_time"` ReqTime time.Time `gorm:"column:req_time"`
HandleUserID string `gorm:"column:handle_user_id;size:64"` HandleUserID string `gorm:"column:handle_user_id;size:64"`
HandledTime time.Time `gorm:"column:handle_time"` HandledTime time.Time `gorm:"column:handle_time"`
Ex string `gorm:"column:ex;size:1024"` JoinSource int32 `gorm:"column:join_source"`
InviterUserID string `gorm:"column:inviter_user_id;size:64"`
Ex string `gorm:"column:ex;size:1024"`
} }
//string UserID = 1; //string UserID = 1;

View File

@ -3,6 +3,7 @@ package im_mysql_model
import ( import (
"Open_IM/pkg/common/constant" "Open_IM/pkg/common/constant"
"Open_IM/pkg/common/db" "Open_IM/pkg/common/db"
"Open_IM/pkg/utils"
"errors" "errors"
"fmt" "fmt"
"gorm.io/gorm" "gorm.io/gorm"
@ -27,10 +28,15 @@ func InsertIntoGroup(groupInfo db.Group) error {
groupInfo.GroupName = "Group Chat" groupInfo.GroupName = "Group Chat"
} }
groupInfo.CreateTime = time.Now() groupInfo.CreateTime = time.Now()
if groupInfo.NotificationUpdateTime.Unix() < 0 {
groupInfo.NotificationUpdateTime = utils.UnixSecondToTime(0)
}
err := db.DB.MysqlDB.DefaultGormDB().Table("groups").Create(groupInfo).Error err := db.DB.MysqlDB.DefaultGormDB().Table("groups").Create(groupInfo).Error
if err != nil { if err != nil {
return err return err
} }
return nil return nil
} }

View File

@ -99,6 +99,10 @@ func GroupDBCopyOpenIM(dst *open_im_sdk.GroupInfo, src *db.Group) error {
return utils.Wrap(err, "") return utils.Wrap(err, "")
} }
dst.CreateTime = uint32(src.CreateTime.Unix()) dst.CreateTime = uint32(src.CreateTime.Unix())
dst.NotificationUpdateTime = uint32(src.NotificationUpdateTime.Unix())
if src.NotificationUpdateTime.Unix() < 0 {
dst.NotificationUpdateTime = 0
}
return nil return nil
} }
@ -119,7 +123,7 @@ func GroupMemberDBCopyOpenIM(dst *open_im_sdk.GroupMemberFullInfo, src *db.Group
dst.AppMangerLevel = 1 dst.AppMangerLevel = 1
} }
dst.JoinTime = int32(src.JoinTime.Unix()) dst.JoinTime = int32(src.JoinTime.Unix())
if src.MuteEndTime.Unix() < 0 { if src.JoinTime.Unix() < 0 {
dst.JoinTime = 0 dst.JoinTime = 0
return nil return nil
} }

View File

@ -37,7 +37,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} }
func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (m *CommonResp) String() string { return proto.CompactTextString(m) }
func (*CommonResp) ProtoMessage() {} func (*CommonResp) ProtoMessage() {}
func (*CommonResp) Descriptor() ([]byte, []int) { func (*CommonResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{0} return fileDescriptor_group_d529c7a0e85dbd90, []int{0}
} }
func (m *CommonResp) XXX_Unmarshal(b []byte) error { func (m *CommonResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CommonResp.Unmarshal(m, b) return xxx_messageInfo_CommonResp.Unmarshal(m, b)
@ -83,7 +83,7 @@ func (m *GroupAddMemberInfo) Reset() { *m = GroupAddMemberInfo{} }
func (m *GroupAddMemberInfo) String() string { return proto.CompactTextString(m) } func (m *GroupAddMemberInfo) String() string { return proto.CompactTextString(m) }
func (*GroupAddMemberInfo) ProtoMessage() {} func (*GroupAddMemberInfo) ProtoMessage() {}
func (*GroupAddMemberInfo) Descriptor() ([]byte, []int) { func (*GroupAddMemberInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{1} return fileDescriptor_group_d529c7a0e85dbd90, []int{1}
} }
func (m *GroupAddMemberInfo) XXX_Unmarshal(b []byte) error { func (m *GroupAddMemberInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GroupAddMemberInfo.Unmarshal(m, b) return xxx_messageInfo_GroupAddMemberInfo.Unmarshal(m, b)
@ -132,7 +132,7 @@ func (m *CreateGroupReq) Reset() { *m = CreateGroupReq{} }
func (m *CreateGroupReq) String() string { return proto.CompactTextString(m) } func (m *CreateGroupReq) String() string { return proto.CompactTextString(m) }
func (*CreateGroupReq) ProtoMessage() {} func (*CreateGroupReq) ProtoMessage() {}
func (*CreateGroupReq) Descriptor() ([]byte, []int) { func (*CreateGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{2} return fileDescriptor_group_d529c7a0e85dbd90, []int{2}
} }
func (m *CreateGroupReq) XXX_Unmarshal(b []byte) error { func (m *CreateGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CreateGroupReq.Unmarshal(m, b) return xxx_messageInfo_CreateGroupReq.Unmarshal(m, b)
@ -200,7 +200,7 @@ func (m *CreateGroupResp) Reset() { *m = CreateGroupResp{} }
func (m *CreateGroupResp) String() string { return proto.CompactTextString(m) } func (m *CreateGroupResp) String() string { return proto.CompactTextString(m) }
func (*CreateGroupResp) ProtoMessage() {} func (*CreateGroupResp) ProtoMessage() {}
func (*CreateGroupResp) Descriptor() ([]byte, []int) { func (*CreateGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{3} return fileDescriptor_group_d529c7a0e85dbd90, []int{3}
} }
func (m *CreateGroupResp) XXX_Unmarshal(b []byte) error { func (m *CreateGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CreateGroupResp.Unmarshal(m, b) return xxx_messageInfo_CreateGroupResp.Unmarshal(m, b)
@ -254,7 +254,7 @@ func (m *GetGroupsInfoReq) Reset() { *m = GetGroupsInfoReq{} }
func (m *GetGroupsInfoReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupsInfoReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupsInfoReq) ProtoMessage() {} func (*GetGroupsInfoReq) ProtoMessage() {}
func (*GetGroupsInfoReq) Descriptor() ([]byte, []int) { func (*GetGroupsInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{4} return fileDescriptor_group_d529c7a0e85dbd90, []int{4}
} }
func (m *GetGroupsInfoReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupsInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupsInfoReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupsInfoReq.Unmarshal(m, b)
@ -308,7 +308,7 @@ func (m *GetGroupsInfoResp) Reset() { *m = GetGroupsInfoResp{} }
func (m *GetGroupsInfoResp) String() string { return proto.CompactTextString(m) } func (m *GetGroupsInfoResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupsInfoResp) ProtoMessage() {} func (*GetGroupsInfoResp) ProtoMessage() {}
func (*GetGroupsInfoResp) Descriptor() ([]byte, []int) { func (*GetGroupsInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{5} return fileDescriptor_group_d529c7a0e85dbd90, []int{5}
} }
func (m *GetGroupsInfoResp) XXX_Unmarshal(b []byte) error { func (m *GetGroupsInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupsInfoResp.Unmarshal(m, b) return xxx_messageInfo_GetGroupsInfoResp.Unmarshal(m, b)
@ -362,7 +362,7 @@ func (m *SetGroupInfoReq) Reset() { *m = SetGroupInfoReq{} }
func (m *SetGroupInfoReq) String() string { return proto.CompactTextString(m) } func (m *SetGroupInfoReq) String() string { return proto.CompactTextString(m) }
func (*SetGroupInfoReq) ProtoMessage() {} func (*SetGroupInfoReq) ProtoMessage() {}
func (*SetGroupInfoReq) Descriptor() ([]byte, []int) { func (*SetGroupInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{6} return fileDescriptor_group_d529c7a0e85dbd90, []int{6}
} }
func (m *SetGroupInfoReq) XXX_Unmarshal(b []byte) error { func (m *SetGroupInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetGroupInfoReq.Unmarshal(m, b) return xxx_messageInfo_SetGroupInfoReq.Unmarshal(m, b)
@ -414,7 +414,7 @@ func (m *SetGroupInfoResp) Reset() { *m = SetGroupInfoResp{} }
func (m *SetGroupInfoResp) String() string { return proto.CompactTextString(m) } func (m *SetGroupInfoResp) String() string { return proto.CompactTextString(m) }
func (*SetGroupInfoResp) ProtoMessage() {} func (*SetGroupInfoResp) ProtoMessage() {}
func (*SetGroupInfoResp) Descriptor() ([]byte, []int) { func (*SetGroupInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{7} return fileDescriptor_group_d529c7a0e85dbd90, []int{7}
} }
func (m *SetGroupInfoResp) XXX_Unmarshal(b []byte) error { func (m *SetGroupInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetGroupInfoResp.Unmarshal(m, b) return xxx_messageInfo_SetGroupInfoResp.Unmarshal(m, b)
@ -454,7 +454,7 @@ func (m *GetGroupApplicationListReq) Reset() { *m = GetGroupApplicationL
func (m *GetGroupApplicationListReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupApplicationListReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupApplicationListReq) ProtoMessage() {} func (*GetGroupApplicationListReq) ProtoMessage() {}
func (*GetGroupApplicationListReq) Descriptor() ([]byte, []int) { func (*GetGroupApplicationListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{8} return fileDescriptor_group_d529c7a0e85dbd90, []int{8}
} }
func (m *GetGroupApplicationListReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupApplicationListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupApplicationListReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupApplicationListReq.Unmarshal(m, b)
@ -508,7 +508,7 @@ func (m *GetGroupApplicationListResp) Reset() { *m = GetGroupApplication
func (m *GetGroupApplicationListResp) String() string { return proto.CompactTextString(m) } func (m *GetGroupApplicationListResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupApplicationListResp) ProtoMessage() {} func (*GetGroupApplicationListResp) ProtoMessage() {}
func (*GetGroupApplicationListResp) Descriptor() ([]byte, []int) { func (*GetGroupApplicationListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{9} return fileDescriptor_group_d529c7a0e85dbd90, []int{9}
} }
func (m *GetGroupApplicationListResp) XXX_Unmarshal(b []byte) error { func (m *GetGroupApplicationListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupApplicationListResp.Unmarshal(m, b) return xxx_messageInfo_GetGroupApplicationListResp.Unmarshal(m, b)
@ -562,7 +562,7 @@ func (m *GetUserReqApplicationListReq) Reset() { *m = GetUserReqApplicat
func (m *GetUserReqApplicationListReq) String() string { return proto.CompactTextString(m) } func (m *GetUserReqApplicationListReq) String() string { return proto.CompactTextString(m) }
func (*GetUserReqApplicationListReq) ProtoMessage() {} func (*GetUserReqApplicationListReq) ProtoMessage() {}
func (*GetUserReqApplicationListReq) Descriptor() ([]byte, []int) { func (*GetUserReqApplicationListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{10} return fileDescriptor_group_d529c7a0e85dbd90, []int{10}
} }
func (m *GetUserReqApplicationListReq) XXX_Unmarshal(b []byte) error { func (m *GetUserReqApplicationListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserReqApplicationListReq.Unmarshal(m, b) return xxx_messageInfo_GetUserReqApplicationListReq.Unmarshal(m, b)
@ -615,7 +615,7 @@ func (m *GetUserReqApplicationListResp) Reset() { *m = GetUserReqApplica
func (m *GetUserReqApplicationListResp) String() string { return proto.CompactTextString(m) } func (m *GetUserReqApplicationListResp) String() string { return proto.CompactTextString(m) }
func (*GetUserReqApplicationListResp) ProtoMessage() {} func (*GetUserReqApplicationListResp) ProtoMessage() {}
func (*GetUserReqApplicationListResp) Descriptor() ([]byte, []int) { func (*GetUserReqApplicationListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{11} return fileDescriptor_group_d529c7a0e85dbd90, []int{11}
} }
func (m *GetUserReqApplicationListResp) XXX_Unmarshal(b []byte) error { func (m *GetUserReqApplicationListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserReqApplicationListResp.Unmarshal(m, b) return xxx_messageInfo_GetUserReqApplicationListResp.Unmarshal(m, b)
@ -664,7 +664,7 @@ func (m *TransferGroupOwnerReq) Reset() { *m = TransferGroupOwnerReq{} }
func (m *TransferGroupOwnerReq) String() string { return proto.CompactTextString(m) } func (m *TransferGroupOwnerReq) String() string { return proto.CompactTextString(m) }
func (*TransferGroupOwnerReq) ProtoMessage() {} func (*TransferGroupOwnerReq) ProtoMessage() {}
func (*TransferGroupOwnerReq) Descriptor() ([]byte, []int) { func (*TransferGroupOwnerReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{12} return fileDescriptor_group_d529c7a0e85dbd90, []int{12}
} }
func (m *TransferGroupOwnerReq) XXX_Unmarshal(b []byte) error { func (m *TransferGroupOwnerReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TransferGroupOwnerReq.Unmarshal(m, b) return xxx_messageInfo_TransferGroupOwnerReq.Unmarshal(m, b)
@ -730,7 +730,7 @@ func (m *TransferGroupOwnerResp) Reset() { *m = TransferGroupOwnerResp{}
func (m *TransferGroupOwnerResp) String() string { return proto.CompactTextString(m) } func (m *TransferGroupOwnerResp) String() string { return proto.CompactTextString(m) }
func (*TransferGroupOwnerResp) ProtoMessage() {} func (*TransferGroupOwnerResp) ProtoMessage() {}
func (*TransferGroupOwnerResp) Descriptor() ([]byte, []int) { func (*TransferGroupOwnerResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{13} return fileDescriptor_group_d529c7a0e85dbd90, []int{13}
} }
func (m *TransferGroupOwnerResp) XXX_Unmarshal(b []byte) error { func (m *TransferGroupOwnerResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TransferGroupOwnerResp.Unmarshal(m, b) return xxx_messageInfo_TransferGroupOwnerResp.Unmarshal(m, b)
@ -762,6 +762,8 @@ type JoinGroupReq struct {
ReqMessage string `protobuf:"bytes,2,opt,name=ReqMessage" json:"ReqMessage,omitempty"` ReqMessage string `protobuf:"bytes,2,opt,name=ReqMessage" json:"ReqMessage,omitempty"`
OpUserID string `protobuf:"bytes,3,opt,name=OpUserID" json:"OpUserID,omitempty"` OpUserID string `protobuf:"bytes,3,opt,name=OpUserID" json:"OpUserID,omitempty"`
OperationID string `protobuf:"bytes,4,opt,name=OperationID" json:"OperationID,omitempty"` OperationID string `protobuf:"bytes,4,opt,name=OperationID" json:"OperationID,omitempty"`
JoinSource int32 `protobuf:"varint,5,opt,name=JoinSource" json:"JoinSource,omitempty"`
InviterUserID string `protobuf:"bytes,6,opt,name=InviterUserID" json:"InviterUserID,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
@ -771,7 +773,7 @@ func (m *JoinGroupReq) Reset() { *m = JoinGroupReq{} }
func (m *JoinGroupReq) String() string { return proto.CompactTextString(m) } func (m *JoinGroupReq) String() string { return proto.CompactTextString(m) }
func (*JoinGroupReq) ProtoMessage() {} func (*JoinGroupReq) ProtoMessage() {}
func (*JoinGroupReq) Descriptor() ([]byte, []int) { func (*JoinGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{14} return fileDescriptor_group_d529c7a0e85dbd90, []int{14}
} }
func (m *JoinGroupReq) XXX_Unmarshal(b []byte) error { func (m *JoinGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_JoinGroupReq.Unmarshal(m, b) return xxx_messageInfo_JoinGroupReq.Unmarshal(m, b)
@ -819,6 +821,20 @@ func (m *JoinGroupReq) GetOperationID() string {
return "" return ""
} }
func (m *JoinGroupReq) GetJoinSource() int32 {
if m != nil {
return m.JoinSource
}
return 0
}
func (m *JoinGroupReq) GetInviterUserID() string {
if m != nil {
return m.InviterUserID
}
return ""
}
type JoinGroupResp struct { type JoinGroupResp struct {
CommonResp *CommonResp `protobuf:"bytes,1,opt,name=CommonResp" json:"CommonResp,omitempty"` CommonResp *CommonResp `protobuf:"bytes,1,opt,name=CommonResp" json:"CommonResp,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
@ -830,7 +846,7 @@ func (m *JoinGroupResp) Reset() { *m = JoinGroupResp{} }
func (m *JoinGroupResp) String() string { return proto.CompactTextString(m) } func (m *JoinGroupResp) String() string { return proto.CompactTextString(m) }
func (*JoinGroupResp) ProtoMessage() {} func (*JoinGroupResp) ProtoMessage() {}
func (*JoinGroupResp) Descriptor() ([]byte, []int) { func (*JoinGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{15} return fileDescriptor_group_d529c7a0e85dbd90, []int{15}
} }
func (m *JoinGroupResp) XXX_Unmarshal(b []byte) error { func (m *JoinGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_JoinGroupResp.Unmarshal(m, b) return xxx_messageInfo_JoinGroupResp.Unmarshal(m, b)
@ -873,7 +889,7 @@ func (m *GroupApplicationResponseReq) Reset() { *m = GroupApplicationRes
func (m *GroupApplicationResponseReq) String() string { return proto.CompactTextString(m) } func (m *GroupApplicationResponseReq) String() string { return proto.CompactTextString(m) }
func (*GroupApplicationResponseReq) ProtoMessage() {} func (*GroupApplicationResponseReq) ProtoMessage() {}
func (*GroupApplicationResponseReq) Descriptor() ([]byte, []int) { func (*GroupApplicationResponseReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{16} return fileDescriptor_group_d529c7a0e85dbd90, []int{16}
} }
func (m *GroupApplicationResponseReq) XXX_Unmarshal(b []byte) error { func (m *GroupApplicationResponseReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GroupApplicationResponseReq.Unmarshal(m, b) return xxx_messageInfo_GroupApplicationResponseReq.Unmarshal(m, b)
@ -946,7 +962,7 @@ func (m *GroupApplicationResponseResp) Reset() { *m = GroupApplicationRe
func (m *GroupApplicationResponseResp) String() string { return proto.CompactTextString(m) } func (m *GroupApplicationResponseResp) String() string { return proto.CompactTextString(m) }
func (*GroupApplicationResponseResp) ProtoMessage() {} func (*GroupApplicationResponseResp) ProtoMessage() {}
func (*GroupApplicationResponseResp) Descriptor() ([]byte, []int) { func (*GroupApplicationResponseResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{17} return fileDescriptor_group_d529c7a0e85dbd90, []int{17}
} }
func (m *GroupApplicationResponseResp) XXX_Unmarshal(b []byte) error { func (m *GroupApplicationResponseResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GroupApplicationResponseResp.Unmarshal(m, b) return xxx_messageInfo_GroupApplicationResponseResp.Unmarshal(m, b)
@ -986,7 +1002,7 @@ func (m *QuitGroupReq) Reset() { *m = QuitGroupReq{} }
func (m *QuitGroupReq) String() string { return proto.CompactTextString(m) } func (m *QuitGroupReq) String() string { return proto.CompactTextString(m) }
func (*QuitGroupReq) ProtoMessage() {} func (*QuitGroupReq) ProtoMessage() {}
func (*QuitGroupReq) Descriptor() ([]byte, []int) { func (*QuitGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{18} return fileDescriptor_group_d529c7a0e85dbd90, []int{18}
} }
func (m *QuitGroupReq) XXX_Unmarshal(b []byte) error { func (m *QuitGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_QuitGroupReq.Unmarshal(m, b) return xxx_messageInfo_QuitGroupReq.Unmarshal(m, b)
@ -1038,7 +1054,7 @@ func (m *QuitGroupResp) Reset() { *m = QuitGroupResp{} }
func (m *QuitGroupResp) String() string { return proto.CompactTextString(m) } func (m *QuitGroupResp) String() string { return proto.CompactTextString(m) }
func (*QuitGroupResp) ProtoMessage() {} func (*QuitGroupResp) ProtoMessage() {}
func (*QuitGroupResp) Descriptor() ([]byte, []int) { func (*QuitGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{19} return fileDescriptor_group_d529c7a0e85dbd90, []int{19}
} }
func (m *QuitGroupResp) XXX_Unmarshal(b []byte) error { func (m *QuitGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_QuitGroupResp.Unmarshal(m, b) return xxx_messageInfo_QuitGroupResp.Unmarshal(m, b)
@ -1080,7 +1096,7 @@ func (m *GetGroupMemberListReq) Reset() { *m = GetGroupMemberListReq{} }
func (m *GetGroupMemberListReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupMemberListReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupMemberListReq) ProtoMessage() {} func (*GetGroupMemberListReq) ProtoMessage() {}
func (*GetGroupMemberListReq) Descriptor() ([]byte, []int) { func (*GetGroupMemberListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{20} return fileDescriptor_group_d529c7a0e85dbd90, []int{20}
} }
func (m *GetGroupMemberListReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupMemberListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMemberListReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupMemberListReq.Unmarshal(m, b)
@ -1149,7 +1165,7 @@ func (m *GetGroupMemberListResp) Reset() { *m = GetGroupMemberListResp{}
func (m *GetGroupMemberListResp) String() string { return proto.CompactTextString(m) } func (m *GetGroupMemberListResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupMemberListResp) ProtoMessage() {} func (*GetGroupMemberListResp) ProtoMessage() {}
func (*GetGroupMemberListResp) Descriptor() ([]byte, []int) { func (*GetGroupMemberListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{21} return fileDescriptor_group_d529c7a0e85dbd90, []int{21}
} }
func (m *GetGroupMemberListResp) XXX_Unmarshal(b []byte) error { func (m *GetGroupMemberListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMemberListResp.Unmarshal(m, b) return xxx_messageInfo_GetGroupMemberListResp.Unmarshal(m, b)
@ -1211,7 +1227,7 @@ func (m *GetGroupMembersInfoReq) Reset() { *m = GetGroupMembersInfoReq{}
func (m *GetGroupMembersInfoReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupMembersInfoReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupMembersInfoReq) ProtoMessage() {} func (*GetGroupMembersInfoReq) ProtoMessage() {}
func (*GetGroupMembersInfoReq) Descriptor() ([]byte, []int) { func (*GetGroupMembersInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{22} return fileDescriptor_group_d529c7a0e85dbd90, []int{22}
} }
func (m *GetGroupMembersInfoReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupMembersInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMembersInfoReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupMembersInfoReq.Unmarshal(m, b)
@ -1272,7 +1288,7 @@ func (m *GetGroupMembersInfoResp) Reset() { *m = GetGroupMembersInfoResp
func (m *GetGroupMembersInfoResp) String() string { return proto.CompactTextString(m) } func (m *GetGroupMembersInfoResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupMembersInfoResp) ProtoMessage() {} func (*GetGroupMembersInfoResp) ProtoMessage() {}
func (*GetGroupMembersInfoResp) Descriptor() ([]byte, []int) { func (*GetGroupMembersInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{23} return fileDescriptor_group_d529c7a0e85dbd90, []int{23}
} }
func (m *GetGroupMembersInfoResp) XXX_Unmarshal(b []byte) error { func (m *GetGroupMembersInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMembersInfoResp.Unmarshal(m, b) return xxx_messageInfo_GetGroupMembersInfoResp.Unmarshal(m, b)
@ -1328,7 +1344,7 @@ func (m *KickGroupMemberReq) Reset() { *m = KickGroupMemberReq{} }
func (m *KickGroupMemberReq) String() string { return proto.CompactTextString(m) } func (m *KickGroupMemberReq) String() string { return proto.CompactTextString(m) }
func (*KickGroupMemberReq) ProtoMessage() {} func (*KickGroupMemberReq) ProtoMessage() {}
func (*KickGroupMemberReq) Descriptor() ([]byte, []int) { func (*KickGroupMemberReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{24} return fileDescriptor_group_d529c7a0e85dbd90, []int{24}
} }
func (m *KickGroupMemberReq) XXX_Unmarshal(b []byte) error { func (m *KickGroupMemberReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_KickGroupMemberReq.Unmarshal(m, b) return xxx_messageInfo_KickGroupMemberReq.Unmarshal(m, b)
@ -1395,7 +1411,7 @@ func (m *Id2Result) Reset() { *m = Id2Result{} }
func (m *Id2Result) String() string { return proto.CompactTextString(m) } func (m *Id2Result) String() string { return proto.CompactTextString(m) }
func (*Id2Result) ProtoMessage() {} func (*Id2Result) ProtoMessage() {}
func (*Id2Result) Descriptor() ([]byte, []int) { func (*Id2Result) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{25} return fileDescriptor_group_d529c7a0e85dbd90, []int{25}
} }
func (m *Id2Result) XXX_Unmarshal(b []byte) error { func (m *Id2Result) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Id2Result.Unmarshal(m, b) return xxx_messageInfo_Id2Result.Unmarshal(m, b)
@ -1442,7 +1458,7 @@ func (m *KickGroupMemberResp) Reset() { *m = KickGroupMemberResp{} }
func (m *KickGroupMemberResp) String() string { return proto.CompactTextString(m) } func (m *KickGroupMemberResp) String() string { return proto.CompactTextString(m) }
func (*KickGroupMemberResp) ProtoMessage() {} func (*KickGroupMemberResp) ProtoMessage() {}
func (*KickGroupMemberResp) Descriptor() ([]byte, []int) { func (*KickGroupMemberResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{26} return fileDescriptor_group_d529c7a0e85dbd90, []int{26}
} }
func (m *KickGroupMemberResp) XXX_Unmarshal(b []byte) error { func (m *KickGroupMemberResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_KickGroupMemberResp.Unmarshal(m, b) return xxx_messageInfo_KickGroupMemberResp.Unmarshal(m, b)
@ -1496,7 +1512,7 @@ func (m *GetJoinedGroupListReq) Reset() { *m = GetJoinedGroupListReq{} }
func (m *GetJoinedGroupListReq) String() string { return proto.CompactTextString(m) } func (m *GetJoinedGroupListReq) String() string { return proto.CompactTextString(m) }
func (*GetJoinedGroupListReq) ProtoMessage() {} func (*GetJoinedGroupListReq) ProtoMessage() {}
func (*GetJoinedGroupListReq) Descriptor() ([]byte, []int) { func (*GetJoinedGroupListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{27} return fileDescriptor_group_d529c7a0e85dbd90, []int{27}
} }
func (m *GetJoinedGroupListReq) XXX_Unmarshal(b []byte) error { func (m *GetJoinedGroupListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetJoinedGroupListReq.Unmarshal(m, b) return xxx_messageInfo_GetJoinedGroupListReq.Unmarshal(m, b)
@ -1550,7 +1566,7 @@ func (m *GetJoinedGroupListResp) Reset() { *m = GetJoinedGroupListResp{}
func (m *GetJoinedGroupListResp) String() string { return proto.CompactTextString(m) } func (m *GetJoinedGroupListResp) String() string { return proto.CompactTextString(m) }
func (*GetJoinedGroupListResp) ProtoMessage() {} func (*GetJoinedGroupListResp) ProtoMessage() {}
func (*GetJoinedGroupListResp) Descriptor() ([]byte, []int) { func (*GetJoinedGroupListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{28} return fileDescriptor_group_d529c7a0e85dbd90, []int{28}
} }
func (m *GetJoinedGroupListResp) XXX_Unmarshal(b []byte) error { func (m *GetJoinedGroupListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetJoinedGroupListResp.Unmarshal(m, b) return xxx_messageInfo_GetJoinedGroupListResp.Unmarshal(m, b)
@ -1606,7 +1622,7 @@ func (m *InviteUserToGroupReq) Reset() { *m = InviteUserToGroupReq{} }
func (m *InviteUserToGroupReq) String() string { return proto.CompactTextString(m) } func (m *InviteUserToGroupReq) String() string { return proto.CompactTextString(m) }
func (*InviteUserToGroupReq) ProtoMessage() {} func (*InviteUserToGroupReq) ProtoMessage() {}
func (*InviteUserToGroupReq) Descriptor() ([]byte, []int) { func (*InviteUserToGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{29} return fileDescriptor_group_d529c7a0e85dbd90, []int{29}
} }
func (m *InviteUserToGroupReq) XXX_Unmarshal(b []byte) error { func (m *InviteUserToGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InviteUserToGroupReq.Unmarshal(m, b) return xxx_messageInfo_InviteUserToGroupReq.Unmarshal(m, b)
@ -1674,7 +1690,7 @@ func (m *InviteUserToGroupResp) Reset() { *m = InviteUserToGroupResp{} }
func (m *InviteUserToGroupResp) String() string { return proto.CompactTextString(m) } func (m *InviteUserToGroupResp) String() string { return proto.CompactTextString(m) }
func (*InviteUserToGroupResp) ProtoMessage() {} func (*InviteUserToGroupResp) ProtoMessage() {}
func (*InviteUserToGroupResp) Descriptor() ([]byte, []int) { func (*InviteUserToGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{30} return fileDescriptor_group_d529c7a0e85dbd90, []int{30}
} }
func (m *InviteUserToGroupResp) XXX_Unmarshal(b []byte) error { func (m *InviteUserToGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InviteUserToGroupResp.Unmarshal(m, b) return xxx_messageInfo_InviteUserToGroupResp.Unmarshal(m, b)
@ -1728,7 +1744,7 @@ func (m *GetGroupAllMemberReq) Reset() { *m = GetGroupAllMemberReq{} }
func (m *GetGroupAllMemberReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupAllMemberReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupAllMemberReq) ProtoMessage() {} func (*GetGroupAllMemberReq) ProtoMessage() {}
func (*GetGroupAllMemberReq) Descriptor() ([]byte, []int) { func (*GetGroupAllMemberReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{31} return fileDescriptor_group_d529c7a0e85dbd90, []int{31}
} }
func (m *GetGroupAllMemberReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupAllMemberReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupAllMemberReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupAllMemberReq.Unmarshal(m, b)
@ -1782,7 +1798,7 @@ func (m *GetGroupAllMemberResp) Reset() { *m = GetGroupAllMemberResp{} }
func (m *GetGroupAllMemberResp) String() string { return proto.CompactTextString(m) } func (m *GetGroupAllMemberResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupAllMemberResp) ProtoMessage() {} func (*GetGroupAllMemberResp) ProtoMessage() {}
func (*GetGroupAllMemberResp) Descriptor() ([]byte, []int) { func (*GetGroupAllMemberResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{32} return fileDescriptor_group_d529c7a0e85dbd90, []int{32}
} }
func (m *GetGroupAllMemberResp) XXX_Unmarshal(b []byte) error { func (m *GetGroupAllMemberResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupAllMemberResp.Unmarshal(m, b) return xxx_messageInfo_GetGroupAllMemberResp.Unmarshal(m, b)
@ -1836,7 +1852,7 @@ func (m *CMSGroup) Reset() { *m = CMSGroup{} }
func (m *CMSGroup) String() string { return proto.CompactTextString(m) } func (m *CMSGroup) String() string { return proto.CompactTextString(m) }
func (*CMSGroup) ProtoMessage() {} func (*CMSGroup) ProtoMessage() {}
func (*CMSGroup) Descriptor() ([]byte, []int) { func (*CMSGroup) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{33} return fileDescriptor_group_d529c7a0e85dbd90, []int{33}
} }
func (m *CMSGroup) XXX_Unmarshal(b []byte) error { func (m *CMSGroup) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CMSGroup.Unmarshal(m, b) return xxx_messageInfo_CMSGroup.Unmarshal(m, b)
@ -1890,7 +1906,7 @@ func (m *GetGroupReq) Reset() { *m = GetGroupReq{} }
func (m *GetGroupReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupReq) ProtoMessage() {} func (*GetGroupReq) ProtoMessage() {}
func (*GetGroupReq) Descriptor() ([]byte, []int) { func (*GetGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{34} return fileDescriptor_group_d529c7a0e85dbd90, []int{34}
} }
func (m *GetGroupReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupReq.Unmarshal(m, b)
@ -1944,7 +1960,7 @@ func (m *GetGroupResp) Reset() { *m = GetGroupResp{} }
func (m *GetGroupResp) String() string { return proto.CompactTextString(m) } func (m *GetGroupResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupResp) ProtoMessage() {} func (*GetGroupResp) ProtoMessage() {}
func (*GetGroupResp) Descriptor() ([]byte, []int) { func (*GetGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{35} return fileDescriptor_group_d529c7a0e85dbd90, []int{35}
} }
func (m *GetGroupResp) XXX_Unmarshal(b []byte) error { func (m *GetGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupResp.Unmarshal(m, b) return xxx_messageInfo_GetGroupResp.Unmarshal(m, b)
@ -1997,7 +2013,7 @@ func (m *GetGroupsReq) Reset() { *m = GetGroupsReq{} }
func (m *GetGroupsReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupsReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupsReq) ProtoMessage() {} func (*GetGroupsReq) ProtoMessage() {}
func (*GetGroupsReq) Descriptor() ([]byte, []int) { func (*GetGroupsReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{36} return fileDescriptor_group_d529c7a0e85dbd90, []int{36}
} }
func (m *GetGroupsReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupsReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupsReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupsReq.Unmarshal(m, b)
@ -2044,7 +2060,7 @@ func (m *GetGroupsResp) Reset() { *m = GetGroupsResp{} }
func (m *GetGroupsResp) String() string { return proto.CompactTextString(m) } func (m *GetGroupsResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupsResp) ProtoMessage() {} func (*GetGroupsResp) ProtoMessage() {}
func (*GetGroupsResp) Descriptor() ([]byte, []int) { func (*GetGroupsResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{37} return fileDescriptor_group_d529c7a0e85dbd90, []int{37}
} }
func (m *GetGroupsResp) XXX_Unmarshal(b []byte) error { func (m *GetGroupsResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupsResp.Unmarshal(m, b) return xxx_messageInfo_GetGroupsResp.Unmarshal(m, b)
@ -2097,7 +2113,7 @@ func (m *GetGroupMemberReq) Reset() { *m = GetGroupMemberReq{} }
func (m *GetGroupMemberReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupMemberReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupMemberReq) ProtoMessage() {} func (*GetGroupMemberReq) ProtoMessage() {}
func (*GetGroupMemberReq) Descriptor() ([]byte, []int) { func (*GetGroupMemberReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{38} return fileDescriptor_group_d529c7a0e85dbd90, []int{38}
} }
func (m *GetGroupMemberReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupMemberReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMemberReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupMemberReq.Unmarshal(m, b)
@ -2144,7 +2160,7 @@ func (m *OperateGroupStatusReq) Reset() { *m = OperateGroupStatusReq{} }
func (m *OperateGroupStatusReq) String() string { return proto.CompactTextString(m) } func (m *OperateGroupStatusReq) String() string { return proto.CompactTextString(m) }
func (*OperateGroupStatusReq) ProtoMessage() {} func (*OperateGroupStatusReq) ProtoMessage() {}
func (*OperateGroupStatusReq) Descriptor() ([]byte, []int) { func (*OperateGroupStatusReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{39} return fileDescriptor_group_d529c7a0e85dbd90, []int{39}
} }
func (m *OperateGroupStatusReq) XXX_Unmarshal(b []byte) error { func (m *OperateGroupStatusReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_OperateGroupStatusReq.Unmarshal(m, b) return xxx_messageInfo_OperateGroupStatusReq.Unmarshal(m, b)
@ -2195,7 +2211,7 @@ func (m *OperateGroupStatusResp) Reset() { *m = OperateGroupStatusResp{}
func (m *OperateGroupStatusResp) String() string { return proto.CompactTextString(m) } func (m *OperateGroupStatusResp) String() string { return proto.CompactTextString(m) }
func (*OperateGroupStatusResp) ProtoMessage() {} func (*OperateGroupStatusResp) ProtoMessage() {}
func (*OperateGroupStatusResp) Descriptor() ([]byte, []int) { func (*OperateGroupStatusResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{40} return fileDescriptor_group_d529c7a0e85dbd90, []int{40}
} }
func (m *OperateGroupStatusResp) XXX_Unmarshal(b []byte) error { func (m *OperateGroupStatusResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_OperateGroupStatusResp.Unmarshal(m, b) return xxx_messageInfo_OperateGroupStatusResp.Unmarshal(m, b)
@ -2229,7 +2245,7 @@ func (m *OperateUserRoleReq) Reset() { *m = OperateUserRoleReq{} }
func (m *OperateUserRoleReq) String() string { return proto.CompactTextString(m) } func (m *OperateUserRoleReq) String() string { return proto.CompactTextString(m) }
func (*OperateUserRoleReq) ProtoMessage() {} func (*OperateUserRoleReq) ProtoMessage() {}
func (*OperateUserRoleReq) Descriptor() ([]byte, []int) { func (*OperateUserRoleReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{41} return fileDescriptor_group_d529c7a0e85dbd90, []int{41}
} }
func (m *OperateUserRoleReq) XXX_Unmarshal(b []byte) error { func (m *OperateUserRoleReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_OperateUserRoleReq.Unmarshal(m, b) return xxx_messageInfo_OperateUserRoleReq.Unmarshal(m, b)
@ -2287,7 +2303,7 @@ func (m *OperateUserRoleResp) Reset() { *m = OperateUserRoleResp{} }
func (m *OperateUserRoleResp) String() string { return proto.CompactTextString(m) } func (m *OperateUserRoleResp) String() string { return proto.CompactTextString(m) }
func (*OperateUserRoleResp) ProtoMessage() {} func (*OperateUserRoleResp) ProtoMessage() {}
func (*OperateUserRoleResp) Descriptor() ([]byte, []int) { func (*OperateUserRoleResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{42} return fileDescriptor_group_d529c7a0e85dbd90, []int{42}
} }
func (m *OperateUserRoleResp) XXX_Unmarshal(b []byte) error { func (m *OperateUserRoleResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_OperateUserRoleResp.Unmarshal(m, b) return xxx_messageInfo_OperateUserRoleResp.Unmarshal(m, b)
@ -2319,7 +2335,7 @@ func (m *DeleteGroupReq) Reset() { *m = DeleteGroupReq{} }
func (m *DeleteGroupReq) String() string { return proto.CompactTextString(m) } func (m *DeleteGroupReq) String() string { return proto.CompactTextString(m) }
func (*DeleteGroupReq) ProtoMessage() {} func (*DeleteGroupReq) ProtoMessage() {}
func (*DeleteGroupReq) Descriptor() ([]byte, []int) { func (*DeleteGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{43} return fileDescriptor_group_d529c7a0e85dbd90, []int{43}
} }
func (m *DeleteGroupReq) XXX_Unmarshal(b []byte) error { func (m *DeleteGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DeleteGroupReq.Unmarshal(m, b) return xxx_messageInfo_DeleteGroupReq.Unmarshal(m, b)
@ -2363,7 +2379,7 @@ func (m *DeleteGroupResp) Reset() { *m = DeleteGroupResp{} }
func (m *DeleteGroupResp) String() string { return proto.CompactTextString(m) } func (m *DeleteGroupResp) String() string { return proto.CompactTextString(m) }
func (*DeleteGroupResp) ProtoMessage() {} func (*DeleteGroupResp) ProtoMessage() {}
func (*DeleteGroupResp) Descriptor() ([]byte, []int) { func (*DeleteGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{44} return fileDescriptor_group_d529c7a0e85dbd90, []int{44}
} }
func (m *DeleteGroupResp) XXX_Unmarshal(b []byte) error { func (m *DeleteGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DeleteGroupResp.Unmarshal(m, b) return xxx_messageInfo_DeleteGroupResp.Unmarshal(m, b)
@ -2395,7 +2411,7 @@ func (m *GetGroupByIdReq) Reset() { *m = GetGroupByIdReq{} }
func (m *GetGroupByIdReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupByIdReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupByIdReq) ProtoMessage() {} func (*GetGroupByIdReq) ProtoMessage() {}
func (*GetGroupByIdReq) Descriptor() ([]byte, []int) { func (*GetGroupByIdReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{45} return fileDescriptor_group_d529c7a0e85dbd90, []int{45}
} }
func (m *GetGroupByIdReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupByIdReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupByIdReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupByIdReq.Unmarshal(m, b)
@ -2440,7 +2456,7 @@ func (m *GetGroupByIdResp) Reset() { *m = GetGroupByIdResp{} }
func (m *GetGroupByIdResp) String() string { return proto.CompactTextString(m) } func (m *GetGroupByIdResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupByIdResp) ProtoMessage() {} func (*GetGroupByIdResp) ProtoMessage() {}
func (*GetGroupByIdResp) Descriptor() ([]byte, []int) { func (*GetGroupByIdResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{46} return fileDescriptor_group_d529c7a0e85dbd90, []int{46}
} }
func (m *GetGroupByIdResp) XXX_Unmarshal(b []byte) error { func (m *GetGroupByIdResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupByIdResp.Unmarshal(m, b) return xxx_messageInfo_GetGroupByIdResp.Unmarshal(m, b)
@ -2481,7 +2497,7 @@ func (m *GetGroupMembersCMSReq) Reset() { *m = GetGroupMembersCMSReq{} }
func (m *GetGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupMembersCMSReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupMembersCMSReq) ProtoMessage() {} func (*GetGroupMembersCMSReq) ProtoMessage() {}
func (*GetGroupMembersCMSReq) Descriptor() ([]byte, []int) { func (*GetGroupMembersCMSReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{47} return fileDescriptor_group_d529c7a0e85dbd90, []int{47}
} }
func (m *GetGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupMembersCMSReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMembersCMSReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupMembersCMSReq.Unmarshal(m, b)
@ -2542,7 +2558,7 @@ func (m *GetGroupMembersCMSResp) Reset() { *m = GetGroupMembersCMSResp{}
func (m *GetGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (m *GetGroupMembersCMSResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupMembersCMSResp) ProtoMessage() {} func (*GetGroupMembersCMSResp) ProtoMessage() {}
func (*GetGroupMembersCMSResp) Descriptor() ([]byte, []int) { func (*GetGroupMembersCMSResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{48} return fileDescriptor_group_d529c7a0e85dbd90, []int{48}
} }
func (m *GetGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { func (m *GetGroupMembersCMSResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMembersCMSResp.Unmarshal(m, b) return xxx_messageInfo_GetGroupMembersCMSResp.Unmarshal(m, b)
@ -2597,7 +2613,7 @@ func (m *RemoveGroupMembersCMSReq) Reset() { *m = RemoveGroupMembersCMSR
func (m *RemoveGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (m *RemoveGroupMembersCMSReq) String() string { return proto.CompactTextString(m) }
func (*RemoveGroupMembersCMSReq) ProtoMessage() {} func (*RemoveGroupMembersCMSReq) ProtoMessage() {}
func (*RemoveGroupMembersCMSReq) Descriptor() ([]byte, []int) { func (*RemoveGroupMembersCMSReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{49} return fileDescriptor_group_d529c7a0e85dbd90, []int{49}
} }
func (m *RemoveGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { func (m *RemoveGroupMembersCMSReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RemoveGroupMembersCMSReq.Unmarshal(m, b) return xxx_messageInfo_RemoveGroupMembersCMSReq.Unmarshal(m, b)
@ -2657,7 +2673,7 @@ func (m *RemoveGroupMembersCMSResp) Reset() { *m = RemoveGroupMembersCMS
func (m *RemoveGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (m *RemoveGroupMembersCMSResp) String() string { return proto.CompactTextString(m) }
func (*RemoveGroupMembersCMSResp) ProtoMessage() {} func (*RemoveGroupMembersCMSResp) ProtoMessage() {}
func (*RemoveGroupMembersCMSResp) Descriptor() ([]byte, []int) { func (*RemoveGroupMembersCMSResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{50} return fileDescriptor_group_d529c7a0e85dbd90, []int{50}
} }
func (m *RemoveGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { func (m *RemoveGroupMembersCMSResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RemoveGroupMembersCMSResp.Unmarshal(m, b) return xxx_messageInfo_RemoveGroupMembersCMSResp.Unmarshal(m, b)
@ -2705,7 +2721,7 @@ func (m *AddGroupMembersCMSReq) Reset() { *m = AddGroupMembersCMSReq{} }
func (m *AddGroupMembersCMSReq) String() string { return proto.CompactTextString(m) } func (m *AddGroupMembersCMSReq) String() string { return proto.CompactTextString(m) }
func (*AddGroupMembersCMSReq) ProtoMessage() {} func (*AddGroupMembersCMSReq) ProtoMessage() {}
func (*AddGroupMembersCMSReq) Descriptor() ([]byte, []int) { func (*AddGroupMembersCMSReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{51} return fileDescriptor_group_d529c7a0e85dbd90, []int{51}
} }
func (m *AddGroupMembersCMSReq) XXX_Unmarshal(b []byte) error { func (m *AddGroupMembersCMSReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AddGroupMembersCMSReq.Unmarshal(m, b) return xxx_messageInfo_AddGroupMembersCMSReq.Unmarshal(m, b)
@ -2765,7 +2781,7 @@ func (m *AddGroupMembersCMSResp) Reset() { *m = AddGroupMembersCMSResp{}
func (m *AddGroupMembersCMSResp) String() string { return proto.CompactTextString(m) } func (m *AddGroupMembersCMSResp) String() string { return proto.CompactTextString(m) }
func (*AddGroupMembersCMSResp) ProtoMessage() {} func (*AddGroupMembersCMSResp) ProtoMessage() {}
func (*AddGroupMembersCMSResp) Descriptor() ([]byte, []int) { func (*AddGroupMembersCMSResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{52} return fileDescriptor_group_d529c7a0e85dbd90, []int{52}
} }
func (m *AddGroupMembersCMSResp) XXX_Unmarshal(b []byte) error { func (m *AddGroupMembersCMSResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AddGroupMembersCMSResp.Unmarshal(m, b) return xxx_messageInfo_AddGroupMembersCMSResp.Unmarshal(m, b)
@ -2812,7 +2828,7 @@ func (m *DismissGroupReq) Reset() { *m = DismissGroupReq{} }
func (m *DismissGroupReq) String() string { return proto.CompactTextString(m) } func (m *DismissGroupReq) String() string { return proto.CompactTextString(m) }
func (*DismissGroupReq) ProtoMessage() {} func (*DismissGroupReq) ProtoMessage() {}
func (*DismissGroupReq) Descriptor() ([]byte, []int) { func (*DismissGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{53} return fileDescriptor_group_d529c7a0e85dbd90, []int{53}
} }
func (m *DismissGroupReq) XXX_Unmarshal(b []byte) error { func (m *DismissGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DismissGroupReq.Unmarshal(m, b) return xxx_messageInfo_DismissGroupReq.Unmarshal(m, b)
@ -2864,7 +2880,7 @@ func (m *DismissGroupResp) Reset() { *m = DismissGroupResp{} }
func (m *DismissGroupResp) String() string { return proto.CompactTextString(m) } func (m *DismissGroupResp) String() string { return proto.CompactTextString(m) }
func (*DismissGroupResp) ProtoMessage() {} func (*DismissGroupResp) ProtoMessage() {}
func (*DismissGroupResp) Descriptor() ([]byte, []int) { func (*DismissGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{54} return fileDescriptor_group_d529c7a0e85dbd90, []int{54}
} }
func (m *DismissGroupResp) XXX_Unmarshal(b []byte) error { func (m *DismissGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DismissGroupResp.Unmarshal(m, b) return xxx_messageInfo_DismissGroupResp.Unmarshal(m, b)
@ -2906,7 +2922,7 @@ func (m *MuteGroupMemberReq) Reset() { *m = MuteGroupMemberReq{} }
func (m *MuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (m *MuteGroupMemberReq) String() string { return proto.CompactTextString(m) }
func (*MuteGroupMemberReq) ProtoMessage() {} func (*MuteGroupMemberReq) ProtoMessage() {}
func (*MuteGroupMemberReq) Descriptor() ([]byte, []int) { func (*MuteGroupMemberReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{55} return fileDescriptor_group_d529c7a0e85dbd90, []int{55}
} }
func (m *MuteGroupMemberReq) XXX_Unmarshal(b []byte) error { func (m *MuteGroupMemberReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MuteGroupMemberReq.Unmarshal(m, b) return xxx_messageInfo_MuteGroupMemberReq.Unmarshal(m, b)
@ -2972,7 +2988,7 @@ func (m *MuteGroupMemberResp) Reset() { *m = MuteGroupMemberResp{} }
func (m *MuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (m *MuteGroupMemberResp) String() string { return proto.CompactTextString(m) }
func (*MuteGroupMemberResp) ProtoMessage() {} func (*MuteGroupMemberResp) ProtoMessage() {}
func (*MuteGroupMemberResp) Descriptor() ([]byte, []int) { func (*MuteGroupMemberResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{56} return fileDescriptor_group_d529c7a0e85dbd90, []int{56}
} }
func (m *MuteGroupMemberResp) XXX_Unmarshal(b []byte) error { func (m *MuteGroupMemberResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MuteGroupMemberResp.Unmarshal(m, b) return xxx_messageInfo_MuteGroupMemberResp.Unmarshal(m, b)
@ -3013,7 +3029,7 @@ func (m *CancelMuteGroupMemberReq) Reset() { *m = CancelMuteGroupMemberR
func (m *CancelMuteGroupMemberReq) String() string { return proto.CompactTextString(m) } func (m *CancelMuteGroupMemberReq) String() string { return proto.CompactTextString(m) }
func (*CancelMuteGroupMemberReq) ProtoMessage() {} func (*CancelMuteGroupMemberReq) ProtoMessage() {}
func (*CancelMuteGroupMemberReq) Descriptor() ([]byte, []int) { func (*CancelMuteGroupMemberReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{57} return fileDescriptor_group_d529c7a0e85dbd90, []int{57}
} }
func (m *CancelMuteGroupMemberReq) XXX_Unmarshal(b []byte) error { func (m *CancelMuteGroupMemberReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CancelMuteGroupMemberReq.Unmarshal(m, b) return xxx_messageInfo_CancelMuteGroupMemberReq.Unmarshal(m, b)
@ -3072,7 +3088,7 @@ func (m *CancelMuteGroupMemberResp) Reset() { *m = CancelMuteGroupMember
func (m *CancelMuteGroupMemberResp) String() string { return proto.CompactTextString(m) } func (m *CancelMuteGroupMemberResp) String() string { return proto.CompactTextString(m) }
func (*CancelMuteGroupMemberResp) ProtoMessage() {} func (*CancelMuteGroupMemberResp) ProtoMessage() {}
func (*CancelMuteGroupMemberResp) Descriptor() ([]byte, []int) { func (*CancelMuteGroupMemberResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{58} return fileDescriptor_group_d529c7a0e85dbd90, []int{58}
} }
func (m *CancelMuteGroupMemberResp) XXX_Unmarshal(b []byte) error { func (m *CancelMuteGroupMemberResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CancelMuteGroupMemberResp.Unmarshal(m, b) return xxx_messageInfo_CancelMuteGroupMemberResp.Unmarshal(m, b)
@ -3112,7 +3128,7 @@ func (m *MuteGroupReq) Reset() { *m = MuteGroupReq{} }
func (m *MuteGroupReq) String() string { return proto.CompactTextString(m) } func (m *MuteGroupReq) String() string { return proto.CompactTextString(m) }
func (*MuteGroupReq) ProtoMessage() {} func (*MuteGroupReq) ProtoMessage() {}
func (*MuteGroupReq) Descriptor() ([]byte, []int) { func (*MuteGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{59} return fileDescriptor_group_d529c7a0e85dbd90, []int{59}
} }
func (m *MuteGroupReq) XXX_Unmarshal(b []byte) error { func (m *MuteGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MuteGroupReq.Unmarshal(m, b) return xxx_messageInfo_MuteGroupReq.Unmarshal(m, b)
@ -3164,7 +3180,7 @@ func (m *MuteGroupResp) Reset() { *m = MuteGroupResp{} }
func (m *MuteGroupResp) String() string { return proto.CompactTextString(m) } func (m *MuteGroupResp) String() string { return proto.CompactTextString(m) }
func (*MuteGroupResp) ProtoMessage() {} func (*MuteGroupResp) ProtoMessage() {}
func (*MuteGroupResp) Descriptor() ([]byte, []int) { func (*MuteGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{60} return fileDescriptor_group_d529c7a0e85dbd90, []int{60}
} }
func (m *MuteGroupResp) XXX_Unmarshal(b []byte) error { func (m *MuteGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MuteGroupResp.Unmarshal(m, b) return xxx_messageInfo_MuteGroupResp.Unmarshal(m, b)
@ -3204,7 +3220,7 @@ func (m *CancelMuteGroupReq) Reset() { *m = CancelMuteGroupReq{} }
func (m *CancelMuteGroupReq) String() string { return proto.CompactTextString(m) } func (m *CancelMuteGroupReq) String() string { return proto.CompactTextString(m) }
func (*CancelMuteGroupReq) ProtoMessage() {} func (*CancelMuteGroupReq) ProtoMessage() {}
func (*CancelMuteGroupReq) Descriptor() ([]byte, []int) { func (*CancelMuteGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{61} return fileDescriptor_group_d529c7a0e85dbd90, []int{61}
} }
func (m *CancelMuteGroupReq) XXX_Unmarshal(b []byte) error { func (m *CancelMuteGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CancelMuteGroupReq.Unmarshal(m, b) return xxx_messageInfo_CancelMuteGroupReq.Unmarshal(m, b)
@ -3256,7 +3272,7 @@ func (m *CancelMuteGroupResp) Reset() { *m = CancelMuteGroupResp{} }
func (m *CancelMuteGroupResp) String() string { return proto.CompactTextString(m) } func (m *CancelMuteGroupResp) String() string { return proto.CompactTextString(m) }
func (*CancelMuteGroupResp) ProtoMessage() {} func (*CancelMuteGroupResp) ProtoMessage() {}
func (*CancelMuteGroupResp) Descriptor() ([]byte, []int) { func (*CancelMuteGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{62} return fileDescriptor_group_d529c7a0e85dbd90, []int{62}
} }
func (m *CancelMuteGroupResp) XXX_Unmarshal(b []byte) error { func (m *CancelMuteGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CancelMuteGroupResp.Unmarshal(m, b) return xxx_messageInfo_CancelMuteGroupResp.Unmarshal(m, b)
@ -3298,7 +3314,7 @@ func (m *SetGroupMemberNicknameReq) Reset() { *m = SetGroupMemberNicknam
func (m *SetGroupMemberNicknameReq) String() string { return proto.CompactTextString(m) } func (m *SetGroupMemberNicknameReq) String() string { return proto.CompactTextString(m) }
func (*SetGroupMemberNicknameReq) ProtoMessage() {} func (*SetGroupMemberNicknameReq) ProtoMessage() {}
func (*SetGroupMemberNicknameReq) Descriptor() ([]byte, []int) { func (*SetGroupMemberNicknameReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{63} return fileDescriptor_group_d529c7a0e85dbd90, []int{63}
} }
func (m *SetGroupMemberNicknameReq) XXX_Unmarshal(b []byte) error { func (m *SetGroupMemberNicknameReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetGroupMemberNicknameReq.Unmarshal(m, b) return xxx_messageInfo_SetGroupMemberNicknameReq.Unmarshal(m, b)
@ -3364,7 +3380,7 @@ func (m *SetGroupMemberNicknameResp) Reset() { *m = SetGroupMemberNickna
func (m *SetGroupMemberNicknameResp) String() string { return proto.CompactTextString(m) } func (m *SetGroupMemberNicknameResp) String() string { return proto.CompactTextString(m) }
func (*SetGroupMemberNicknameResp) ProtoMessage() {} func (*SetGroupMemberNicknameResp) ProtoMessage() {}
func (*SetGroupMemberNicknameResp) Descriptor() ([]byte, []int) { func (*SetGroupMemberNicknameResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{64} return fileDescriptor_group_d529c7a0e85dbd90, []int{64}
} }
func (m *SetGroupMemberNicknameResp) XXX_Unmarshal(b []byte) error { func (m *SetGroupMemberNicknameResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetGroupMemberNicknameResp.Unmarshal(m, b) return xxx_messageInfo_SetGroupMemberNicknameResp.Unmarshal(m, b)
@ -3404,7 +3420,7 @@ func (m *GetJoinedSuperGroupListReq) Reset() { *m = GetJoinedSuperGroupL
func (m *GetJoinedSuperGroupListReq) String() string { return proto.CompactTextString(m) } func (m *GetJoinedSuperGroupListReq) String() string { return proto.CompactTextString(m) }
func (*GetJoinedSuperGroupListReq) ProtoMessage() {} func (*GetJoinedSuperGroupListReq) ProtoMessage() {}
func (*GetJoinedSuperGroupListReq) Descriptor() ([]byte, []int) { func (*GetJoinedSuperGroupListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{65} return fileDescriptor_group_d529c7a0e85dbd90, []int{65}
} }
func (m *GetJoinedSuperGroupListReq) XXX_Unmarshal(b []byte) error { func (m *GetJoinedSuperGroupListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetJoinedSuperGroupListReq.Unmarshal(m, b) return xxx_messageInfo_GetJoinedSuperGroupListReq.Unmarshal(m, b)
@ -3457,7 +3473,7 @@ func (m *GetJoinedSuperGroupListResp) Reset() { *m = GetJoinedSuperGroup
func (m *GetJoinedSuperGroupListResp) String() string { return proto.CompactTextString(m) } func (m *GetJoinedSuperGroupListResp) String() string { return proto.CompactTextString(m) }
func (*GetJoinedSuperGroupListResp) ProtoMessage() {} func (*GetJoinedSuperGroupListResp) ProtoMessage() {}
func (*GetJoinedSuperGroupListResp) Descriptor() ([]byte, []int) { func (*GetJoinedSuperGroupListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{66} return fileDescriptor_group_d529c7a0e85dbd90, []int{66}
} }
func (m *GetJoinedSuperGroupListResp) XXX_Unmarshal(b []byte) error { func (m *GetJoinedSuperGroupListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetJoinedSuperGroupListResp.Unmarshal(m, b) return xxx_messageInfo_GetJoinedSuperGroupListResp.Unmarshal(m, b)
@ -3504,7 +3520,7 @@ func (m *GetSuperGroupsInfoReq) Reset() { *m = GetSuperGroupsInfoReq{} }
func (m *GetSuperGroupsInfoReq) String() string { return proto.CompactTextString(m) } func (m *GetSuperGroupsInfoReq) String() string { return proto.CompactTextString(m) }
func (*GetSuperGroupsInfoReq) ProtoMessage() {} func (*GetSuperGroupsInfoReq) ProtoMessage() {}
func (*GetSuperGroupsInfoReq) Descriptor() ([]byte, []int) { func (*GetSuperGroupsInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{67} return fileDescriptor_group_d529c7a0e85dbd90, []int{67}
} }
func (m *GetSuperGroupsInfoReq) XXX_Unmarshal(b []byte) error { func (m *GetSuperGroupsInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSuperGroupsInfoReq.Unmarshal(m, b) return xxx_messageInfo_GetSuperGroupsInfoReq.Unmarshal(m, b)
@ -3557,7 +3573,7 @@ func (m *GetSuperGroupsInfoResp) Reset() { *m = GetSuperGroupsInfoResp{}
func (m *GetSuperGroupsInfoResp) String() string { return proto.CompactTextString(m) } func (m *GetSuperGroupsInfoResp) String() string { return proto.CompactTextString(m) }
func (*GetSuperGroupsInfoResp) ProtoMessage() {} func (*GetSuperGroupsInfoResp) ProtoMessage() {}
func (*GetSuperGroupsInfoResp) Descriptor() ([]byte, []int) { func (*GetSuperGroupsInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{68} return fileDescriptor_group_d529c7a0e85dbd90, []int{68}
} }
func (m *GetSuperGroupsInfoResp) XXX_Unmarshal(b []byte) error { func (m *GetSuperGroupsInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSuperGroupsInfoResp.Unmarshal(m, b) return xxx_messageInfo_GetSuperGroupsInfoResp.Unmarshal(m, b)
@ -3609,7 +3625,7 @@ func (m *SetGroupMemberInfoReq) Reset() { *m = SetGroupMemberInfoReq{} }
func (m *SetGroupMemberInfoReq) String() string { return proto.CompactTextString(m) } func (m *SetGroupMemberInfoReq) String() string { return proto.CompactTextString(m) }
func (*SetGroupMemberInfoReq) ProtoMessage() {} func (*SetGroupMemberInfoReq) ProtoMessage() {}
func (*SetGroupMemberInfoReq) Descriptor() ([]byte, []int) { func (*SetGroupMemberInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{69} return fileDescriptor_group_d529c7a0e85dbd90, []int{69}
} }
func (m *SetGroupMemberInfoReq) XXX_Unmarshal(b []byte) error { func (m *SetGroupMemberInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetGroupMemberInfoReq.Unmarshal(m, b) return xxx_messageInfo_SetGroupMemberInfoReq.Unmarshal(m, b)
@ -3696,7 +3712,7 @@ func (m *SetGroupMemberInfoResp) Reset() { *m = SetGroupMemberInfoResp{}
func (m *SetGroupMemberInfoResp) String() string { return proto.CompactTextString(m) } func (m *SetGroupMemberInfoResp) String() string { return proto.CompactTextString(m) }
func (*SetGroupMemberInfoResp) ProtoMessage() {} func (*SetGroupMemberInfoResp) ProtoMessage() {}
func (*SetGroupMemberInfoResp) Descriptor() ([]byte, []int) { func (*SetGroupMemberInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{70} return fileDescriptor_group_d529c7a0e85dbd90, []int{70}
} }
func (m *SetGroupMemberInfoResp) XXX_Unmarshal(b []byte) error { func (m *SetGroupMemberInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetGroupMemberInfoResp.Unmarshal(m, b) return xxx_messageInfo_SetGroupMemberInfoResp.Unmarshal(m, b)
@ -4925,157 +4941,159 @@ var _Group_serviceDesc = grpc.ServiceDesc{
Metadata: "group/group.proto", Metadata: "group/group.proto",
} }
func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_40c147a29abb4e60) } func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_d529c7a0e85dbd90) }
var fileDescriptor_group_40c147a29abb4e60 = []byte{ var fileDescriptor_group_d529c7a0e85dbd90 = []byte{
// 2381 bytes of a gzipped FileDescriptorProto // 2407 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4f, 0x6f, 0x1c, 0x49, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4f, 0x6f, 0x1c, 0x49,
0x15, 0x57, 0xdb, 0x1e, 0xdb, 0xf3, 0x6c, 0x67, 0xec, 0x72, 0xc6, 0x1e, 0x77, 0xbc, 0x59, 0xa7, 0x15, 0x57, 0xdb, 0x99, 0xd8, 0xf3, 0xec, 0xc9, 0xd8, 0xe5, 0x8c, 0x33, 0xee, 0x78, 0xbd, 0x4e,
0x37, 0x2c, 0x11, 0x2c, 0xb6, 0x70, 0xa4, 0x08, 0x58, 0x44, 0x88, 0xff, 0xc5, 0x93, 0xf8, 0x0f, 0x6d, 0x58, 0x22, 0x58, 0x6c, 0xe1, 0x48, 0x11, 0xb0, 0x88, 0x10, 0xff, 0x8b, 0x27, 0xf1, 0x1f,
0xee, 0xc9, 0x72, 0x88, 0x84, 0xc2, 0x64, 0xba, 0x3c, 0x1a, 0x3c, 0xd3, 0xdd, 0xee, 0xea, 0xb1, 0xdc, 0x93, 0xe5, 0x10, 0x09, 0x85, 0xc9, 0x74, 0x79, 0x34, 0x78, 0xa6, 0xbb, 0xdd, 0xd5, 0x63,
0x03, 0x97, 0x15, 0x97, 0x95, 0x16, 0x21, 0x01, 0x42, 0xe2, 0x04, 0x82, 0x3d, 0xc1, 0x81, 0x03, 0x07, 0x2e, 0x2b, 0x2e, 0x48, 0x8b, 0x90, 0x00, 0x21, 0x71, 0x02, 0xc1, 0x9e, 0xe0, 0xc0, 0x81,
0x07, 0x38, 0x23, 0x3e, 0x06, 0x57, 0xbe, 0x00, 0x9f, 0x00, 0x09, 0x75, 0x55, 0x75, 0x75, 0x75, 0x03, 0x9c, 0x11, 0x77, 0xbe, 0x00, 0x57, 0xbe, 0x00, 0x9f, 0x00, 0x09, 0x75, 0x55, 0x75, 0x75,
0x57, 0x75, 0x7b, 0xd2, 0x4e, 0x36, 0x97, 0x96, 0xea, 0xd5, 0xab, 0x7a, 0xbf, 0xf7, 0xaa, 0xde, 0x75, 0x77, 0x75, 0x7b, 0xd2, 0x4e, 0x36, 0x97, 0x96, 0xea, 0xd5, 0xab, 0xaa, 0xdf, 0x7b, 0xf5,
0xab, 0x7a, 0xaf, 0x1a, 0x16, 0xba, 0x81, 0x37, 0xf4, 0x37, 0xe8, 0x77, 0xdd, 0x0f, 0xbc, 0xd0, 0xde, 0xab, 0x7a, 0xaf, 0x1a, 0xe6, 0x7b, 0xbe, 0x3b, 0xf2, 0xd6, 0xd9, 0x77, 0xcd, 0xf3, 0xdd,
0x43, 0x15, 0xda, 0x30, 0xef, 0x1c, 0xfb, 0xd8, 0x7d, 0xd1, 0x3c, 0xdc, 0xf0, 0xcf, 0xba, 0x1b, 0xc0, 0x45, 0x15, 0xd6, 0x30, 0xef, 0x1c, 0x79, 0xc4, 0x79, 0xd1, 0x3a, 0x58, 0xf7, 0x4e, 0x7b,
0xb4, 0x67, 0x83, 0x38, 0x67, 0x2f, 0x2e, 0xc9, 0xc6, 0x25, 0x61, 0x9c, 0xe6, 0x57, 0xf3, 0x59, 0xeb, 0xac, 0x67, 0x9d, 0xda, 0xa7, 0x2f, 0x2e, 0xe8, 0xfa, 0x05, 0xe5, 0x9c, 0xe6, 0x97, 0xf3,
0x82, 0xb6, 0xef, 0xe3, 0x80, 0x33, 0x5a, 0xdf, 0x03, 0xd8, 0xf6, 0x06, 0x03, 0xcf, 0xb5, 0x31, 0x59, 0xfc, 0x8e, 0xe7, 0x11, 0x5f, 0x30, 0xe2, 0xef, 0x00, 0x6c, 0xb9, 0xc3, 0xa1, 0xeb, 0x58,
0xf1, 0x51, 0x03, 0xa6, 0x76, 0x83, 0x60, 0xdb, 0x73, 0x70, 0xc3, 0x58, 0x33, 0xee, 0x55, 0xec, 0x84, 0x7a, 0xa8, 0x09, 0x53, 0x3b, 0xbe, 0xbf, 0xe5, 0xda, 0xa4, 0x69, 0xac, 0x1a, 0xf7, 0x2a,
0xb8, 0x89, 0x96, 0x60, 0x72, 0x37, 0x08, 0x0e, 0x49, 0xb7, 0x31, 0xb6, 0x66, 0xdc, 0xab, 0xda, 0x56, 0xd4, 0x44, 0x8b, 0x70, 0x7d, 0xc7, 0xf7, 0x0f, 0x68, 0xaf, 0x39, 0xb1, 0x6a, 0xdc, 0xab,
0xbc, 0x65, 0x3d, 0x01, 0xf4, 0x38, 0x02, 0xf5, 0xc8, 0x71, 0x0e, 0xf1, 0xe0, 0x25, 0x0e, 0x9a, 0x5a, 0xa2, 0x85, 0x9f, 0x00, 0x7a, 0x1c, 0x82, 0x7a, 0x64, 0xdb, 0x07, 0x64, 0xf8, 0x92, 0xf8,
0xee, 0xa9, 0x17, 0x71, 0x7f, 0x42, 0x70, 0xd0, 0xdc, 0xa1, 0xd3, 0x54, 0x6d, 0xde, 0x42, 0xab, 0x2d, 0xe7, 0xc4, 0x0d, 0xb9, 0x3f, 0xa1, 0xc4, 0x6f, 0x6d, 0xb3, 0x69, 0xaa, 0x96, 0x68, 0xa1,
0x50, 0xb5, 0xbd, 0x3e, 0x3e, 0xc0, 0x17, 0xb8, 0x4f, 0x27, 0xaa, 0xd8, 0x09, 0xc1, 0xfa, 0xaf, 0x65, 0xa8, 0x5a, 0xee, 0x80, 0xec, 0x93, 0x73, 0x32, 0x60, 0x13, 0x55, 0xac, 0x98, 0x80, 0xff,
0x01, 0x37, 0xb6, 0x03, 0xdc, 0x0e, 0x31, 0x9d, 0xd2, 0xc6, 0xe7, 0xe8, 0x11, 0xdc, 0x68, 0xba, 0x6b, 0xc0, 0x8d, 0x2d, 0x9f, 0x74, 0x02, 0xc2, 0xa6, 0xb4, 0xc8, 0x19, 0x7a, 0x04, 0x37, 0x5a,
0xbd, 0x90, 0x4d, 0x7d, 0xd0, 0x23, 0x61, 0xc3, 0x58, 0x1b, 0xbf, 0x37, 0xb3, 0xb9, 0xb2, 0xce, 0x4e, 0x3f, 0xe0, 0x53, 0xef, 0xf7, 0x69, 0xd0, 0x34, 0x56, 0x27, 0xef, 0xcd, 0x6c, 0x2c, 0xad,
0xec, 0xa2, 0xca, 0xb6, 0x33, 0x03, 0xd0, 0x77, 0xa0, 0x4a, 0xb9, 0xa2, 0x4e, 0x2a, 0x73, 0x66, 0x71, 0xbd, 0x64, 0xd7, 0xb6, 0x52, 0x03, 0xd0, 0xb7, 0xa0, 0xca, 0xb8, 0xc2, 0x4e, 0xb6, 0xe6,
0x73, 0x75, 0x9d, 0xe0, 0xe0, 0x02, 0x07, 0x2f, 0xda, 0x7e, 0xef, 0x85, 0xdf, 0x0e, 0xda, 0x03, 0xcc, 0xc6, 0xf2, 0x1a, 0x25, 0xfe, 0x39, 0xf1, 0x5f, 0x74, 0xbc, 0xfe, 0x0b, 0xaf, 0xe3, 0x77,
0xb2, 0x2e, 0x78, 0xec, 0x84, 0x1d, 0xad, 0xc1, 0xcc, 0xb1, 0x8f, 0x83, 0x76, 0xd8, 0xf3, 0xdc, 0x86, 0x74, 0x4d, 0xf2, 0x58, 0x31, 0x3b, 0x5a, 0x85, 0x99, 0x23, 0x8f, 0xf8, 0x9d, 0xa0, 0xef,
0xe6, 0x4e, 0x63, 0x9c, 0x2a, 0x23, 0x93, 0x90, 0x09, 0xd3, 0xc7, 0x3e, 0xd7, 0x75, 0x82, 0x76, 0x3a, 0xad, 0xed, 0xe6, 0x24, 0x13, 0x46, 0x25, 0x21, 0x13, 0xa6, 0x8f, 0x3c, 0x21, 0xeb, 0x35,
0x8b, 0x36, 0x1d, 0x7d, 0xe9, 0xe2, 0x80, 0x77, 0x57, 0xf8, 0xe8, 0x84, 0x64, 0x7d, 0x0a, 0xb5, 0xd6, 0x2d, 0xdb, 0x6c, 0xf4, 0x85, 0x43, 0x7c, 0xd1, 0x5d, 0x11, 0xa3, 0x63, 0x12, 0xfe, 0x14,
0x94, 0xc2, 0x65, 0x96, 0x20, 0xad, 0xe0, 0xf8, 0x6b, 0x29, 0x68, 0x05, 0x30, 0xff, 0x18, 0x87, 0xea, 0x09, 0x81, 0xcb, 0x6c, 0x41, 0x52, 0xc0, 0xc9, 0xd7, 0x12, 0x10, 0xfb, 0x30, 0xf7, 0x98,
0xb4, 0x4d, 0x68, 0x1f, 0x3e, 0x8f, 0x60, 0x33, 0x86, 0x1d, 0x61, 0xf0, 0xaa, 0x2d, 0x93, 0xb2, 0x04, 0xac, 0x4d, 0x59, 0x1f, 0x39, 0x0b, 0x61, 0x73, 0x86, 0x6d, 0xa9, 0xf0, 0xaa, 0xa5, 0x92,
0x66, 0x19, 0x2b, 0x36, 0xcb, 0x78, 0xda, 0x2c, 0xd6, 0xe7, 0x06, 0x2c, 0x64, 0x84, 0x96, 0xd2, 0xd2, 0x6a, 0x99, 0x28, 0x56, 0xcb, 0x64, 0x52, 0x2d, 0xf8, 0x33, 0x03, 0xe6, 0x53, 0x8b, 0x96,
0x7b, 0x0b, 0xe6, 0x84, 0x22, 0x14, 0xe9, 0x38, 0xdd, 0x1a, 0xc5, 0xba, 0xa7, 0x87, 0x58, 0x7f, 0x92, 0x7b, 0x13, 0x6a, 0x52, 0x10, 0x86, 0x74, 0x92, 0x99, 0x46, 0xb1, 0xec, 0xc9, 0x21, 0xf8,
0x30, 0xa0, 0xd6, 0xe2, 0x58, 0x62, 0xfd, 0x0f, 0xa0, 0xd6, 0x8d, 0xdb, 0x7b, 0x5e, 0xd0, 0xc2, 0xf7, 0x06, 0xd4, 0xdb, 0x02, 0x4b, 0x24, 0xff, 0x3e, 0xd4, 0x7b, 0x51, 0x7b, 0xd7, 0xf5, 0xdb,
0x21, 0x45, 0x34, 0xb3, 0x69, 0x15, 0xcd, 0xcc, 0x38, 0xed, 0xec, 0xd0, 0x94, 0x25, 0xc6, 0x34, 0x24, 0x60, 0x88, 0x66, 0x36, 0x70, 0xd1, 0xcc, 0x9c, 0xd3, 0x4a, 0x0f, 0x4d, 0x68, 0x62, 0x42,
0x1b, 0xa4, 0x70, 0x7b, 0x59, 0xbb, 0x30, 0x9f, 0x86, 0x47, 0x7c, 0xf4, 0x4d, 0xd9, 0x65, 0x39, 0x63, 0x20, 0x85, 0xe6, 0x85, 0x77, 0x60, 0x2e, 0x09, 0x8f, 0x7a, 0xe8, 0xeb, 0xaa, 0xcb, 0x0a,
0xb4, 0x05, 0xee, 0x0f, 0x49, 0x87, 0x2d, 0x31, 0x59, 0x3f, 0x03, 0x33, 0xb6, 0xf8, 0x23, 0xdf, 0x68, 0xf3, 0xc2, 0x1f, 0xe2, 0x0e, 0x4b, 0x61, 0xc2, 0x3f, 0x01, 0x33, 0xd2, 0xf8, 0x23, 0xcf,
0xef, 0xf7, 0x3a, 0x74, 0xfe, 0xc8, 0x02, 0x91, 0xc2, 0x32, 0x44, 0xa3, 0x18, 0xa2, 0x66, 0xa9, 0x1b, 0xf4, 0xbb, 0x6c, 0xfe, 0x50, 0x03, 0xa1, 0xc0, 0x2a, 0x44, 0xa3, 0x18, 0xa2, 0x66, 0xab,
0x6f, 0x03, 0xec, 0x05, 0xde, 0x20, 0xb5, 0xd8, 0x12, 0xc5, 0xfa, 0xbd, 0x01, 0xb7, 0x72, 0x85, 0x57, 0x00, 0x76, 0x7d, 0x77, 0x98, 0xd8, 0x6c, 0x85, 0x82, 0x7f, 0x67, 0xc0, 0xed, 0xdc, 0xc5,
0x97, 0x5a, 0xf8, 0xa7, 0x30, 0x1f, 0x07, 0x88, 0x21, 0x26, 0xa1, 0xb4, 0xf6, 0xef, 0xe7, 0xad, 0x4b, 0x6d, 0xfc, 0x53, 0x98, 0x8b, 0x02, 0xc4, 0x88, 0xd0, 0x40, 0xd9, 0xfb, 0xf7, 0xf3, 0x76,
0x10, 0x67, 0xb5, 0x95, 0x81, 0x56, 0x08, 0xab, 0x8f, 0x71, 0x18, 0x61, 0xb5, 0xf1, 0xb9, 0xc6, 0x48, 0xb0, 0x5a, 0x99, 0x81, 0x38, 0x80, 0xe5, 0xc7, 0x24, 0x08, 0xb1, 0x5a, 0xe4, 0x4c, 0xa3,
0x38, 0x79, 0xa1, 0xec, 0x7a, 0xeb, 0xfa, 0x47, 0x03, 0xde, 0x2b, 0x10, 0x5b, 0x6a, 0x95, 0xb5, 0x9c, 0xbc, 0x50, 0x76, 0xb5, 0x7d, 0xfd, 0x83, 0x01, 0xef, 0x15, 0x2c, 0x5b, 0x6a, 0x97, 0xb5,
0x76, 0x19, 0x2b, 0x6b, 0x97, 0x7f, 0x1a, 0x50, 0x7f, 0x16, 0xb4, 0x5d, 0x72, 0x8a, 0x03, 0xda, 0x7a, 0x99, 0x28, 0xab, 0x97, 0x7f, 0x18, 0xd0, 0x78, 0xe6, 0x77, 0x1c, 0x7a, 0x42, 0x7c, 0xd6,
0x49, 0xe3, 0x56, 0x64, 0x91, 0x06, 0x4c, 0xf1, 0x60, 0xc0, 0x4d, 0x12, 0x37, 0xd1, 0x87, 0x70, 0xc9, 0xe2, 0x56, 0xa8, 0x91, 0x26, 0x4c, 0x89, 0x60, 0x20, 0x54, 0x12, 0x35, 0xd1, 0x87, 0x70,
0xe3, 0xb8, 0xef, 0xc8, 0x31, 0x8f, 0x59, 0x26, 0x43, 0x8d, 0xf8, 0x8e, 0xf0, 0xa5, 0xcc, 0xc7, 0xe3, 0x68, 0x60, 0xab, 0x31, 0x8f, 0x6b, 0x26, 0x45, 0x0d, 0xf9, 0x0e, 0xc9, 0x85, 0xca, 0xc7,
0x4c, 0x94, 0xa1, 0x66, 0xed, 0x38, 0x51, 0x1c, 0x67, 0x2a, 0x99, 0x38, 0xf3, 0x14, 0x96, 0x74, 0x55, 0x94, 0xa2, 0xa6, 0xf5, 0x78, 0xad, 0x38, 0xce, 0x54, 0x52, 0x71, 0xe6, 0x29, 0x2c, 0xea,
0x0a, 0x94, 0xf3, 0xa0, 0xcf, 0x0c, 0x98, 0x7d, 0xe2, 0xf5, 0x5c, 0x71, 0x32, 0xe5, 0x5b, 0xe1, 0x04, 0x28, 0xe7, 0x41, 0xff, 0x32, 0x60, 0xf6, 0x89, 0xdb, 0x77, 0xe4, 0xc9, 0x94, 0xaf, 0x85,
0x36, 0x80, 0x8d, 0xcf, 0x0f, 0x31, 0x21, 0xed, 0x2e, 0xe6, 0x16, 0x90, 0x28, 0x45, 0xb1, 0xf1, 0x15, 0x00, 0x8b, 0x9c, 0x1d, 0x10, 0x4a, 0x3b, 0x3d, 0x22, 0x34, 0xa0, 0x50, 0x8a, 0x62, 0xe3,
0x6a, 0x8d, 0xad, 0x2d, 0x98, 0x93, 0x70, 0x94, 0x53, 0xe6, 0xdf, 0x91, 0x4b, 0x66, 0xfc, 0x31, 0x18, 0x12, 0xaf, 0x00, 0x84, 0x38, 0xda, 0xee, 0xc8, 0xef, 0x12, 0x26, 0x73, 0xc5, 0x52, 0x28,
0xea, 0xf0, 0x5c, 0x82, 0xf9, 0x09, 0x20, 0xa3, 0x30, 0x8a, 0xed, 0x9e, 0xdd, 0xfd, 0x92, 0x65, 0xe8, 0x2e, 0xd4, 0x5a, 0xce, 0x79, 0x3f, 0x90, 0xaa, 0xbd, 0xce, 0xe6, 0x48, 0x12, 0xf1, 0x26,
0xc6, 0x15, 0xcb, 0x48, 0xa1, 0x62, 0x22, 0x1b, 0x2a, 0xa2, 0xfe, 0xfd, 0xb6, 0xeb, 0xf4, 0xb1, 0xd4, 0x14, 0x69, 0xca, 0xa9, 0xe4, 0xdf, 0xa1, 0x63, 0xa7, 0xbc, 0x3a, 0xec, 0x70, 0x1d, 0x4a,
0x13, 0x39, 0x3d, 0x5b, 0x4f, 0x89, 0x82, 0x2c, 0x98, 0x65, 0x2d, 0x1b, 0x93, 0x61, 0x3f, 0x6c, 0xc4, 0x39, 0xa2, 0xca, 0x62, 0x14, 0xef, 0x5e, 0xda, 0x87, 0x14, 0xfd, 0x4e, 0x66, 0xf4, 0xab,
0x4c, 0xd2, 0x78, 0x91, 0xa2, 0x59, 0x27, 0xb0, 0x9a, 0xaf, 0x5a, 0x39, 0x73, 0x9d, 0xc2, 0xec, 0x04, 0x9c, 0x6b, 0xe9, 0x80, 0x13, 0xf6, 0xef, 0x75, 0x1c, 0x7b, 0x40, 0xec, 0x30, 0x74, 0x70,
0xc9, 0xb0, 0x17, 0x8e, 0xb0, 0xf4, 0xd7, 0x3b, 0x18, 0xb7, 0x60, 0x4e, 0x92, 0x53, 0x0e, 0xeb, 0xab, 0x50, 0x28, 0x08, 0xc3, 0x2c, 0x6f, 0x59, 0x84, 0x8e, 0x06, 0x01, 0x53, 0x50, 0xc5, 0x4a,
0x17, 0x06, 0xd4, 0xe3, 0x68, 0x9b, 0x5c, 0x82, 0x8a, 0x51, 0x5f, 0x2b, 0x94, 0x45, 0x01, 0x72, 0xd0, 0xf0, 0x31, 0x2c, 0xe7, 0x8b, 0x56, 0x4e, 0x5d, 0x27, 0x30, 0x7b, 0x3c, 0xea, 0x07, 0x63,
0xaf, 0xd7, 0x0f, 0x71, 0x40, 0x17, 0xb4, 0x62, 0xf3, 0x56, 0x24, 0xef, 0x08, 0xbf, 0x0a, 0x5b, 0x18, 0xd0, 0xd5, 0x8e, 0xd7, 0x4d, 0xa8, 0x29, 0xeb, 0x94, 0xc3, 0xfa, 0xb9, 0x01, 0x8d, 0x28,
0xf8, 0x9c, 0xae, 0x64, 0xc5, 0x8e, 0x9b, 0xd6, 0x5f, 0x0d, 0x58, 0xd2, 0x61, 0x2c, 0x75, 0x18, 0x66, 0xc7, 0x57, 0xa9, 0x62, 0xd4, 0x57, 0x0a, 0x88, 0x61, 0x98, 0xdd, 0xed, 0x0f, 0x02, 0xe2,
0xec, 0x01, 0x0c, 0x92, 0xdb, 0x21, 0x3b, 0x06, 0x3e, 0xcc, 0x0b, 0x77, 0x4c, 0xda, 0xde, 0xb0, 0xb3, 0x0d, 0xad, 0x58, 0xa2, 0x15, 0xae, 0x77, 0x48, 0x5e, 0x05, 0x6d, 0x72, 0x26, 0x6c, 0x3d,
0xdf, 0xa7, 0xa7, 0xa9, 0x34, 0x32, 0x92, 0xec, 0x72, 0xb8, 0x4c, 0x8f, 0xb8, 0x69, 0xfd, 0x5a, 0x6a, 0xe2, 0xbf, 0x18, 0xb0, 0xa8, 0xc3, 0x58, 0xea, 0x48, 0xd9, 0x05, 0x18, 0xc6, 0x77, 0x4c,
0x81, 0x2b, 0xae, 0x4a, 0x85, 0x41, 0x40, 0x82, 0x35, 0x46, 0xef, 0x50, 0xb2, 0xb8, 0xeb, 0x05, 0x7e, 0x98, 0x7c, 0x98, 0x17, 0x34, 0xf9, 0x6a, 0xbb, 0xa3, 0xc1, 0x80, 0x9d, 0xc9, 0xca, 0xc8,
0x81, 0xdf, 0x1a, 0xb0, 0xac, 0x85, 0xf4, 0x2e, 0x4d, 0x68, 0xfd, 0xcd, 0x00, 0xf4, 0xb4, 0xd7, 0x70, 0x65, 0x47, 0xc0, 0xe5, 0x72, 0x44, 0x4d, 0xfc, 0xab, 0x0c, 0x5c, 0x79, 0xe1, 0x2a, 0x0c,
0x39, 0x93, 0xf8, 0x8a, 0x8d, 0xf4, 0x35, 0x98, 0x8f, 0xf8, 0xb1, 0xc3, 0x14, 0x97, 0x4c, 0xa5, 0x25, 0x0a, 0xac, 0x09, 0x76, 0x13, 0x53, 0x97, 0xbb, 0x52, 0x28, 0xc1, 0xbf, 0x31, 0xe0, 0x96,
0xd0, 0x23, 0xf0, 0x36, 0x6e, 0x13, 0xcf, 0xe5, 0xe6, 0xe2, 0xad, 0xac, 0xb1, 0x2a, 0xc5, 0x2e, 0x16, 0xd2, 0xbb, 0x54, 0x21, 0xfe, 0xab, 0x01, 0xe8, 0x69, 0xbf, 0x7b, 0xaa, 0xf0, 0x15, 0x2b,
0x37, 0x99, 0x71, 0xb9, 0x8f, 0xa1, 0xda, 0x74, 0x36, 0x59, 0xe8, 0xc8, 0x3d, 0xea, 0xa9, 0x68, 0xe9, 0x2b, 0x30, 0x17, 0xf2, 0x13, 0x9b, 0x0b, 0xae, 0xa8, 0x2a, 0x43, 0x0f, 0xc1, 0x5b, 0xa4,
0x1a, 0x70, 0x58, 0xca, 0xc2, 0x5b, 0xd6, 0xa7, 0xb0, 0xa8, 0xa8, 0x5b, 0x6a, 0x01, 0x1e, 0xc0, 0x43, 0x5d, 0x47, 0xa8, 0x4b, 0xb4, 0xd2, 0xca, 0xaa, 0x14, 0xbb, 0xdc, 0xf5, 0x94, 0xcb, 0x7d,
0x9c, 0x40, 0x21, 0xad, 0xc1, 0x3c, 0x77, 0x75, 0xd1, 0x67, 0xa7, 0xd9, 0xac, 0x21, 0xf5, 0xf5, 0x0c, 0xd5, 0x96, 0xbd, 0xc1, 0x43, 0x47, 0xee, 0x85, 0x81, 0x2d, 0xcd, 0x02, 0x0e, 0x4f, 0x7c,
0xe8, 0x38, 0xc0, 0x0e, 0x45, 0x11, 0xfb, 0x7a, 0x3a, 0xd0, 0x1a, 0x4a, 0xa0, 0x5d, 0x83, 0x19, 0x44, 0x0b, 0x7f, 0x0a, 0x0b, 0x19, 0x71, 0x4b, 0x6d, 0xc0, 0x03, 0xa8, 0x49, 0x14, 0xca, 0x1e,
0x4f, 0x8d, 0x53, 0xde, 0x88, 0x71, 0xea, 0x33, 0xe6, 0x10, 0x8a, 0xdc, 0x6b, 0x65, 0x2f, 0x23, 0xcc, 0x09, 0x57, 0x97, 0x7d, 0x56, 0x92, 0x0d, 0x8f, 0x98, 0xaf, 0x87, 0xc7, 0x01, 0xb1, 0x19,
0xdf, 0xe0, 0x13, 0x76, 0xeb, 0xef, 0x06, 0xdc, 0x6c, 0xba, 0x17, 0xbd, 0x10, 0x47, 0xc8, 0x9e, 0x8a, 0xc8, 0xd7, 0x93, 0x81, 0xd6, 0xc8, 0x04, 0xda, 0x55, 0x98, 0x71, 0xb3, 0x71, 0xca, 0x1d,
0x79, 0x22, 0x42, 0x5f, 0x1d, 0x87, 0xf3, 0x0f, 0xa9, 0x64, 0xa3, 0x4d, 0xa4, 0x36, 0xda, 0x47, 0x33, 0x4e, 0xfd, 0x8c, 0x3b, 0x44, 0x66, 0xdd, 0x2b, 0xe5, 0x40, 0x63, 0xe7, 0x01, 0x31, 0x3b,
0xb0, 0xc0, 0x64, 0xc9, 0xbb, 0xb5, 0x42, 0x77, 0xab, 0xda, 0x51, 0xb8, 0xe9, 0x7e, 0x6e, 0x40, 0xfe, 0x9b, 0x01, 0x37, 0xf9, 0xe9, 0x18, 0x22, 0x7b, 0xe6, 0xca, 0x08, 0x7d, 0x79, 0x1c, 0xce,
0x5d, 0x03, 0xfb, 0x4b, 0xdd, 0x3a, 0x2e, 0xdc, 0x14, 0x97, 0xf2, 0x7e, 0x7f, 0x14, 0x67, 0xbd, 0x3f, 0xa4, 0x62, 0x43, 0xbb, 0x96, 0x30, 0xb4, 0x8f, 0x60, 0x9e, 0xaf, 0xa5, 0x5a, 0x6b, 0x85,
0xde, 0x85, 0xf7, 0x37, 0xd2, 0xb9, 0x24, 0x09, 0x7c, 0xa7, 0xf1, 0xea, 0x77, 0x06, 0x4c, 0x6f, 0x59, 0x6b, 0xb6, 0xa3, 0xd0, 0xe8, 0x7e, 0x6a, 0x40, 0x43, 0x03, 0xfb, 0x0b, 0x35, 0x1d, 0x07,
0x1f, 0xb6, 0x28, 0x5b, 0x3a, 0x8b, 0x36, 0x5e, 0xaf, 0x4c, 0x70, 0x0f, 0x6a, 0x4c, 0x56, 0x9b, 0x6e, 0xca, 0xab, 0xfd, 0x60, 0x30, 0x8e, 0xb3, 0x5e, 0xed, 0xda, 0xfc, 0x6b, 0xe5, 0x5c, 0x52,
0x84, 0x38, 0x38, 0x6a, 0x0f, 0xe2, 0x6b, 0x5f, 0x96, 0x8c, 0xee, 0xf2, 0x9c, 0x95, 0x91, 0x9a, 0x16, 0x7c, 0xa7, 0xf1, 0xea, 0xb7, 0x06, 0x4c, 0x6f, 0x1d, 0xb4, 0x19, 0x5b, 0x32, 0x17, 0x37,
0x0e, 0x37, 0x55, 0x9a, 0x18, 0x85, 0xf7, 0x99, 0xd8, 0x58, 0xd1, 0xa2, 0xac, 0x72, 0x6c, 0x74, 0x5e, 0xaf, 0xd8, 0x70, 0x0f, 0xea, 0x7c, 0xad, 0x0e, 0x0d, 0x88, 0x7f, 0xd8, 0x19, 0x46, 0x97,
0x66, 0xb6, 0x2c, 0x09, 0x01, 0xed, 0x00, 0xfc, 0xa0, 0xdd, 0xed, 0xb9, 0xd4, 0xd4, 0xbc, 0xc2, 0xc7, 0x34, 0x39, 0xbc, 0xe3, 0x29, 0xa4, 0x96, 0x2d, 0x54, 0x95, 0x24, 0x86, 0xe1, 0x7d, 0x26,
0x71, 0x57, 0x03, 0x9d, 0xdf, 0xee, 0x13, 0x5e, 0x5b, 0x1a, 0x37, 0xc2, 0x12, 0x7e, 0x61, 0xc0, 0x52, 0x56, 0xb8, 0x29, 0xcb, 0x02, 0x1b, 0x9b, 0x99, 0x6f, 0x4b, 0x4c, 0x40, 0xdb, 0x00, 0xdf,
0x6c, 0x82, 0x8a, 0xf8, 0xe8, 0x1b, 0x50, 0x8d, 0xcd, 0x47, 0x78, 0x5d, 0xa6, 0x16, 0xdf, 0x4e, 0xeb, 0xf4, 0xfa, 0x0e, 0x53, 0xb5, 0xa8, 0x93, 0xdc, 0xd5, 0x40, 0x17, 0x39, 0x42, 0xcc, 0x6b,
0x38, 0xdd, 0x4e, 0x38, 0xde, 0x10, 0x4e, 0x61, 0x8b, 0xe1, 0x80, 0x50, 0x94, 0x15, 0x3b, 0x21, 0x29, 0xe3, 0xc6, 0xd8, 0xc2, 0xcf, 0x0d, 0x98, 0x8d, 0x51, 0x51, 0x0f, 0x7d, 0x0d, 0xaa, 0x91,
0x58, 0x17, 0x09, 0x44, 0x12, 0x59, 0x2e, 0x2d, 0xd3, 0x78, 0x33, 0xb6, 0x51, 0xc3, 0x89, 0xf5, 0xfa, 0xa8, 0xa8, 0xee, 0xd4, 0xa3, 0xdb, 0x89, 0xa0, 0x5b, 0x31, 0xc7, 0x1b, 0xc2, 0x29, 0x75,
0x27, 0x03, 0xe6, 0x24, 0xc1, 0xef, 0xca, 0x38, 0x26, 0x4c, 0xc7, 0xb6, 0xe0, 0xb6, 0x11, 0x6d, 0x31, 0x1a, 0x52, 0x86, 0xb2, 0x62, 0xc5, 0x04, 0x7c, 0x1e, 0x43, 0xa4, 0xa1, 0xe6, 0x92, 0x6b,
0xeb, 0x38, 0xa9, 0xba, 0x68, 0xdc, 0xdd, 0x49, 0xbb, 0xbb, 0x33, 0x82, 0xce, 0x67, 0x50, 0x67, 0x1a, 0x6f, 0x46, 0x37, 0xd9, 0x70, 0x82, 0xff, 0x68, 0x40, 0x4d, 0x59, 0xf8, 0x5d, 0x29, 0xc7,
0x4d, 0x56, 0xbd, 0x6a, 0x85, 0xed, 0x70, 0x48, 0x8a, 0x27, 0x5d, 0x82, 0x49, 0xc6, 0x16, 0x9f, 0x84, 0xe9, 0x48, 0x17, 0x42, 0x37, 0xb2, 0x8d, 0x8f, 0xe2, 0xda, 0x8d, 0xc6, 0xdd, 0xed, 0xa4,
0xa4, 0xac, 0x35, 0xc2, 0xe6, 0x6b, 0xc0, 0x92, 0x4e, 0x18, 0xcb, 0xcc, 0x10, 0xef, 0xa2, 0xe9, 0xbb, 0xdb, 0x63, 0xc8, 0x7c, 0x0a, 0x0d, 0xde, 0xe4, 0x35, 0xb0, 0x76, 0xd0, 0x09, 0x46, 0xb4,
0xb4, 0xd7, 0xc7, 0x57, 0x82, 0xa0, 0x61, 0xcb, 0x89, 0xc3, 0x0a, 0x6b, 0xa5, 0x8b, 0x93, 0xe3, 0x78, 0xd2, 0x45, 0xb8, 0xce, 0xd9, 0xa2, 0x93, 0x94, 0xb7, 0xc6, 0x30, 0xbe, 0x26, 0x2c, 0xea,
0x99, 0xe2, 0xe4, 0x08, 0x97, 0xb2, 0x3a, 0x2c, 0x2a, 0x38, 0x88, 0x6f, 0x1d, 0xc0, 0x8d, 0x1d, 0x16, 0xa3, 0x5e, 0x78, 0x1a, 0x21, 0xd1, 0xc5, 0x92, 0x72, 0x77, 0x40, 0x2e, 0x05, 0xc1, 0xc2,
0xdc, 0xc7, 0x52, 0x51, 0xf3, 0x3a, 0x46, 0x5f, 0x80, 0x5a, 0x6a, 0x36, 0xe2, 0x5b, 0x87, 0x50, 0x96, 0x1d, 0x85, 0x15, 0xde, 0x4a, 0x96, 0x38, 0x27, 0x53, 0x25, 0xce, 0x31, 0x2e, 0x65, 0x0d,
0x8b, 0x17, 0x76, 0xeb, 0xa7, 0x4d, 0xe7, 0xba, 0x12, 0x1e, 0x26, 0x25, 0x41, 0x36, 0x1d, 0xf1, 0x58, 0xc8, 0xe0, 0xa0, 0x1e, 0xde, 0x87, 0x1b, 0xdb, 0x64, 0x40, 0x94, 0xd2, 0xe8, 0x55, 0x94,
0xd1, 0xd7, 0x93, 0x40, 0xc9, 0x9d, 0x48, 0xd9, 0xcb, 0x82, 0xc1, 0xfa, 0x87, 0x92, 0x82, 0x90, 0x3e, 0x0f, 0xf5, 0xc4, 0x6c, 0xd4, 0xc3, 0x07, 0x50, 0x8f, 0x36, 0x76, 0xf3, 0xc7, 0x2d, 0xfb,
0xed, 0xc3, 0x56, 0x31, 0x2c, 0x13, 0xa6, 0x23, 0xa3, 0x49, 0xa1, 0x53, 0xb4, 0x33, 0xae, 0x31, 0xaa, 0x2b, 0x3c, 0x8c, 0x0b, 0x8b, 0x7c, 0x3a, 0xea, 0xa1, 0xaf, 0xc6, 0x81, 0x52, 0x38, 0x51,
0xfe, 0x66, 0x7c, 0x58, 0xb3, 0x7e, 0xff, 0x52, 0xef, 0xf9, 0x14, 0x37, 0xf1, 0xd1, 0xf7, 0x61, 0xc6, 0x96, 0x25, 0x03, 0xfe, 0x7b, 0x26, 0x05, 0xa1, 0x5b, 0x07, 0xed, 0x62, 0x58, 0x26, 0x4c,
0x8a, 0x9d, 0x1b, 0xb1, 0x2b, 0x8f, 0x7a, 0xdc, 0xc4, 0xc3, 0xd0, 0xae, 0xc6, 0xbf, 0xbf, 0xa2, 0x87, 0x4a, 0x53, 0x42, 0xa7, 0x6c, 0xa7, 0x5c, 0x63, 0xf2, 0xcd, 0xf8, 0xb0, 0x66, 0xff, 0xfe,
0x55, 0x82, 0xe5, 0xaa, 0x39, 0x5a, 0xdc, 0x06, 0x60, 0x12, 0xa4, 0xf0, 0x27, 0x51, 0xac, 0x5f, 0x99, 0xbd, 0xe7, 0x33, 0xdc, 0xd4, 0x43, 0xdf, 0x85, 0x29, 0x7e, 0x6e, 0x44, 0xae, 0x3c, 0xee,
0x1a, 0xd0, 0xb0, 0xf1, 0xc0, 0xbb, 0xc0, 0xaf, 0x65, 0xfe, 0x06, 0x4c, 0x31, 0x27, 0x20, 0xfc, 0x71, 0x13, 0x0d, 0x43, 0x3b, 0x1a, 0xff, 0xfe, 0x92, 0x56, 0x08, 0x9e, 0xab, 0xe6, 0x48, 0xb1,
0xfe, 0x1d, 0x37, 0x5f, 0xab, 0x02, 0xee, 0x64, 0x2a, 0xe0, 0x8e, 0x75, 0x08, 0x2b, 0x39, 0x68, 0x02, 0xc0, 0x57, 0x50, 0xc2, 0x9f, 0x42, 0xc1, 0xbf, 0x30, 0xa0, 0x69, 0x91, 0xa1, 0x7b, 0x4e,
0xd8, 0xc1, 0x4f, 0x86, 0x9d, 0x0e, 0x26, 0x84, 0xd7, 0x98, 0xe3, 0x66, 0xe4, 0xa1, 0xa7, 0xed, 0x5e, 0x4b, 0xfd, 0x4d, 0x98, 0xe2, 0x4e, 0x40, 0xc5, 0xfd, 0x3b, 0x6a, 0xbe, 0x56, 0x1d, 0xdd,
0x5e, 0x1f, 0x3b, 0x1c, 0x0d, 0x6f, 0x59, 0x9f, 0x1b, 0x50, 0x7f, 0xe4, 0x38, 0x6f, 0x43, 0x35, 0x4e, 0xd5, 0xd1, 0x6d, 0x7c, 0x00, 0x4b, 0x39, 0x68, 0xf8, 0xc1, 0x4f, 0x47, 0xdd, 0x2e, 0xa1,
0x47, 0x55, 0xcd, 0x29, 0x54, 0xed, 0x09, 0x2c, 0xe9, 0xa0, 0x94, 0xd2, 0xab, 0x07, 0xb5, 0x9d, 0x54, 0x54, 0xaa, 0xa3, 0x66, 0xe8, 0xa1, 0x27, 0x9d, 0xfe, 0x80, 0xd8, 0x02, 0x8d, 0x68, 0xe1,
0x1e, 0x19, 0xf4, 0x08, 0x11, 0x31, 0xc2, 0x84, 0x69, 0x2f, 0x53, 0x93, 0xf5, 0xfc, 0x91, 0x6f, 0xcf, 0x0c, 0x68, 0x3c, 0xb2, 0xed, 0xb7, 0x21, 0x9a, 0x9d, 0x15, 0xcd, 0x2e, 0x14, 0xed, 0x09,
0xef, 0x0d, 0x98, 0xea, 0xa6, 0x6f, 0xb7, 0xbc, 0x69, 0xed, 0xc2, 0x7c, 0x5a, 0x14, 0x2b, 0x33, 0x2c, 0xea, 0xa0, 0x94, 0x92, 0xab, 0x0f, 0xf5, 0xed, 0x3e, 0x1d, 0xf6, 0x29, 0x95, 0x31, 0xc2,
0x74, 0x46, 0x29, 0x33, 0x24, 0x4c, 0xd6, 0x5f, 0x0c, 0x40, 0x87, 0xc3, 0x10, 0x67, 0x8e, 0x93, 0x84, 0x69, 0x37, 0x55, 0xd9, 0x75, 0xbd, 0xb1, 0x6f, 0xef, 0x4d, 0x98, 0xea, 0x25, 0x6f, 0xb7,
0xb7, 0x84, 0x3a, 0x32, 0xdc, 0x50, 0x2e, 0x1a, 0xf1, 0x16, 0xb2, 0x60, 0x76, 0x30, 0x0c, 0xb1, 0xa2, 0x89, 0x77, 0x60, 0x2e, 0xb9, 0x14, 0x2f, 0x33, 0x74, 0xc7, 0x29, 0x33, 0xc4, 0x4c, 0xf8,
0xd3, 0xc2, 0x1d, 0xcf, 0x75, 0x08, 0xcd, 0xfe, 0xe6, 0xec, 0x14, 0xcd, 0xda, 0x87, 0x45, 0x05, 0xcf, 0x06, 0xa0, 0x83, 0x51, 0x40, 0x52, 0xc7, 0xc9, 0x5b, 0x42, 0x1d, 0x2a, 0x6e, 0xa4, 0x16,
0x69, 0x39, 0xa5, 0x7f, 0x61, 0x40, 0x63, 0xbb, 0xed, 0x76, 0x70, 0xff, 0xdd, 0xab, 0x6e, 0x1d, 0x8d, 0x44, 0x0b, 0x61, 0x98, 0x1d, 0x8e, 0x02, 0x62, 0xb7, 0x49, 0xd7, 0x75, 0x6c, 0xca, 0xb2,
0xc1, 0x4a, 0x0e, 0x96, 0x72, 0xca, 0x9d, 0xc2, 0xac, 0x98, 0xe9, 0x6d, 0x6e, 0xc0, 0x2d, 0x98, 0xbf, 0x9a, 0x95, 0xa0, 0xe1, 0x3d, 0x58, 0xc8, 0x20, 0x2d, 0x27, 0xf4, 0xcf, 0x0d, 0x68, 0x6e,
0x93, 0xe4, 0x94, 0xc3, 0xda, 0x07, 0x94, 0xd1, 0xfd, 0x6d, 0x22, 0xde, 0x87, 0x45, 0x45, 0x5a, 0x75, 0x9c, 0x2e, 0x19, 0xbc, 0x7b, 0xd1, 0xf1, 0x21, 0x2c, 0xe5, 0x60, 0x29, 0x27, 0xdc, 0x09,
0x39, 0xdc, 0x7f, 0x36, 0x60, 0xa5, 0x95, 0x3a, 0x61, 0x8e, 0x7a, 0x9d, 0x33, 0xb7, 0x3d, 0x88, 0xcc, 0xca, 0x99, 0xde, 0xa6, 0x01, 0x6e, 0x42, 0x4d, 0x59, 0xa7, 0x1c, 0xd6, 0x01, 0xa0, 0x94,
0x6f, 0x2c, 0xdd, 0x74, 0xea, 0xd5, 0x4d, 0x52, 0x2f, 0x97, 0x33, 0xc6, 0xa7, 0x63, 0xdc, 0x4e, 0xec, 0x6f, 0x13, 0xf1, 0x1e, 0x2c, 0x64, 0x56, 0x2b, 0x87, 0xfb, 0x4f, 0x06, 0x2c, 0xb5, 0x13,
0x69, 0x3d, 0x5e, 0xac, 0xf5, 0x84, 0xaa, 0x75, 0xb2, 0xbb, 0x2a, 0xa9, 0xdd, 0x75, 0x0c, 0x66, 0x27, 0xcc, 0x61, 0xbf, 0x7b, 0xea, 0x74, 0x86, 0xd1, 0x8d, 0xa5, 0x97, 0x4c, 0xbd, 0x7a, 0x71,
0x1e, 0xd0, 0x72, 0x75, 0xc9, 0x80, 0xbe, 0x40, 0xb1, 0x92, 0x41, 0x6b, 0xe8, 0xf3, 0x92, 0x7c, 0xea, 0xe5, 0x08, 0xc6, 0xe8, 0x74, 0x8c, 0xda, 0x09, 0xa9, 0x27, 0x8b, 0xa5, 0xbe, 0x96, 0x95,
0x5c, 0xaf, 0xc8, 0x00, 0x35, 0x8a, 0x80, 0x8e, 0xa5, 0x22, 0x40, 0x81, 0xfa, 0xd1, 0x61, 0x78, 0x3a, 0xb6, 0xae, 0x4a, 0xc2, 0xba, 0x8e, 0xc0, 0xcc, 0x03, 0x5a, 0xae, 0x2e, 0xe9, 0xb3, 0x77,
0x2b, 0x57, 0x68, 0xa9, 0x15, 0xbc, 0x56, 0xb5, 0xe2, 0x92, 0x5e, 0x8b, 0x12, 0x1c, 0x5f, 0xda, 0x2c, 0x5e, 0x32, 0x68, 0x8f, 0x3c, 0x51, 0xd8, 0x8f, 0xea, 0x15, 0x29, 0xa0, 0x46, 0x11, 0xd0,
0x83, 0xeb, 0xaf, 0xd8, 0xc5, 0x46, 0x91, 0x5c, 0xce, 0x04, 0x6f, 0xe2, 0xd9, 0xf5, 0x3f, 0x63, 0x89, 0x44, 0x04, 0x28, 0x10, 0x3f, 0x3c, 0x0c, 0x6f, 0xe7, 0x2e, 0x5a, 0x6a, 0x07, 0xaf, 0x54,
0x50, 0x4f, 0xef, 0x2f, 0xa9, 0xa2, 0x9a, 0xe3, 0x04, 0x25, 0x76, 0xc0, 0x08, 0x0e, 0xf0, 0x2d, 0xad, 0xb8, 0x60, 0xd7, 0xa2, 0x18, 0xc7, 0x17, 0xf6, 0x6c, 0xfb, 0x4b, 0x7e, 0xb1, 0xc9, 0xac,
0xc9, 0xb5, 0x2a, 0x3c, 0xeb, 0xef, 0x7a, 0x5e, 0xb7, 0x8f, 0xd9, 0x0f, 0x12, 0x2f, 0x87, 0xa7, 0x5c, 0x4e, 0x05, 0x6f, 0xe2, 0xf1, 0xf6, 0x3f, 0x13, 0xd0, 0x48, 0xda, 0x97, 0x52, 0x51, 0xcd,
0xeb, 0xad, 0x30, 0xe8, 0xb9, 0xdd, 0x1f, 0xb6, 0xfb, 0x43, 0x2c, 0x39, 0xde, 0x03, 0x98, 0x3a, 0x71, 0x82, 0x12, 0x16, 0x30, 0x86, 0x03, 0x7c, 0x43, 0x71, 0xad, 0x8a, 0xc8, 0xfa, 0x7b, 0xae,
0x6d, 0x77, 0xf0, 0x27, 0xf6, 0x01, 0x2d, 0xf0, 0x5c, 0x35, 0x30, 0x66, 0x46, 0xdf, 0x86, 0x6a, 0xdb, 0x1b, 0x10, 0xfe, 0x9b, 0xc5, 0xcb, 0xd1, 0xc9, 0x5a, 0x3b, 0xf0, 0xfb, 0x4e, 0xef, 0xfb,
0x20, 0xd2, 0x8c, 0x29, 0x3a, 0xf2, 0x96, 0x32, 0xb2, 0xe9, 0x86, 0xf7, 0x37, 0xd9, 0xc0, 0x84, 0x9d, 0xc1, 0x88, 0x28, 0x8e, 0xf7, 0x00, 0xa6, 0x4e, 0x3a, 0x5d, 0xf2, 0x89, 0xb5, 0xcf, 0x0a,
0x1b, 0x7d, 0x04, 0x63, 0xf8, 0x55, 0x63, 0x7a, 0x04, 0x69, 0x63, 0xf8, 0x95, 0xf5, 0x14, 0x96, 0x3c, 0x97, 0x0d, 0x8c, 0x98, 0xd1, 0x37, 0xa1, 0xea, 0xcb, 0x34, 0x63, 0x8a, 0x8d, 0xbc, 0x9d,
0x74, 0x36, 0x2e, 0xe5, 0xbf, 0x9b, 0xff, 0x5b, 0x04, 0xf6, 0xf7, 0x09, 0xfa, 0x2e, 0xcc, 0x74, 0x19, 0xd9, 0x72, 0x82, 0xfb, 0x1b, 0x7c, 0x60, 0xcc, 0x8d, 0x3e, 0x82, 0x09, 0xf2, 0xaa, 0x39,
0x92, 0x7f, 0x16, 0x50, 0x3d, 0x1e, 0x97, 0xfa, 0x71, 0xc3, 0x5c, 0xd2, 0x91, 0x89, 0x8f, 0x1e, 0x3d, 0xc6, 0x6a, 0x13, 0xe4, 0x15, 0x7e, 0x0a, 0x8b, 0x3a, 0x1d, 0x97, 0xf2, 0xdf, 0x8d, 0xff,
0x40, 0xf5, 0x27, 0xf1, 0xf3, 0x15, 0x5a, 0xe4, 0x4c, 0xf2, 0xc3, 0x9a, 0x79, 0x53, 0x25, 0xb2, 0x2d, 0x00, 0xff, 0x87, 0x05, 0x7d, 0x1b, 0x66, 0xba, 0xf1, 0x9f, 0x0f, 0xa8, 0x11, 0x8d, 0x4b,
0x71, 0xe7, 0xf1, 0xdb, 0x88, 0x18, 0x27, 0xbf, 0xca, 0x88, 0x71, 0xe9, 0x27, 0x94, 0x2d, 0x98, 0xfc, 0xfe, 0x61, 0x2e, 0xea, 0xc8, 0xd4, 0x43, 0x0f, 0xa0, 0xfa, 0xa3, 0xe8, 0xf9, 0x0a, 0x2d,
0xeb, 0xca, 0xff, 0x1a, 0xa0, 0xe5, 0xf8, 0xcf, 0x91, 0xcc, 0x6f, 0x0f, 0x66, 0x43, 0xdf, 0x41, 0x08, 0x26, 0xf5, 0x79, 0xce, 0xbc, 0x99, 0x25, 0xf2, 0x71, 0x67, 0xd1, 0xdb, 0x88, 0x1c, 0xa7,
0x7c, 0xf4, 0x10, 0x66, 0x89, 0xf4, 0x08, 0x8f, 0x62, 0xdd, 0x32, 0x3f, 0x0e, 0x98, 0xcb, 0x5a, 0xbe, 0xca, 0xc8, 0x71, 0xc9, 0x27, 0x94, 0x4d, 0xa8, 0xf5, 0xd4, 0x3f, 0x16, 0xd0, 0xad, 0xe8,
0x3a, 0xf1, 0xd1, 0x8f, 0x61, 0xb9, 0xab, 0x7f, 0x01, 0x47, 0x77, 0x32, 0x52, 0xd5, 0x17, 0x68, 0xff, 0x93, 0xd4, 0xcf, 0x13, 0x66, 0x53, 0xdf, 0x41, 0x3d, 0xf4, 0x10, 0x66, 0xa9, 0xf2, 0x94,
0xd3, 0xba, 0x8a, 0x85, 0xf8, 0xe8, 0x14, 0x56, 0xba, 0x79, 0xcf, 0xc9, 0xe8, 0x83, 0x64, 0x82, 0x8f, 0x22, 0xd9, 0x52, 0xbf, 0x1f, 0x98, 0xb7, 0xb4, 0x74, 0xea, 0xa1, 0x1f, 0xc2, 0xad, 0x9e,
0xdc, 0x77, 0x6e, 0xf3, 0xee, 0xd5, 0x4c, 0xc4, 0x47, 0x27, 0x80, 0x42, 0xe5, 0x4d, 0x15, 0xad, 0xfe, 0x1d, 0x1d, 0xdd, 0x49, 0xad, 0x9a, 0x7d, 0xc7, 0x36, 0xf1, 0x65, 0x2c, 0xd4, 0x43, 0x27,
0xf2, 0xb1, 0xda, 0xf7, 0x62, 0xf3, 0xbd, 0x82, 0x5e, 0xe2, 0xa3, 0x0e, 0x34, 0xba, 0x39, 0x0f, 0xb0, 0xd4, 0xcb, 0x7b, 0x94, 0x46, 0x1f, 0xc4, 0x13, 0xe4, 0xbe, 0x96, 0x9b, 0x77, 0x2f, 0x67,
0x76, 0xc8, 0x4a, 0xfd, 0xe6, 0xa3, 0x7d, 0xac, 0x34, 0x3f, 0xb8, 0x92, 0x87, 0xe1, 0xee, 0x2a, 0xa2, 0x1e, 0x3a, 0x06, 0x14, 0x64, 0x5e, 0x66, 0xd1, 0xb2, 0x18, 0xab, 0x7d, 0x75, 0x36, 0xdf,
0x2f, 0x4e, 0x02, 0xb7, 0xf6, 0xc1, 0x4c, 0xe0, 0xce, 0x79, 0xaa, 0x7a, 0x06, 0x8b, 0x5d, 0xf5, 0x2b, 0xe8, 0xa5, 0x1e, 0xea, 0x42, 0xb3, 0x97, 0xf3, 0x60, 0x87, 0x70, 0xe2, 0x67, 0x21, 0xed,
0x09, 0x06, 0xe9, 0x47, 0x89, 0x5d, 0x76, 0xbb, 0xa8, 0x9b, 0xf8, 0x68, 0x1f, 0x6a, 0x67, 0xe9, 0x63, 0xa5, 0xf9, 0xc1, 0xa5, 0x3c, 0x1c, 0x77, 0x2f, 0xf3, 0xe2, 0x24, 0x71, 0x6b, 0x1f, 0xcc,
0x37, 0x05, 0x14, 0xff, 0xeb, 0xa4, 0x3e, 0xad, 0x98, 0x66, 0x5e, 0x97, 0x50, 0x39, 0x53, 0xa4, 0x24, 0xee, 0x9c, 0xa7, 0xaa, 0x67, 0xb0, 0xd0, 0xcb, 0x3e, 0xc1, 0x20, 0xfd, 0x28, 0x69, 0x65,
0x97, 0x55, 0x56, 0xdf, 0x0d, 0x64, 0x95, 0x75, 0xd5, 0xfd, 0x23, 0x58, 0xe8, 0x65, 0xeb, 0xd6, 0x2b, 0x45, 0xdd, 0xd4, 0x43, 0x7b, 0x50, 0x3f, 0x4d, 0xbe, 0x29, 0xa0, 0xe8, 0x8f, 0xa9, 0xec,
0xe8, 0x56, 0x5c, 0x6a, 0xd6, 0x14, 0xe2, 0xcd, 0xd5, 0xfc, 0x4e, 0x36, 0x5f, 0x37, 0x5b, 0x13, 0xd3, 0x8a, 0x69, 0xe6, 0x75, 0x49, 0x91, 0x53, 0x45, 0x7a, 0x55, 0xe4, 0xec, 0xbb, 0x81, 0x2a,
0x16, 0xf3, 0xe9, 0xca, 0xd3, 0xe6, 0x6a, 0x7e, 0x27, 0x73, 0x54, 0xb9, 0x74, 0x21, 0x1c, 0x35, 0xb2, 0xae, 0xba, 0x7f, 0x08, 0xf3, 0xfd, 0x74, 0xdd, 0x1a, 0xdd, 0x8e, 0x4a, 0xcd, 0x9a, 0x42,
0x53, 0x1e, 0x31, 0x97, 0xb5, 0x74, 0xe2, 0xa3, 0xfb, 0x30, 0x1d, 0xd3, 0x10, 0xca, 0x30, 0x45, 0xbc, 0xb9, 0x9c, 0xdf, 0xc9, 0xe7, 0xeb, 0xa5, 0x6b, 0xc2, 0x72, 0x3e, 0x5d, 0x79, 0xda, 0x5c,
0x03, 0x17, 0x15, 0x1a, 0x0b, 0x4d, 0x22, 0x66, 0xa0, 0x2c, 0x07, 0x91, 0x43, 0x53, 0xba, 0x42, 0xce, 0xef, 0xe4, 0x8e, 0xaa, 0x96, 0x2e, 0xa4, 0xa3, 0xa6, 0xca, 0x23, 0xe6, 0x2d, 0x2d, 0x9d,
0x78, 0x22, 0xea, 0x56, 0x52, 0x49, 0x4b, 0x2c, 0x90, 0xb6, 0xb4, 0x26, 0x16, 0x48, 0x5f, 0x0b, 0x7a, 0xe8, 0x3e, 0x4c, 0x47, 0x34, 0x84, 0x52, 0x4c, 0xe1, 0xc0, 0x85, 0x0c, 0x8d, 0x87, 0x26,
0x8b, 0x76, 0x4f, 0xa6, 0x04, 0x25, 0x76, 0x8f, 0x5a, 0x22, 0x13, 0xbb, 0x47, 0x53, 0xb5, 0x8a, 0x19, 0x33, 0x50, 0x9a, 0x83, 0xaa, 0xa1, 0x29, 0x59, 0x21, 0x3c, 0x96, 0x75, 0x2b, 0xa5, 0xa4,
0xa2, 0xbc, 0x54, 0x67, 0x12, 0x51, 0x3e, 0x5d, 0xc9, 0x12, 0x51, 0x3e, 0x53, 0x92, 0x8a, 0x54, 0x25, 0x37, 0x48, 0x5b, 0x5a, 0x93, 0x1b, 0xa4, 0xaf, 0x85, 0x85, 0xd6, 0x93, 0x2a, 0x41, 0x49,
0x53, 0x2b, 0x29, 0x39, 0xee, 0xc6, 0x53, 0xf8, 0x1c, 0x77, 0x13, 0x59, 0xf5, 0x73, 0xa8, 0x6b, 0xeb, 0xc9, 0x96, 0xc8, 0xa4, 0xf5, 0x68, 0xaa, 0x56, 0x61, 0x94, 0x57, 0xea, 0x4c, 0x32, 0xca,
0x4b, 0x09, 0xe8, 0x7d, 0x3e, 0x2e, 0xaf, 0xec, 0x61, 0xae, 0x15, 0x33, 0x30, 0xb8, 0x6a, 0x2e, 0x27, 0x2b, 0x59, 0x32, 0xca, 0xa7, 0x4a, 0x52, 0xa1, 0x68, 0xd9, 0x4a, 0x4a, 0x8e, 0xbb, 0x89,
0x2f, 0xe0, 0x6a, 0x2b, 0x0e, 0x02, 0x6e, 0x4e, 0x11, 0xe0, 0x21, 0xcc, 0xca, 0x79, 0xb6, 0xd8, 0x14, 0x3e, 0xc7, 0xdd, 0x64, 0x56, 0xfd, 0x1c, 0x1a, 0xda, 0x52, 0x02, 0x7a, 0x5f, 0x8c, 0xcb,
0x8a, 0x99, 0x3c, 0x5f, 0x6c, 0x45, 0x25, 0x29, 0xdf, 0x87, 0x5a, 0x26, 0xb3, 0x13, 0x4b, 0xa9, 0x2b, 0x7b, 0x98, 0xab, 0xc5, 0x0c, 0x1c, 0x6e, 0x36, 0x97, 0x97, 0x70, 0xb5, 0x15, 0x07, 0x09,
0x66, 0x9f, 0x62, 0x29, 0x75, 0xc9, 0xe0, 0x73, 0xa8, 0x6b, 0x33, 0x45, 0x61, 0xb9, 0xbc, 0x9c, 0x37, 0xa7, 0x08, 0xf0, 0x10, 0x66, 0xd5, 0x3c, 0x5b, 0x9a, 0x62, 0x2a, 0xcf, 0x97, 0xa6, 0x98,
0x56, 0x58, 0x2e, 0x3f, 0xd1, 0x7c, 0x00, 0x55, 0x41, 0x16, 0x7b, 0x5f, 0xce, 0xca, 0xc4, 0xde, 0x49, 0xca, 0xf7, 0xa0, 0x9e, 0xca, 0xec, 0xe4, 0x56, 0x66, 0xb3, 0x4f, 0xb9, 0x95, 0xba, 0x64,
0x4f, 0x27, 0x4f, 0xfb, 0x50, 0xcb, 0x4c, 0x2a, 0xb4, 0x53, 0x33, 0x3b, 0xa1, 0x9d, 0x2e, 0x0d, 0xf0, 0x39, 0x34, 0xb4, 0x99, 0xa2, 0xd4, 0x5c, 0x5e, 0x4e, 0x2b, 0x35, 0x97, 0x9f, 0x68, 0x3e,
0xfb, 0x51, 0xf6, 0x96, 0x13, 0x67, 0x2a, 0x68, 0x2d, 0x73, 0x1c, 0x2b, 0x19, 0x97, 0x79, 0xe7, 0x80, 0xaa, 0x24, 0x4b, 0xdb, 0x57, 0xb3, 0x32, 0x69, 0xfb, 0xc9, 0xe4, 0x69, 0x0f, 0xea, 0xa9,
0x0a, 0x0e, 0x76, 0x74, 0xe7, 0xa4, 0x10, 0xf2, 0xd1, 0x9d, 0x93, 0xd7, 0xc8, 0x47, 0x77, 0x6e, 0x49, 0xa5, 0x74, 0xd9, 0xcc, 0x4e, 0x4a, 0xa7, 0x4b, 0xc3, 0x7e, 0x90, 0xbe, 0xe5, 0x44, 0x99,
0x16, 0xc2, 0x7c, 0x25, 0x73, 0x39, 0x97, 0x7d, 0x45, 0xcd, 0x18, 0x64, 0x5f, 0xd1, 0xdd, 0xea, 0x0a, 0x5a, 0x4d, 0x1d, 0xc7, 0x99, 0x8c, 0xcb, 0xbc, 0x73, 0x09, 0x07, 0x3f, 0xba, 0x73, 0x52,
0x4f, 0x00, 0xa9, 0x37, 0x3f, 0x31, 0xa5, 0xf6, 0xe2, 0x2d, 0xa6, 0xd4, 0x5f, 0x19, 0xb7, 0x6a, 0x08, 0xf5, 0xe8, 0xce, 0xc9, 0x6b, 0xd4, 0xa3, 0x3b, 0x37, 0x0b, 0xe1, 0xbe, 0x92, 0xba, 0x9c,
0xcf, 0xe7, 0xd6, 0xd9, 0xbf, 0xc8, 0x1f, 0xd3, 0xef, 0xcb, 0x49, 0x7a, 0xef, 0xbc, 0xff, 0xff, 0xab, 0xbe, 0x92, 0xcd, 0x18, 0x54, 0x5f, 0xd1, 0xdd, 0xea, 0x8f, 0x01, 0x65, 0x6f, 0x7e, 0x72,
0x00, 0x00, 0x00, 0xff, 0xff, 0xe6, 0x70, 0x4b, 0xcf, 0xa7, 0x2c, 0x00, 0x00, 0x4a, 0xed, 0xc5, 0x5b, 0x4e, 0xa9, 0xbf, 0x32, 0x6e, 0xd6, 0x9f, 0xd7, 0xd6, 0xf8, 0x1f, 0xcd,
0x1f, 0xb3, 0xef, 0xcb, 0xeb, 0xec, 0xde, 0x79, 0xff, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7a,
0x3c, 0xf8, 0x82, 0xed, 0x2c, 0x00, 0x00,
} }

View File

@ -91,6 +91,9 @@ message JoinGroupReq{
string ReqMessage = 2; string ReqMessage = 2;
string OpUserID = 3; string OpUserID = 3;
string OperationID = 4; string OperationID = 4;
int32 JoinSource = 5;
string InviterUserID = 6;
} }
message JoinGroupResp{ message JoinGroupResp{
CommonResp CommonResp = 1; CommonResp CommonResp = 1;

File diff suppressed because it is too large Load Diff

View File

@ -21,6 +21,10 @@ message GroupInfo{
string creatorUserID = 11; string creatorUserID = 11;
int32 groupType = 12; int32 groupType = 12;
int32 needVerification = 13; int32 needVerification = 13;
int32 lookMemberInfo =14;
int32 applyMemberFriend = 15;
uint32 notificationUpdateTime = 16;
string notificationUserID = 17;
} }
message GroupInfoForSet{ message GroupInfoForSet{
@ -31,6 +35,8 @@ message GroupInfoForSet{
string faceURL = 5; string faceURL = 5;
string ex = 6; string ex = 6;
google.protobuf.Int32Value needVerification = 7; google.protobuf.Int32Value needVerification = 7;
google.protobuf.Int32Value lookMemberInfo = 8;
google.protobuf.Int32Value applyMemberFriend = 9;
} }
@ -46,6 +52,7 @@ message GroupMemberFullInfo {
string operatorUserID = 9; string operatorUserID = 9;
string ex = 10; string ex = 10;
uint32 muteEndTime = 11; uint32 muteEndTime = 11;
string inviterUserID = 12;
} }
message PublicUserInfo{ message PublicUserInfo{

View File

@ -27,7 +27,7 @@ service_port_name=(
switch=$(cat $config_path | grep demoswitch |awk -F '[:]' '{print $NF}') switch=$(cat $config_path | grep demoswitch |awk -F '[:]' '{print $NF}')
for i in ${service_port_name[*]}; do for i in ${service_port_name[*]}; do
if [ ${switch} != "true" ]; then if [ ${switch} != "true" ]; then
if [ ${i} == "openImDemoPort"]; then if [ ${i} == "openImDemoPort" ]; then
continue continue
fi fi
fi fi