diff options
Diffstat (limited to 'vendor/github.com/Rhymen')
-rw-r--r-- | vendor/github.com/Rhymen/go-whatsapp/README.md | 21 | ||||
-rw-r--r-- | vendor/github.com/Rhymen/go-whatsapp/binary/node.go | 9 | ||||
-rw-r--r-- | vendor/github.com/Rhymen/go-whatsapp/binary/proto/def.pb.go | 1401 | ||||
-rw-r--r-- | vendor/github.com/Rhymen/go-whatsapp/binary/proto/def.proto | 67 | ||||
-rw-r--r-- | vendor/github.com/Rhymen/go-whatsapp/conn.go | 2 | ||||
-rw-r--r-- | vendor/github.com/Rhymen/go-whatsapp/contact.go | 10 | ||||
-rw-r--r-- | vendor/github.com/Rhymen/go-whatsapp/go.mod | 2 | ||||
-rw-r--r-- | vendor/github.com/Rhymen/go-whatsapp/handler.go | 21 | ||||
-rw-r--r-- | vendor/github.com/Rhymen/go-whatsapp/message.go | 200 | ||||
-rw-r--r-- | vendor/github.com/Rhymen/go-whatsapp/profile.go | 43 | ||||
-rw-r--r-- | vendor/github.com/Rhymen/go-whatsapp/write.go | 13 |
11 files changed, 1184 insertions, 605 deletions
diff --git a/vendor/github.com/Rhymen/go-whatsapp/README.md b/vendor/github.com/Rhymen/go-whatsapp/README.md index 1248b8f9..5f439d55 100644 --- a/vendor/github.com/Rhymen/go-whatsapp/README.md +++ b/vendor/github.com/Rhymen/go-whatsapp/README.md @@ -23,7 +23,7 @@ qrChan := make(chan string) go func() { fmt.Printf("qr code: %v\n", <-qrChan) //show qr code or save it somewhere to scan -} +}() sess, err := wac.Login(qrChan) ``` The authentication process requires you to scan the qr code, that is send through the channel, with the device you are using whatsapp on. The session struct that is returned can be saved and used to restore the login without scanning the qr code again. The qr code has a ttl of 20 seconds and the login function throws a timeout err if the time has passed or any other request fails. @@ -66,6 +66,10 @@ func (myHandler) HandleJsonMessage(message string) { fmt.Println(message) } +func (myHandler) HandleContactMessage(message whatsapp.ContactMessage) { + fmt.Println(message) +} + wac.AddHandler(myHandler{}) ``` The message handlers are all optional, you don't need to implement anything but the error handler to implement the interface. The ImageMessage, VideoMessage, AudioMessage and DocumentMessage provide a Download function to get the media data. @@ -81,6 +85,21 @@ text := whatsapp.TextMessage{ err := wac.Send(text) ``` + +### Sending Contact Messages +```go +contactMessage := whatsapp.ContactMessage{ + Info: whatsapp.MessageInfo{ + RemoteJid: "0123456789@s.whatsapp.net", + }, + DisplayName: "Luke Skylwallker", + Vcard: "BEGIN:VCARD\nVERSION:3.0\nN:Skyllwalker;Luke;;\nFN:Luke Skywallker\nitem1.TEL;waid=0123456789:+1 23 456789789\nitem1.X-ABLabel:Mobile\nEND:VCARD", + } + +id, error := client.WaConn.Send(contactMessage) +``` + + The message will be send over the websocket. The attributes seen above are the required ones. All other relevant attributes (id, timestamp, fromMe, status) are set if they are missing in the struct. For the time being we only support text messages, but other types are planned for the near future. ## Legal diff --git a/vendor/github.com/Rhymen/go-whatsapp/binary/node.go b/vendor/github.com/Rhymen/go-whatsapp/binary/node.go index 2139e385..66b28d88 100644 --- a/vendor/github.com/Rhymen/go-whatsapp/binary/node.go +++ b/vendor/github.com/Rhymen/go-whatsapp/binary/node.go @@ -66,9 +66,12 @@ func Unmarshal(data []byte) (*Node, error) { } if n != nil && n.Attributes != nil && n.Content != nil { - n.Content, err = unmarshalMessageArray(n.Content.([]Node)) - if err != nil { - return nil, err + nContent, ok := n.Content.([]Node) + if ok { + n.Content, err = unmarshalMessageArray(nContent) + if err != nil { + return nil, err + } } } diff --git a/vendor/github.com/Rhymen/go-whatsapp/binary/proto/def.pb.go b/vendor/github.com/Rhymen/go-whatsapp/binary/proto/def.pb.go index 8d811b34..9c4d99de 100644 --- a/vendor/github.com/Rhymen/go-whatsapp/binary/proto/def.pb.go +++ b/vendor/github.com/Rhymen/go-whatsapp/binary/proto/def.pb.go @@ -201,15 +201,18 @@ func (VideoMessage_VIDEO_MESSAGE_ATTRIBUTION) EnumDescriptor() ([]byte, []int) { type ProtocolMessage_PROTOCOL_MESSAGE_TYPE int32 const ( - ProtocolMessage_REVOKE ProtocolMessage_PROTOCOL_MESSAGE_TYPE = 0 + ProtocolMessage_REVOKE ProtocolMessage_PROTOCOL_MESSAGE_TYPE = 0 + ProtocolMessage_EPHEMERAL_SETTING ProtocolMessage_PROTOCOL_MESSAGE_TYPE = 3 ) var ProtocolMessage_PROTOCOL_MESSAGE_TYPE_name = map[int32]string{ 0: "REVOKE", + 3: "EPHEMERAL_SETTING", } var ProtocolMessage_PROTOCOL_MESSAGE_TYPE_value = map[string]int32{ - "REVOKE": 0, + "REVOKE": 0, + "EPHEMERAL_SETTING": 3, } func (x ProtocolMessage_PROTOCOL_MESSAGE_TYPE) Enum() *ProtocolMessage_PROTOCOL_MESSAGE_TYPE { @@ -333,21 +336,24 @@ func (HSMDateTimeComponent_HSM_DATE_TIME_COMPONENT_CALENDARTYPE) EnumDescriptor( type WebFeatures_WEB_FEATURES_FLAG int32 const ( - WebFeatures_NOT_IMPLEMENTED WebFeatures_WEB_FEATURES_FLAG = 0 - WebFeatures_IMPLEMENTED WebFeatures_WEB_FEATURES_FLAG = 1 - WebFeatures_OPTIONAL WebFeatures_WEB_FEATURES_FLAG = 2 + WebFeatures_NOT_STARTED WebFeatures_WEB_FEATURES_FLAG = 0 + WebFeatures_FORCE_UPGRADE WebFeatures_WEB_FEATURES_FLAG = 1 + WebFeatures_DEVELOPMENT WebFeatures_WEB_FEATURES_FLAG = 2 + WebFeatures_PRODUCTION WebFeatures_WEB_FEATURES_FLAG = 3 ) var WebFeatures_WEB_FEATURES_FLAG_name = map[int32]string{ - 0: "NOT_IMPLEMENTED", - 1: "IMPLEMENTED", - 2: "OPTIONAL", + 0: "NOT_STARTED", + 1: "FORCE_UPGRADE", + 2: "DEVELOPMENT", + 3: "PRODUCTION", } var WebFeatures_WEB_FEATURES_FLAG_value = map[string]int32{ - "NOT_IMPLEMENTED": 0, - "IMPLEMENTED": 1, - "OPTIONAL": 2, + "NOT_STARTED": 0, + "FORCE_UPGRADE": 1, + "DEVELOPMENT": 2, + "PRODUCTION": 3, } func (x WebFeatures_WEB_FEATURES_FLAG) Enum() *WebFeatures_WEB_FEATURES_FLAG { @@ -370,7 +376,7 @@ func (x *WebFeatures_WEB_FEATURES_FLAG) UnmarshalJSON(data []byte) error { } func (WebFeatures_WEB_FEATURES_FLAG) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_76fb0470a3b910d8, []int{46, 0} + return fileDescriptor_76fb0470a3b910d8, []int{48, 0} } type PaymentInfo_PAYMENT_INFO_STATUS int32 @@ -440,7 +446,7 @@ func (x *PaymentInfo_PAYMENT_INFO_STATUS) UnmarshalJSON(data []byte) error { } func (PaymentInfo_PAYMENT_INFO_STATUS) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_76fb0470a3b910d8, []int{50, 0} + return fileDescriptor_76fb0470a3b910d8, []int{52, 0} } type WebMessageInfo_WEB_MESSAGE_INFO_STATUS int32 @@ -492,7 +498,7 @@ func (x *WebMessageInfo_WEB_MESSAGE_INFO_STATUS) UnmarshalJSON(data []byte) erro } func (WebMessageInfo_WEB_MESSAGE_INFO_STATUS) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_76fb0470a3b910d8, []int{51, 0} + return fileDescriptor_76fb0470a3b910d8, []int{53, 0} } type WebMessageInfo_WEB_MESSAGE_INFO_STUBTYPE int32 @@ -568,6 +574,9 @@ const ( WebMessageInfo_BIZ_TWO_TIER_MIGRATION_BOTTOM WebMessageInfo_WEB_MESSAGE_INFO_STUBTYPE = 67 WebMessageInfo_OVERSIZED WebMessageInfo_WEB_MESSAGE_INFO_STUBTYPE = 68 WebMessageInfo_GROUP_CHANGE_NO_FREQUENTLY_FORWARDED WebMessageInfo_WEB_MESSAGE_INFO_STUBTYPE = 69 + WebMessageInfo_GROUP_V4_ADD_INVITE_SENT WebMessageInfo_WEB_MESSAGE_INFO_STUBTYPE = 70 + WebMessageInfo_GROUP_PARTICIPANT_ADD_REQUEST_JOIN WebMessageInfo_WEB_MESSAGE_INFO_STUBTYPE = 71 + WebMessageInfo_CHANGE_EPHEMERAL_SETTING WebMessageInfo_WEB_MESSAGE_INFO_STUBTYPE = 72 ) var WebMessageInfo_WEB_MESSAGE_INFO_STUBTYPE_name = map[int32]string{ @@ -641,6 +650,9 @@ var WebMessageInfo_WEB_MESSAGE_INFO_STUBTYPE_name = map[int32]string{ 67: "BIZ_TWO_TIER_MIGRATION_BOTTOM", 68: "OVERSIZED", 69: "GROUP_CHANGE_NO_FREQUENTLY_FORWARDED", + 70: "GROUP_V4_ADD_INVITE_SENT", + 71: "GROUP_PARTICIPANT_ADD_REQUEST_JOIN", + 72: "CHANGE_EPHEMERAL_SETTING", } var WebMessageInfo_WEB_MESSAGE_INFO_STUBTYPE_value = map[string]int32{ @@ -714,6 +726,9 @@ var WebMessageInfo_WEB_MESSAGE_INFO_STUBTYPE_value = map[string]int32{ "BIZ_TWO_TIER_MIGRATION_BOTTOM": 67, "OVERSIZED": 68, "GROUP_CHANGE_NO_FREQUENTLY_FORWARDED": 69, + "GROUP_V4_ADD_INVITE_SENT": 70, + "GROUP_PARTICIPANT_ADD_REQUEST_JOIN": 71, + "CHANGE_EPHEMERAL_SETTING": 72, } func (x WebMessageInfo_WEB_MESSAGE_INFO_STUBTYPE) Enum() *WebMessageInfo_WEB_MESSAGE_INFO_STUBTYPE { @@ -736,12 +751,12 @@ func (x *WebMessageInfo_WEB_MESSAGE_INFO_STUBTYPE) UnmarshalJSON(data []byte) er } func (WebMessageInfo_WEB_MESSAGE_INFO_STUBTYPE) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_76fb0470a3b910d8, []int{51, 1} + return fileDescriptor_76fb0470a3b910d8, []int{53, 1} } type HydratedQuickReplyButton struct { DisplayText *string `protobuf:"bytes,1,opt,name=displayText" json:"displayText,omitempty"` - ButtonId *string `protobuf:"bytes,2,opt,name=buttonId" json:"buttonId,omitempty"` + Id *string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -779,9 +794,9 @@ func (m *HydratedQuickReplyButton) GetDisplayText() string { return "" } -func (m *HydratedQuickReplyButton) GetButtonId() string { - if m != nil && m.ButtonId != nil { - return *m.ButtonId +func (m *HydratedQuickReplyButton) GetId() string { + if m != nil && m.Id != nil { + return *m.Id } return "" } @@ -881,6 +896,7 @@ func (m *HydratedCallButton) GetPhoneNumber() string { } type HydratedTemplateButton struct { + Index *uint32 `protobuf:"varint,4,opt,name=index" json:"index,omitempty"` // Types that are valid to be assigned to HydratedButton: // *HydratedTemplateButton_QuickReplyButton // *HydratedTemplateButton_UrlButton @@ -916,6 +932,13 @@ func (m *HydratedTemplateButton) XXX_DiscardUnknown() { var xxx_messageInfo_HydratedTemplateButton proto.InternalMessageInfo +func (m *HydratedTemplateButton) GetIndex() uint32 { + if m != nil && m.Index != nil { + return *m.Index + } + return 0 +} + type isHydratedTemplateButton_HydratedButton interface { isHydratedTemplateButton_HydratedButton() } @@ -977,7 +1000,7 @@ func (*HydratedTemplateButton) XXX_OneofWrappers() []interface{} { type QuickReplyButton struct { DisplayText *HighlyStructuredMessage `protobuf:"bytes,1,opt,name=displayText" json:"displayText,omitempty"` - ButtonId *string `protobuf:"bytes,2,opt,name=buttonId" json:"buttonId,omitempty"` + Id *string `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1015,9 +1038,9 @@ func (m *QuickReplyButton) GetDisplayText() *HighlyStructuredMessage { return nil } -func (m *QuickReplyButton) GetButtonId() string { - if m != nil && m.ButtonId != nil { - return *m.ButtonId +func (m *QuickReplyButton) GetId() string { + if m != nil && m.Id != nil { + return *m.Id } return "" } @@ -1117,6 +1140,7 @@ func (m *CallButton) GetPhoneNumber() *HighlyStructuredMessage { } type TemplateButton struct { + Index *uint32 `protobuf:"varint,4,opt,name=index" json:"index,omitempty"` // Types that are valid to be assigned to Button: // *TemplateButton_QuickReplyButton // *TemplateButton_UrlButton @@ -1152,6 +1176,13 @@ func (m *TemplateButton) XXX_DiscardUnknown() { var xxx_messageInfo_TemplateButton proto.InternalMessageInfo +func (m *TemplateButton) GetIndex() uint32 { + if m != nil && m.Index != nil { + return *m.Index + } + return 0 +} + type isTemplateButton_Button interface { isTemplateButton_Button() } @@ -1461,6 +1492,8 @@ type ContextInfo struct { ForwardingScore *uint32 `protobuf:"varint,21,opt,name=forwardingScore" json:"forwardingScore,omitempty"` IsForwarded *bool `protobuf:"varint,22,opt,name=isForwarded" json:"isForwarded,omitempty"` QuotedAd *AdReplyInfo `protobuf:"bytes,23,opt,name=quotedAd" json:"quotedAd,omitempty"` + PlaceholderKey *MessageKey `protobuf:"bytes,24,opt,name=placeholderKey" json:"placeholderKey,omitempty"` + Expiration *uint32 `protobuf:"varint,25,opt,name=expiration" json:"expiration,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1568,6 +1601,20 @@ func (m *ContextInfo) GetQuotedAd() *AdReplyInfo { return nil } +func (m *ContextInfo) GetPlaceholderKey() *MessageKey { + if m != nil { + return m.PlaceholderKey + } + return nil +} + +func (m *ContextInfo) GetExpiration() uint32 { + if m != nil && m.Expiration != nil { + return *m.Expiration + } + return 0 +} + type SenderKeyDistributionMessage struct { GroupId *string `protobuf:"bytes,1,opt,name=groupId" json:"groupId,omitempty"` AxolotlSenderKeyDistributionMessage []byte `protobuf:"bytes,2,opt,name=axolotlSenderKeyDistributionMessage" json:"axolotlSenderKeyDistributionMessage,omitempty"` @@ -1616,26 +1663,30 @@ func (m *SenderKeyDistributionMessage) GetAxolotlSenderKeyDistributionMessage() } type ImageMessage struct { - Url *string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` - Mimetype *string `protobuf:"bytes,2,opt,name=mimetype" json:"mimetype,omitempty"` - Caption *string `protobuf:"bytes,3,opt,name=caption" json:"caption,omitempty"` - FileSha256 []byte `protobuf:"bytes,4,opt,name=fileSha256" json:"fileSha256,omitempty"` - FileLength *uint64 `protobuf:"varint,5,opt,name=fileLength" json:"fileLength,omitempty"` - Height *uint32 `protobuf:"varint,6,opt,name=height" json:"height,omitempty"` - Width *uint32 `protobuf:"varint,7,opt,name=width" json:"width,omitempty"` - MediaKey []byte `protobuf:"bytes,8,opt,name=mediaKey" json:"mediaKey,omitempty"` - FileEncSha256 []byte `protobuf:"bytes,9,opt,name=fileEncSha256" json:"fileEncSha256,omitempty"` - InteractiveAnnotations []*InteractiveAnnotation `protobuf:"bytes,10,rep,name=interactiveAnnotations" json:"interactiveAnnotations,omitempty"` - DirectPath *string `protobuf:"bytes,11,opt,name=directPath" json:"directPath,omitempty"` - MediaKeyTimestamp *int64 `protobuf:"varint,12,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` - JpegThumbnail []byte `protobuf:"bytes,16,opt,name=jpegThumbnail" json:"jpegThumbnail,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` - FirstScanSidecar []byte `protobuf:"bytes,18,opt,name=firstScanSidecar" json:"firstScanSidecar,omitempty"` - FirstScanLength *uint32 `protobuf:"varint,19,opt,name=firstScanLength" json:"firstScanLength,omitempty"` - ExperimentGroupId *uint32 `protobuf:"varint,20,opt,name=experimentGroupId" json:"experimentGroupId,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Url *string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` + Mimetype *string `protobuf:"bytes,2,opt,name=mimetype" json:"mimetype,omitempty"` + Caption *string `protobuf:"bytes,3,opt,name=caption" json:"caption,omitempty"` + FileSha256 []byte `protobuf:"bytes,4,opt,name=fileSha256" json:"fileSha256,omitempty"` + FileLength *uint64 `protobuf:"varint,5,opt,name=fileLength" json:"fileLength,omitempty"` + Height *uint32 `protobuf:"varint,6,opt,name=height" json:"height,omitempty"` + Width *uint32 `protobuf:"varint,7,opt,name=width" json:"width,omitempty"` + MediaKey []byte `protobuf:"bytes,8,opt,name=mediaKey" json:"mediaKey,omitempty"` + FileEncSha256 []byte `protobuf:"bytes,9,opt,name=fileEncSha256" json:"fileEncSha256,omitempty"` + InteractiveAnnotations []*InteractiveAnnotation `protobuf:"bytes,10,rep,name=interactiveAnnotations" json:"interactiveAnnotations,omitempty"` + DirectPath *string `protobuf:"bytes,11,opt,name=directPath" json:"directPath,omitempty"` + MediaKeyTimestamp *int64 `protobuf:"varint,12,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` + JpegThumbnail []byte `protobuf:"bytes,16,opt,name=jpegThumbnail" json:"jpegThumbnail,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` + FirstScanSidecar []byte `protobuf:"bytes,18,opt,name=firstScanSidecar" json:"firstScanSidecar,omitempty"` + FirstScanLength *uint32 `protobuf:"varint,19,opt,name=firstScanLength" json:"firstScanLength,omitempty"` + ExperimentGroupId *uint32 `protobuf:"varint,20,opt,name=experimentGroupId" json:"experimentGroupId,omitempty"` + ScansSidecar []byte `protobuf:"bytes,21,opt,name=scansSidecar" json:"scansSidecar,omitempty"` + ScanLengths []uint32 `protobuf:"varint,22,rep,name=scanLengths" json:"scanLengths,omitempty"` + MidQualityFileSha256 []byte `protobuf:"bytes,23,opt,name=midQualityFileSha256" json:"midQualityFileSha256,omitempty"` + MidQualityFileEncSha256 []byte `protobuf:"bytes,24,opt,name=midQualityFileEncSha256" json:"midQualityFileEncSha256,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ImageMessage) Reset() { *m = ImageMessage{} } @@ -1782,6 +1833,34 @@ func (m *ImageMessage) GetExperimentGroupId() uint32 { return 0 } +func (m *ImageMessage) GetScansSidecar() []byte { + if m != nil { + return m.ScansSidecar + } + return nil +} + +func (m *ImageMessage) GetScanLengths() []uint32 { + if m != nil { + return m.ScanLengths + } + return nil +} + +func (m *ImageMessage) GetMidQualityFileSha256() []byte { + if m != nil { + return m.MidQualityFileSha256 + } + return nil +} + +func (m *ImageMessage) GetMidQualityFileEncSha256() []byte { + if m != nil { + return m.MidQualityFileEncSha256 + } + return nil +} + type ContactMessage struct { DisplayName *string `protobuf:"bytes,1,opt,name=displayName" json:"displayName,omitempty"` Vcard *string `protobuf:"bytes,16,opt,name=vcard" json:"vcard,omitempty"` @@ -1936,6 +2015,7 @@ type ExtendedTextMessage struct { PreviewType *ExtendedTextMessage_EXTENDED_TEXT_MESSAGE_PREVIEWTYPE `protobuf:"varint,10,opt,name=previewType,enum=proto.ExtendedTextMessage_EXTENDED_TEXT_MESSAGE_PREVIEWTYPE" json:"previewType,omitempty"` JpegThumbnail []byte `protobuf:"bytes,16,opt,name=jpegThumbnail" json:"jpegThumbnail,omitempty"` ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` + DoNotPlayInline *bool `protobuf:"varint,18,opt,name=doNotPlayInline" json:"doNotPlayInline,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -2043,6 +2123,13 @@ func (m *ExtendedTextMessage) GetContextInfo() *ContextInfo { return nil } +func (m *ExtendedTextMessage) GetDoNotPlayInline() bool { + if m != nil && m.DoNotPlayInline != nil { + return *m.DoNotPlayInline + } + return false +} + type DocumentMessage struct { Url *string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` Mimetype *string `protobuf:"bytes,2,opt,name=mimetype" json:"mimetype,omitempty"` @@ -2569,6 +2656,7 @@ func (m *Chat) GetId() string { type ProtocolMessage struct { Key *MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` Type *ProtocolMessage_PROTOCOL_MESSAGE_TYPE `protobuf:"varint,2,opt,name=type,enum=proto.ProtocolMessage_PROTOCOL_MESSAGE_TYPE" json:"type,omitempty"` + EphemeralExpiration *uint32 `protobuf:"varint,4,opt,name=ephemeralExpiration" json:"ephemeralExpiration,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -2613,6 +2701,13 @@ func (m *ProtocolMessage) GetType() ProtocolMessage_PROTOCOL_MESSAGE_TYPE { return ProtocolMessage_REVOKE } +func (m *ProtocolMessage) GetEphemeralExpiration() uint32 { + if m != nil && m.EphemeralExpiration != nil { + return *m.EphemeralExpiration + } + return 0 +} + type ContactsArrayMessage struct { DisplayName *string `protobuf:"bytes,1,opt,name=displayName" json:"displayName,omitempty"` Contacts []*ContactMessage `protobuf:"bytes,2,rep,name=contacts" json:"contacts,omitempty"` @@ -3018,6 +3113,7 @@ type HighlyStructuredMessage struct { LocalizableParams []*HSMLocalizableParameter `protobuf:"bytes,6,rep,name=localizableParams" json:"localizableParams,omitempty"` DeterministicLg *string `protobuf:"bytes,7,opt,name=deterministicLg" json:"deterministicLg,omitempty"` DeterministicLc *string `protobuf:"bytes,8,opt,name=deterministicLc" json:"deterministicLc,omitempty"` + HydratedHsm *TemplateMessage `protobuf:"bytes,9,opt,name=hydratedHsm" json:"hydratedHsm,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -3104,6 +3200,13 @@ func (m *HighlyStructuredMessage) GetDeterministicLc() string { return "" } +func (m *HighlyStructuredMessage) GetHydratedHsm() *TemplateMessage { + if m != nil { + return m.HydratedHsm + } + return nil +} + type SendPaymentMessage struct { NoteMessage *Message `protobuf:"bytes,2,opt,name=noteMessage" json:"noteMessage,omitempty"` RequestMessageKey *MessageKey `protobuf:"bytes,3,opt,name=requestMessageKey" json:"requestMessageKey,omitempty"` @@ -3422,7 +3525,8 @@ type StickerMessage struct { DirectPath *string `protobuf:"bytes,8,opt,name=directPath" json:"directPath,omitempty"` FileLength *uint64 `protobuf:"varint,9,opt,name=fileLength" json:"fileLength,omitempty"` MediaKeyTimestamp *int64 `protobuf:"varint,10,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` - PngThumbnail []byte `protobuf:"bytes,16,opt,name=pngThumbnail" json:"pngThumbnail,omitempty"` + FirstFrameLength *uint32 `protobuf:"varint,11,opt,name=firstFrameLength" json:"firstFrameLength,omitempty"` + FirstFrameSidecar []byte `protobuf:"bytes,12,opt,name=firstFrameSidecar" json:"firstFrameSidecar,omitempty"` ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -3524,9 +3628,16 @@ func (m *StickerMessage) GetMediaKeyTimestamp() int64 { return 0 } -func (m *StickerMessage) GetPngThumbnail() []byte { +func (m *StickerMessage) GetFirstFrameLength() uint32 { + if m != nil && m.FirstFrameLength != nil { + return *m.FirstFrameLength + } + return 0 +} + +func (m *StickerMessage) GetFirstFrameSidecar() []byte { if m != nil { - return m.PngThumbnail + return m.FirstFrameSidecar } return nil } @@ -3690,7 +3801,8 @@ func (*FourRowTemplate) XXX_OneofWrappers() []interface{} { type HydratedFourRowTemplate struct { HydratedContentText *string `protobuf:"bytes,6,opt,name=hydratedContentText" json:"hydratedContentText,omitempty"` HydratedFooterText *string `protobuf:"bytes,7,opt,name=hydratedFooterText" json:"hydratedFooterText,omitempty"` - HydratedButtons []*HydratedTemplateButton `protobuf:"bytes,9,rep,name=hydratedButtons" json:"hydratedButtons,omitempty"` + HydratedButtons []*HydratedTemplateButton `protobuf:"bytes,8,rep,name=hydratedButtons" json:"hydratedButtons,omitempty"` + TemplateId *string `protobuf:"bytes,9,opt,name=templateId" json:"templateId,omitempty"` // Types that are valid to be assigned to Title: // *HydratedFourRowTemplate_DocumentMessage // *HydratedFourRowTemplate_HydratedTitleText @@ -3749,6 +3861,13 @@ func (m *HydratedFourRowTemplate) GetHydratedButtons() []*HydratedTemplateButton return nil } +func (m *HydratedFourRowTemplate) GetTemplateId() string { + if m != nil && m.TemplateId != nil { + return *m.TemplateId + } + return "" +} + type isHydratedFourRowTemplate_Title interface { isHydratedFourRowTemplate_Title() } @@ -3837,6 +3956,8 @@ func (*HydratedFourRowTemplate) XXX_OneofWrappers() []interface{} { } type TemplateMessage struct { + ContextInfo *ContextInfo `protobuf:"bytes,3,opt,name=contextInfo" json:"contextInfo,omitempty"` + HydratedTemplate *HydratedFourRowTemplate `protobuf:"bytes,4,opt,name=hydratedTemplate" json:"hydratedTemplate,omitempty"` // Types that are valid to be assigned to Format: // *TemplateMessage_FourRowTemplate // *TemplateMessage_HydratedFourRowTemplate @@ -3871,6 +3992,20 @@ func (m *TemplateMessage) XXX_DiscardUnknown() { var xxx_messageInfo_TemplateMessage proto.InternalMessageInfo +func (m *TemplateMessage) GetContextInfo() *ContextInfo { + if m != nil { + return m.ContextInfo + } + return nil +} + +func (m *TemplateMessage) GetHydratedTemplate() *HydratedFourRowTemplate { + if m != nil { + return m.HydratedTemplate + } + return nil +} + type isTemplateMessage_Format interface { isTemplateMessage_Format() } @@ -3917,12 +4052,13 @@ func (*TemplateMessage) XXX_OneofWrappers() []interface{} { } type TemplateButtonReplyMessage struct { - SelectedButtonId *string `protobuf:"bytes,1,opt,name=selectedButtonId" json:"selectedButtonId,omitempty"` - SelectedButtonDisplayText []string `protobuf:"bytes,2,rep,name=selectedButtonDisplayText" json:"selectedButtonDisplayText,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,3,opt,name=contextInfo" json:"contextInfo,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + SelectedId *string `protobuf:"bytes,1,opt,name=selectedId" json:"selectedId,omitempty"` + SelectedDisplayText *string `protobuf:"bytes,2,opt,name=selectedDisplayText" json:"selectedDisplayText,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,3,opt,name=contextInfo" json:"contextInfo,omitempty"` + SelectedIndex *uint32 `protobuf:"varint,4,opt,name=selectedIndex" json:"selectedIndex,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *TemplateButtonReplyMessage) Reset() { *m = TemplateButtonReplyMessage{} } @@ -3950,18 +4086,18 @@ func (m *TemplateButtonReplyMessage) XXX_DiscardUnknown() { var xxx_messageInfo_TemplateButtonReplyMessage proto.InternalMessageInfo -func (m *TemplateButtonReplyMessage) GetSelectedButtonId() string { - if m != nil && m.SelectedButtonId != nil { - return *m.SelectedButtonId +func (m *TemplateButtonReplyMessage) GetSelectedId() string { + if m != nil && m.SelectedId != nil { + return *m.SelectedId } return "" } -func (m *TemplateButtonReplyMessage) GetSelectedButtonDisplayText() []string { - if m != nil { - return m.SelectedButtonDisplayText +func (m *TemplateButtonReplyMessage) GetSelectedDisplayText() string { + if m != nil && m.SelectedDisplayText != nil { + return *m.SelectedDisplayText } - return nil + return "" } func (m *TemplateButtonReplyMessage) GetContextInfo() *ContextInfo { @@ -3971,6 +4107,13 @@ func (m *TemplateButtonReplyMessage) GetContextInfo() *ContextInfo { return nil } +func (m *TemplateButtonReplyMessage) GetSelectedIndex() uint32 { + if m != nil && m.SelectedIndex != nil { + return *m.SelectedIndex + } + return 0 +} + type ProductSnapshot struct { ProductImage *ImageMessage `protobuf:"bytes,1,opt,name=productImage" json:"productImage,omitempty"` ProductId *string `protobuf:"bytes,2,opt,name=productId" json:"productId,omitempty"` @@ -3981,6 +4124,7 @@ type ProductSnapshot struct { RetailerId *string `protobuf:"bytes,7,opt,name=retailerId" json:"retailerId,omitempty"` Url *string `protobuf:"bytes,8,opt,name=url" json:"url,omitempty"` ProductImageCount *uint32 `protobuf:"varint,9,opt,name=productImageCount" json:"productImageCount,omitempty"` + FirstImageId *string `protobuf:"bytes,11,opt,name=firstImageId" json:"firstImageId,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -4074,6 +4218,13 @@ func (m *ProductSnapshot) GetProductImageCount() uint32 { return 0 } +func (m *ProductSnapshot) GetFirstImageId() string { + if m != nil && m.FirstImageId != nil { + return *m.FirstImageId + } + return "" +} + type ProductMessage struct { Product *ProductSnapshot `protobuf:"bytes,1,opt,name=product" json:"product,omitempty"` BusinessOwnerJid *string `protobuf:"bytes,2,opt,name=businessOwnerJid" json:"businessOwnerJid,omitempty"` @@ -4130,15 +4281,16 @@ func (m *ProductMessage) GetContextInfo() *ContextInfo { } type GroupInviteMessage struct { - GroupJid *string `protobuf:"bytes,1,opt,name=groupJid" json:"groupJid,omitempty"` - InviteCode *string `protobuf:"bytes,2,opt,name=inviteCode" json:"inviteCode,omitempty"` - InviteExpiration *int64 `protobuf:"varint,3,opt,name=inviteExpiration" json:"inviteExpiration,omitempty"` - GroupName *string `protobuf:"bytes,4,opt,name=groupName" json:"groupName,omitempty"` - JpegThumbnail []byte `protobuf:"bytes,5,opt,name=jpegThumbnail" json:"jpegThumbnail,omitempty"` - Caption *string `protobuf:"bytes,6,opt,name=caption" json:"caption,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + GroupJid *string `protobuf:"bytes,1,opt,name=groupJid" json:"groupJid,omitempty"` + InviteCode *string `protobuf:"bytes,2,opt,name=inviteCode" json:"inviteCode,omitempty"` + InviteExpiration *int64 `protobuf:"varint,3,opt,name=inviteExpiration" json:"inviteExpiration,omitempty"` + GroupName *string `protobuf:"bytes,4,opt,name=groupName" json:"groupName,omitempty"` + JpegThumbnail []byte `protobuf:"bytes,5,opt,name=jpegThumbnail" json:"jpegThumbnail,omitempty"` + Caption *string `protobuf:"bytes,6,opt,name=caption" json:"caption,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,7,opt,name=contextInfo" json:"contextInfo,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *GroupInviteMessage) Reset() { *m = GroupInviteMessage{} } @@ -4208,6 +4360,99 @@ func (m *GroupInviteMessage) GetCaption() string { return "" } +func (m *GroupInviteMessage) GetContextInfo() *ContextInfo { + if m != nil { + return m.ContextInfo + } + return nil +} + +type DeviceSentMessage struct { + DestinationJid *string `protobuf:"bytes,1,opt,name=destinationJid" json:"destinationJid,omitempty"` + Message *Message `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeviceSentMessage) Reset() { *m = DeviceSentMessage{} } +func (m *DeviceSentMessage) String() string { return proto.CompactTextString(m) } +func (*DeviceSentMessage) ProtoMessage() {} +func (*DeviceSentMessage) Descriptor() ([]byte, []int) { + return fileDescriptor_76fb0470a3b910d8, []int{44} +} + +func (m *DeviceSentMessage) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeviceSentMessage.Unmarshal(m, b) +} +func (m *DeviceSentMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeviceSentMessage.Marshal(b, m, deterministic) +} +func (m *DeviceSentMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeviceSentMessage.Merge(m, src) +} +func (m *DeviceSentMessage) XXX_Size() int { + return xxx_messageInfo_DeviceSentMessage.Size(m) +} +func (m *DeviceSentMessage) XXX_DiscardUnknown() { + xxx_messageInfo_DeviceSentMessage.DiscardUnknown(m) +} + +var xxx_messageInfo_DeviceSentMessage proto.InternalMessageInfo + +func (m *DeviceSentMessage) GetDestinationJid() string { + if m != nil && m.DestinationJid != nil { + return *m.DestinationJid + } + return "" +} + +func (m *DeviceSentMessage) GetMessage() *Message { + if m != nil { + return m.Message + } + return nil +} + +type DeviceSyncMessage struct { + SerializedXmlBytes []byte `protobuf:"bytes,1,opt,name=serializedXmlBytes" json:"serializedXmlBytes,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DeviceSyncMessage) Reset() { *m = DeviceSyncMessage{} } +func (m *DeviceSyncMessage) String() string { return proto.CompactTextString(m) } +func (*DeviceSyncMessage) ProtoMessage() {} +func (*DeviceSyncMessage) Descriptor() ([]byte, []int) { + return fileDescriptor_76fb0470a3b910d8, []int{45} +} + +func (m *DeviceSyncMessage) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DeviceSyncMessage.Unmarshal(m, b) +} +func (m *DeviceSyncMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DeviceSyncMessage.Marshal(b, m, deterministic) +} +func (m *DeviceSyncMessage) XXX_Merge(src proto.Message) { + xxx_messageInfo_DeviceSyncMessage.Merge(m, src) +} +func (m *DeviceSyncMessage) XXX_Size() int { + return xxx_messageInfo_DeviceSyncMessage.Size(m) +} +func (m *DeviceSyncMessage) XXX_DiscardUnknown() { + xxx_messageInfo_DeviceSyncMessage.DiscardUnknown(m) +} + +var xxx_messageInfo_DeviceSyncMessage proto.InternalMessageInfo + +func (m *DeviceSyncMessage) GetSerializedXmlBytes() []byte { + if m != nil { + return m.SerializedXmlBytes + } + return nil +} + type Message struct { Conversation *string `protobuf:"bytes,1,opt,name=conversation" json:"conversation,omitempty"` SenderKeyDistributionMessage *SenderKeyDistributionMessage `protobuf:"bytes,2,opt,name=senderKeyDistributionMessage" json:"senderKeyDistributionMessage,omitempty"` @@ -4231,8 +4476,11 @@ type Message struct { CancelPaymentRequestMessage *CancelPaymentRequestMessage `protobuf:"bytes,24,opt,name=cancelPaymentRequestMessage" json:"cancelPaymentRequestMessage,omitempty"` TemplateMessage *TemplateMessage `protobuf:"bytes,25,opt,name=templateMessage" json:"templateMessage,omitempty"` StickerMessage *StickerMessage `protobuf:"bytes,26,opt,name=stickerMessage" json:"stickerMessage,omitempty"` - ProductMessage *ProductMessage `protobuf:"bytes,27,opt,name=productMessage" json:"productMessage,omitempty"` GroupInviteMessage *GroupInviteMessage `protobuf:"bytes,28,opt,name=groupInviteMessage" json:"groupInviteMessage,omitempty"` + TemplateButtonReplyMessage *TemplateButtonReplyMessage `protobuf:"bytes,29,opt,name=templateButtonReplyMessage" json:"templateButtonReplyMessage,omitempty"` + ProductMessage *ProductMessage `protobuf:"bytes,30,opt,name=productMessage" json:"productMessage,omitempty"` + DeviceSentMessage *DeviceSentMessage `protobuf:"bytes,31,opt,name=deviceSentMessage" json:"deviceSentMessage,omitempty"` + DeviceSyncMessage *DeviceSyncMessage `protobuf:"bytes,32,opt,name=deviceSyncMessage" json:"deviceSyncMessage,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -4242,7 +4490,7 @@ func (m *Message) Reset() { *m = Message{} } func (m *Message) String() string { return proto.CompactTextString(m) } func (*Message) ProtoMessage() {} func (*Message) Descriptor() ([]byte, []int) { - return fileDescriptor_76fb0470a3b910d8, []int{44} + return fileDescriptor_76fb0470a3b910d8, []int{46} } func (m *Message) XXX_Unmarshal(b []byte) error { @@ -4417,6 +4665,20 @@ func (m *Message) GetStickerMessage() *StickerMessage { return nil } +func (m *Message) GetGroupInviteMessage() *GroupInviteMessage { + if m != nil { + return m.GroupInviteMessage + } + return nil +} + +func (m *Message) GetTemplateButtonReplyMessage() *TemplateButtonReplyMessage { + if m != nil { + return m.TemplateButtonReplyMessage + } + return nil +} + func (m *Message) GetProductMessage() *ProductMessage { if m != nil { return m.ProductMessage @@ -4424,9 +4686,16 @@ func (m *Message) GetProductMessage() *ProductMessage { return nil } -func (m *Message) GetGroupInviteMessage() *GroupInviteMessage { +func (m *Message) GetDeviceSentMessage() *DeviceSentMessage { if m != nil { - return m.GroupInviteMessage + return m.DeviceSentMessage + } + return nil +} + +func (m *Message) GetDeviceSyncMessage() *DeviceSyncMessage { + if m != nil { + return m.DeviceSyncMessage } return nil } @@ -4445,7 +4714,7 @@ func (m *MessageKey) Reset() { *m = MessageKey{} } func (m *MessageKey) String() string { return proto.CompactTextString(m) } func (*MessageKey) ProtoMessage() {} func (*MessageKey) Descriptor() ([]byte, []int) { - return fileDescriptor_76fb0470a3b910d8, []int{45} + return fileDescriptor_76fb0470a3b910d8, []int{47} } func (m *MessageKey) XXX_Unmarshal(b []byte) error { @@ -4495,38 +4764,46 @@ func (m *MessageKey) GetParticipant() string { } type WebFeatures struct { - LabelsDisplay *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,1,opt,name=labelsDisplay,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"labelsDisplay,omitempty"` - VoipIndividualOutgoing *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,2,opt,name=voipIndividualOutgoing,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"voipIndividualOutgoing,omitempty"` - GroupsV3 *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,3,opt,name=groupsV3,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"groupsV3,omitempty"` - GroupsV3Create *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,4,opt,name=groupsV3Create,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"groupsV3Create,omitempty"` - ChangeNumberV2 *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,5,opt,name=changeNumberV2,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"changeNumberV2,omitempty"` - QueryStatusV3Thumbnail *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,6,opt,name=queryStatusV3Thumbnail,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"queryStatusV3Thumbnail,omitempty"` - LiveLocations *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,7,opt,name=liveLocations,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"liveLocations,omitempty"` - QueryVname *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,8,opt,name=queryVname,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"queryVname,omitempty"` - VoipIndividualIncoming *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,9,opt,name=voipIndividualIncoming,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"voipIndividualIncoming,omitempty"` - QuickRepliesQuery *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,10,opt,name=quickRepliesQuery,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"quickRepliesQuery,omitempty"` - Payments *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,11,opt,name=payments,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"payments,omitempty"` - StickerPackQuery *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,12,opt,name=stickerPackQuery,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"stickerPackQuery,omitempty"` - LiveLocationsFinal *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,13,opt,name=liveLocationsFinal,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"liveLocationsFinal,omitempty"` - LabelsEdit *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,14,opt,name=labelsEdit,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"labelsEdit,omitempty"` - MediaUpload *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,15,opt,name=mediaUpload,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"mediaUpload,omitempty"` - MediaUploadRichQuickReplies *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,18,opt,name=mediaUploadRichQuickReplies,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"mediaUploadRichQuickReplies,omitempty"` - VnameV2 *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,19,opt,name=vnameV2,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"vnameV2,omitempty"` - VideoPlaybackUrl *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,20,opt,name=videoPlaybackUrl,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"videoPlaybackUrl,omitempty"` - StatusRanking *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,21,opt,name=statusRanking,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"statusRanking,omitempty"` - VoipIndividualVideo *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,22,opt,name=voipIndividualVideo,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"voipIndividualVideo,omitempty"` - ThirdPartyStickers *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,23,opt,name=thirdPartyStickers,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"thirdPartyStickers,omitempty"` - FrequentlyForwardedSetting *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,24,opt,name=frequentlyForwardedSetting,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"frequentlyForwardedSetting,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + LabelsDisplay *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,1,opt,name=labelsDisplay,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"labelsDisplay,omitempty"` + VoipIndividualOutgoing *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,2,opt,name=voipIndividualOutgoing,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"voipIndividualOutgoing,omitempty"` + GroupsV3 *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,3,opt,name=groupsV3,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"groupsV3,omitempty"` + GroupsV3Create *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,4,opt,name=groupsV3Create,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"groupsV3Create,omitempty"` + ChangeNumberV2 *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,5,opt,name=changeNumberV2,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"changeNumberV2,omitempty"` + QueryStatusV3Thumbnail *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,6,opt,name=queryStatusV3Thumbnail,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"queryStatusV3Thumbnail,omitempty"` + LiveLocations *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,7,opt,name=liveLocations,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"liveLocations,omitempty"` + QueryVname *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,8,opt,name=queryVname,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"queryVname,omitempty"` + VoipIndividualIncoming *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,9,opt,name=voipIndividualIncoming,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"voipIndividualIncoming,omitempty"` + QuickRepliesQuery *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,10,opt,name=quickRepliesQuery,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"quickRepliesQuery,omitempty"` + Payments *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,11,opt,name=payments,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"payments,omitempty"` + StickerPackQuery *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,12,opt,name=stickerPackQuery,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"stickerPackQuery,omitempty"` + LiveLocationsFinal *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,13,opt,name=liveLocationsFinal,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"liveLocationsFinal,omitempty"` + LabelsEdit *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,14,opt,name=labelsEdit,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"labelsEdit,omitempty"` + MediaUpload *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,15,opt,name=mediaUpload,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"mediaUpload,omitempty"` + MediaUploadRichQuickReplies *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,18,opt,name=mediaUploadRichQuickReplies,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"mediaUploadRichQuickReplies,omitempty"` + VnameV2 *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,19,opt,name=vnameV2,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"vnameV2,omitempty"` + VideoPlaybackUrl *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,20,opt,name=videoPlaybackUrl,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"videoPlaybackUrl,omitempty"` + StatusRanking *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,21,opt,name=statusRanking,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"statusRanking,omitempty"` + VoipIndividualVideo *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,22,opt,name=voipIndividualVideo,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"voipIndividualVideo,omitempty"` + ThirdPartyStickers *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,23,opt,name=thirdPartyStickers,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"thirdPartyStickers,omitempty"` + FrequentlyForwardedSetting *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,24,opt,name=frequentlyForwardedSetting,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"frequentlyForwardedSetting,omitempty"` + GroupsV4JoinPermission *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,25,opt,name=groupsV4JoinPermission,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"groupsV4JoinPermission,omitempty"` + RecentStickers *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,26,opt,name=recentStickers,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"recentStickers,omitempty"` + Catalog *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,27,opt,name=catalog,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"catalog,omitempty"` + StarredStickers *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,28,opt,name=starredStickers,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"starredStickers,omitempty"` + VoipGroupCall *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,29,opt,name=voipGroupCall,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"voipGroupCall,omitempty"` + TemplateMessage *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,30,opt,name=templateMessage,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"templateMessage,omitempty"` + TemplateMessageInteractivity *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,31,opt,name=templateMessageInteractivity,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"templateMessageInteractivity,omitempty"` + EphemeralMessages *WebFeatures_WEB_FEATURES_FLAG `protobuf:"varint,32,opt,name=ephemeralMessages,enum=proto.WebFeatures_WEB_FEATURES_FLAG" json:"ephemeralMessages,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *WebFeatures) Reset() { *m = WebFeatures{} } func (m *WebFeatures) String() string { return proto.CompactTextString(m) } func (*WebFeatures) ProtoMessage() {} func (*WebFeatures) Descriptor() ([]byte, []int) { - return fileDescriptor_76fb0470a3b910d8, []int{46} + return fileDescriptor_76fb0470a3b910d8, []int{48} } func (m *WebFeatures) XXX_Unmarshal(b []byte) error { @@ -4551,154 +4828,210 @@ func (m *WebFeatures) GetLabelsDisplay() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.LabelsDisplay != nil { return *m.LabelsDisplay } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetVoipIndividualOutgoing() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.VoipIndividualOutgoing != nil { return *m.VoipIndividualOutgoing } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetGroupsV3() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.GroupsV3 != nil { return *m.GroupsV3 } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetGroupsV3Create() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.GroupsV3Create != nil { return *m.GroupsV3Create } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetChangeNumberV2() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.ChangeNumberV2 != nil { return *m.ChangeNumberV2 } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetQueryStatusV3Thumbnail() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.QueryStatusV3Thumbnail != nil { return *m.QueryStatusV3Thumbnail } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetLiveLocations() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.LiveLocations != nil { return *m.LiveLocations } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetQueryVname() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.QueryVname != nil { return *m.QueryVname } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetVoipIndividualIncoming() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.VoipIndividualIncoming != nil { return *m.VoipIndividualIncoming } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetQuickRepliesQuery() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.QuickRepliesQuery != nil { return *m.QuickRepliesQuery } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetPayments() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.Payments != nil { return *m.Payments } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetStickerPackQuery() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.StickerPackQuery != nil { return *m.StickerPackQuery } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetLiveLocationsFinal() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.LiveLocationsFinal != nil { return *m.LiveLocationsFinal } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetLabelsEdit() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.LabelsEdit != nil { return *m.LabelsEdit } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetMediaUpload() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.MediaUpload != nil { return *m.MediaUpload } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetMediaUploadRichQuickReplies() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.MediaUploadRichQuickReplies != nil { return *m.MediaUploadRichQuickReplies } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetVnameV2() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.VnameV2 != nil { return *m.VnameV2 } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetVideoPlaybackUrl() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.VideoPlaybackUrl != nil { return *m.VideoPlaybackUrl } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetStatusRanking() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.StatusRanking != nil { return *m.StatusRanking } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetVoipIndividualVideo() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.VoipIndividualVideo != nil { return *m.VoipIndividualVideo } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetThirdPartyStickers() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.ThirdPartyStickers != nil { return *m.ThirdPartyStickers } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED } func (m *WebFeatures) GetFrequentlyForwardedSetting() WebFeatures_WEB_FEATURES_FLAG { if m != nil && m.FrequentlyForwardedSetting != nil { return *m.FrequentlyForwardedSetting } - return WebFeatures_NOT_IMPLEMENTED + return WebFeatures_NOT_STARTED +} + +func (m *WebFeatures) GetGroupsV4JoinPermission() WebFeatures_WEB_FEATURES_FLAG { + if m != nil && m.GroupsV4JoinPermission != nil { + return *m.GroupsV4JoinPermission + } + return WebFeatures_NOT_STARTED +} + +func (m *WebFeatures) GetRecentStickers() WebFeatures_WEB_FEATURES_FLAG { + if m != nil && m.RecentStickers != nil { + return *m.RecentStickers + } + return WebFeatures_NOT_STARTED +} + +func (m *WebFeatures) GetCatalog() WebFeatures_WEB_FEATURES_FLAG { + if m != nil && m.Catalog != nil { + return *m.Catalog + } + return WebFeatures_NOT_STARTED +} + +func (m *WebFeatures) GetStarredStickers() WebFeatures_WEB_FEATURES_FLAG { + if m != nil && m.StarredStickers != nil { + return *m.StarredStickers + } + return WebFeatures_NOT_STARTED +} + +func (m *WebFeatures) GetVoipGroupCall() WebFeatures_WEB_FEATURES_FLAG { + if m != nil && m.VoipGroupCall != nil { + return *m.VoipGroupCall + } + return WebFeatures_NOT_STARTED +} + +func (m *WebFeatures) GetTemplateMessage() WebFeatures_WEB_FEATURES_FLAG { + if m != nil && m.TemplateMessage != nil { + return *m.TemplateMessage + } + return WebFeatures_NOT_STARTED +} + +func (m *WebFeatures) GetTemplateMessageInteractivity() WebFeatures_WEB_FEATURES_FLAG { + if m != nil && m.TemplateMessageInteractivity != nil { + return *m.TemplateMessageInteractivity + } + return WebFeatures_NOT_STARTED +} + +func (m *WebFeatures) GetEphemeralMessages() WebFeatures_WEB_FEATURES_FLAG { + if m != nil && m.EphemeralMessages != nil { + return *m.EphemeralMessages + } + return WebFeatures_NOT_STARTED } type TabletNotificationsInfo struct { @@ -4715,7 +5048,7 @@ func (m *TabletNotificationsInfo) Reset() { *m = TabletNotificationsInfo func (m *TabletNotificationsInfo) String() string { return proto.CompactTextString(m) } func (*TabletNotificationsInfo) ProtoMessage() {} func (*TabletNotificationsInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_76fb0470a3b910d8, []int{47} + return fileDescriptor_76fb0470a3b910d8, []int{49} } func (m *TabletNotificationsInfo) XXX_Unmarshal(b []byte) error { @@ -4778,7 +5111,7 @@ func (m *NotificationMessageInfo) Reset() { *m = NotificationMessageInfo func (m *NotificationMessageInfo) String() string { return proto.CompactTextString(m) } func (*NotificationMessageInfo) ProtoMessage() {} func (*NotificationMessageInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_76fb0470a3b910d8, []int{48} + return fileDescriptor_76fb0470a3b910d8, []int{50} } func (m *NotificationMessageInfo) XXX_Unmarshal(b []byte) error { @@ -4841,7 +5174,7 @@ func (m *WebNotificationsInfo) Reset() { *m = WebNotificationsInfo{} } func (m *WebNotificationsInfo) String() string { return proto.CompactTextString(m) } func (*WebNotificationsInfo) ProtoMessage() {} func (*WebNotificationsInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_76fb0470a3b910d8, []int{49} + return fileDescriptor_76fb0470a3b910d8, []int{51} } func (m *WebNotificationsInfo) XXX_Unmarshal(b []byte) error { @@ -4908,7 +5241,7 @@ func (m *PaymentInfo) Reset() { *m = PaymentInfo{} } func (m *PaymentInfo) String() string { return proto.CompactTextString(m) } func (*PaymentInfo) ProtoMessage() {} func (*PaymentInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_76fb0470a3b910d8, []int{50} + return fileDescriptor_76fb0470a3b910d8, []int{52} } func (m *PaymentInfo) XXX_Unmarshal(b []byte) error { @@ -4986,37 +5319,39 @@ func (m *PaymentInfo) GetCurrency() string { } type WebMessageInfo struct { - Key *MessageKey `protobuf:"bytes,1,req,name=key" json:"key,omitempty"` - Message *Message `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` - MessageTimestamp *uint64 `protobuf:"varint,3,opt,name=messageTimestamp" json:"messageTimestamp,omitempty"` - Status *WebMessageInfo_WEB_MESSAGE_INFO_STATUS `protobuf:"varint,4,opt,name=status,enum=proto.WebMessageInfo_WEB_MESSAGE_INFO_STATUS" json:"status,omitempty"` - Participant *string `protobuf:"bytes,5,opt,name=participant" json:"participant,omitempty"` - Ignore *bool `protobuf:"varint,16,opt,name=ignore" json:"ignore,omitempty"` - Starred *bool `protobuf:"varint,17,opt,name=starred" json:"starred,omitempty"` - Broadcast *bool `protobuf:"varint,18,opt,name=broadcast" json:"broadcast,omitempty"` - PushName *string `protobuf:"bytes,19,opt,name=pushName" json:"pushName,omitempty"` - MediaCiphertextSha256 []byte `protobuf:"bytes,20,opt,name=mediaCiphertextSha256" json:"mediaCiphertextSha256,omitempty"` - Multicast *bool `protobuf:"varint,21,opt,name=multicast" json:"multicast,omitempty"` - UrlText *bool `protobuf:"varint,22,opt,name=urlText" json:"urlText,omitempty"` - UrlNumber *bool `protobuf:"varint,23,opt,name=urlNumber" json:"urlNumber,omitempty"` - MessageStubType *WebMessageInfo_WEB_MESSAGE_INFO_STUBTYPE `protobuf:"varint,24,opt,name=messageStubType,enum=proto.WebMessageInfo_WEB_MESSAGE_INFO_STUBTYPE" json:"messageStubType,omitempty"` - ClearMedia *bool `protobuf:"varint,25,opt,name=clearMedia" json:"clearMedia,omitempty"` - MessageStubParameters []string `protobuf:"bytes,26,rep,name=messageStubParameters" json:"messageStubParameters,omitempty"` - Duration *uint32 `protobuf:"varint,27,opt,name=duration" json:"duration,omitempty"` - Labels []string `protobuf:"bytes,28,rep,name=labels" json:"labels,omitempty"` - PaymentInfo *PaymentInfo `protobuf:"bytes,29,opt,name=paymentInfo" json:"paymentInfo,omitempty"` - FinalLiveLocation *LiveLocationMessage `protobuf:"bytes,30,opt,name=finalLiveLocation" json:"finalLiveLocation,omitempty"` - QuotedPaymentInfo *PaymentInfo `protobuf:"bytes,31,opt,name=quotedPaymentInfo" json:"quotedPaymentInfo,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Key *MessageKey `protobuf:"bytes,1,req,name=key" json:"key,omitempty"` + Message *Message `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` + MessageTimestamp *uint64 `protobuf:"varint,3,opt,name=messageTimestamp" json:"messageTimestamp,omitempty"` + Status *WebMessageInfo_WEB_MESSAGE_INFO_STATUS `protobuf:"varint,4,opt,name=status,enum=proto.WebMessageInfo_WEB_MESSAGE_INFO_STATUS" json:"status,omitempty"` + Participant *string `protobuf:"bytes,5,opt,name=participant" json:"participant,omitempty"` + Ignore *bool `protobuf:"varint,16,opt,name=ignore" json:"ignore,omitempty"` + Starred *bool `protobuf:"varint,17,opt,name=starred" json:"starred,omitempty"` + Broadcast *bool `protobuf:"varint,18,opt,name=broadcast" json:"broadcast,omitempty"` + PushName *string `protobuf:"bytes,19,opt,name=pushName" json:"pushName,omitempty"` + MediaCiphertextSha256 []byte `protobuf:"bytes,20,opt,name=mediaCiphertextSha256" json:"mediaCiphertextSha256,omitempty"` + Multicast *bool `protobuf:"varint,21,opt,name=multicast" json:"multicast,omitempty"` + UrlText *bool `protobuf:"varint,22,opt,name=urlText" json:"urlText,omitempty"` + UrlNumber *bool `protobuf:"varint,23,opt,name=urlNumber" json:"urlNumber,omitempty"` + MessageStubType *WebMessageInfo_WEB_MESSAGE_INFO_STUBTYPE `protobuf:"varint,24,opt,name=messageStubType,enum=proto.WebMessageInfo_WEB_MESSAGE_INFO_STUBTYPE" json:"messageStubType,omitempty"` + ClearMedia *bool `protobuf:"varint,25,opt,name=clearMedia" json:"clearMedia,omitempty"` + MessageStubParameters []string `protobuf:"bytes,26,rep,name=messageStubParameters" json:"messageStubParameters,omitempty"` + Duration *uint32 `protobuf:"varint,27,opt,name=duration" json:"duration,omitempty"` + Labels []string `protobuf:"bytes,28,rep,name=labels" json:"labels,omitempty"` + PaymentInfo *PaymentInfo `protobuf:"bytes,29,opt,name=paymentInfo" json:"paymentInfo,omitempty"` + FinalLiveLocation *LiveLocationMessage `protobuf:"bytes,30,opt,name=finalLiveLocation" json:"finalLiveLocation,omitempty"` + QuotedPaymentInfo *PaymentInfo `protobuf:"bytes,31,opt,name=quotedPaymentInfo" json:"quotedPaymentInfo,omitempty"` + EphemeralStartTimestamp *uint64 `protobuf:"varint,32,opt,name=ephemeralStartTimestamp" json:"ephemeralStartTimestamp,omitempty"` + EphemeralDuration *uint32 `protobuf:"varint,33,opt,name=ephemeralDuration" json:"ephemeralDuration,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *WebMessageInfo) Reset() { *m = WebMessageInfo{} } func (m *WebMessageInfo) String() string { return proto.CompactTextString(m) } func (*WebMessageInfo) ProtoMessage() {} func (*WebMessageInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_76fb0470a3b910d8, []int{51} + return fileDescriptor_76fb0470a3b910d8, []int{53} } func (m *WebMessageInfo) XXX_Unmarshal(b []byte) error { @@ -5184,6 +5519,20 @@ func (m *WebMessageInfo) GetQuotedPaymentInfo() *PaymentInfo { return nil } +func (m *WebMessageInfo) GetEphemeralStartTimestamp() uint64 { + if m != nil && m.EphemeralStartTimestamp != nil { + return *m.EphemeralStartTimestamp + } + return 0 +} + +func (m *WebMessageInfo) GetEphemeralDuration() uint32 { + if m != nil && m.EphemeralDuration != nil { + return *m.EphemeralDuration + } + return 0 +} + func init() { proto.RegisterEnum("proto.AdReplyInfo_AD_REPLY_INFO_MEDIATYPE", AdReplyInfo_AD_REPLY_INFO_MEDIATYPE_name, AdReplyInfo_AD_REPLY_INFO_MEDIATYPE_value) proto.RegisterEnum("proto.ExtendedTextMessage_EXTENDED_TEXT_MESSAGE_FONTTYPE", ExtendedTextMessage_EXTENDED_TEXT_MESSAGE_FONTTYPE_name, ExtendedTextMessage_EXTENDED_TEXT_MESSAGE_FONTTYPE_value) @@ -5240,6 +5589,8 @@ func init() { proto.RegisterType((*ProductSnapshot)(nil), "proto.ProductSnapshot") proto.RegisterType((*ProductMessage)(nil), "proto.ProductMessage") proto.RegisterType((*GroupInviteMessage)(nil), "proto.GroupInviteMessage") + proto.RegisterType((*DeviceSentMessage)(nil), "proto.DeviceSentMessage") + proto.RegisterType((*DeviceSyncMessage)(nil), "proto.DeviceSyncMessage") proto.RegisterType((*Message)(nil), "proto.Message") proto.RegisterType((*MessageKey)(nil), "proto.MessageKey") proto.RegisterType((*WebFeatures)(nil), "proto.WebFeatures") @@ -5253,361 +5604,395 @@ func init() { func init() { proto.RegisterFile("def.proto", fileDescriptor_76fb0470a3b910d8) } var fileDescriptor_76fb0470a3b910d8 = []byte{ - // 5683 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x3b, 0x4b, 0x6f, 0x23, 0x47, - 0x7a, 0xa2, 0x44, 0x49, 0xe4, 0x47, 0x3d, 0x5a, 0xa5, 0xd1, 0x88, 0xf3, 0xf0, 0x58, 0xee, 0xf1, - 0x7a, 0xb5, 0x13, 0x5b, 0x1e, 0xcb, 0x5e, 0x3f, 0x62, 0xef, 0xee, 0xb4, 0xc8, 0x92, 0xd4, 0x1e, - 0xb2, 0x9b, 0x2e, 0x36, 0xa5, 0x91, 0xb1, 0x08, 0xd1, 0xea, 0x2e, 0x49, 0x9d, 0xa1, 0xba, 0xe9, - 0xee, 0xe6, 0x78, 0xb4, 0x87, 0x04, 0xc8, 0x26, 0x48, 0xb0, 0xc8, 0x21, 0xa7, 0xbc, 0x80, 0x1c, - 0x02, 0x24, 0x7f, 0x21, 0x97, 0x0d, 0x90, 0x43, 0x10, 0x20, 0x40, 0x82, 0x0d, 0x90, 0x9c, 0x92, - 0x3f, 0x90, 0x6b, 0xce, 0xc9, 0x25, 0xa8, 0xea, 0x6a, 0xb2, 0x1f, 0xa4, 0x86, 0x33, 0xde, 0x47, - 0x90, 0x93, 0x58, 0xdf, 0xab, 0xab, 0xbe, 0x57, 0x7d, 0xf5, 0x55, 0x09, 0xca, 0x36, 0x3d, 0xdb, - 0xe9, 0xfb, 0x5e, 0xe8, 0xa1, 0x79, 0xfe, 0x47, 0x7e, 0x02, 0xd5, 0xc3, 0x2b, 0xdb, 0x37, 0x43, - 0x6a, 0x7f, 0x31, 0x70, 0xac, 0xa7, 0x84, 0xf6, 0x7b, 0x57, 0x7b, 0x83, 0x30, 0xf4, 0x5c, 0xb4, - 0x05, 0x15, 0xdb, 0x09, 0xfa, 0x3d, 0xf3, 0xca, 0xa0, 0xcf, 0xc3, 0x6a, 0x61, 0xab, 0xb0, 0x5d, - 0x26, 0x49, 0x10, 0xba, 0x0d, 0xa5, 0x53, 0x4e, 0xab, 0xda, 0xd5, 0x59, 0x8e, 0x1e, 0x8e, 0xe5, - 0x03, 0x58, 0x8b, 0x25, 0x77, 0x48, 0x63, 0x6a, 0x91, 0x12, 0xcc, 0x0d, 0xfc, 0x9e, 0x90, 0xc6, - 0x7e, 0xca, 0x4f, 0x00, 0xc5, 0x82, 0x6a, 0x66, 0xaf, 0x37, 0xb5, 0xa4, 0x2d, 0xa8, 0xf4, 0x2f, - 0x3c, 0x97, 0x6a, 0x83, 0xcb, 0x53, 0xea, 0x0b, 0x89, 0x49, 0x90, 0xfc, 0x5f, 0x05, 0xb8, 0x19, - 0x8b, 0x36, 0xe8, 0x65, 0xbf, 0x67, 0x86, 0x54, 0x88, 0x6f, 0x82, 0xf4, 0x55, 0x46, 0x1f, 0xfc, - 0x1b, 0x95, 0xdd, 0xd7, 0x23, 0x05, 0xee, 0x4c, 0x52, 0xdb, 0xe1, 0x0c, 0xc9, 0xb1, 0xa2, 0x8f, - 0xa1, 0x3c, 0xf0, 0xc5, 0xd4, 0xf9, 0x4c, 0x2a, 0xbb, 0xd5, 0x8c, 0x9c, 0xa1, 0x92, 0x0e, 0x67, - 0xc8, 0x88, 0x18, 0x7d, 0x0a, 0x60, 0x0d, 0x57, 0x5d, 0x9d, 0xe3, 0xac, 0xb7, 0x32, 0xac, 0x23, - 0xb5, 0x1c, 0xce, 0x90, 0x04, 0xf9, 0x9e, 0x04, 0x2b, 0x17, 0x82, 0x26, 0x82, 0xc8, 0x7d, 0x90, - 0x72, 0x76, 0x7e, 0x94, 0x57, 0x65, 0x65, 0xf7, 0x5e, 0xfc, 0x0d, 0xe7, 0xfc, 0xa2, 0x77, 0xd5, - 0x0e, 0xfd, 0x81, 0x15, 0x0e, 0x7c, 0x6a, 0x37, 0x69, 0x10, 0x98, 0xe7, 0x74, 0x7a, 0x3f, 0xf8, - 0x6d, 0x28, 0x8f, 0xec, 0xff, 0xcd, 0x3f, 0xf5, 0x70, 0xe4, 0x1f, 0x2f, 0xe6, 0xe4, 0xfe, 0xf3, - 0x47, 0x05, 0x80, 0x84, 0xe3, 0x7c, 0xf3, 0x29, 0x3c, 0xca, 0x3b, 0xd6, 0x14, 0x12, 0x92, 0x8e, - 0xf7, 0x8f, 0x05, 0x58, 0xc9, 0x38, 0x1c, 0x9e, 0xe8, 0x70, 0x9b, 0x42, 0xf2, 0x54, 0x8e, 0xf6, - 0x30, 0xef, 0x68, 0x92, 0xe0, 0x9f, 0xe0, 0x60, 0xef, 0x8f, 0x71, 0xb0, 0x35, 0xc1, 0x32, 0xd1, - 0xb1, 0x4a, 0xb0, 0x10, 0x19, 0x58, 0x0e, 0xa1, 0xd4, 0xf0, 0x2c, 0x33, 0x74, 0x3c, 0x17, 0x6d, - 0xc3, 0xaa, 0x4d, 0xcf, 0x7d, 0x4a, 0x83, 0x86, 0x19, 0x3a, 0xe1, 0xc0, 0xa6, 0x7c, 0x09, 0x05, - 0x92, 0x05, 0xa3, 0x07, 0x20, 0xc5, 0x20, 0xcf, 0x3d, 0x8f, 0x48, 0x67, 0x39, 0x69, 0x0e, 0x8e, - 0x10, 0x14, 0x5d, 0xf3, 0x92, 0xf2, 0xa9, 0x95, 0x09, 0xff, 0x2d, 0xdf, 0x87, 0xf9, 0x96, 0xe7, - 0xb8, 0x21, 0x5a, 0x82, 0xc2, 0x73, 0x8e, 0x29, 0x90, 0xc2, 0x73, 0x36, 0xba, 0xaa, 0x16, 0xa3, - 0xd1, 0x95, 0xfc, 0x07, 0x05, 0xd8, 0x50, 0xdd, 0x90, 0xfa, 0xa6, 0x15, 0x3a, 0xcf, 0xa8, 0xe2, - 0xba, 0x5e, 0x18, 0x4d, 0xf4, 0x43, 0x58, 0xed, 0x7b, 0xbd, 0xab, 0x73, 0xcf, 0x3d, 0xa2, 0x7e, - 0xe8, 0x58, 0x34, 0xa8, 0x16, 0xb6, 0xe6, 0xb6, 0x2b, 0xbb, 0x4b, 0x62, 0xe1, 0x5c, 0x38, 0xc9, - 0x12, 0xa1, 0x77, 0xa0, 0xd4, 0x13, 0x8b, 0x15, 0xca, 0x5d, 0x15, 0x0c, 0xb1, 0x0e, 0x0e, 0x67, - 0xc8, 0x90, 0x84, 0x69, 0x89, 0x7d, 0xda, 0x73, 0xe5, 0xff, 0x2e, 0x40, 0x45, 0xb1, 0xb9, 0xa1, - 0x54, 0xf7, 0xcc, 0x43, 0x6f, 0xc1, 0x8a, 0x69, 0x3f, 0x63, 0x62, 0x03, 0xea, 0x6b, 0x6c, 0x75, - 0x51, 0x02, 0xcb, 0x40, 0xd1, 0x21, 0x94, 0x2f, 0xa9, 0xed, 0x98, 0xc6, 0x55, 0x3f, 0x52, 0xd0, - 0xca, 0xee, 0x03, 0xf1, 0xc5, 0x84, 0xb8, 0x1d, 0xa5, 0xde, 0x25, 0xb8, 0xd5, 0x38, 0xe9, 0xaa, - 0xda, 0xbe, 0xde, 0x6d, 0xe2, 0xba, 0xaa, 0x18, 0x27, 0x2d, 0x4c, 0x46, 0xcc, 0xe8, 0x4d, 0x58, - 0xfe, 0xcd, 0x3e, 0x3d, 0x37, 0x2e, 0x06, 0x97, 0xa7, 0xae, 0xe9, 0xf4, 0xaa, 0xd2, 0x56, 0x61, - 0x7b, 0x89, 0xa4, 0x81, 0xa8, 0x0a, 0x8b, 0x96, 0xd9, 0xe7, 0xeb, 0x5b, 0xe3, 0x13, 0x8a, 0x87, - 0xf2, 0x27, 0xb0, 0x39, 0xe1, 0x2b, 0xa8, 0x04, 0x45, 0x4d, 0xd7, 0xb0, 0x34, 0x83, 0xca, 0x30, - 0xaf, 0x36, 0x95, 0x03, 0x2c, 0x15, 0xd8, 0xcf, 0x23, 0xb5, 0x8e, 0x75, 0x69, 0x56, 0xfe, 0xa7, - 0x39, 0xa8, 0xd4, 0x3c, 0x37, 0xa4, 0xcf, 0x43, 0xbe, 0xf8, 0xdb, 0x50, 0x0a, 0x42, 0xd3, 0xfd, - 0x91, 0xa9, 0xda, 0x62, 0xd9, 0xc3, 0x31, 0x4f, 0xda, 0x26, 0xd3, 0xb6, 0xd3, 0x37, 0xdd, 0x70, - 0x98, 0xb4, 0x47, 0x20, 0xf4, 0x01, 0x2c, 0x7f, 0x35, 0xf0, 0xc2, 0x61, 0x64, 0x09, 0x97, 0x5d, - 0x11, 0x6a, 0x89, 0xe3, 0x2d, 0x4d, 0x84, 0xee, 0x42, 0xd9, 0xa7, 0x97, 0x5e, 0x48, 0x3f, 0x77, - 0x6c, 0xee, 0x21, 0x65, 0x32, 0x02, 0x20, 0x19, 0x96, 0x2e, 0xa9, 0xcb, 0xd6, 0x49, 0x6d, 0x46, - 0xb0, 0xba, 0x35, 0xb7, 0x5d, 0x26, 0x29, 0x18, 0x73, 0x59, 0xcb, 0x73, 0x9f, 0x51, 0x3f, 0x70, - 0x3c, 0xb7, 0xed, 0x0d, 0x7c, 0x8b, 0x56, 0x11, 0x17, 0x94, 0x83, 0x33, 0xf3, 0x8e, 0x60, 0x75, - 0x33, 0x34, 0xab, 0xeb, 0x5c, 0xdb, 0x19, 0x28, 0xfa, 0x10, 0x6e, 0x26, 0x20, 0xb4, 0x67, 0x5e, - 0xb5, 0xa9, 0xe5, 0xb9, 0x76, 0x50, 0xbd, 0xb1, 0x55, 0xd8, 0x5e, 0x26, 0x13, 0xb0, 0x2c, 0xd0, - 0xce, 0x3c, 0xff, 0x6b, 0xd3, 0xb7, 0x1d, 0xf7, 0xbc, 0x6d, 0x79, 0x3e, 0xad, 0x6e, 0x70, 0x86, - 0x2c, 0x98, 0xe9, 0xd3, 0x09, 0xf6, 0x23, 0x20, 0xb5, 0xab, 0x37, 0xb7, 0x0a, 0xdb, 0x25, 0x92, - 0x04, 0xa1, 0x1d, 0x28, 0x45, 0xaa, 0x52, 0xec, 0xea, 0x26, 0x57, 0x25, 0xca, 0x7b, 0x18, 0x19, - 0xd2, 0xc8, 0x3f, 0x29, 0xc0, 0xdd, 0x36, 0x75, 0x6d, 0xea, 0x3f, 0xa6, 0x57, 0x75, 0x27, 0x08, - 0x7d, 0xe7, 0x74, 0xc0, 0xd4, 0x14, 0xab, 0xba, 0x0a, 0x8b, 0xe7, 0xbe, 0x37, 0xe8, 0x0f, 0xad, - 0x1b, 0x0f, 0x51, 0x0b, 0xee, 0x9b, 0xcf, 0xbd, 0x9e, 0x17, 0xf6, 0xae, 0x13, 0xc0, 0x8d, 0xbe, - 0x44, 0xa6, 0x21, 0x95, 0x7f, 0x32, 0x0f, 0x4b, 0xea, 0xa5, 0x79, 0x4e, 0xe3, 0x8f, 0x8b, 0xf2, - 0xa1, 0x30, 0x2c, 0x1f, 0x98, 0xb7, 0x5d, 0x3a, 0x97, 0x34, 0x8c, 0x23, 0xa8, 0x4c, 0x86, 0xe3, - 0xa4, 0xbb, 0xcf, 0xa5, 0xdc, 0x1d, 0xdd, 0x03, 0x38, 0x73, 0x7a, 0xb4, 0x7d, 0x61, 0xee, 0x7e, - 0xf7, 0x43, 0xee, 0x30, 0x4b, 0x24, 0x01, 0x89, 0xf1, 0x0d, 0xea, 0x9e, 0x87, 0x17, 0xd5, 0xf9, - 0xad, 0xc2, 0x76, 0x91, 0x24, 0x20, 0xe8, 0x26, 0x2c, 0x5c, 0x50, 0xe7, 0xfc, 0x22, 0xac, 0x2e, - 0x70, 0xc3, 0x88, 0x11, 0xba, 0x01, 0xf3, 0x5f, 0x3b, 0x76, 0x78, 0x51, 0x5d, 0xe4, 0xe0, 0x68, - 0xc0, 0xe7, 0xc8, 0x22, 0xf5, 0x31, 0xbd, 0xaa, 0x96, 0xf8, 0xb7, 0x86, 0x63, 0x16, 0xb8, 0x4c, - 0x2e, 0x76, 0x2d, 0x31, 0x99, 0x72, 0x14, 0xb8, 0x29, 0x20, 0x32, 0xe0, 0xa6, 0x33, 0x2e, 0xd5, - 0x05, 0x55, 0xe0, 0x89, 0xed, 0xae, 0xb0, 0xe9, 0xd8, 0x7c, 0x48, 0x26, 0xf0, 0xb2, 0x55, 0xda, - 0x8e, 0x4f, 0xad, 0xb0, 0x65, 0x86, 0x17, 0xd5, 0x0a, 0x57, 0x51, 0x02, 0x82, 0xde, 0x86, 0xb5, - 0x78, 0x9e, 0x86, 0x73, 0x49, 0x83, 0xd0, 0xbc, 0xec, 0x57, 0x97, 0xb6, 0x0a, 0xdb, 0x73, 0x24, - 0x8f, 0x98, 0x32, 0x05, 0x7d, 0x00, 0x15, 0x6b, 0x94, 0x2c, 0x78, 0x1a, 0x1a, 0xb9, 0x64, 0x22, - 0x8d, 0x90, 0x24, 0x19, 0x8b, 0xce, 0x33, 0xc7, 0x0f, 0xc2, 0xb6, 0x65, 0xba, 0x6d, 0xc7, 0xa6, - 0x96, 0xe9, 0xf3, 0xe8, 0x5c, 0x22, 0x39, 0x38, 0x8f, 0x9e, 0x18, 0x26, 0x0c, 0xb8, 0x2e, 0xa2, - 0x27, 0x0d, 0x66, 0xeb, 0xa3, 0xcf, 0xfb, 0xd4, 0x77, 0x58, 0x26, 0x38, 0x10, 0x4e, 0x1d, 0x85, - 0x66, 0x1e, 0x21, 0xff, 0x16, 0xac, 0xb0, 0xf9, 0x99, 0x56, 0x18, 0x7b, 0xe3, 0xa8, 0x48, 0x4d, - 0xe4, 0xf8, 0x24, 0x88, 0xf9, 0xc3, 0x33, 0xcb, 0xf4, 0x6d, 0xae, 0x8b, 0x32, 0x89, 0x06, 0xaf, - 0xa6, 0x03, 0xf9, 0xc7, 0xb3, 0xb0, 0x1a, 0xef, 0x43, 0xf1, 0x0c, 0x7e, 0x69, 0x5b, 0x32, 0x8b, - 0x25, 0xd3, 0xb6, 0x7d, 0x1a, 0x04, 0x22, 0xbf, 0xc6, 0xc3, 0x38, 0x26, 0xe7, 0x47, 0x31, 0xf9, - 0x0b, 0xf4, 0x04, 0xf9, 0xef, 0xe6, 0x61, 0x1d, 0x3f, 0x0f, 0x59, 0xd6, 0xb0, 0x59, 0xb9, 0x16, - 0x6b, 0x02, 0x41, 0x31, 0x1c, 0x9d, 0x14, 0xf8, 0x6f, 0x66, 0x9f, 0x4b, 0x33, 0xb4, 0x2e, 0x22, - 0xca, 0x78, 0xb7, 0x49, 0x80, 0xd8, 0xce, 0x60, 0x99, 0xae, 0xe7, 0x3a, 0x96, 0xd9, 0xeb, 0xf8, - 0x3d, 0xb1, 0xb4, 0x14, 0x8c, 0x5b, 0x99, 0x06, 0x96, 0xef, 0x44, 0x99, 0x64, 0x5e, 0x58, 0x79, - 0x04, 0x62, 0x56, 0x0e, 0x9d, 0xb0, 0x47, 0x79, 0x32, 0x28, 0x93, 0x68, 0xc0, 0xa2, 0x9e, 0xcd, - 0x42, 0xf1, 0xcf, 0x4f, 0x79, 0x3a, 0x58, 0x24, 0xc3, 0x31, 0xdb, 0x41, 0x4e, 0x4d, 0xeb, 0x29, - 0xcb, 0x9c, 0xae, 0xcd, 0x29, 0x4a, 0x9c, 0x22, 0x03, 0x45, 0x4d, 0x28, 0x9e, 0x79, 0x6e, 0xc8, - 0x93, 0xc2, 0xca, 0xee, 0x27, 0x42, 0x39, 0x63, 0xd6, 0xbf, 0x83, 0x9f, 0x18, 0x58, 0xab, 0xe3, - 0x7a, 0xd7, 0xc0, 0x4f, 0x8c, 0x6e, 0x13, 0xb7, 0xdb, 0xca, 0x01, 0xee, 0xee, 0xeb, 0x9a, 0xc1, - 0x4b, 0x05, 0x2e, 0x06, 0xfd, 0x06, 0x54, 0xfa, 0x3e, 0x7d, 0xe6, 0xd0, 0xaf, 0x79, 0xc5, 0x01, - 0x5c, 0xea, 0x67, 0x2f, 0x2d, 0xb5, 0x45, 0xf0, 0x91, 0x8a, 0x8f, 0xb9, 0xe0, 0xa4, 0xc0, 0x5f, - 0xa8, 0xe1, 0xff, 0xb0, 0x00, 0xf7, 0xae, 0x5f, 0x24, 0x5a, 0x01, 0x68, 0x2b, 0x5a, 0xbb, 0xdb, - 0xc6, 0x44, 0xdd, 0x8f, 0xea, 0x95, 0xe8, 0x67, 0x01, 0xad, 0xc3, 0xaa, 0xa6, 0x13, 0xb5, 0xa6, - 0x68, 0x5d, 0x82, 0x0f, 0x3a, 0x0d, 0x85, 0x48, 0xb3, 0x68, 0x0d, 0x96, 0xf7, 0xc8, 0x89, 0x56, - 0x57, 0xb4, 0xee, 0x31, 0x51, 0x0d, 0x2c, 0xcd, 0xa1, 0x0d, 0x58, 0xdb, 0xc3, 0x7b, 0x4a, 0x5b, - 0xc3, 0x1d, 0x3c, 0xa4, 0x2c, 0x22, 0x09, 0x96, 0xf4, 0xf6, 0xb1, 0xd2, 0xa8, 0x77, 0x0f, 0xb1, - 0x72, 0x74, 0x22, 0xcd, 0xcb, 0x1f, 0xc3, 0x1b, 0x2f, 0x54, 0x4e, 0xba, 0x74, 0x8a, 0xea, 0xa5, - 0x82, 0xfc, 0xd3, 0x39, 0x58, 0xad, 0x7b, 0xd6, 0x80, 0xe5, 0x96, 0x57, 0xdb, 0xd7, 0x86, 0xfe, - 0x36, 0x97, 0xf4, 0xb7, 0x6f, 0xba, 0xa7, 0xdd, 0x85, 0x72, 0xdf, 0x3c, 0xa7, 0x35, 0x6f, 0xe0, - 0xc6, 0xdb, 0xda, 0x08, 0x90, 0xda, 0xc3, 0x16, 0x33, 0x7b, 0xd8, 0x6d, 0x28, 0x31, 0x39, 0x3c, - 0x09, 0x96, 0xa2, 0xb9, 0xc6, 0xe3, 0x29, 0xf7, 0xb7, 0xf4, 0x4e, 0x04, 0xd3, 0xed, 0x44, 0x95, - 0x5f, 0xc1, 0x4e, 0x24, 0xff, 0xf9, 0x1c, 0x2c, 0x29, 0x03, 0xdb, 0xf1, 0x5e, 0xcd, 0x74, 0x69, - 0x23, 0xcd, 0xbd, 0xc0, 0x48, 0xc5, 0x9c, 0x91, 0xaa, 0xb0, 0x18, 0x88, 0x1a, 0x72, 0x9e, 0x9b, - 0x28, 0x1e, 0xb2, 0x79, 0xf4, 0xc3, 0xc8, 0x70, 0x25, 0xc2, 0x7e, 0x5e, 0x6b, 0xb2, 0x9c, 0x59, - 0x4a, 0x2f, 0x36, 0x4b, 0x79, 0x3a, 0xb3, 0xc0, 0x24, 0xb3, 0xbc, 0xf2, 0xd6, 0x1f, 0x84, 0x3e, - 0x35, 0x2f, 0x59, 0xd1, 0x9b, 0xde, 0xfa, 0xb3, 0x70, 0xf9, 0x77, 0x16, 0x60, 0xe9, 0xc8, 0xb1, - 0xe9, 0xff, 0x39, 0xe3, 0x24, 0x4d, 0xb1, 0x90, 0x31, 0x45, 0xa2, 0x4a, 0x5d, 0x4c, 0x57, 0xa9, - 0x5b, 0x50, 0x39, 0x77, 0xce, 0x5a, 0x3d, 0xf3, 0x8a, 0x6d, 0x0b, 0xdc, 0x44, 0x25, 0x92, 0x04, - 0x25, 0xea, 0xd0, 0xf2, 0xf8, 0x3a, 0x14, 0x92, 0x75, 0x68, 0xce, 0xe8, 0x95, 0x97, 0xab, 0x35, - 0x97, 0x7e, 0x6e, 0xb5, 0xe6, 0xf2, 0x74, 0xae, 0xb4, 0xf2, 0x2b, 0xaa, 0x35, 0xa7, 0x75, 0x38, - 0xd4, 0x81, 0x95, 0x73, 0xe7, 0x4c, 0x09, 0x87, 0x27, 0x17, 0x5e, 0x6a, 0xae, 0xec, 0xbe, 0x23, - 0x3e, 0x92, 0x74, 0xc6, 0x1d, 0xbe, 0x01, 0x0c, 0xf7, 0x09, 0xc5, 0x30, 0x88, 0xba, 0xd7, 0x31, - 0x54, 0x5d, 0x23, 0x19, 0x21, 0xf2, 0xa7, 0x70, 0x6b, 0x22, 0x71, 0x7a, 0x53, 0x39, 0x50, 0x5b, - 0x87, 0x27, 0xd1, 0x79, 0xdc, 0xc0, 0x9a, 0x4e, 0xa4, 0x59, 0x79, 0x0b, 0x8a, 0x35, 0xb3, 0x27, - 0x0e, 0xfb, 0xbd, 0x1e, 0x73, 0xb9, 0x02, 0x9f, 0x7e, 0x3c, 0x94, 0x3f, 0x86, 0x62, 0xed, 0xc2, - 0x0c, 0xa7, 0xa8, 0x5f, 0x57, 0x60, 0xd6, 0x89, 0x7b, 0x7e, 0xb3, 0x8e, 0x2d, 0xff, 0x45, 0x01, - 0x56, 0x5b, 0x6c, 0x65, 0x96, 0xd7, 0x8b, 0x63, 0xec, 0x3e, 0xcc, 0x3d, 0x15, 0xdf, 0x18, 0xb5, - 0x96, 0x04, 0xf2, 0x31, 0xbd, 0x22, 0x0c, 0x8b, 0x1e, 0x41, 0x31, 0x1c, 0x35, 0x39, 0xde, 0x8e, - 0xfb, 0x30, 0x69, 0x51, 0x3b, 0x2d, 0xa2, 0x1b, 0x7a, 0x4d, 0x6f, 0x0c, 0xd7, 0x1d, 0xd5, 0x2e, - 0x8c, 0x53, 0xbe, 0x0f, 0x1b, 0x63, 0xd1, 0x08, 0x60, 0x81, 0xe0, 0x23, 0xfd, 0x31, 0x96, 0x66, - 0xe4, 0xbf, 0x2c, 0xc0, 0x0d, 0x51, 0xa4, 0x07, 0x8a, 0xef, 0x9b, 0x57, 0xd3, 0x97, 0xea, 0xef, - 0x41, 0xc9, 0x12, 0x9c, 0xd5, 0x59, 0xee, 0xe8, 0x1b, 0x09, 0x4f, 0x19, 0x55, 0xfd, 0x64, 0x48, - 0xf6, 0x8a, 0x3b, 0xc8, 0x17, 0x50, 0x39, 0x6c, 0x37, 0x6b, 0x03, 0xdf, 0xa7, 0xae, 0x75, 0xc5, - 0x4b, 0x50, 0xf1, 0xbb, 0xe6, 0xd9, 0xf1, 0xd4, 0x52, 0x30, 0x16, 0x3c, 0xe6, 0x25, 0xdb, 0x86, - 0xdf, 0x7b, 0xf8, 0xf0, 0x21, 0xd7, 0xe1, 0x1c, 0x49, 0x40, 0xe4, 0x3f, 0x2b, 0xc2, 0x8d, 0xc3, - 0x76, 0xb3, 0x6e, 0x86, 0x94, 0xc5, 0x48, 0xcd, 0xbb, 0xec, 0x7b, 0x2e, 0x75, 0x43, 0xd4, 0x85, - 0xb2, 0x6d, 0x5e, 0xe9, 0x67, 0xc7, 0x94, 0x3e, 0xe5, 0x92, 0x57, 0x76, 0x95, 0xb8, 0x93, 0x39, - 0x86, 0x9e, 0x01, 0xbb, 0x75, 0xc5, 0xc0, 0x5d, 0x43, 0x6d, 0xe2, 0x6e, 0x4d, 0x6f, 0xb6, 0x74, - 0x0d, 0x6b, 0x46, 0xb7, 0xae, 0x9c, 0xe8, 0xfb, 0xc7, 0x18, 0x3f, 0x8e, 0xfa, 0x4e, 0x43, 0x99, - 0xac, 0xec, 0xbe, 0xa2, 0x66, 0xd4, 0x25, 0x5d, 0x26, 0xfc, 0x37, 0x4b, 0x3e, 0x97, 0x9e, 0x1b, - 0x5e, 0xf0, 0x0c, 0xba, 0x4c, 0xa2, 0x01, 0x4f, 0x00, 0x8c, 0xad, 0xc9, 0x51, 0x45, 0x8e, 0x4a, - 0x40, 0x98, 0xa4, 0x0b, 0x6f, 0xe0, 0x8b, 0xcc, 0xc9, 0x7f, 0xb3, 0xf4, 0x76, 0xe9, 0xb8, 0x83, - 0x90, 0xc6, 0xc7, 0xec, 0x68, 0x84, 0x7e, 0x08, 0x25, 0xcb, 0xec, 0x51, 0xd7, 0x36, 0x7d, 0x9e, - 0x33, 0x57, 0x76, 0x1f, 0xbd, 0xca, 0xaa, 0x6a, 0x4a, 0x03, 0x6b, 0x75, 0x85, 0xf0, 0x45, 0x0d, - 0x25, 0xca, 0x3f, 0x2e, 0xc0, 0xb7, 0xa6, 0x52, 0x04, 0x73, 0xbd, 0xa6, 0xae, 0xd5, 0x15, 0x16, - 0x81, 0x15, 0x58, 0x34, 0x3a, 0xb8, 0xcd, 0x06, 0xb3, 0x68, 0x19, 0xca, 0xc7, 0xb8, 0xae, 0x45, - 0xc3, 0x39, 0xb4, 0x04, 0x25, 0xe3, 0xb0, 0x43, 0xf8, 0xa8, 0xc8, 0xb8, 0xf6, 0x89, 0xca, 0x7e, - 0xcf, 0x33, 0x4c, 0x5b, 0x31, 0x3a, 0x84, 0x8d, 0x16, 0x18, 0xa6, 0xdd, 0xe1, 0xf2, 0x16, 0xe5, - 0x7d, 0x78, 0x73, 0x9a, 0x79, 0xb3, 0x4f, 0x1d, 0x10, 0x7c, 0xa0, 0x13, 0x55, 0xd1, 0xa4, 0x02, - 0x5a, 0x85, 0x4a, 0x5b, 0x6f, 0x28, 0xa4, 0x7b, 0xa8, 0x7e, 0x4e, 0x54, 0x69, 0x56, 0xfe, 0x20, - 0xe5, 0x1a, 0x1d, 0xd7, 0x79, 0x8e, 0xfb, 0x9e, 0xc5, 0xcb, 0xbd, 0x70, 0x98, 0x68, 0x0b, 0xdc, - 0xa5, 0x46, 0x00, 0xf9, 0x4f, 0x0b, 0xdc, 0x4b, 0x63, 0x36, 0xf4, 0x29, 0x94, 0xad, 0x58, 0x9f, - 0x22, 0xd4, 0xef, 0x5c, 0xa3, 0xf2, 0xc3, 0x19, 0x32, 0xa2, 0x67, 0xcc, 0x83, 0xf8, 0xbb, 0xa2, - 0xb1, 0x3a, 0x86, 0x79, 0x38, 0x35, 0xde, 0xc0, 0x8e, 0x07, 0x7b, 0xab, 0xb0, 0x6c, 0x9b, 0x21, - 0x65, 0x53, 0xd3, 0x5d, 0xea, 0x9d, 0xc9, 0x7f, 0x5d, 0x80, 0xcd, 0xc3, 0x76, 0x93, 0x1d, 0x85, - 0x7b, 0xce, 0x8f, 0xcc, 0xd3, 0x1e, 0x6d, 0x99, 0xbe, 0x79, 0x49, 0x43, 0xea, 0xb3, 0x9c, 0x67, - 0xd3, 0x33, 0x73, 0xd0, 0x8b, 0x0f, 0x82, 0xf1, 0x10, 0x3d, 0x84, 0x52, 0x1c, 0x52, 0x62, 0x0a, - 0x68, 0x34, 0x85, 0x38, 0x18, 0x0f, 0x67, 0xc8, 0x90, 0x8a, 0x71, 0xd8, 0x62, 0x6a, 0xa2, 0x09, - 0x89, 0xf2, 0x93, 0x66, 0x1c, 0x31, 0xd5, 0xde, 0x12, 0x40, 0x9f, 0x4d, 0x25, 0x9a, 0xe7, 0xbf, - 0xcd, 0xc2, 0xe6, 0x84, 0xeb, 0x02, 0xa6, 0x7c, 0x76, 0xaa, 0x0e, 0xfa, 0xa6, 0x15, 0x47, 0xfc, - 0x08, 0xc0, 0x92, 0x15, 0xed, 0x51, 0x76, 0x3e, 0xe0, 0xc9, 0x4a, 0x9c, 0x5b, 0x13, 0x20, 0x16, - 0x18, 0xfc, 0x4b, 0x41, 0x75, 0x8e, 0xf7, 0x32, 0xc5, 0x88, 0x57, 0x28, 0x66, 0xaf, 0xc7, 0x6a, - 0x83, 0xc6, 0xb9, 0x38, 0xcd, 0x26, 0x20, 0x29, 0xbc, 0x25, 0x8e, 0xb2, 0x09, 0x08, 0x6a, 0xc0, - 0x5a, 0x2f, 0xa3, 0xd7, 0xa0, 0xba, 0xc0, 0xb3, 0xe1, 0xbd, 0xd1, 0xe2, 0xc7, 0xa9, 0x9e, 0xe4, - 0x19, 0xa3, 0xee, 0x44, 0x48, 0xfd, 0x4b, 0xc7, 0x75, 0x82, 0xd0, 0xb1, 0x1a, 0xe7, 0xa2, 0xc2, - 0xc9, 0x82, 0xf3, 0x94, 0x96, 0x38, 0x48, 0x64, 0xc1, 0xf2, 0xef, 0x17, 0x00, 0xb5, 0xa9, 0x6b, - 0xb7, 0xcc, 0xab, 0xe4, 0x01, 0xea, 0x21, 0x54, 0x5c, 0x2f, 0xa4, 0xc9, 0x1e, 0x63, 0xbe, 0x69, - 0x9c, 0x24, 0x41, 0x3f, 0x80, 0x35, 0x9f, 0x7e, 0x35, 0xa0, 0x41, 0x38, 0xda, 0xab, 0x32, 0xf7, - 0x23, 0x89, 0x4d, 0x2c, 0x4f, 0x2b, 0xff, 0x67, 0x01, 0x36, 0x48, 0x04, 0xbd, 0x7e, 0x32, 0xc5, - 0x17, 0x4f, 0xe6, 0x21, 0xac, 0x27, 0x13, 0xbe, 0x1a, 0x78, 0x1f, 0xec, 0xbe, 0xf7, 0x91, 0xf0, - 0x8c, 0x71, 0xa8, 0x31, 0x5b, 0x42, 0x31, 0xb9, 0x25, 0x30, 0x1f, 0x12, 0x53, 0xde, 0xf7, 0xbd, - 0x4b, 0x71, 0x52, 0x4c, 0x82, 0x98, 0xce, 0xe9, 0xf3, 0xbe, 0xe3, 0x27, 0xea, 0xad, 0x79, 0x9e, - 0x06, 0xb2, 0x60, 0xb9, 0x06, 0x77, 0xeb, 0xd4, 0xea, 0x39, 0x2e, 0x15, 0x0b, 0x25, 0x29, 0x65, - 0x4c, 0x55, 0x01, 0xc8, 0x7b, 0x70, 0xa7, 0x66, 0xba, 0x16, 0xed, 0x7d, 0x03, 0x19, 0x7f, 0x3f, - 0x07, 0xeb, 0x0d, 0xe7, 0x19, 0xfd, 0xe5, 0xb4, 0xc1, 0x1e, 0x80, 0x64, 0x5a, 0xd6, 0xc0, 0x37, - 0xad, 0x2b, 0xd5, 0x6d, 0x32, 0x3f, 0x0c, 0xc4, 0x96, 0x96, 0x83, 0x33, 0x73, 0x04, 0x7d, 0x4a, - 0x6d, 0xd5, 0x6d, 0xf6, 0xa3, 0x0e, 0xd9, 0x2c, 0x49, 0x40, 0x50, 0x03, 0xde, 0x10, 0xf2, 0x6b, - 0x3d, 0xcf, 0x7a, 0xfa, 0xb5, 0x13, 0x50, 0x66, 0x84, 0xa6, 0x79, 0xee, 0xd2, 0xd0, 0xb1, 0x34, - 0xcf, 0x17, 0x67, 0xf2, 0x65, 0xf2, 0x62, 0xc2, 0xe4, 0x91, 0x61, 0x21, 0x7d, 0x64, 0x78, 0x0b, - 0x56, 0x02, 0xa6, 0x58, 0xd7, 0x8a, 0xef, 0x2f, 0x17, 0xb9, 0x4d, 0x33, 0x50, 0x36, 0x5f, 0x9e, - 0x51, 0xcf, 0xce, 0x02, 0x1a, 0xf2, 0x58, 0x5b, 0x26, 0x09, 0xc8, 0x2f, 0xf4, 0x08, 0xfd, 0xc7, - 0x73, 0xb0, 0xd2, 0x0e, 0x1d, 0xeb, 0x29, 0xf5, 0x27, 0x9f, 0xd3, 0xd2, 0x67, 0xb1, 0xd9, 0xdc, - 0x59, 0x2c, 0x77, 0x96, 0x99, 0x1b, 0x77, 0x96, 0x49, 0x9e, 0xbb, 0x8a, 0xf9, 0xae, 0xc5, 0xf0, - 0x24, 0x38, 0x9f, 0x39, 0x09, 0xbe, 0x5c, 0x7f, 0x3f, 0x7d, 0xb6, 0x29, 0xe5, 0xce, 0x36, 0xe9, - 0x73, 0x63, 0x39, 0x77, 0x6e, 0x7c, 0xb9, 0x63, 0xb4, 0x0c, 0x4b, 0x7d, 0x37, 0x67, 0x99, 0x14, - 0xec, 0x15, 0x0d, 0xf3, 0x27, 0x45, 0x58, 0xdd, 0xf7, 0x06, 0x3e, 0xf1, 0xbe, 0x8e, 0xaf, 0xaf, - 0xd1, 0xc7, 0xb0, 0xc8, 0x49, 0x44, 0x4f, 0xe8, 0xc5, 0x37, 0xe1, 0x31, 0x39, 0xfa, 0x10, 0x16, - 0xce, 0x3c, 0x2f, 0x14, 0x2e, 0xf8, 0x62, 0x46, 0x41, 0x8d, 0xde, 0x85, 0xc5, 0xe8, 0xf2, 0x39, - 0xa8, 0x96, 0x52, 0x75, 0x78, 0xfa, 0x4a, 0x9d, 0xc4, 0x54, 0x68, 0x0f, 0x56, 0xed, 0x74, 0x3f, - 0x4d, 0xa4, 0x91, 0x9b, 0x82, 0x31, 0xd3, 0x6d, 0x3b, 0x9c, 0x21, 0x59, 0x06, 0xf4, 0x25, 0x6c, - 0x5e, 0x8c, 0x9f, 0xd7, 0x74, 0x0f, 0x00, 0x0e, 0x67, 0xc8, 0x24, 0x01, 0xe8, 0x13, 0x58, 0x72, - 0x12, 0x97, 0x58, 0x62, 0x93, 0x59, 0x8f, 0x8f, 0xd1, 0x09, 0xd4, 0xe1, 0x0c, 0x49, 0x91, 0x32, - 0xd6, 0x67, 0x89, 0x23, 0xa4, 0xd8, 0x4a, 0xd6, 0xc7, 0x9c, 0x2e, 0x19, 0x6b, 0x92, 0x94, 0x69, - 0xa5, 0x97, 0x4e, 0x93, 0xdc, 0xcb, 0x47, 0x5a, 0xc9, 0x24, 0x51, 0xa6, 0x95, 0x0c, 0xc3, 0xde, - 0xa2, 0x68, 0x34, 0xca, 0xff, 0x33, 0x07, 0x9b, 0xf1, 0x73, 0x94, 0xac, 0x87, 0x3c, 0x84, 0xf5, - 0xf8, 0x15, 0x4a, 0x2d, 0x32, 0x3d, 0xef, 0xb6, 0x47, 0x89, 0x69, 0x1c, 0x0a, 0xed, 0x00, 0xba, - 0x18, 0x0a, 0x63, 0x36, 0xe7, 0x0c, 0x51, 0x69, 0x30, 0x06, 0x83, 0x0e, 0x60, 0x35, 0xfd, 0xce, - 0x25, 0xa8, 0x96, 0xb9, 0x67, 0xbc, 0x96, 0x79, 0x29, 0x93, 0xf1, 0x90, 0x2c, 0xd7, 0xcf, 0xc5, - 0x53, 0x76, 0x60, 0x2d, 0x16, 0x6b, 0x30, 0xdd, 0x8c, 0xae, 0x16, 0x0e, 0x67, 0x48, 0x1e, 0xf5, - 0xff, 0xc1, 0xfa, 0x3f, 0x2d, 0xc0, 0x6a, 0xac, 0xda, 0xc4, 0x07, 0xce, 0xd2, 0x8e, 0x90, 0x51, - 0x65, 0xc6, 0x4d, 0xd8, 0x07, 0x32, 0x0c, 0x3c, 0xe8, 0xc6, 0x3b, 0x55, 0x36, 0xe8, 0xc6, 0x53, - 0xf1, 0xa0, 0x1b, 0x8f, 0xda, 0x2b, 0xb1, 0xec, 0xe3, 0x5f, 0x9a, 0xa1, 0xfc, 0xb7, 0x05, 0xb8, - 0x9d, 0x71, 0x0c, 0xda, 0xef, 0x0d, 0x3b, 0x03, 0x0f, 0x40, 0x0a, 0x68, 0x8f, 0x5a, 0x43, 0x37, - 0x19, 0x5e, 0x6c, 0xe7, 0xe0, 0xe8, 0x33, 0xb8, 0x95, 0x86, 0xd5, 0x13, 0x4f, 0x8d, 0x66, 0x79, - 0x25, 0x3e, 0x99, 0x20, 0x9b, 0x94, 0xe7, 0xa6, 0x4b, 0xca, 0x3f, 0x9b, 0xe5, 0x2d, 0x17, 0x7b, - 0x60, 0x85, 0x6d, 0xd7, 0xec, 0x07, 0x17, 0x5e, 0x88, 0x3e, 0x82, 0xa5, 0x7e, 0x04, 0xe2, 0xfe, - 0x23, 0x34, 0x3f, 0xce, 0xa7, 0x48, 0x8a, 0x90, 0xf7, 0xf8, 0xc5, 0x38, 0x6e, 0xeb, 0x8c, 0x00, - 0x13, 0xee, 0x15, 0x32, 0xf7, 0x5f, 0xc5, 0xfc, 0xfd, 0x57, 0xb6, 0x85, 0x31, 0x3f, 0xa6, 0x85, - 0xb1, 0x0d, 0xab, 0x7d, 0xdf, 0xb1, 0xa8, 0x32, 0x2a, 0x5a, 0x17, 0xa2, 0x6a, 0x33, 0x03, 0x66, - 0xbb, 0xa5, 0x4f, 0x43, 0xd3, 0xe9, 0x51, 0x5f, 0xb5, 0x45, 0x56, 0x48, 0x40, 0xe2, 0x5a, 0xa1, - 0x34, 0xaa, 0x15, 0xde, 0x86, 0xb5, 0xe4, 0x2a, 0xa3, 0x1b, 0x8c, 0xa8, 0x21, 0x9a, 0x47, 0xc8, - 0x7f, 0x55, 0x80, 0x15, 0xa1, 0xd0, 0x51, 0xf9, 0xbd, 0x28, 0xe8, 0x32, 0x4e, 0x9c, 0x51, 0x3c, - 0x89, 0xc9, 0x98, 0xd7, 0x9c, 0x0e, 0x02, 0xc7, 0xa5, 0x41, 0xa0, 0x7f, 0xed, 0x52, 0xff, 0xf3, - 0x61, 0x9b, 0x2c, 0x07, 0x7f, 0xc5, 0xcd, 0xf8, 0x3f, 0x0a, 0x80, 0xa2, 0xab, 0x67, 0xf7, 0x99, - 0x33, 0x8a, 0xbb, 0xdb, 0x50, 0xe2, 0xef, 0x2d, 0xd8, 0x07, 0xc5, 0xeb, 0x9a, 0x78, 0xcc, 0x34, - 0xe7, 0x70, 0x62, 0x6e, 0x85, 0x68, 0x3a, 0x09, 0x08, 0x9b, 0x74, 0x34, 0xc2, 0xac, 0xc0, 0x37, - 0x87, 0x0f, 0x23, 0xe6, 0x48, 0x0e, 0xce, 0x3c, 0x85, 0xcb, 0xe5, 0x27, 0x50, 0xf1, 0xa2, 0x66, - 0x08, 0xc8, 0x97, 0x87, 0xf3, 0x2f, 0x78, 0x6e, 0x94, 0x2e, 0x53, 0xe5, 0x9f, 0x2d, 0xc3, 0x62, - 0xbc, 0x22, 0xe6, 0x3d, 0xd1, 0x3b, 0x98, 0x68, 0x46, 0x71, 0x03, 0x2c, 0x01, 0x43, 0xe7, 0x70, - 0x37, 0x78, 0xd1, 0x9b, 0x92, 0xca, 0xee, 0x7d, 0xa1, 0xd3, 0xeb, 0xde, 0x94, 0x90, 0x6b, 0x05, - 0xb1, 0xc8, 0x9a, 0x32, 0x5b, 0x67, 0x72, 0xf5, 0xf7, 0xf8, 0x9b, 0xa0, 0x44, 0x9f, 0x50, 0x64, - 0xeb, 0x09, 0x4d, 0xc4, 0x0c, 0x31, 0x7a, 0xf4, 0x92, 0xf9, 0x3a, 0x97, 0xad, 0x51, 0x03, 0xd6, - 0x69, 0xfe, 0x06, 0x57, 0x14, 0x6d, 0xb7, 0x27, 0xdf, 0xf1, 0x92, 0x71, 0x6c, 0x6c, 0x3e, 0xd9, - 0x9d, 0x72, 0xf1, 0xba, 0x9d, 0x32, 0xbf, 0x4f, 0x7e, 0x04, 0x4b, 0x66, 0xe2, 0x9e, 0x8c, 0xc7, - 0xeb, 0x48, 0x93, 0xc9, 0x2b, 0x34, 0x92, 0x22, 0x64, 0x8c, 0xa9, 0x5d, 0xaf, 0x3c, 0x71, 0xd7, - 0xcb, 0xec, 0x79, 0xaf, 0x43, 0xd1, 0x32, 0x7b, 0x3d, 0x5e, 0x39, 0x57, 0x76, 0x2b, 0x89, 0x47, - 0x8e, 0x84, 0x23, 0x38, 0xc1, 0x85, 0x19, 0xf2, 0x6b, 0x8f, 0x04, 0xc1, 0x85, 0x19, 0x12, 0x8e, - 0x60, 0xab, 0xee, 0xa7, 0x5b, 0xd2, 0xfc, 0xb9, 0x4b, 0x2a, 0x1f, 0x24, 0xb1, 0x24, 0x4b, 0x8e, - 0x74, 0xb8, 0x61, 0x8d, 0xe9, 0x3f, 0xf3, 0x0b, 0x8f, 0x51, 0xd7, 0x6b, 0x5c, 0x8b, 0x9a, 0x8c, - 0x65, 0x44, 0x4f, 0x26, 0x17, 0xa6, 0x2b, 0x53, 0x95, 0xd5, 0x13, 0xcb, 0xd2, 0x1f, 0x17, 0xe0, - 0xc1, 0x99, 0x19, 0x84, 0x84, 0xbf, 0x87, 0x08, 0x1f, 0xd3, 0xab, 0x6b, 0x9f, 0x6d, 0xad, 0x4e, - 0x1f, 0x62, 0x2f, 0x21, 0x16, 0xa9, 0x80, 0x82, 0x5c, 0x3b, 0x87, 0x9f, 0x69, 0x46, 0x0f, 0xa1, - 0xf3, 0xfd, 0x1e, 0x32, 0x86, 0x89, 0x45, 0x40, 0x2f, 0xdf, 0x1c, 0xe0, 0x77, 0x37, 0xa3, 0x08, - 0x18, 0xd3, 0x3e, 0x20, 0xe3, 0xd8, 0x10, 0x81, 0x0d, 0x7f, 0x5c, 0x77, 0x87, 0x3f, 0xb2, 0x1b, - 0xdd, 0x82, 0x8d, 0xed, 0x00, 0x91, 0xf1, 0xac, 0x2c, 0x8d, 0xd9, 0xd7, 0x34, 0x52, 0xc4, 0x03, - 0xbd, 0x58, 0xc7, 0xd7, 0xf5, 0x5c, 0xc8, 0xb5, 0x82, 0x90, 0x0d, 0x77, 0xac, 0xc9, 0xcd, 0x96, - 0x6a, 0x95, 0x7f, 0x47, 0x1e, 0x46, 0xc8, 0x44, 0x4a, 0x72, 0x9d, 0x18, 0x16, 0x2e, 0x61, 0xba, - 0x2c, 0xac, 0xde, 0x4a, 0x85, 0x4b, 0xa6, 0x68, 0x24, 0x59, 0x72, 0x96, 0x35, 0x83, 0x54, 0x27, - 0xa0, 0x7a, 0x3b, 0x95, 0x35, 0xd3, 0x6d, 0x02, 0x92, 0x21, 0x66, 0xec, 0xfd, 0xd4, 0x4e, 0x5e, - 0xbd, 0x93, 0x62, 0x4f, 0x6f, 0xf3, 0x24, 0x43, 0xcc, 0x7c, 0xef, 0x3c, 0xb7, 0xc3, 0x56, 0xef, - 0xa6, 0x7c, 0x2f, 0xbf, 0x05, 0x93, 0x31, 0x4c, 0x72, 0x08, 0x30, 0x6a, 0x56, 0xa5, 0x9f, 0xa3, - 0x16, 0xb2, 0xcf, 0x51, 0x6f, 0xc2, 0xc2, 0x99, 0xef, 0x5d, 0x36, 0xa3, 0x6d, 0xab, 0x44, 0xc4, - 0x48, 0x5c, 0xb6, 0xcd, 0xc5, 0x97, 0x6d, 0xd9, 0xc7, 0xb2, 0xc5, 0xdc, 0x63, 0x59, 0xf9, 0x5f, - 0x57, 0xa0, 0x72, 0x4c, 0x4f, 0xf7, 0xa9, 0xc9, 0x22, 0x3b, 0x40, 0x9f, 0xc3, 0x72, 0xcf, 0x3c, - 0xa5, 0xbd, 0x40, 0x94, 0x9d, 0xe2, 0xca, 0xe7, 0x4d, 0xb1, 0x96, 0x04, 0xe9, 0xce, 0x31, 0xde, - 0xeb, 0xee, 0x63, 0xc5, 0xe8, 0x10, 0xdc, 0xee, 0xee, 0x37, 0x94, 0x03, 0x92, 0x66, 0x45, 0x3f, - 0x84, 0x9b, 0xcf, 0x3c, 0xa7, 0xaf, 0xba, 0xb6, 0xf3, 0xcc, 0xb1, 0x07, 0x66, 0x4f, 0x1f, 0x84, - 0xe7, 0x9e, 0xe3, 0x9e, 0x8b, 0x3b, 0xbc, 0xe9, 0x84, 0x4e, 0x90, 0x81, 0x1e, 0x89, 0x32, 0x26, - 0x38, 0x7a, 0x9f, 0xaf, 0x78, 0x5a, 0x79, 0x43, 0x2e, 0xd4, 0x80, 0x95, 0xf8, 0x77, 0xcd, 0xa7, - 0xec, 0xcc, 0x50, 0x7c, 0x09, 0x39, 0x19, 0x5e, 0x26, 0xcd, 0xba, 0x30, 0xdd, 0x73, 0xd1, 0x1f, - 0x3b, 0xda, 0xe5, 0xdb, 0xef, 0xd4, 0xd2, 0xd2, 0xbc, 0x4c, 0x77, 0x5f, 0x0d, 0xa8, 0x7f, 0xd5, - 0x0e, 0xcd, 0x70, 0x10, 0x1c, 0xbd, 0x3f, 0xaa, 0x93, 0x16, 0x5e, 0x46, 0x77, 0xe3, 0x65, 0x70, - 0x2b, 0x27, 0x12, 0x56, 0x20, 0xae, 0xc0, 0xa6, 0xb5, 0x72, 0x92, 0x15, 0xd5, 0x01, 0xf8, 0x57, - 0x8e, 0xdc, 0xf8, 0xf1, 0xce, 0xb4, 0x82, 0x12, 0x7c, 0x79, 0x5f, 0x51, 0x5d, 0xcb, 0xbb, 0x64, - 0xbe, 0x52, 0x7e, 0x75, 0x5f, 0x89, 0x65, 0x20, 0x02, 0x6b, 0xc3, 0x7f, 0x84, 0x70, 0x68, 0xf0, - 0x05, 0xfb, 0xae, 0x78, 0xbb, 0x36, 0x9d, 0xe0, 0x3c, 0x3b, 0xf3, 0xbf, 0x7e, 0x94, 0xd3, 0x02, - 0x5e, 0x0e, 0x4c, 0xed, 0x7f, 0x31, 0x17, 0x6a, 0x81, 0x24, 0xb2, 0x51, 0xcb, 0xb4, 0x9e, 0x46, - 0x93, 0x5a, 0x7a, 0x09, 0x49, 0x39, 0x6e, 0x64, 0x00, 0x4a, 0x19, 0x67, 0xdf, 0x71, 0xcd, 0x1e, - 0xaf, 0x1c, 0xa6, 0x95, 0x39, 0x86, 0x9f, 0x59, 0x38, 0x0a, 0x6c, 0x6c, 0x3b, 0x21, 0xaf, 0x19, - 0xa6, 0xb6, 0xf0, 0x88, 0x0f, 0xed, 0x43, 0x85, 0x77, 0x22, 0x3b, 0xfd, 0x9e, 0x67, 0xda, 0xbc, - 0x18, 0x98, 0x56, 0x4c, 0x92, 0x11, 0x9d, 0xc1, 0x9d, 0xc4, 0x90, 0x38, 0xd6, 0xc5, 0x17, 0x09, - 0xdb, 0xf0, 0xbd, 0x7a, 0x5a, 0xb9, 0xd7, 0x09, 0x42, 0xdf, 0x87, 0xc5, 0x67, 0xcc, 0x35, 0x8f, - 0x76, 0xc5, 0x8b, 0x8c, 0xe9, 0x64, 0xc6, 0x4c, 0xcc, 0xba, 0xbc, 0xb6, 0x8c, 0x5f, 0xda, 0x74, - 0xfc, 0x1e, 0x7f, 0x19, 0x3c, 0xb5, 0x75, 0xb3, 0xdc, 0x2c, 0x6a, 0x03, 0x1e, 0xca, 0xc4, 0x74, - 0x9f, 0xb2, 0xd0, 0xd8, 0x78, 0x99, 0xa8, 0x4d, 0xb1, 0xa2, 0x23, 0x58, 0x4f, 0xc7, 0x0a, 0xaf, - 0x8a, 0x79, 0x65, 0x32, 0xad, 0xc4, 0x71, 0x02, 0x98, 0x07, 0x86, 0x17, 0x8e, 0x6f, 0xb7, 0x4c, - 0x3f, 0xbc, 0x12, 0x7b, 0x6f, 0xc0, 0xab, 0x92, 0xa9, 0x3d, 0x30, 0xcf, 0x8f, 0x6c, 0xb8, 0x7d, - 0xc6, 0xeb, 0x21, 0x37, 0xec, 0x5d, 0x0d, 0xff, 0x33, 0xa1, 0x4d, 0xc3, 0x90, 0xa9, 0xa1, 0xfa, - 0x12, 0xd2, 0xaf, 0x91, 0x23, 0x1f, 0xc0, 0x5a, 0x8e, 0x21, 0x7a, 0xf6, 0x69, 0x74, 0xd5, 0x66, - 0xab, 0x81, 0x9b, 0x58, 0x33, 0x70, 0x5d, 0x9a, 0x41, 0xab, 0x50, 0x49, 0x02, 0x0a, 0x68, 0x09, - 0x4a, 0x7a, 0xcb, 0x50, 0x75, 0x4d, 0x69, 0x48, 0xb3, 0xf2, 0xbf, 0x14, 0x60, 0xd3, 0x30, 0x4f, - 0x7b, 0x34, 0xd4, 0xbc, 0xd0, 0x39, 0x73, 0x44, 0x34, 0xf1, 0xb7, 0x41, 0xa9, 0x4b, 0xf3, 0xe8, - 0xd2, 0x6d, 0x04, 0x60, 0x1b, 0xf6, 0xc0, 0xf5, 0xa9, 0x69, 0xb3, 0x23, 0x45, 0x7c, 0x57, 0x94, - 0x04, 0xa1, 0x1d, 0x40, 0x2e, 0x13, 0x1a, 0x97, 0xf7, 0x51, 0xab, 0x22, 0x7a, 0x0c, 0x31, 0x06, - 0x83, 0xea, 0xb0, 0x9c, 0x82, 0x56, 0xe7, 0x53, 0x77, 0xb1, 0xc9, 0x09, 0x0a, 0x0a, 0xde, 0x48, - 0x48, 0x33, 0xc9, 0x7f, 0x53, 0x80, 0xcd, 0x09, 0xa4, 0xd3, 0xbd, 0xde, 0xd9, 0x86, 0xc5, 0xcb, - 0x6b, 0x6f, 0x56, 0x63, 0x34, 0x7a, 0x00, 0x92, 0xf8, 0x39, 0xba, 0xc9, 0x98, 0xe3, 0x7a, 0xca, - 0xc1, 0xa7, 0xa8, 0x6f, 0xfe, 0xa1, 0x00, 0x37, 0x8e, 0xe9, 0xe9, 0xaf, 0xde, 0x0e, 0xdf, 0x83, - 0x95, 0x14, 0x34, 0x10, 0x86, 0xd8, 0x18, 0xb9, 0x6d, 0x52, 0xff, 0x19, 0x62, 0xf9, 0x9f, 0x8b, - 0x50, 0x11, 0x25, 0x34, 0x9f, 0xfe, 0x54, 0x97, 0xb7, 0x16, 0x75, 0x9e, 0x45, 0x8d, 0xa5, 0xe1, - 0xe5, 0xed, 0x10, 0x84, 0xbe, 0x0f, 0x0b, 0x51, 0x4a, 0x10, 0x55, 0xcf, 0x5b, 0x71, 0xc5, 0x3b, - 0xfa, 0xca, 0x4e, 0x4b, 0x39, 0x61, 0x2e, 0x1e, 0xfd, 0x3f, 0x57, 0xdb, 0x50, 0x8c, 0x4e, 0x9b, - 0x08, 0x2e, 0xb4, 0x0b, 0x37, 0x42, 0xdf, 0x74, 0x83, 0xe8, 0x1f, 0xd8, 0xd2, 0x37, 0xc0, 0x45, - 0x32, 0x16, 0x37, 0xfe, 0xc6, 0x7c, 0x61, 0xfa, 0x1b, 0xf3, 0x71, 0x37, 0xce, 0x8b, 0xfc, 0x7b, - 0x59, 0x30, 0xbf, 0xdd, 0x1b, 0xb0, 0x2c, 0xd0, 0xf7, 0x3d, 0xef, 0x8c, 0xda, 0xe2, 0xed, 0x63, - 0x1a, 0x88, 0x6e, 0x27, 0xde, 0x74, 0x44, 0x8f, 0x53, 0x87, 0x63, 0xf9, 0xdf, 0x0b, 0xb0, 0x3e, - 0x46, 0x01, 0x08, 0xc1, 0x4a, 0x47, 0x7b, 0xac, 0xe9, 0xc7, 0x9a, 0x80, 0x48, 0x33, 0x68, 0x05, - 0xa0, 0x45, 0xf4, 0x1a, 0x6e, 0xb7, 0x55, 0xed, 0x40, 0x2a, 0xa0, 0x12, 0x14, 0xdb, 0x58, 0x33, - 0xa4, 0x59, 0x46, 0xad, 0x61, 0x5c, 0xef, 0x1a, 0x7a, 0x57, 0xa9, 0xd5, 0x70, 0xcb, 0x88, 0x1e, - 0xf3, 0xd4, 0x74, 0x96, 0x3f, 0x0c, 0x2c, 0x15, 0xd1, 0x4d, 0x40, 0x35, 0xbd, 0xd3, 0xa8, 0x77, - 0x59, 0x9e, 0x19, 0xc2, 0xf9, 0xc3, 0x1e, 0x82, 0xf7, 0x3b, 0x5a, 0x1d, 0xd7, 0xa5, 0x05, 0x54, - 0x81, 0x45, 0xfc, 0xa4, 0xa5, 0x12, 0x5c, 0x97, 0x16, 0x23, 0xd4, 0xe7, 0xb8, 0xc6, 0x92, 0x4f, - 0x09, 0x2d, 0x43, 0xb9, 0xa6, 0x68, 0x35, 0xdc, 0x68, 0xe0, 0xba, 0x54, 0x46, 0x1b, 0xb0, 0x76, - 0xac, 0xa8, 0x86, 0xaa, 0x1d, 0x74, 0xf7, 0x75, 0xd2, 0x6d, 0x29, 0x27, 0x98, 0x48, 0xc0, 0x04, - 0x08, 0xb0, 0x54, 0x91, 0x7f, 0xef, 0x16, 0xac, 0xa4, 0x3d, 0x6e, 0x14, 0xc6, 0xb3, 0xbf, 0xf4, - 0x30, 0xc6, 0x19, 0x57, 0x7c, 0x67, 0x6c, 0x4c, 0xf0, 0x6c, 0x1e, 0xbf, 0xdb, 0x1b, 0xe7, 0x91, - 0x99, 0x6c, 0x30, 0x9f, 0xff, 0xd7, 0xc0, 0x9b, 0xb0, 0xe0, 0x9c, 0xbb, 0x9e, 0x1f, 0xb5, 0x07, - 0x4a, 0x44, 0x8c, 0xf8, 0xb3, 0xdb, 0xd0, 0xf4, 0x7d, 0x6a, 0xf3, 0xde, 0x6a, 0x89, 0xc4, 0x43, - 0x96, 0x26, 0x4e, 0x7d, 0xcf, 0xb4, 0x2d, 0x33, 0x08, 0x79, 0x6d, 0x51, 0x22, 0x23, 0x00, 0x73, - 0x9f, 0xfe, 0x20, 0xb8, 0xe0, 0x1d, 0xce, 0xf5, 0xc8, 0x7d, 0xe2, 0x31, 0xfa, 0x00, 0x36, 0x78, - 0x79, 0x51, 0x73, 0xfa, 0x17, 0xd4, 0x0f, 0xe9, 0xf3, 0x50, 0x5c, 0x33, 0xdf, 0xe0, 0x8d, 0xce, - 0xf1, 0x48, 0xf6, 0xbd, 0xcb, 0x41, 0x2f, 0x74, 0xf8, 0xf7, 0x36, 0xa2, 0xef, 0x0d, 0x01, 0x6c, - 0x9e, 0x03, 0xbf, 0xc7, 0xef, 0x0a, 0xa2, 0x7f, 0xd4, 0x8b, 0x87, 0x8c, 0x6f, 0xe0, 0xf7, 0xc4, - 0x85, 0xfd, 0x66, 0xc4, 0x37, 0x04, 0xa0, 0x13, 0x58, 0x15, 0x4a, 0x6f, 0x87, 0x83, 0x53, 0xfe, - 0x9f, 0x1b, 0xd1, 0xa6, 0xf9, 0xee, 0xd4, 0x9a, 0xee, 0xec, 0xf1, 0x37, 0x6e, 0x59, 0x39, 0x2c, - 0x11, 0x59, 0x3d, 0x6a, 0xfa, 0x4d, 0xb6, 0x1c, 0x7e, 0x78, 0x2f, 0x91, 0x04, 0x24, 0x52, 0xc3, - 0x90, 0x65, 0xf8, 0xd8, 0x27, 0xa8, 0xde, 0xe6, 0x97, 0x1d, 0xe3, 0x91, 0x4c, 0xb1, 0xf6, 0x40, - 0xf4, 0x97, 0xef, 0xf0, 0x9c, 0x3a, 0x1c, 0x33, 0x23, 0x46, 0x65, 0x65, 0xf5, 0x6e, 0xf4, 0x72, - 0x29, 0x1a, 0xa1, 0x0f, 0x98, 0xf9, 0x87, 0xb9, 0xab, 0xfa, 0x5a, 0xaa, 0x49, 0x9e, 0xc8, 0x6a, - 0x24, 0x49, 0x86, 0x0e, 0x61, 0xed, 0x8c, 0x55, 0xb9, 0xc9, 0xae, 0x4e, 0xf5, 0xde, 0x0b, 0x1b, - 0x3e, 0x79, 0x26, 0xf4, 0x88, 0x1d, 0x32, 0xbc, 0x90, 0xda, 0x89, 0x6f, 0x55, 0x5f, 0x9f, 0x38, - 0x8b, 0x3c, 0xb1, 0xec, 0xc0, 0xe6, 0x04, 0x1f, 0x47, 0x65, 0x98, 0xc7, 0x84, 0xe8, 0x44, 0x9a, - 0x61, 0x81, 0xdc, 0xc2, 0x5a, 0x3d, 0x4a, 0x34, 0x2b, 0x00, 0x6d, 0x4c, 0x8e, 0x30, 0xe9, 0x2a, - 0xb5, 0xc7, 0xd2, 0x2c, 0x92, 0x60, 0xa9, 0x8e, 0x1b, 0xea, 0x11, 0x26, 0x27, 0x1c, 0x32, 0xc7, - 0x52, 0x11, 0xc1, 0x4a, 0x3d, 0x7a, 0x35, 0xd8, 0x6a, 0x28, 0x27, 0xb8, 0x2e, 0xcd, 0xcb, 0xbf, - 0xbb, 0x06, 0xb7, 0x26, 0x5a, 0x99, 0x7d, 0x42, 0xa4, 0x38, 0x69, 0x26, 0xf1, 0x3a, 0x96, 0x7f, - 0xae, 0xa6, 0xb6, 0x0e, 0x31, 0x31, 0xf0, 0x13, 0x96, 0xdd, 0x56, 0xa1, 0xb2, 0xdf, 0x61, 0xd5, - 0x52, 0x8b, 0xe8, 0xfa, 0xbe, 0x34, 0x87, 0xee, 0xc0, 0xa6, 0xa6, 0x6b, 0xdd, 0x23, 0x4c, 0xd4, - 0x7d, 0x95, 0xa5, 0x3d, 0xa2, 0x68, 0x6d, 0x95, 0x55, 0x46, 0x52, 0x11, 0xdd, 0x82, 0x8d, 0x8e, - 0x36, 0x0e, 0x35, 0x8f, 0x36, 0x61, 0x7d, 0x1c, 0x62, 0x01, 0x55, 0xe1, 0xc6, 0x10, 0xd1, 0xd0, - 0x8f, 0xbb, 0xf1, 0xbc, 0x16, 0xd1, 0x1a, 0x2c, 0x0f, 0x31, 0x87, 0xea, 0xc1, 0xa1, 0x54, 0x42, - 0x77, 0xa1, 0x3a, 0x04, 0xa9, 0x9a, 0x6a, 0xa8, 0x4a, 0x63, 0xc8, 0x50, 0x4e, 0x89, 0x8a, 0xb1, - 0x0d, 0xfd, 0x58, 0x02, 0x36, 0xb1, 0x1c, 0x86, 0x8b, 0xac, 0xa0, 0xfb, 0xf0, 0xfa, 0x98, 0x89, - 0x75, 0x15, 0xed, 0x84, 0xa5, 0x74, 0xfe, 0x8c, 0x7a, 0xe9, 0x05, 0x44, 0x5c, 0xd2, 0xf2, 0x24, - 0x22, 0x86, 0x65, 0x54, 0x6c, 0x26, 0x2b, 0xe8, 0xdb, 0x70, 0xff, 0x3a, 0xa2, 0x78, 0x31, 0xab, - 0xe8, 0x2d, 0x90, 0xc7, 0x11, 0xc6, 0x3b, 0x93, 0x10, 0x28, 0x4d, 0xa2, 0x63, 0xaa, 0x4c, 0xc8, - 0x5b, 0x9b, 0x34, 0x3b, 0xb6, 0xc0, 0x58, 0x18, 0x9a, 0x34, 0xbb, 0x98, 0x28, 0x96, 0xb6, 0xce, - 0xdc, 0xf0, 0x80, 0xe8, 0x9d, 0x56, 0xb7, 0x46, 0xb0, 0x62, 0x60, 0xe9, 0x06, 0x53, 0xbe, 0x80, - 0x1c, 0x2a, 0xda, 0x01, 0xee, 0xb6, 0x3b, 0x7b, 0x6c, 0x03, 0x93, 0x36, 0xd8, 0x7e, 0x95, 0xc2, - 0xa8, 0x35, 0x5d, 0x93, 0x6e, 0x32, 0x5b, 0xa6, 0xc1, 0xda, 0x91, 0x6a, 0xe0, 0x6e, 0x43, 0xd5, - 0x1e, 0x4b, 0x9b, 0x39, 0x6c, 0x1d, 0xb7, 0x6b, 0x44, 0xe5, 0x25, 0xb8, 0x54, 0x65, 0xf6, 0x4c, - 0x61, 0x09, 0x6e, 0x1b, 0x44, 0xad, 0x19, 0xd2, 0xad, 0x1c, 0x4a, 0xd1, 0x34, 0xbd, 0xa3, 0xd5, - 0xb0, 0x74, 0x7b, 0x84, 0x6a, 0x29, 0xc4, 0x50, 0x6b, 0x6a, 0x4b, 0xd1, 0x8c, 0xae, 0x52, 0xaf, - 0x4b, 0x77, 0x46, 0x9f, 0x4b, 0xa2, 0x08, 0x6e, 0xea, 0x47, 0x58, 0xba, 0x8b, 0x5e, 0x83, 0x5b, - 0x79, 0x6c, 0x8b, 0xe8, 0x4d, 0xdd, 0xc0, 0xd2, 0x6b, 0xe3, 0x99, 0xeb, 0x98, 0x63, 0xef, 0x8d, - 0xc7, 0x46, 0x8b, 0x95, 0x5e, 0x67, 0xf1, 0x94, 0xc7, 0x36, 0xb0, 0x72, 0x84, 0xa5, 0x2d, 0x66, - 0xb3, 0x3c, 0x52, 0xac, 0x4b, 0xeb, 0x34, 0xf7, 0x30, 0x91, 0xde, 0x40, 0x37, 0x40, 0xda, 0x23, - 0xba, 0x52, 0xaf, 0x29, 0x6d, 0x23, 0x36, 0x87, 0x1c, 0xfd, 0xe3, 0x5a, 0x0c, 0x65, 0x6b, 0xbc, - 0x9f, 0x26, 0x14, 0x6b, 0x7b, 0x93, 0xdb, 0x0d, 0x6b, 0x98, 0xa8, 0x35, 0x56, 0x9f, 0xa8, 0xfb, - 0x6a, 0x4d, 0xe1, 0x4a, 0xfe, 0x16, 0xc3, 0xe0, 0x5d, 0xdc, 0x55, 0xeb, 0x58, 0x33, 0x54, 0xe3, - 0x44, 0x7c, 0xb8, 0x2e, 0xbd, 0xc5, 0x84, 0x33, 0x0c, 0xd6, 0x6a, 0xe4, 0xa4, 0xc5, 0x6a, 0x94, - 0x6f, 0x33, 0x23, 0xd7, 0x94, 0x46, 0xa3, 0xdb, 0x54, 0xdb, 0x6d, 0x5c, 0xef, 0x1e, 0xe9, 0x6a, - 0x0d, 0x4b, 0xdb, 0x39, 0x30, 0xff, 0x07, 0xb7, 0xef, 0x30, 0x9d, 0xa8, 0x5a, 0x5d, 0x3d, 0x52, - 0xeb, 0x1d, 0xa5, 0x91, 0x59, 0xd1, 0x83, 0x91, 0x73, 0xd5, 0x31, 0x2f, 0x95, 0x7e, 0x8d, 0x39, - 0x79, 0x04, 0x89, 0xad, 0xd9, 0x6d, 0xea, 0x75, 0x3c, 0x4c, 0x6e, 0x7b, 0x91, 0x85, 0xdf, 0x66, - 0xda, 0x4c, 0x7e, 0x2e, 0xe2, 0x89, 0xe6, 0xf2, 0xce, 0x04, 0x24, 0x9f, 0xd1, 0x0e, 0x2b, 0xd2, - 0xe2, 0x5a, 0x30, 0x91, 0x00, 0xdf, 0x65, 0x79, 0x2b, 0x86, 0x27, 0x13, 0xe1, 0x43, 0xf4, 0x36, - 0x6c, 0xc7, 0x08, 0x1e, 0x29, 0x4a, 0x8d, 0x87, 0x4a, 0x94, 0xce, 0xbb, 0x9d, 0x16, 0x7f, 0x95, - 0xbd, 0xaf, 0xa8, 0xac, 0x66, 0x7b, 0x0f, 0xed, 0xc0, 0x83, 0x17, 0x53, 0x0f, 0xab, 0xc1, 0x5d, - 0xf4, 0x3e, 0xbc, 0x3b, 0x2d, 0x7d, 0xfc, 0x91, 0xf7, 0xd1, 0x77, 0xe1, 0xbd, 0x6b, 0x98, 0x08, - 0xae, 0x61, 0xb6, 0x6f, 0x74, 0xc5, 0xe6, 0xd2, 0x6d, 0x63, 0xa3, 0xd3, 0x92, 0x3e, 0x40, 0x9f, - 0xc1, 0xc7, 0xd3, 0xb0, 0xb5, 0x3b, 0x35, 0x56, 0xff, 0x76, 0x95, 0x7d, 0x03, 0x93, 0xee, 0xa1, - 0x5a, 0xab, 0x75, 0x5a, 0xd2, 0x77, 0xd1, 0x77, 0xe0, 0x5b, 0x31, 0xb7, 0x60, 0x54, 0x6a, 0x35, - 0xbd, 0xa3, 0x19, 0x91, 0x7c, 0xe6, 0x68, 0xaa, 0x56, 0xc7, 0x44, 0xfa, 0x10, 0x6d, 0xc3, 0x9b, - 0x19, 0xd2, 0x36, 0xd6, 0xea, 0xdd, 0x18, 0x36, 0xa4, 0xfc, 0x08, 0x3d, 0x80, 0xb7, 0xae, 0xa3, - 0xe4, 0xd1, 0x13, 0xb9, 0xe9, 0xc7, 0x2c, 0x48, 0x32, 0xb4, 0x04, 0x7f, 0xd1, 0xc1, 0x6d, 0x16, - 0x82, 0xb5, 0x86, 0xaa, 0xe1, 0xba, 0xf4, 0x09, 0x92, 0xe1, 0xde, 0x04, 0xa2, 0xb8, 0xe8, 0xfe, - 0x75, 0xf4, 0x26, 0x6c, 0x4d, 0xa0, 0x19, 0x55, 0xdf, 0x9f, 0xb2, 0xf5, 0xee, 0xa9, 0x5f, 0x8e, - 0xdb, 0x00, 0xbb, 0x86, 0xde, 0x62, 0x59, 0x72, 0x4f, 0x37, 0x0c, 0xbd, 0x29, 0x7d, 0x76, 0x1d, - 0x69, 0x44, 0xc3, 0xa8, 0x0d, 0xbd, 0x25, 0x7d, 0x8f, 0x87, 0xab, 0xfa, 0x65, 0x57, 0xd5, 0x0c, - 0x12, 0x81, 0xbe, 0xcf, 0xc3, 0x75, 0x08, 0x12, 0x32, 0x7f, 0x80, 0xd6, 0x61, 0x95, 0x41, 0x35, - 0xa5, 0x89, 0x45, 0xdc, 0x48, 0x8f, 0x58, 0x38, 0x31, 0x20, 0x8b, 0x68, 0x26, 0xb2, 0xa6, 0x6b, - 0xed, 0x4e, 0x93, 0x95, 0x0c, 0xad, 0x96, 0xa4, 0xa0, 0x7b, 0x70, 0x9b, 0x61, 0x8d, 0x63, 0xbd, - 0x6b, 0xa8, 0x98, 0x74, 0x9b, 0xea, 0x01, 0x51, 0xe2, 0x09, 0x4b, 0x7b, 0xe8, 0x0d, 0x78, 0x6d, - 0x02, 0x5e, 0x7c, 0xb5, 0xc6, 0x4e, 0x20, 0xfa, 0x11, 0x26, 0x6d, 0xf5, 0x4b, 0x5c, 0x97, 0xea, - 0xcc, 0x90, 0xa9, 0x1c, 0xab, 0xe9, 0xdd, 0x7d, 0xae, 0x2b, 0xcd, 0x68, 0x9c, 0xb0, 0x43, 0xc9, - 0xb1, 0x42, 0x98, 0x1f, 0xe3, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x2d, 0xd8, 0x08, 0x69, 0x70, - 0x4a, 0x00, 0x00, + // 6235 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x7b, 0x4b, 0x6f, 0x1c, 0x49, + 0x72, 0x30, 0x9b, 0xcf, 0x66, 0x34, 0x1f, 0xc5, 0xa4, 0x28, 0xf6, 0x48, 0x1a, 0x0d, 0xa7, 0x67, + 0x76, 0x96, 0xab, 0x6f, 0x46, 0xa3, 0xe1, 0x68, 0x67, 0x34, 0x3b, 0xfb, 0x50, 0xb1, 0xbb, 0x48, + 0x96, 0xd4, 0x5d, 0xd5, 0x93, 0x5d, 0x4d, 0x8a, 0x83, 0xc5, 0xd7, 0x28, 0x55, 0x25, 0xc9, 0xfa, + 0x54, 0x5d, 0xd5, 0x53, 0x55, 0xad, 0x11, 0xf7, 0xf0, 0x7d, 0xc0, 0xb7, 0x80, 0x6d, 0x18, 0x36, + 0xb0, 0x37, 0xbf, 0x4e, 0x06, 0x6c, 0xff, 0x04, 0x5f, 0x0c, 0x1b, 0x30, 0x0c, 0x5f, 0x8c, 0x05, + 0x0c, 0x1f, 0x7d, 0xf1, 0xd1, 0x8f, 0xab, 0x6f, 0xf6, 0xc9, 0xc8, 0xac, 0xac, 0x77, 0x35, 0xd5, + 0xd2, 0xec, 0xc3, 0xf0, 0xa9, 0x3b, 0x23, 0x23, 0x22, 0x33, 0x23, 0x22, 0x23, 0x23, 0x23, 0xa3, + 0x60, 0xd9, 0x24, 0x67, 0x77, 0x47, 0x9e, 0x1b, 0xb8, 0x68, 0x81, 0xfd, 0x34, 0xda, 0x50, 0x3f, + 0xba, 0x34, 0x3d, 0x3d, 0x20, 0xe6, 0x17, 0x63, 0xcb, 0x78, 0x86, 0xc9, 0xc8, 0xbe, 0xdc, 0x1f, + 0x07, 0x81, 0xeb, 0xa0, 0x1d, 0xa8, 0x99, 0x96, 0x3f, 0xb2, 0xf5, 0x4b, 0x8d, 0xbc, 0x08, 0xea, + 0x95, 0x9d, 0xca, 0xee, 0x32, 0x4e, 0x83, 0xd0, 0x1a, 0xcc, 0x5a, 0x66, 0x7d, 0x96, 0x75, 0xcc, + 0x5a, 0x66, 0xe3, 0x10, 0x36, 0x22, 0x6e, 0x7d, 0xdc, 0x9e, 0x9a, 0x8d, 0x00, 0x73, 0x63, 0xcf, + 0xe6, 0x7c, 0xe8, 0xdf, 0xc6, 0x13, 0x40, 0x11, 0xa3, 0xa6, 0x6e, 0xdb, 0x53, 0x73, 0xda, 0x81, + 0xda, 0xe8, 0xc2, 0x75, 0x88, 0x32, 0x1e, 0x3e, 0x25, 0x1e, 0xe7, 0x98, 0x06, 0x35, 0x7e, 0x63, + 0x16, 0xae, 0x47, 0xac, 0x35, 0x32, 0x1c, 0xd9, 0x7a, 0x40, 0x38, 0xfb, 0x6b, 0xb0, 0x60, 0x39, + 0x26, 0x79, 0x51, 0x9f, 0xdf, 0xa9, 0xec, 0xae, 0xe2, 0xb0, 0x81, 0x3a, 0x20, 0x7c, 0x95, 0x93, + 0x0c, 0x1b, 0xb9, 0xb6, 0xf7, 0x56, 0x28, 0xca, 0xbb, 0x93, 0x04, 0x78, 0x34, 0x83, 0x0b, 0xa4, + 0xe8, 0x01, 0x2c, 0x8f, 0x3d, 0xbe, 0x20, 0x36, 0xbf, 0xda, 0x5e, 0x3d, 0xc7, 0x27, 0x16, 0xdd, + 0xd1, 0x0c, 0x4e, 0x90, 0xd1, 0xe7, 0x00, 0x46, 0x2c, 0x8b, 0xfa, 0x1c, 0x23, 0x7d, 0x23, 0x47, + 0x9a, 0x08, 0xeb, 0x68, 0x06, 0xa7, 0xd0, 0xf7, 0x05, 0x58, 0xbb, 0xe0, 0x38, 0x21, 0xa4, 0x61, + 0x82, 0x50, 0xd0, 0xf8, 0xc3, 0xa2, 0x80, 0x6b, 0x7b, 0xb7, 0xa3, 0x31, 0xac, 0xf3, 0x0b, 0xfb, + 0xb2, 0x17, 0x78, 0x63, 0x23, 0x18, 0x7b, 0xc4, 0xec, 0x10, 0xdf, 0xd7, 0xcf, 0xc9, 0xd5, 0x16, + 0xf1, 0xff, 0x60, 0x39, 0xb1, 0x84, 0x6f, 0xce, 0xfe, 0x5e, 0x62, 0x29, 0x2f, 0xa7, 0x64, 0x96, + 0xf4, 0xb3, 0x0a, 0x40, 0xca, 0x84, 0xbe, 0xf9, 0x14, 0x1e, 0x16, 0x4d, 0x6c, 0x0a, 0x0e, 0x69, + 0x13, 0xfc, 0xa7, 0x0a, 0xac, 0x4d, 0x65, 0x7a, 0xd2, 0x44, 0xd3, 0xdb, 0xe6, 0xe3, 0x4d, 0x65, + 0x72, 0xf7, 0x8a, 0x26, 0x27, 0x70, 0xfa, 0x09, 0xa6, 0xf6, 0x71, 0x89, 0xa9, 0x6d, 0x70, 0x92, + 0x89, 0x26, 0x56, 0x85, 0xc5, 0xa7, 0xa1, 0x69, 0x05, 0x50, 0x6d, 0xbb, 0x86, 0x1e, 0x58, 0xae, + 0x83, 0x76, 0x61, 0xdd, 0x24, 0xe7, 0x1e, 0x21, 0x7e, 0x5b, 0x0f, 0xac, 0x60, 0x6c, 0x12, 0xb6, + 0x84, 0x0a, 0xce, 0x83, 0xd1, 0x1d, 0x10, 0x22, 0x90, 0xeb, 0x9c, 0x87, 0xa8, 0xb3, 0x0c, 0xb5, + 0x00, 0x47, 0x08, 0xe6, 0x1d, 0x7d, 0x48, 0xd8, 0xd4, 0x96, 0x31, 0xfb, 0xdf, 0x78, 0x07, 0x16, + 0xba, 0xae, 0xe5, 0x04, 0x68, 0x05, 0x2a, 0x2f, 0x58, 0x4f, 0x05, 0x57, 0x5e, 0xd0, 0xd6, 0x25, + 0x13, 0x6b, 0x05, 0x57, 0x2e, 0x1b, 0xbf, 0x55, 0x81, 0x2d, 0xd9, 0x09, 0x88, 0xa7, 0x1b, 0x81, + 0xf5, 0x9c, 0x88, 0x8e, 0xe3, 0x06, 0xe1, 0x44, 0x3f, 0x81, 0xf5, 0x91, 0x6b, 0x5f, 0x9e, 0xbb, + 0xce, 0x31, 0xf1, 0x02, 0xcb, 0x20, 0x7e, 0xbd, 0xb2, 0x33, 0xb7, 0x5b, 0xdb, 0x5b, 0xe1, 0x0b, + 0x67, 0xcc, 0x71, 0x1e, 0x09, 0x7d, 0x00, 0x55, 0x9b, 0x2f, 0x96, 0x0b, 0x77, 0x9d, 0x13, 0x44, + 0x32, 0x38, 0x9a, 0xc1, 0x31, 0x0a, 0x95, 0x12, 0x1d, 0xda, 0x75, 0x1a, 0xff, 0x59, 0x81, 0x9a, + 0x68, 0x32, 0x45, 0xc9, 0xce, 0x99, 0x8b, 0xde, 0x83, 0x35, 0xdd, 0x7c, 0x4e, 0xd9, 0xfa, 0xc4, + 0x53, 0xe8, 0xea, 0x42, 0x07, 0x97, 0x83, 0xa2, 0x23, 0x58, 0x1e, 0x12, 0xd3, 0xd2, 0xb5, 0xcb, + 0x51, 0x28, 0xa0, 0xb5, 0xbd, 0x3b, 0x7c, 0xc4, 0x14, 0xbb, 0xbb, 0x62, 0x6b, 0x80, 0xa5, 0x6e, + 0xfb, 0x74, 0x20, 0x2b, 0x07, 0xea, 0xa0, 0x23, 0xb5, 0x64, 0x51, 0x3b, 0xed, 0x4a, 0x38, 0x21, + 0x46, 0xef, 0xc2, 0xea, 0xff, 0x19, 0x91, 0x73, 0xed, 0x62, 0x3c, 0x7c, 0xea, 0xe8, 0x96, 0x5d, + 0x17, 0x76, 0x2a, 0xbb, 0x2b, 0x38, 0x0b, 0x44, 0x75, 0x58, 0x32, 0xf4, 0x11, 0x5b, 0xdf, 0x06, + 0x9b, 0x50, 0xd4, 0x6c, 0x7c, 0x06, 0xdb, 0x13, 0x46, 0x41, 0x55, 0x98, 0x57, 0x54, 0x45, 0x12, + 0x66, 0xd0, 0x32, 0x2c, 0xc8, 0x1d, 0xf1, 0x50, 0x12, 0x2a, 0xf4, 0xef, 0xb1, 0xdc, 0x92, 0x54, + 0x61, 0xb6, 0xf1, 0x67, 0xf3, 0x50, 0x6b, 0xba, 0x4e, 0x40, 0x5e, 0x04, 0x6c, 0xf1, 0x37, 0xa0, + 0xea, 0x07, 0xba, 0xf3, 0x13, 0x5d, 0x36, 0xf9, 0xb2, 0xe3, 0x36, 0x73, 0xea, 0x3a, 0x95, 0xb6, + 0x35, 0xd2, 0x9d, 0x20, 0x76, 0xea, 0x09, 0x08, 0xdd, 0x87, 0xd5, 0xaf, 0xc6, 0x6e, 0x10, 0xef, + 0x37, 0x6e, 0xb2, 0x6b, 0x5c, 0x2c, 0xd1, 0x2e, 0xcc, 0x22, 0xa1, 0x5b, 0xb0, 0xec, 0x91, 0xa1, + 0x1b, 0x90, 0x47, 0x96, 0xc9, 0x2c, 0x64, 0x19, 0x27, 0x00, 0xd4, 0x80, 0x95, 0x21, 0x71, 0xe8, + 0x3a, 0x89, 0x49, 0x11, 0xd6, 0x77, 0xe6, 0x76, 0x97, 0x71, 0x06, 0x46, 0x4d, 0xd6, 0x70, 0x9d, + 0xe7, 0xc4, 0xf3, 0x2d, 0xd7, 0xe9, 0xb9, 0x63, 0xcf, 0x20, 0x75, 0xc4, 0x18, 0x15, 0xe0, 0x54, + 0xbd, 0x09, 0xac, 0xa5, 0x07, 0x7a, 0x7d, 0x93, 0x49, 0x3b, 0x07, 0x45, 0x9f, 0xc0, 0xf5, 0x14, + 0x84, 0xd8, 0xfa, 0x65, 0x8f, 0x18, 0xae, 0x63, 0xfa, 0xf5, 0x6b, 0xcc, 0x37, 0x4c, 0xe8, 0xa5, + 0x1b, 0xed, 0xcc, 0xf5, 0xbe, 0xd6, 0x3d, 0xd3, 0x72, 0xce, 0x7b, 0x86, 0xeb, 0x91, 0xfa, 0x16, + 0x23, 0xc8, 0x83, 0xa9, 0x3c, 0x2d, 0xff, 0x20, 0x04, 0x12, 0xb3, 0x7e, 0x7d, 0xa7, 0xb2, 0x5b, + 0xc5, 0x69, 0x10, 0xba, 0x0b, 0xd5, 0x50, 0x54, 0xa2, 0x59, 0xdf, 0x66, 0xa2, 0x44, 0x45, 0x0b, + 0xc3, 0x31, 0x0e, 0xfa, 0x0c, 0xd6, 0x46, 0xb6, 0x6e, 0x90, 0x0b, 0xd7, 0x36, 0x89, 0xf7, 0x98, + 0x5c, 0xd6, 0xeb, 0x19, 0x9f, 0xc1, 0x25, 0xfe, 0x98, 0x5c, 0xe2, 0x1c, 0x22, 0xba, 0x0d, 0x40, + 0x5e, 0x8c, 0x2c, 0x2f, 0xdc, 0x40, 0x6f, 0xb0, 0x19, 0xa7, 0x20, 0x8d, 0xdf, 0xae, 0xc0, 0xad, + 0x1e, 0x71, 0x42, 0xec, 0x96, 0xe5, 0x07, 0x9e, 0xf5, 0x74, 0x4c, 0x7b, 0x22, 0x2d, 0xd6, 0x61, + 0xe9, 0xdc, 0x73, 0xc7, 0xa3, 0xd8, 0x70, 0xa2, 0x26, 0xea, 0xc2, 0x3b, 0xfa, 0x0b, 0xd7, 0x76, + 0x03, 0xfb, 0x2a, 0x06, 0xcc, 0x9e, 0x56, 0xf0, 0x34, 0xa8, 0x8d, 0xbf, 0x5a, 0x84, 0x15, 0x79, + 0xa8, 0x9f, 0x93, 0x68, 0x70, 0x1e, 0xb9, 0x54, 0xe2, 0xc8, 0x85, 0x1a, 0xf2, 0xd0, 0x1a, 0x92, + 0x20, 0xda, 0x9c, 0xcb, 0x38, 0x6e, 0xa7, 0x77, 0xd2, 0x5c, 0x66, 0x27, 0x51, 0x29, 0x9c, 0x59, + 0x36, 0xe9, 0x5d, 0xe8, 0x7b, 0xdf, 0xfd, 0x84, 0xd9, 0xe2, 0x0a, 0x4e, 0x41, 0xa2, 0xfe, 0x36, + 0x71, 0xce, 0x83, 0x8b, 0xfa, 0xc2, 0x4e, 0x65, 0x77, 0x1e, 0xa7, 0x20, 0xe8, 0x3a, 0x2c, 0x5e, + 0x10, 0xeb, 0xfc, 0x22, 0xa8, 0x2f, 0x32, 0x09, 0xf2, 0x16, 0x3d, 0x57, 0xbe, 0xb6, 0xcc, 0xe0, + 0xa2, 0xbe, 0x14, 0x9e, 0x2b, 0xac, 0xc1, 0xe6, 0x48, 0x9d, 0x00, 0x55, 0x54, 0x95, 0x8d, 0x15, + 0xb7, 0xa9, 0x4f, 0xa0, 0x7c, 0x25, 0xc7, 0xe0, 0x93, 0x59, 0x0e, 0x7d, 0x42, 0x06, 0x88, 0x34, + 0xb8, 0x6e, 0x95, 0x79, 0x51, 0xbf, 0x0e, 0xcc, 0x67, 0xde, 0xe2, 0x8a, 0x2f, 0x75, 0xb5, 0x78, + 0x02, 0x2d, 0x5d, 0xa5, 0x69, 0x79, 0xc4, 0x08, 0xba, 0x7a, 0x70, 0x51, 0xaf, 0x31, 0x11, 0xa5, + 0x20, 0xe8, 0x7d, 0xd8, 0x88, 0xe6, 0xa9, 0x59, 0x43, 0xe2, 0x07, 0xfa, 0x70, 0x54, 0x5f, 0xd9, + 0xa9, 0xec, 0xce, 0xe1, 0x62, 0xc7, 0x94, 0xde, 0xed, 0x3e, 0xd4, 0x8c, 0xc4, 0x0f, 0x31, 0x0f, + 0x97, 0x58, 0x7b, 0xca, 0x43, 0xe1, 0x34, 0x1a, 0xdd, 0xf8, 0x67, 0x96, 0xe7, 0x07, 0x3d, 0x43, + 0x77, 0x7a, 0x96, 0x49, 0x0c, 0xdd, 0x63, 0x1b, 0x7f, 0x05, 0x17, 0xe0, 0x6c, 0x63, 0x46, 0x30, + 0xae, 0xc0, 0x4d, 0xbe, 0x31, 0xb3, 0x60, 0xba, 0x3e, 0xf2, 0x62, 0x44, 0x3c, 0x8b, 0x3a, 0x99, + 0x43, 0x6e, 0xd4, 0xe1, 0xae, 0x2f, 0x76, 0x50, 0x07, 0xe5, 0x1b, 0xba, 0xe3, 0x47, 0xe3, 0x6f, + 0xb1, 0xf1, 0x33, 0x30, 0xba, 0xd5, 0xfd, 0x98, 0xbf, 0x5f, 0xbf, 0xbe, 0x33, 0xb7, 0xbb, 0x8a, + 0xd3, 0x20, 0xb4, 0x07, 0xd7, 0x86, 0x96, 0xf9, 0xc5, 0x58, 0xb7, 0xad, 0xe0, 0xf2, 0x20, 0xb1, + 0xc1, 0x6d, 0xc6, 0xad, 0xb4, 0x0f, 0x3d, 0x80, 0xed, 0x2c, 0x3c, 0xb1, 0x96, 0x3a, 0x23, 0x9b, + 0xd4, 0xdd, 0xf8, 0xbf, 0xb0, 0x46, 0x65, 0xaa, 0x1b, 0x41, 0xb4, 0x83, 0x92, 0x98, 0x3e, 0x75, + 0xe4, 0xa5, 0x41, 0xd4, 0x86, 0x9f, 0x1b, 0xba, 0x67, 0x32, 0xfd, 0x2d, 0xe3, 0xb0, 0xf1, 0x7a, + 0x7a, 0x6b, 0xfc, 0x74, 0x16, 0xd6, 0xa3, 0x63, 0x39, 0x9a, 0xc1, 0xaf, 0x2c, 0x42, 0xa1, 0xfb, + 0x5f, 0x37, 0x4d, 0x8f, 0xf8, 0x3e, 0x3f, 0x6e, 0xa2, 0x66, 0xe4, 0x47, 0x16, 0x12, 0x3f, 0xf2, + 0x4b, 0xb4, 0xde, 0xc6, 0xbf, 0x2d, 0xc0, 0xa6, 0xf4, 0x22, 0xa0, 0x9e, 0xce, 0xa4, 0x31, 0x6d, + 0x24, 0x09, 0x04, 0xf3, 0x41, 0x72, 0xb1, 0x62, 0xff, 0xa9, 0x7e, 0x86, 0x7a, 0x60, 0x5c, 0x84, + 0x98, 0xd1, 0xe1, 0x9b, 0x02, 0x51, 0x3b, 0x34, 0x74, 0xc7, 0x75, 0x2c, 0x43, 0xb7, 0xfb, 0x9e, + 0xcd, 0x97, 0x96, 0x81, 0x31, 0x2d, 0x13, 0xdf, 0xf0, 0xac, 0xd0, 0xfb, 0x2d, 0x70, 0x2d, 0x27, + 0x20, 0xaa, 0xe5, 0xc0, 0x0a, 0x6c, 0xc2, 0x1c, 0xd8, 0x32, 0x0e, 0x1b, 0xd4, 0x53, 0xd1, 0x59, + 0x88, 0xde, 0xf9, 0x53, 0xe6, 0xc2, 0x96, 0x70, 0xdc, 0xa6, 0x07, 0xea, 0x53, 0xdd, 0x78, 0x46, + 0xbd, 0xbd, 0x63, 0x32, 0x8c, 0x2a, 0xc3, 0xc8, 0x41, 0x51, 0x07, 0xe6, 0xcf, 0x5c, 0x27, 0x60, + 0x8e, 0x6c, 0x6d, 0xef, 0x33, 0x2e, 0x9c, 0x92, 0xf5, 0xdf, 0x95, 0x9e, 0x68, 0x92, 0xd2, 0x92, + 0x5a, 0x03, 0x4d, 0x7a, 0xa2, 0x0d, 0x3a, 0x52, 0xaf, 0x27, 0x1e, 0x4a, 0x83, 0x03, 0x55, 0xd1, + 0x58, 0xe4, 0xc4, 0xd8, 0xa0, 0xff, 0x0d, 0xb5, 0x91, 0x47, 0x9e, 0x5b, 0xe4, 0x6b, 0x16, 0x80, + 0x01, 0xe3, 0xfa, 0xfd, 0x57, 0xe6, 0xda, 0xc5, 0xd2, 0xb1, 0x2c, 0x9d, 0x30, 0xc6, 0x69, 0x86, + 0xbf, 0x54, 0xb7, 0x45, 0x4d, 0xdd, 0x55, 0xdc, 0xa0, 0x6b, 0xeb, 0x97, 0xb2, 0x63, 0x5b, 0x4e, + 0x18, 0xae, 0x54, 0x71, 0x1e, 0xdc, 0xf8, 0x9d, 0x0a, 0xdc, 0xbe, 0x5a, 0x1c, 0x68, 0x0d, 0xa0, + 0x27, 0x2a, 0xbd, 0x41, 0x4f, 0xc2, 0xf2, 0x41, 0x18, 0xe8, 0x85, 0x7f, 0x2b, 0x68, 0x13, 0xd6, + 0x15, 0x15, 0xcb, 0x4d, 0x51, 0x19, 0x60, 0xe9, 0xb0, 0xdf, 0x16, 0xb1, 0x30, 0x8b, 0x36, 0x60, + 0x75, 0x1f, 0x9f, 0x2a, 0x2d, 0x51, 0x19, 0x9c, 0x60, 0x59, 0x93, 0x84, 0x39, 0xb4, 0x05, 0x1b, + 0xfb, 0xd2, 0xbe, 0xd8, 0x53, 0xa4, 0xbe, 0x14, 0x63, 0xce, 0x23, 0x01, 0x56, 0xd4, 0xde, 0x89, + 0xd8, 0x6e, 0x0d, 0x8e, 0x24, 0xf1, 0xf8, 0x54, 0x58, 0x68, 0x3c, 0x80, 0xb7, 0x5f, 0x2a, 0xc6, + 0x6c, 0xcc, 0x19, 0x06, 0x9a, 0x95, 0xc6, 0x5f, 0xcc, 0xc1, 0x7a, 0xcb, 0x35, 0xc6, 0xd4, 0x73, + 0xbe, 0xde, 0xa9, 0x1d, 0x5b, 0xe6, 0x5c, 0xda, 0x32, 0xbf, 0xe9, 0x89, 0x7d, 0x0b, 0x96, 0x47, + 0xfa, 0x39, 0x69, 0xba, 0x63, 0x27, 0x3a, 0xb4, 0x13, 0x40, 0xe6, 0x84, 0x5e, 0xca, 0x9d, 0xd0, + 0x37, 0xa0, 0x4a, 0xf9, 0x30, 0x77, 0x59, 0x0d, 0xe7, 0x1a, 0xb5, 0xa7, 0x3c, 0xbd, 0xb3, 0xe7, + 0x2c, 0x4c, 0x77, 0xce, 0xd6, 0x7e, 0x0d, 0xe7, 0x6c, 0xe3, 0x0f, 0xe7, 0x60, 0x45, 0x1c, 0x9b, + 0x96, 0xfb, 0x7a, 0xaa, 0xcb, 0x2a, 0x69, 0xee, 0x25, 0x4a, 0x9a, 0x2f, 0x28, 0xa9, 0x0e, 0x4b, + 0x3e, 0x0f, 0xbe, 0x17, 0x98, 0x8a, 0xa2, 0x26, 0x9d, 0xc7, 0x28, 0x08, 0x15, 0x57, 0xc5, 0xf4, + 0xef, 0x95, 0x2a, 0x2b, 0xa8, 0xa5, 0xfa, 0x72, 0xb5, 0x2c, 0x4f, 0xa7, 0x16, 0x98, 0xa4, 0x96, + 0xd7, 0x0e, 0x6c, 0xfc, 0xc0, 0x23, 0xfa, 0x90, 0xde, 0x16, 0xb2, 0x81, 0x4d, 0x1e, 0xde, 0xf8, + 0xff, 0x8b, 0xb0, 0x72, 0x6c, 0x99, 0xe4, 0xbf, 0x9d, 0x72, 0xd2, 0xaa, 0x58, 0xcc, 0xa9, 0x22, + 0x15, 0x83, 0x2f, 0x65, 0x63, 0xf0, 0x1d, 0xa8, 0x9d, 0x5b, 0x67, 0xd4, 0x07, 0xd2, 0x03, 0x84, + 0xa9, 0xa8, 0x8a, 0xd3, 0xa0, 0x54, 0x94, 0xbd, 0x5c, 0x1e, 0x65, 0x43, 0x3a, 0xca, 0x2e, 0x28, + 0xbd, 0xf6, 0x6a, 0x91, 0xf4, 0xca, 0x2f, 0x2c, 0x92, 0x5e, 0x9d, 0xce, 0x94, 0xd6, 0x7e, 0x4d, + 0x91, 0xf4, 0xb4, 0x06, 0x87, 0xfa, 0xb0, 0x76, 0x6e, 0x9d, 0x89, 0x41, 0x7c, 0x2f, 0x63, 0x81, + 0xf4, 0xda, 0xde, 0x07, 0x7c, 0x90, 0xb4, 0x31, 0xde, 0x65, 0x07, 0x40, 0x7c, 0x4e, 0x88, 0x9a, + 0x86, 0xe5, 0xfd, 0xbe, 0x26, 0xab, 0x0a, 0xce, 0x31, 0x69, 0x7c, 0x0e, 0x6f, 0x4c, 0x44, 0xce, + 0x1e, 0x2a, 0x87, 0x72, 0xf7, 0xe8, 0x34, 0x4c, 0x64, 0x68, 0x92, 0xa2, 0x62, 0x61, 0xb6, 0xb1, + 0x03, 0xf3, 0x4d, 0xdd, 0xe6, 0x59, 0x12, 0xdb, 0xa6, 0x26, 0x57, 0x61, 0xd3, 0x8f, 0x9a, 0x8d, + 0x07, 0x30, 0xdf, 0xbc, 0xd0, 0x83, 0x29, 0x22, 0xdd, 0x7c, 0xf2, 0xf4, 0x9f, 0x2b, 0xb0, 0xde, + 0xa5, 0x2b, 0x33, 0x5c, 0x3b, 0xda, 0x63, 0xef, 0xc0, 0xdc, 0x33, 0x3e, 0x46, 0xe9, 0xfd, 0x9a, + 0xf6, 0xa2, 0x87, 0x30, 0x1f, 0x24, 0xd9, 0xa1, 0xf7, 0xa3, 0x04, 0x56, 0x96, 0xd5, 0xdd, 0x2e, + 0x56, 0x35, 0xb5, 0xa9, 0xb6, 0xe3, 0x75, 0x87, 0x51, 0x0e, 0xdb, 0x9c, 0xf7, 0x60, 0x93, 0x8c, + 0x2e, 0xc8, 0x90, 0x78, 0xba, 0x2d, 0x25, 0xf7, 0xf3, 0x30, 0x3d, 0x59, 0xd6, 0xd5, 0xf8, 0x1e, + 0x6c, 0x95, 0x32, 0x44, 0x00, 0x8b, 0x58, 0x3a, 0x56, 0x1f, 0x53, 0x19, 0x6e, 0xc1, 0x86, 0xd4, + 0x3d, 0x92, 0x3a, 0x12, 0x16, 0xdb, 0x83, 0x9e, 0xa4, 0x69, 0xb2, 0x72, 0x28, 0xcc, 0x35, 0xfe, + 0xb8, 0x02, 0xd7, 0xf8, 0xbd, 0xc0, 0x17, 0x3d, 0x4f, 0xbf, 0x9c, 0xfe, 0x76, 0xf0, 0x11, 0x54, + 0x0d, 0x4e, 0x59, 0x9f, 0x65, 0x3b, 0x66, 0x2b, 0x65, 0x72, 0xc9, 0x45, 0x03, 0xc7, 0x68, 0xaf, + 0x79, 0x14, 0x7d, 0x01, 0xb5, 0xa3, 0x5e, 0xa7, 0x39, 0xf6, 0x3c, 0xe2, 0x18, 0x97, 0x2c, 0xea, + 0xe5, 0xff, 0x9b, 0xae, 0x19, 0x4d, 0x2d, 0x03, 0xa3, 0xbb, 0x50, 0x1f, 0xd2, 0xf3, 0xfc, 0xa3, + 0x7b, 0xf7, 0xee, 0x31, 0x65, 0xcc, 0xe1, 0x14, 0xa4, 0xf1, 0x07, 0xf3, 0x70, 0xed, 0xa8, 0xd7, + 0x69, 0xe9, 0x01, 0xa1, 0x9b, 0xad, 0xe9, 0x0e, 0x47, 0xae, 0x43, 0x9c, 0x00, 0x0d, 0x60, 0xd9, + 0xd4, 0x2f, 0xd5, 0xb3, 0x13, 0x42, 0x9e, 0x31, 0xce, 0x6b, 0x7b, 0x62, 0x94, 0x61, 0x2e, 0xc1, + 0xa7, 0xc0, 0x41, 0x4b, 0xd4, 0xa4, 0x81, 0x26, 0x77, 0xa4, 0x41, 0x53, 0xed, 0x74, 0x55, 0x45, + 0x52, 0xb4, 0x41, 0x4b, 0x3c, 0x55, 0x0f, 0x4e, 0x24, 0xe9, 0x71, 0x98, 0xf9, 0x8b, 0x79, 0xd2, + 0x48, 0xff, 0x92, 0xe8, 0x61, 0xf6, 0x7a, 0x15, 0xb3, 0xff, 0xd4, 0x8b, 0x0d, 0x5d, 0x27, 0xb8, + 0x60, 0xae, 0x78, 0x15, 0x87, 0x0d, 0xe6, 0x49, 0x28, 0x59, 0x87, 0x75, 0x85, 0xfa, 0x4f, 0x41, + 0x28, 0xa7, 0x0b, 0x77, 0xec, 0x71, 0x17, 0xcc, 0xfe, 0x53, 0x3f, 0x39, 0xb4, 0x9c, 0x71, 0x40, + 0xa2, 0x6c, 0x44, 0xd8, 0x42, 0x3f, 0x86, 0xaa, 0xa1, 0xdb, 0xc4, 0x31, 0x75, 0x8f, 0x39, 0xdf, + 0xb5, 0xbd, 0x87, 0xaf, 0xb3, 0xaa, 0xa6, 0xd8, 0x96, 0x94, 0x96, 0x88, 0xd9, 0xa2, 0x62, 0x8e, + 0x8d, 0x9f, 0x56, 0xe0, 0x5b, 0x53, 0x09, 0x82, 0x5a, 0x64, 0x47, 0x55, 0x5a, 0x22, 0xdd, 0xca, + 0x35, 0x58, 0xd2, 0xfa, 0x52, 0x8f, 0x36, 0x66, 0xd1, 0x2a, 0x2c, 0x9f, 0x48, 0x2d, 0x25, 0x6c, + 0xce, 0xa1, 0x15, 0xa8, 0x6a, 0x47, 0x7d, 0xcc, 0x5a, 0xf3, 0x94, 0xea, 0x00, 0xcb, 0xf4, 0xff, + 0x02, 0xed, 0xe9, 0x89, 0x5a, 0x1f, 0xd3, 0xd6, 0x22, 0xed, 0xe9, 0xf5, 0x19, 0xbf, 0xa5, 0xc6, + 0x01, 0xbc, 0x3b, 0xcd, 0xbc, 0xe9, 0x50, 0x87, 0x58, 0x3a, 0x54, 0xb1, 0x2c, 0x2a, 0x42, 0x05, + 0xad, 0x43, 0xad, 0xa7, 0xb6, 0x45, 0x3c, 0x38, 0x92, 0x1f, 0x61, 0x59, 0x98, 0x6d, 0xdc, 0xcf, + 0x98, 0x46, 0xdf, 0xb1, 0x5e, 0x48, 0x23, 0xd7, 0x60, 0x71, 0x63, 0x10, 0x7b, 0xec, 0x0a, 0x33, + 0xa9, 0x04, 0xd0, 0xf8, 0xfd, 0x0a, 0xb3, 0xd2, 0x88, 0x0c, 0x7d, 0x0e, 0xcb, 0x46, 0x24, 0x4f, + 0xee, 0x33, 0x6e, 0x5e, 0x21, 0xf2, 0xa3, 0x19, 0x9c, 0xe0, 0x53, 0xe2, 0x71, 0x34, 0x2e, 0x4f, + 0x6d, 0x97, 0x10, 0xc7, 0x53, 0x63, 0x4f, 0x08, 0x51, 0x63, 0x7f, 0x1d, 0x56, 0x4d, 0x3d, 0x20, + 0x74, 0x6a, 0xaa, 0x43, 0xdc, 0xb3, 0xc6, 0x9f, 0x56, 0x60, 0xfb, 0xa8, 0xd7, 0xa1, 0xb7, 0x6f, + 0xdb, 0xfa, 0x89, 0xfe, 0xd4, 0x26, 0x5d, 0xdd, 0xd3, 0x87, 0x24, 0x20, 0x1e, 0x75, 0x9e, 0x26, + 0x39, 0xd3, 0xc7, 0x76, 0x74, 0xf7, 0x8c, 0x9a, 0xe8, 0x1e, 0x54, 0xa3, 0x2d, 0xc5, 0xa7, 0x80, + 0x92, 0x29, 0x44, 0x9b, 0xf1, 0x68, 0x06, 0xc7, 0x58, 0x94, 0xc2, 0xe4, 0x53, 0xe3, 0x69, 0x60, + 0x54, 0x9c, 0x34, 0xa5, 0x88, 0xb0, 0xf6, 0x57, 0x00, 0x46, 0x74, 0x2a, 0xe1, 0x3c, 0x7f, 0x77, + 0x0e, 0xb6, 0x27, 0x3c, 0xe3, 0x50, 0xe1, 0xd3, 0x8b, 0xbc, 0x3f, 0xd2, 0x8d, 0x68, 0xc7, 0x27, + 0x00, 0xea, 0xac, 0x88, 0x4d, 0xe8, 0x45, 0x83, 0x39, 0x2b, 0x7e, 0x55, 0x4e, 0x81, 0xe8, 0xc6, + 0x60, 0x23, 0xf9, 0xf5, 0x39, 0x96, 0x4d, 0xe6, 0x2d, 0x16, 0xea, 0xe8, 0xb6, 0x4d, 0x83, 0x8c, + 0xf6, 0x39, 0xbf, 0x40, 0xa7, 0x20, 0x99, 0x7e, 0x83, 0xdf, 0x9e, 0x53, 0x10, 0xd4, 0x86, 0x0d, + 0x3b, 0x27, 0x57, 0xbf, 0xbe, 0xc8, 0xbc, 0xe1, 0xed, 0x64, 0xf1, 0x65, 0xa2, 0xc7, 0x45, 0xc2, + 0x30, 0x21, 0x12, 0x10, 0x6f, 0x68, 0x39, 0x96, 0x1f, 0x58, 0x46, 0xfb, 0x9c, 0x87, 0x4a, 0x79, + 0x70, 0x11, 0xd3, 0xe0, 0x37, 0x92, 0x3c, 0x18, 0x3d, 0x80, 0x5a, 0xf4, 0xfe, 0x78, 0xe4, 0x0f, + 0x59, 0xfc, 0x54, 0xdb, 0xbb, 0xce, 0xe7, 0x16, 0x3d, 0x86, 0xc5, 0xaf, 0x65, 0x29, 0xd4, 0xc6, + 0x6f, 0x56, 0x00, 0xf5, 0x88, 0x63, 0x76, 0xf5, 0xcb, 0xf4, 0x1d, 0xee, 0x1e, 0xd4, 0x1c, 0x37, + 0x26, 0xe1, 0xb6, 0x91, 0x4f, 0xf8, 0xa7, 0x51, 0xd0, 0x8f, 0x60, 0xc3, 0x23, 0x5f, 0x8d, 0x89, + 0x1f, 0x24, 0xc7, 0x65, 0xee, 0x6d, 0x2b, 0x75, 0x8e, 0x16, 0x71, 0x1b, 0xff, 0x52, 0x81, 0x2d, + 0x1c, 0x42, 0xaf, 0x9e, 0xcc, 0xfc, 0xcb, 0x27, 0x73, 0x0f, 0x36, 0xd3, 0x47, 0x85, 0xec, 0xbb, + 0xf7, 0xf7, 0x3e, 0xfa, 0x94, 0xdb, 0x54, 0x59, 0x57, 0xc9, 0x61, 0x32, 0x9f, 0x3e, 0x4c, 0xa8, + 0xf5, 0xf1, 0x29, 0x1f, 0x78, 0xee, 0x90, 0x5f, 0x56, 0xd3, 0x20, 0xaa, 0x2d, 0x96, 0x58, 0x4f, + 0x85, 0x7c, 0x0b, 0xcc, 0x81, 0xe4, 0xc1, 0x8d, 0x26, 0xdc, 0x6a, 0x11, 0xc3, 0xb6, 0x1c, 0xc2, + 0x17, 0x8a, 0x33, 0xc2, 0x98, 0x2a, 0x08, 0x69, 0xec, 0xc3, 0xcd, 0xa6, 0xee, 0x18, 0xc4, 0xfe, + 0x06, 0x3c, 0xfe, 0x66, 0x0e, 0x36, 0xdb, 0xd6, 0x73, 0xf2, 0xab, 0xc9, 0xd9, 0xdd, 0x01, 0x41, + 0x37, 0x8c, 0xb1, 0xa7, 0x1b, 0x97, 0xb2, 0xd3, 0xa1, 0x16, 0xec, 0xf3, 0xc3, 0xb0, 0x00, 0xa7, + 0xea, 0xf0, 0x47, 0x84, 0x98, 0xb2, 0xd3, 0x19, 0x85, 0xe9, 0xbc, 0x59, 0x9c, 0x82, 0xa0, 0x36, + 0xbc, 0xcd, 0xf9, 0x37, 0x6d, 0xd7, 0x78, 0xf6, 0xb5, 0xe5, 0x13, 0xaa, 0x84, 0x8e, 0x7e, 0xee, + 0x90, 0xc0, 0x32, 0x14, 0xd7, 0xe3, 0x69, 0x81, 0x55, 0xfc, 0x72, 0xc4, 0xf4, 0xad, 0x65, 0x31, + 0x7b, 0x6b, 0x79, 0x0f, 0xd6, 0x7c, 0x2a, 0x58, 0xc7, 0x88, 0x5e, 0xa4, 0x97, 0x98, 0x4e, 0x73, + 0x50, 0x3a, 0x5f, 0xe6, 0x8b, 0xcf, 0xce, 0x7c, 0x12, 0xb0, 0x5d, 0xba, 0x8a, 0x53, 0x90, 0x5f, + 0xea, 0x2d, 0xfe, 0xe7, 0x73, 0xb0, 0xd6, 0x0b, 0x2c, 0xe3, 0x19, 0xf1, 0x26, 0x5f, 0x15, 0xb3, + 0xd7, 0xc1, 0xd9, 0xc2, 0x75, 0xb0, 0x70, 0x9d, 0x9a, 0x2b, 0xbb, 0x4e, 0xa5, 0xaf, 0x7e, 0xf3, + 0xc5, 0xc4, 0x49, 0x7c, 0x19, 0x5d, 0xc8, 0x5d, 0x46, 0x5f, 0xed, 0x01, 0x25, 0x7b, 0xbd, 0xaa, + 0x16, 0xae, 0x57, 0xd9, 0xab, 0xeb, 0x72, 0xe1, 0xea, 0xfa, 0x6a, 0x37, 0xf9, 0xe8, 0xb1, 0xe1, + 0x80, 0xfa, 0x6c, 0xce, 0xb3, 0x16, 0x9a, 0x65, 0x1e, 0x4e, 0x39, 0x27, 0xb0, 0xe8, 0x3e, 0xb5, + 0xc2, 0x04, 0x51, 0xec, 0x78, 0x4d, 0x75, 0xfe, 0xde, 0x3c, 0xac, 0x1f, 0xb8, 0x63, 0x0f, 0xbb, + 0x5f, 0x47, 0x9e, 0x1b, 0x3d, 0x80, 0x25, 0x86, 0xc2, 0x93, 0x59, 0x2f, 0xaf, 0x88, 0x88, 0xd0, + 0xd1, 0x27, 0xb0, 0x78, 0xe6, 0xba, 0x01, 0x37, 0xdc, 0x97, 0x13, 0x72, 0x6c, 0xf4, 0x21, 0x2c, + 0x85, 0xe5, 0x06, 0x7e, 0xbd, 0x9a, 0x89, 0xfb, 0xb3, 0xa5, 0x15, 0x38, 0xc2, 0x42, 0xfb, 0xb0, + 0x6e, 0x66, 0x13, 0x81, 0xdc, 0xf9, 0x44, 0xc7, 0x50, 0x2e, 0x4d, 0x78, 0x34, 0x83, 0xf3, 0x04, + 0xe8, 0x4b, 0xd8, 0xbe, 0x28, 0x9f, 0xd7, 0x74, 0x85, 0x20, 0x47, 0x33, 0x78, 0x12, 0x03, 0xf4, + 0x19, 0xac, 0x58, 0xa9, 0xb7, 0x45, 0x7e, 0x34, 0x6d, 0x46, 0xf7, 0xff, 0x54, 0xd7, 0xd1, 0x0c, + 0xce, 0xa0, 0x52, 0xd2, 0xe7, 0xa9, 0xbb, 0x2f, 0x3f, 0x80, 0x36, 0x4b, 0xae, 0xc5, 0x94, 0x34, + 0x8d, 0x4a, 0xa5, 0x62, 0x67, 0x9d, 0x2b, 0xdb, 0x1b, 0x89, 0x54, 0x72, 0xae, 0x97, 0x4a, 0x25, + 0x47, 0xb0, 0xbf, 0xc4, 0x33, 0xa4, 0x8d, 0x3f, 0x9a, 0x87, 0xed, 0xa8, 0x14, 0x29, 0x6f, 0x21, + 0xf7, 0x60, 0x33, 0x3a, 0xd6, 0x9b, 0xa1, 0xea, 0xd9, 0x83, 0x42, 0xe8, 0xce, 0xca, 0xba, 0xd0, + 0x5d, 0x40, 0x17, 0x31, 0x33, 0xaa, 0x73, 0x46, 0x10, 0x86, 0x22, 0x25, 0x3d, 0xe8, 0x10, 0xd6, + 0xb3, 0x35, 0x4e, 0x91, 0x65, 0xbc, 0x99, 0xab, 0x92, 0xca, 0x59, 0x48, 0x9e, 0x8a, 0xf9, 0x4a, + 0x8e, 0x22, 0x9b, 0x51, 0x22, 0x2e, 0x81, 0xfc, 0x42, 0x2c, 0xe9, 0x2e, 0x6c, 0x44, 0xc3, 0x6a, + 0x54, 0x76, 0xc9, 0xeb, 0xca, 0xd1, 0x0c, 0x2e, 0x76, 0xfd, 0x4f, 0xb0, 0x8e, 0xbf, 0x9c, 0x85, + 0xf5, 0x5c, 0xa8, 0x97, 0xf7, 0x40, 0x73, 0xd3, 0x25, 0x8d, 0x1e, 0x81, 0x70, 0x91, 0xd3, 0x25, + 0x5f, 0xd5, 0xed, 0x9c, 0xaa, 0x73, 0x56, 0x88, 0x0b, 0x74, 0x74, 0x89, 0x67, 0x59, 0xa4, 0x9c, + 0x32, 0x73, 0x2c, 0xe8, 0x12, 0x73, 0x04, 0xcc, 0x2d, 0x94, 0x0f, 0x98, 0x77, 0x0b, 0xe5, 0x58, + 0xcc, 0x2d, 0x94, 0x77, 0xed, 0x57, 0xa9, 0x7f, 0xf4, 0x86, 0x7a, 0xd0, 0xf8, 0xbb, 0x0a, 0xdc, + 0xc8, 0x99, 0x2e, 0x19, 0xd9, 0x71, 0xae, 0x84, 0x46, 0x24, 0xc4, 0x26, 0x46, 0x40, 0xcc, 0xb8, + 0x16, 0x22, 0x05, 0xa1, 0x1b, 0x30, 0x6a, 0xb5, 0x52, 0x25, 0x70, 0xe1, 0x35, 0xa5, 0xac, 0xeb, + 0x35, 0x95, 0xf3, 0x2e, 0xac, 0xc6, 0xa3, 0xa6, 0x6a, 0xda, 0xb2, 0xc0, 0xc6, 0xbf, 0xcf, 0xb2, + 0xdc, 0x96, 0x39, 0x36, 0x82, 0x9e, 0xa3, 0x8f, 0xfc, 0x0b, 0x37, 0x40, 0x9f, 0xc2, 0xca, 0x28, + 0x04, 0x31, 0x7b, 0xe6, 0x7a, 0x28, 0xb3, 0x71, 0x9c, 0x41, 0x64, 0x8f, 0x29, 0xbc, 0x1d, 0xe5, + 0xcf, 0x12, 0xc0, 0x84, 0x07, 0x9c, 0xdc, 0x93, 0xe4, 0x7c, 0xf1, 0x49, 0x32, 0x9f, 0xe2, 0x59, + 0x28, 0x49, 0xf1, 0xec, 0xc2, 0xfa, 0xc8, 0xb3, 0x0c, 0x22, 0x26, 0xa1, 0xf9, 0x62, 0x18, 0x53, + 0xe7, 0xc0, 0x54, 0x3d, 0x1e, 0x09, 0x74, 0xcb, 0x26, 0x9e, 0x6c, 0x72, 0x2f, 0x96, 0x82, 0x44, + 0x11, 0x51, 0x35, 0x89, 0x88, 0xde, 0x87, 0x8d, 0xf4, 0x2a, 0xc3, 0xa7, 0xa2, 0x30, 0xf3, 0x5c, + 0xec, 0xa0, 0xb3, 0x65, 0x07, 0x3c, 0x03, 0xc9, 0x26, 0x2f, 0x9f, 0xc8, 0xc0, 0x1a, 0x7f, 0x52, + 0x81, 0x35, 0x2e, 0xf4, 0xe4, 0x22, 0xb2, 0xc4, 0x79, 0xe5, 0xcc, 0x3e, 0xa7, 0x1c, 0x1c, 0xa1, + 0xd1, 0x70, 0xe4, 0xe9, 0xd8, 0xb7, 0x1c, 0xe2, 0xfb, 0xea, 0xd7, 0x0e, 0xf1, 0x1e, 0xc5, 0x39, + 0xcb, 0x02, 0xfc, 0x35, 0x03, 0x8c, 0x9f, 0xcd, 0x02, 0x0a, 0xab, 0x1c, 0x9c, 0xe7, 0x56, 0xe2, + 0x2b, 0x6e, 0x40, 0x95, 0x95, 0xf6, 0xd0, 0x01, 0x79, 0x8d, 0x58, 0xd4, 0xa6, 0xd2, 0xb5, 0x18, + 0x32, 0xd3, 0x54, 0x38, 0x9d, 0x14, 0x84, 0x4e, 0x3a, 0x6c, 0xa5, 0x92, 0x99, 0x73, 0x4c, 0x51, + 0x05, 0x38, 0xb5, 0x26, 0xc6, 0x97, 0xdd, 0xe2, 0x79, 0x5d, 0x58, 0x0c, 0x28, 0x06, 0xca, 0x0b, + 0x2f, 0x29, 0x9a, 0xcb, 0x05, 0xec, 0x39, 0x91, 0x2c, 0x4d, 0x27, 0x12, 0x02, 0x1b, 0x2d, 0xf2, + 0xdc, 0x32, 0x48, 0x2f, 0x75, 0x86, 0xbc, 0x07, 0x6b, 0x26, 0xf1, 0x03, 0xcb, 0x61, 0xf3, 0x4e, + 0xc4, 0x92, 0x83, 0xa2, 0x5d, 0x58, 0x1a, 0x5e, 0x79, 0x4f, 0x8e, 0xba, 0x1b, 0xcd, 0x78, 0x98, + 0x4b, 0xc7, 0x48, 0x8e, 0x2a, 0xe4, 0x13, 0xcf, 0xd2, 0x6d, 0xeb, 0x27, 0xc4, 0x7c, 0x32, 0xb4, + 0xf7, 0x2f, 0x03, 0x56, 0x1c, 0x49, 0x97, 0x5d, 0xd2, 0xd3, 0xf8, 0xeb, 0x75, 0x58, 0x8a, 0x68, + 0xe9, 0x1e, 0x0a, 0xeb, 0xd5, 0x42, 0x99, 0x47, 0x69, 0xd2, 0x14, 0x0c, 0x9d, 0xc3, 0x2d, 0xff, + 0x65, 0x05, 0x5a, 0xb5, 0xbd, 0x77, 0xf8, 0x9c, 0xaf, 0x2a, 0xd0, 0xc2, 0x57, 0x32, 0xa2, 0xfe, + 0x65, 0xca, 0x33, 0x34, 0x77, 0x82, 0xfe, 0x80, 0xd5, 0xee, 0xa5, 0xb2, 0xc9, 0xfc, 0xb4, 0x99, + 0x90, 0x6a, 0xce, 0x21, 0xa3, 0x87, 0xaf, 0x78, 0x8a, 0x16, 0xce, 0x50, 0xd4, 0x86, 0x4d, 0x52, + 0x2c, 0x2d, 0xe0, 0xa1, 0xf6, 0x8d, 0xc9, 0xc5, 0x07, 0xb8, 0x8c, 0x8c, 0xce, 0x27, 0x1f, 0xbf, + 0x2c, 0x5d, 0x15, 0xbf, 0x14, 0xa3, 0x97, 0x4f, 0x61, 0x45, 0x4f, 0x3d, 0xcb, 0x32, 0xaf, 0x95, + 0x48, 0x32, 0xfd, 0x62, 0x8b, 0x33, 0x88, 0x94, 0x30, 0x13, 0x8b, 0x2c, 0x4f, 0x8c, 0x45, 0x72, + 0x91, 0xc8, 0x5b, 0x30, 0x6f, 0xe8, 0xb6, 0xcd, 0x6e, 0x49, 0xb5, 0xbd, 0x5a, 0xaa, 0x18, 0x19, + 0xb3, 0x0e, 0x86, 0x70, 0xa1, 0x07, 0xcc, 0xef, 0xa5, 0x10, 0x2e, 0xf4, 0x00, 0xb3, 0x0e, 0xba, + 0xea, 0x51, 0xf6, 0x05, 0x84, 0x5d, 0x8c, 0x32, 0x1e, 0x2f, 0xdd, 0x8b, 0xf3, 0xe8, 0x48, 0x85, + 0x6b, 0x46, 0xc9, 0x2b, 0x05, 0x7b, 0x5f, 0x4b, 0x72, 0xa3, 0x65, 0x0f, 0x19, 0xb8, 0x94, 0x10, + 0x3d, 0x99, 0x7c, 0x9d, 0x58, 0x9b, 0xea, 0x32, 0x34, 0xf1, 0x32, 0xf1, 0xd3, 0x0a, 0xdc, 0x39, + 0xd3, 0xfd, 0x00, 0xb3, 0x42, 0x9d, 0xe0, 0x31, 0xb9, 0xbc, 0xb2, 0x06, 0x72, 0x7d, 0xfa, 0x2d, + 0xf6, 0x0a, 0x6c, 0x91, 0x4c, 0x3d, 0x47, 0x3e, 0x75, 0xc7, 0x32, 0x0b, 0xc9, 0xa7, 0x0b, 0xc5, + 0xdc, 0x1e, 0x2e, 0x21, 0xa2, 0x3b, 0xc0, 0x2e, 0x26, 0x82, 0xd8, 0x53, 0x61, 0xb2, 0x03, 0x4a, + 0x52, 0x45, 0xb8, 0x8c, 0x0c, 0x61, 0xd8, 0xf2, 0xca, 0x32, 0x79, 0xac, 0x18, 0x36, 0x79, 0x74, + 0x2d, 0xcd, 0xf6, 0xe1, 0x72, 0x52, 0xea, 0xc6, 0xcc, 0x2b, 0x92, 0x66, 0xbc, 0x90, 0x36, 0x92, + 0xf1, 0x55, 0xf9, 0x35, 0x7c, 0x25, 0x23, 0x64, 0xc2, 0x4d, 0x63, 0x72, 0x62, 0x8d, 0x97, 0xde, + 0x36, 0xe2, 0x1d, 0x32, 0x11, 0x13, 0x5f, 0xc5, 0x86, 0x6e, 0x97, 0x20, 0x1b, 0xac, 0xb3, 0xea, + 0xdc, 0xc9, 0x59, 0xdb, 0x3c, 0x3a, 0xf5, 0x9a, 0x7e, 0x26, 0xeb, 0x53, 0xbf, 0x91, 0xf1, 0x9a, + 0xd9, 0x94, 0x10, 0xce, 0x21, 0x53, 0xe3, 0x39, 0x2f, 0x04, 0x01, 0xf5, 0x5b, 0x19, 0xe3, 0x29, + 0x46, 0x09, 0xb8, 0x84, 0x08, 0xe9, 0x70, 0x23, 0x98, 0x18, 0x38, 0xd7, 0xdf, 0x64, 0x2c, 0xdf, + 0x2e, 0x4f, 0x1f, 0xa4, 0x10, 0xf1, 0x15, 0x4c, 0xe8, 0x62, 0x47, 0x99, 0xc8, 0xaa, 0x7e, 0x3b, + 0xb3, 0xd8, 0x6c, 0xd8, 0x85, 0x73, 0xc8, 0xe8, 0x00, 0x36, 0xcc, 0xfc, 0xf9, 0x5e, 0x7f, 0x2b, + 0xf3, 0x79, 0x50, 0xe1, 0xfc, 0xc7, 0x45, 0x92, 0x14, 0x9f, 0xe4, 0x00, 0xaf, 0xef, 0x94, 0xf1, + 0x49, 0xfa, 0x71, 0x91, 0xa4, 0x11, 0x00, 0x24, 0xb9, 0xd8, 0x6c, 0xa5, 0x7c, 0x25, 0x5f, 0x29, + 0x7f, 0x1d, 0x16, 0xcf, 0x3c, 0x77, 0xd8, 0x09, 0x4f, 0xea, 0x2a, 0xe6, 0x2d, 0xfe, 0x9c, 0x3d, + 0x17, 0x3d, 0x67, 0xe7, 0xeb, 0xf8, 0xe7, 0x0b, 0x75, 0xfc, 0x8d, 0xff, 0xd8, 0x84, 0xda, 0x09, + 0x79, 0x7a, 0x40, 0x74, 0xea, 0xcc, 0x7c, 0xf4, 0x08, 0x56, 0x6d, 0xfd, 0x29, 0xb1, 0x7d, 0x7e, + 0x2b, 0xe1, 0x6f, 0xa1, 0xef, 0xf2, 0x95, 0xa4, 0x50, 0xef, 0x9e, 0x48, 0xfb, 0x83, 0x03, 0x49, + 0xd4, 0xfa, 0x58, 0xea, 0x0d, 0x0e, 0xda, 0xe2, 0x21, 0xce, 0x92, 0xa2, 0x1f, 0xc3, 0xf5, 0xe7, + 0xae, 0x35, 0x92, 0x1d, 0xd3, 0x7a, 0x6e, 0x99, 0x63, 0xdd, 0x56, 0xc7, 0xc1, 0xb9, 0x6b, 0x39, + 0xe7, 0xfc, 0x95, 0x7c, 0x3a, 0xa6, 0x13, 0x78, 0xa0, 0x87, 0x3c, 0x36, 0xf5, 0x8f, 0x3f, 0x66, + 0x2b, 0x9e, 0x96, 0x5f, 0x4c, 0x85, 0xda, 0xb0, 0x16, 0xfd, 0x6f, 0x7a, 0x24, 0xba, 0xd1, 0x4e, + 0xcb, 0x27, 0x47, 0x4b, 0xb9, 0x19, 0x17, 0xba, 0x73, 0xce, 0xd3, 0xbf, 0xc7, 0x7b, 0x2c, 0xe2, + 0x98, 0x9a, 0x5b, 0x96, 0x96, 0xca, 0xee, 0xab, 0x31, 0xf1, 0x2e, 0x7b, 0x81, 0x1e, 0x8c, 0xfd, + 0xe3, 0x8f, 0x93, 0xe0, 0x77, 0xf1, 0x55, 0x64, 0x57, 0xce, 0x83, 0x69, 0x39, 0xe5, 0xa3, 0x7d, + 0xfe, 0x36, 0x3c, 0xad, 0x96, 0xd3, 0xa4, 0xa8, 0x05, 0xc0, 0x46, 0x39, 0x76, 0xa2, 0xf2, 0xb8, + 0x69, 0x19, 0xa5, 0xe8, 0x8a, 0xb6, 0x22, 0x3b, 0x86, 0x3b, 0xa4, 0xb6, 0xb2, 0xfc, 0xfa, 0xb6, + 0x12, 0xf1, 0x40, 0x18, 0x36, 0xe2, 0x6f, 0xb4, 0x2c, 0xe2, 0x7f, 0x41, 0xc7, 0xe5, 0x75, 0xa4, + 0xd3, 0x31, 0x2e, 0x92, 0x53, 0xfb, 0x1b, 0x85, 0x6e, 0xdc, 0x67, 0x11, 0xd0, 0xd4, 0xf6, 0x17, + 0x51, 0xa1, 0x2e, 0x08, 0xdc, 0x01, 0x77, 0x75, 0xe3, 0x59, 0x38, 0xa9, 0x95, 0x57, 0xe0, 0x54, + 0xa0, 0x46, 0x1a, 0xa0, 0x8c, 0x72, 0x0e, 0x2c, 0x47, 0xb7, 0x59, 0xb0, 0x34, 0x2d, 0xcf, 0x12, + 0x7a, 0xaa, 0xe1, 0x70, 0x63, 0x4b, 0xa6, 0x15, 0xb0, 0x30, 0x69, 0x6a, 0x0d, 0x27, 0x74, 0xe8, + 0x00, 0x6a, 0x2c, 0xd1, 0xde, 0x1f, 0xd9, 0xae, 0x6e, 0xb2, 0xf8, 0x67, 0x5a, 0x36, 0x69, 0x42, + 0x74, 0x06, 0x37, 0x53, 0x4d, 0x6c, 0x19, 0x17, 0x5f, 0xa4, 0x74, 0xc3, 0xc2, 0x93, 0x69, 0xf9, + 0x5e, 0xc5, 0x08, 0xfd, 0x10, 0x96, 0x9e, 0x53, 0xd3, 0x3c, 0xde, 0xe3, 0x35, 0x4f, 0xd3, 0xf1, + 0x8c, 0x88, 0xa8, 0x76, 0x59, 0x38, 0x1d, 0xd5, 0xb2, 0xf5, 0x3d, 0x9b, 0x7d, 0x59, 0x30, 0xb5, + 0x76, 0xf3, 0xd4, 0x74, 0xd7, 0xfa, 0x6c, 0x2b, 0x63, 0xdd, 0x79, 0x46, 0xb7, 0xc6, 0xd6, 0xab, + 0xec, 0xda, 0x0c, 0x29, 0x3a, 0x86, 0xcd, 0xec, 0x5e, 0x61, 0x17, 0x01, 0x16, 0x8c, 0x4d, 0xcb, + 0xb1, 0x8c, 0x01, 0xb5, 0xc0, 0xe0, 0xc2, 0xf2, 0xcc, 0xae, 0xee, 0x05, 0x97, 0x3c, 0xdc, 0xf0, + 0x59, 0x20, 0x36, 0xb5, 0x05, 0x16, 0xe9, 0x91, 0x09, 0x37, 0xce, 0x58, 0x08, 0xe8, 0x04, 0xf6, + 0x65, 0xfc, 0xd1, 0x54, 0x8f, 0x04, 0x01, 0x15, 0x43, 0xfd, 0x15, 0xb8, 0x5f, 0xc1, 0x87, 0xfa, + 0x20, 0xee, 0xd3, 0xef, 0x3f, 0x72, 0x2d, 0xa7, 0x4b, 0xbc, 0xa1, 0xe5, 0xfb, 0xd1, 0x47, 0x52, + 0x53, 0xfb, 0xa0, 0x72, 0x1e, 0xf4, 0x7c, 0xf0, 0x88, 0x41, 0x9c, 0x20, 0x96, 0xca, 0x8d, 0x57, + 0x39, 0x1f, 0xb2, 0xb4, 0xd4, 0x3a, 0x0d, 0x3d, 0xd0, 0x6d, 0xf7, 0xbc, 0x7e, 0xf3, 0x55, 0xac, + 0x93, 0x13, 0x21, 0x05, 0xd6, 0xfd, 0x40, 0xf7, 0x3c, 0x62, 0xc6, 0xd3, 0xb9, 0xf5, 0x0a, 0x7c, + 0xf2, 0xc4, 0xd4, 0x36, 0xa9, 0x39, 0xb0, 0xe8, 0x90, 0x5e, 0x11, 0x59, 0x88, 0x37, 0xb5, 0x6d, + 0x66, 0x48, 0xe9, 0xdc, 0xf2, 0x71, 0xf0, 0xed, 0x57, 0x99, 0x5b, 0x3e, 0x2a, 0xbe, 0x80, 0x5b, + 0x39, 0x50, 0x52, 0xda, 0x69, 0x05, 0x97, 0x2c, 0xe8, 0x9b, 0x96, 0xf9, 0x95, 0x9c, 0xe8, 0x39, + 0x13, 0x17, 0xea, 0x71, 0x04, 0x9f, 0xc5, 0x82, 0x53, 0x9f, 0x33, 0x05, 0xf2, 0xc6, 0x13, 0xd8, + 0x28, 0xe0, 0xa1, 0x75, 0xa8, 0x29, 0xaa, 0x36, 0xe8, 0x69, 0x22, 0xd6, 0xa4, 0x96, 0x30, 0x83, + 0x36, 0x60, 0xf5, 0x40, 0xc5, 0x4d, 0x69, 0xd0, 0xef, 0x1e, 0x62, 0xb1, 0x25, 0x85, 0x05, 0x4e, + 0x2d, 0xe9, 0x58, 0x6a, 0xab, 0xdd, 0x8e, 0xa4, 0x68, 0xc2, 0x2c, 0x5a, 0x03, 0xe8, 0x62, 0xb5, + 0xd5, 0x6f, 0x6a, 0xb2, 0xaa, 0x08, 0x73, 0x8d, 0xbf, 0xaf, 0xc0, 0xb6, 0xa6, 0x3f, 0xb5, 0x49, + 0xa0, 0xb8, 0x81, 0x75, 0x66, 0x71, 0xa7, 0xcf, 0x52, 0xca, 0x99, 0xa2, 0xa7, 0xb0, 0xf4, 0x21, + 0x01, 0xd0, 0xb8, 0x72, 0xec, 0x78, 0x44, 0x37, 0xe9, 0x65, 0x3f, 0x7a, 0xb1, 0x4f, 0x83, 0xd0, + 0x5d, 0x40, 0x0e, 0x65, 0x1a, 0x45, 0xeb, 0x61, 0x2a, 0x35, 0xcc, 0x4b, 0x97, 0xf4, 0xa0, 0x16, + 0xac, 0x66, 0xa0, 0xf5, 0x85, 0x4c, 0x2d, 0x4d, 0x7a, 0x82, 0xb1, 0xe4, 0xcf, 0x5c, 0x9c, 0x25, + 0x6a, 0xfc, 0x79, 0x05, 0xb6, 0x27, 0xa0, 0x4e, 0x57, 0xc6, 0x39, 0x75, 0xde, 0x0e, 0xdd, 0x01, + 0x81, 0xff, 0x4d, 0xde, 0x93, 0xe7, 0x98, 0x9c, 0x0a, 0xf0, 0x29, 0xc2, 0xf0, 0xbf, 0xad, 0xc0, + 0xb5, 0x13, 0xf2, 0xf4, 0xd7, 0xaf, 0x87, 0x1f, 0xc0, 0x5a, 0x06, 0xea, 0x73, 0x45, 0x6c, 0x25, + 0xe6, 0x9b, 0x96, 0x7f, 0x0e, 0xb9, 0xf1, 0xf3, 0x79, 0xa8, 0xf1, 0xcb, 0x2d, 0x9b, 0xfe, 0x54, + 0x25, 0x34, 0x06, 0xb1, 0x9e, 0x87, 0x49, 0xed, 0xb8, 0x84, 0x26, 0x06, 0xa1, 0x1f, 0xc2, 0x62, + 0x78, 0x72, 0xf1, 0xe0, 0xfc, 0xbd, 0xe8, 0x76, 0x97, 0x8c, 0x72, 0xb7, 0x2b, 0x9e, 0x52, 0x13, + 0x0f, 0xbf, 0x88, 0xee, 0x69, 0xa2, 0xd6, 0xef, 0x61, 0x4e, 0x85, 0xf6, 0xe0, 0x5a, 0xe0, 0xe9, + 0x8e, 0x1f, 0x7e, 0x02, 0x9e, 0xad, 0xc3, 0x99, 0xc7, 0xa5, 0x7d, 0xe5, 0x75, 0x4b, 0x8b, 0xd3, + 0xd7, 0x2d, 0x95, 0xd5, 0xfd, 0x2c, 0xb1, 0xf1, 0xf2, 0x60, 0x56, 0x63, 0x31, 0xa6, 0xde, 0x60, + 0xe4, 0xb9, 0xee, 0x19, 0x31, 0x79, 0x11, 0x7c, 0x16, 0x88, 0x6e, 0xa4, 0x6a, 0xf2, 0xc2, 0xc7, + 0xd1, 0xb8, 0xdd, 0xf8, 0xc7, 0x0a, 0x6c, 0x96, 0x08, 0x00, 0x21, 0x58, 0xeb, 0x2b, 0x8f, 0x15, + 0xf5, 0x44, 0xe1, 0x10, 0x61, 0x86, 0x7b, 0x80, 0xa6, 0xd4, 0xeb, 0xc9, 0xca, 0xa1, 0x50, 0x41, + 0x55, 0x98, 0xef, 0x85, 0xbe, 0x01, 0xc1, 0x9a, 0x22, 0x49, 0xad, 0x81, 0xa6, 0x0e, 0xc4, 0x66, + 0x53, 0xea, 0x6a, 0x61, 0x31, 0x66, 0x53, 0xed, 0x74, 0xdb, 0x92, 0x26, 0x09, 0xf3, 0xe8, 0x3a, + 0xa0, 0xa6, 0xda, 0x6f, 0xb7, 0x06, 0xd4, 0xf1, 0xc4, 0x70, 0x56, 0x98, 0x89, 0xa5, 0x83, 0xbe, + 0xd2, 0x92, 0x5a, 0xc2, 0x22, 0xaa, 0xc1, 0x92, 0xf4, 0xa4, 0x2b, 0x63, 0xa9, 0x25, 0x2c, 0x85, + 0x5d, 0x8f, 0xa4, 0x26, 0x75, 0x51, 0x55, 0xb4, 0x0a, 0xcb, 0x4d, 0x51, 0x69, 0x4a, 0xed, 0xb6, + 0xd4, 0x12, 0x96, 0xd1, 0x16, 0x6c, 0x9c, 0x88, 0xb2, 0x26, 0x2b, 0x87, 0x83, 0x03, 0x15, 0x0f, + 0xba, 0xe2, 0xa9, 0x84, 0x05, 0xa0, 0x0c, 0x38, 0x58, 0xa8, 0x35, 0xfe, 0xe1, 0x06, 0xac, 0x65, + 0x2d, 0x2e, 0xd9, 0xc6, 0xb3, 0xbf, 0xf2, 0x6d, 0x2c, 0xe5, 0x4c, 0xf1, 0x83, 0xd2, 0x3d, 0xc1, + 0xbc, 0x7a, 0x54, 0x8e, 0x5d, 0x66, 0x91, 0x39, 0x6f, 0xb0, 0x50, 0xfc, 0xb8, 0xfe, 0x3a, 0x2c, + 0x5a, 0xe7, 0x8e, 0xeb, 0x85, 0x89, 0xbb, 0x2a, 0xe6, 0x2d, 0xf6, 0xfd, 0x45, 0x78, 0xee, 0xb2, + 0x77, 0x9d, 0x2a, 0x8e, 0x9a, 0xd4, 0x4d, 0x3c, 0xf5, 0x5c, 0xdd, 0x34, 0x74, 0x3f, 0xe0, 0x1f, + 0x98, 0x25, 0x00, 0x6a, 0x3e, 0xa3, 0xb1, 0x7f, 0xc1, 0x5e, 0x57, 0x36, 0x43, 0xf3, 0x89, 0xda, + 0xe8, 0x3e, 0x6c, 0xb1, 0x28, 0xb8, 0x69, 0x8d, 0x2e, 0x88, 0x17, 0x90, 0x17, 0x01, 0x2f, 0xf6, + 0xb9, 0xc6, 0x5e, 0x1b, 0xca, 0x3b, 0xe9, 0x78, 0xc3, 0xb1, 0x1d, 0x58, 0x6c, 0xbc, 0xad, 0x70, + 0xbc, 0x18, 0x40, 0xe7, 0x39, 0xf6, 0x6c, 0xf6, 0xd6, 0x19, 0x7e, 0xea, 0x1e, 0x35, 0x29, 0xdd, + 0xd8, 0xb3, 0x79, 0xd9, 0xd4, 0x76, 0x48, 0x17, 0x03, 0xd0, 0x29, 0xac, 0x73, 0xa1, 0xf7, 0x82, + 0xf1, 0x53, 0xf6, 0xb1, 0x5f, 0x18, 0xdb, 0x7d, 0x38, 0xb5, 0xa4, 0xfb, 0xfb, 0xac, 0x46, 0x39, + 0xcf, 0x87, 0x3a, 0x22, 0xc3, 0x26, 0xba, 0xd7, 0xa1, 0xcb, 0x61, 0xf1, 0x5c, 0x15, 0xa7, 0x20, + 0xa1, 0x18, 0x62, 0x92, 0xb8, 0x58, 0x93, 0x06, 0x69, 0x73, 0xbb, 0xcb, 0xb8, 0xbc, 0x93, 0x0a, + 0xd6, 0x1c, 0xf3, 0xb7, 0xad, 0x9b, 0xcc, 0xa7, 0xc6, 0x6d, 0xaa, 0xc4, 0xf0, 0xf6, 0x53, 0xbf, + 0x15, 0x56, 0x9e, 0x86, 0x2d, 0x74, 0x9f, 0xaa, 0x3f, 0xf6, 0x5d, 0x3c, 0x15, 0x86, 0x8a, 0x5e, + 0x0d, 0xa7, 0xd1, 0xd0, 0x11, 0x6c, 0x9c, 0xd1, 0xcb, 0x58, 0x3a, 0xdf, 0xca, 0xf3, 0x5d, 0x57, + 0xa5, 0x62, 0x8b, 0x44, 0xe8, 0x21, 0xbd, 0x0b, 0xbb, 0x01, 0x31, 0x53, 0x63, 0xf1, 0xbc, 0x57, + 0xd9, 0x2c, 0x8a, 0xc8, 0xe8, 0x01, 0x6c, 0xc7, 0x61, 0x4a, 0x2f, 0xd0, 0xbd, 0x20, 0xd9, 0x3a, + 0x3b, 0x6c, 0xeb, 0x4c, 0xea, 0x66, 0x9f, 0x5b, 0x47, 0x5d, 0xad, 0x48, 0x70, 0x6f, 0xf3, 0xcf, + 0xad, 0xf3, 0x1d, 0x0d, 0x0b, 0xb6, 0x27, 0xec, 0x25, 0xb4, 0x0c, 0x0b, 0x12, 0xc6, 0x2a, 0x16, + 0x66, 0xa8, 0xc3, 0xe8, 0x4a, 0x4a, 0x2b, 0x74, 0x68, 0x6b, 0x00, 0x3d, 0x09, 0x1f, 0x4b, 0x78, + 0x20, 0x36, 0x1f, 0x0b, 0xb3, 0x48, 0x80, 0x95, 0x96, 0xd4, 0x96, 0x8f, 0x25, 0x7c, 0xca, 0x20, + 0x73, 0xd4, 0xe5, 0x61, 0x49, 0x6c, 0x85, 0xd5, 0xe5, 0xdd, 0xb6, 0x78, 0x2a, 0xb5, 0x84, 0x85, + 0xc6, 0xbf, 0x6e, 0xc0, 0x1b, 0x13, 0xad, 0x89, 0x0e, 0xc1, 0x5d, 0xa9, 0x30, 0x93, 0xfa, 0xb8, + 0x82, 0x0d, 0xd7, 0x94, 0xbb, 0x47, 0x12, 0xd6, 0xa4, 0x27, 0xd4, 0x8b, 0xae, 0x43, 0xed, 0xa0, + 0x4f, 0xc3, 0xb4, 0x2e, 0x56, 0xd5, 0x03, 0x61, 0x0e, 0xdd, 0x84, 0x6d, 0x45, 0x55, 0x06, 0xc7, + 0x12, 0x96, 0x0f, 0x64, 0xea, 0x5e, 0xb1, 0xa8, 0xf4, 0x64, 0x16, 0x7f, 0xcd, 0xa3, 0x37, 0x60, + 0xab, 0xaf, 0x94, 0x75, 0x2d, 0xa0, 0x6d, 0xd8, 0x2c, 0xeb, 0x58, 0x44, 0x75, 0xb8, 0x16, 0x77, + 0xb4, 0xd5, 0x93, 0x41, 0x34, 0xaf, 0x25, 0x1a, 0x01, 0xc6, 0x3d, 0x47, 0xf2, 0xe1, 0x91, 0x50, + 0x45, 0xb7, 0xa0, 0x1e, 0x83, 0x64, 0x45, 0xd6, 0x64, 0xb1, 0x1d, 0x13, 0x2c, 0x67, 0x58, 0x45, + 0xbd, 0x6d, 0xf5, 0x44, 0x00, 0x3a, 0xb1, 0x42, 0x0f, 0x63, 0x59, 0x43, 0xef, 0xc0, 0x5b, 0x25, + 0x13, 0x1b, 0x88, 0xca, 0x29, 0x3d, 0x3a, 0xd8, 0x77, 0x3b, 0x2b, 0x2f, 0x41, 0x62, 0x9c, 0x56, + 0x27, 0x21, 0xd1, 0x5e, 0x8a, 0x45, 0x67, 0xb2, 0x86, 0xbe, 0x0d, 0xef, 0x5c, 0x85, 0x14, 0x2d, + 0x66, 0x1d, 0xbd, 0x07, 0x8d, 0x32, 0xc4, 0xe8, 0x04, 0xe4, 0x0c, 0x85, 0x49, 0x78, 0x54, 0x94, + 0x29, 0x7e, 0x1b, 0x93, 0x66, 0x47, 0x17, 0x18, 0x31, 0x43, 0x93, 0x66, 0x17, 0x21, 0x45, 0xdc, + 0x36, 0xa9, 0x19, 0x1e, 0x62, 0xb5, 0xdf, 0x1d, 0x34, 0xb1, 0x24, 0x6a, 0x92, 0x70, 0x8d, 0x0a, + 0x9f, 0x43, 0x8e, 0x44, 0xe5, 0x50, 0x1a, 0xf4, 0xfa, 0xfb, 0xf4, 0xa0, 0x14, 0xb6, 0xe8, 0xb9, + 0x98, 0xe9, 0x91, 0x9b, 0xaa, 0x22, 0x5c, 0xa7, 0xba, 0xcc, 0x82, 0x95, 0x63, 0x59, 0x93, 0x06, + 0x6d, 0x59, 0x79, 0x2c, 0x6c, 0x17, 0x7a, 0x5b, 0x52, 0xaf, 0x89, 0xe5, 0x2e, 0x33, 0x9a, 0x3a, + 0xd5, 0x67, 0xa6, 0x17, 0x4b, 0x3d, 0x0d, 0xcb, 0x4d, 0x4d, 0x78, 0xa3, 0xd0, 0x25, 0x2a, 0x8a, + 0xda, 0x57, 0x9a, 0x92, 0x70, 0x23, 0xe9, 0xea, 0x8a, 0x58, 0x93, 0x9b, 0x72, 0x57, 0x54, 0xb4, + 0x81, 0xd8, 0x6a, 0x09, 0x37, 0x93, 0xe1, 0xd2, 0x5d, 0x58, 0xea, 0xa8, 0xc7, 0x92, 0x70, 0x0b, + 0xbd, 0x09, 0x6f, 0x14, 0x7b, 0xbb, 0x58, 0xed, 0xa8, 0x9a, 0x24, 0xbc, 0x59, 0x4e, 0xdc, 0x92, + 0x58, 0xef, 0xed, 0xf2, 0xde, 0x70, 0xb1, 0xc2, 0x5b, 0x74, 0x3f, 0x15, 0x7b, 0xdb, 0x92, 0x78, + 0x2c, 0x09, 0x3b, 0x54, 0x67, 0xc5, 0x4e, 0xbe, 0x2e, 0xa5, 0xdf, 0xd9, 0x97, 0xb0, 0xf0, 0x36, + 0xba, 0x06, 0xc2, 0x3e, 0x56, 0xc5, 0x56, 0x53, 0xec, 0x69, 0x91, 0x3a, 0x1a, 0xe1, 0x97, 0xd2, + 0x11, 0x94, 0xae, 0xf1, 0x9d, 0x2c, 0x22, 0x5f, 0xdb, 0xbb, 0x4c, 0x6f, 0x92, 0x22, 0x61, 0xb9, + 0x49, 0xe3, 0x20, 0xf9, 0x40, 0x6e, 0x8a, 0x4c, 0xc8, 0xdf, 0xa2, 0x3d, 0xd2, 0x9e, 0x34, 0x90, + 0x5b, 0x92, 0xa2, 0xc9, 0xda, 0x29, 0x1f, 0xb8, 0x25, 0xbc, 0x47, 0x99, 0xd3, 0x1e, 0x49, 0x69, + 0xe2, 0xd3, 0x2e, 0x8d, 0x85, 0xbe, 0x4d, 0x95, 0xdc, 0x14, 0xdb, 0xed, 0x41, 0x47, 0xee, 0xf5, + 0xa4, 0xd6, 0xe0, 0x58, 0x95, 0x9b, 0x92, 0xb0, 0x5b, 0x00, 0xb3, 0x2f, 0xaa, 0xbf, 0x43, 0x65, + 0x22, 0x2b, 0x2d, 0xf9, 0x58, 0x6e, 0xf5, 0xc5, 0x76, 0x6e, 0x45, 0x77, 0x12, 0xe3, 0x6a, 0x49, + 0x2c, 0x24, 0xfb, 0x5f, 0xd4, 0xc8, 0x43, 0x48, 0xa4, 0xcd, 0x41, 0x47, 0x6d, 0x49, 0xb1, 0x73, + 0xdb, 0x0f, 0x35, 0xfc, 0x3e, 0x95, 0x66, 0x7a, 0xb8, 0x90, 0x26, 0x9c, 0xcb, 0x07, 0x13, 0x3a, + 0xd9, 0x8c, 0xee, 0xd2, 0x60, 0x30, 0x8a, 0x39, 0x53, 0x0e, 0xf0, 0x43, 0xea, 0xb7, 0x22, 0x78, + 0xda, 0x11, 0xde, 0x43, 0xef, 0xc3, 0x6e, 0xd4, 0xc1, 0x76, 0x8a, 0xc8, 0x2e, 0xa1, 0xdc, 0x9d, + 0x0f, 0xfa, 0x5d, 0xf6, 0xf5, 0xce, 0x81, 0x28, 0xd3, 0xd8, 0xf0, 0x23, 0x74, 0x17, 0xee, 0xbc, + 0x1c, 0x3b, 0x8e, 0x3a, 0xf7, 0xd0, 0xc7, 0xf0, 0xe1, 0xb4, 0xf8, 0xd1, 0x20, 0x1f, 0xa3, 0xef, + 0xc2, 0x47, 0x57, 0x10, 0x61, 0xa9, 0x29, 0xd1, 0x73, 0x63, 0xc0, 0x0f, 0x97, 0x41, 0x4f, 0xd2, + 0xfa, 0x5d, 0xe1, 0x3e, 0xfa, 0x3e, 0x3c, 0x98, 0x86, 0xac, 0xd7, 0x6f, 0xd2, 0x38, 0x7b, 0x20, + 0x1e, 0x68, 0x12, 0x1e, 0x1c, 0xc9, 0xcd, 0x66, 0xbf, 0x2b, 0x7c, 0x17, 0x7d, 0x07, 0xbe, 0x15, + 0x51, 0x73, 0x42, 0xb1, 0xd9, 0x54, 0xfb, 0x8a, 0x16, 0xf2, 0xa7, 0x86, 0x26, 0x2b, 0x2d, 0x09, + 0x0b, 0x9f, 0xa0, 0x5d, 0x78, 0x37, 0x87, 0xda, 0x93, 0x94, 0xd6, 0x20, 0x82, 0xc5, 0x98, 0x9f, + 0xa2, 0x3b, 0xf0, 0xde, 0x55, 0x98, 0x6c, 0xf7, 0x84, 0x66, 0xfa, 0x80, 0x6e, 0x92, 0x1c, 0x2e, + 0x96, 0xbe, 0xe8, 0x4b, 0x3d, 0xba, 0x05, 0x9b, 0x6d, 0x59, 0x91, 0x5a, 0xc2, 0x67, 0xa8, 0x01, + 0xb7, 0x27, 0x20, 0x45, 0xc1, 0xfd, 0xf7, 0xd0, 0xbb, 0xb0, 0x33, 0x01, 0x27, 0x89, 0xf2, 0x3f, + 0xa7, 0xeb, 0xdd, 0x97, 0xbf, 0x2c, 0x3b, 0x00, 0x07, 0x9a, 0xda, 0xa5, 0x5e, 0x72, 0x5f, 0xd5, + 0x34, 0xb5, 0x23, 0x7c, 0xff, 0x2a, 0xd4, 0x10, 0x87, 0x62, 0x6b, 0x6a, 0x57, 0xf8, 0x01, 0xdb, + 0xae, 0xf2, 0x97, 0x03, 0x59, 0xd1, 0x70, 0x08, 0xfa, 0x21, 0xdb, 0xae, 0x31, 0x88, 0xf3, 0xfc, + 0x11, 0xda, 0x84, 0x75, 0x0a, 0x55, 0xc4, 0x8e, 0xc4, 0xf7, 0x8d, 0xf0, 0x90, 0x6e, 0x27, 0x0a, + 0xa4, 0x3b, 0x9a, 0xb2, 0x6c, 0xaa, 0x4a, 0xaf, 0xdf, 0xa1, 0x21, 0x43, 0xb7, 0x2b, 0x88, 0xe8, + 0x36, 0xdc, 0xa0, 0xbd, 0xda, 0x89, 0x3a, 0xd0, 0x64, 0x09, 0x0f, 0x3a, 0xf2, 0x21, 0x16, 0xa3, + 0x09, 0x0b, 0xfb, 0xe8, 0x6d, 0x78, 0x73, 0x42, 0x3f, 0x1f, 0xb5, 0x49, 0x6f, 0x3a, 0xea, 0xb1, + 0x84, 0x7b, 0xf2, 0x97, 0x52, 0x4b, 0x68, 0x51, 0x45, 0x66, 0x7c, 0xac, 0xa2, 0x0e, 0x0e, 0x98, + 0xac, 0x14, 0xad, 0x7d, 0x4a, 0x2f, 0x3f, 0x27, 0x22, 0xa6, 0x76, 0x2c, 0x25, 0xce, 0xef, 0xf8, + 0x3e, 0xf5, 0x42, 0x91, 0x93, 0x67, 0x77, 0xb4, 0x83, 0x64, 0x5b, 0xe7, 0x1c, 0x72, 0x2c, 0xf8, + 0x47, 0xaa, 0xac, 0x08, 0x87, 0x94, 0x0b, 0x1f, 0xa9, 0xf8, 0xe5, 0xe7, 0xd1, 0x7f, 0x05, 0x00, + 0x00, 0xff, 0xff, 0x82, 0xf8, 0x8e, 0x8c, 0x92, 0x52, 0x00, 0x00, } diff --git a/vendor/github.com/Rhymen/go-whatsapp/binary/proto/def.proto b/vendor/github.com/Rhymen/go-whatsapp/binary/proto/def.proto index d5f70cc1..6d4006d7 100644 --- a/vendor/github.com/Rhymen/go-whatsapp/binary/proto/def.proto +++ b/vendor/github.com/Rhymen/go-whatsapp/binary/proto/def.proto @@ -3,7 +3,7 @@ package proto; message HydratedQuickReplyButton { optional string displayText = 1; - optional string buttonId = 2; + optional string id = 2; } message HydratedURLButton { @@ -17,6 +17,7 @@ message HydratedCallButton { } message HydratedTemplateButton { + optional uint32 index = 4; oneof hydratedButton { HydratedQuickReplyButton quickReplyButton = 1; HydratedURLButton urlButton = 2; @@ -26,7 +27,7 @@ message HydratedTemplateButton { message QuickReplyButton { optional HighlyStructuredMessage displayText = 1; - optional string buttonId = 2; + optional string id = 2; } message URLButton { @@ -40,6 +41,7 @@ message CallButton { } message TemplateButton { + optional uint32 index = 4; oneof button { QuickReplyButton quickReplyButton = 1; URLButton urlButton = 2; @@ -89,6 +91,8 @@ message ContextInfo { optional uint32 forwardingScore = 21; optional bool isForwarded = 22; optional AdReplyInfo quotedAd = 23; + optional MessageKey placeholderKey = 24; + optional uint32 expiration = 25; } message SenderKeyDistributionMessage { @@ -114,6 +118,10 @@ message ImageMessage { optional bytes firstScanSidecar = 18; optional uint32 firstScanLength = 19; optional uint32 experimentGroupId = 20; + optional bytes scansSidecar = 21; + repeated uint32 scanLengths = 22; + optional bytes midQualityFileSha256 = 23; + optional bytes midQualityFileEncSha256 = 24; } message ContactMessage { @@ -156,6 +164,7 @@ message ExtendedTextMessage { optional EXTENDED_TEXT_MESSAGE_PREVIEWTYPE previewType = 10; optional bytes jpegThumbnail = 16; optional ContextInfo contextInfo = 17; + optional bool doNotPlayInline = 18; } message DocumentMessage { @@ -228,8 +237,10 @@ message ProtocolMessage { optional MessageKey key = 1; enum PROTOCOL_MESSAGE_TYPE { REVOKE = 0; + EPHEMERAL_SETTING = 3; } optional PROTOCOL_MESSAGE_TYPE type = 2; + optional uint32 ephemeralExpiration = 4; } message ContactsArrayMessage { @@ -294,6 +305,7 @@ message HighlyStructuredMessage { repeated HSMLocalizableParameter localizableParams = 6; optional string deterministicLg = 7; optional string deterministicLc = 8; + optional TemplateMessage hydratedHsm = 9; } message SendPaymentMessage { @@ -341,7 +353,8 @@ message StickerMessage { optional string directPath = 8; optional uint64 fileLength = 9; optional int64 mediaKeyTimestamp = 10; - optional bytes pngThumbnail = 16; + optional uint32 firstFrameLength = 11; + optional bytes firstFrameSidecar = 12; optional ContextInfo contextInfo = 17; } @@ -361,7 +374,8 @@ message FourRowTemplate { message HydratedFourRowTemplate { optional string hydratedContentText = 6; optional string hydratedFooterText = 7; - repeated HydratedTemplateButton hydratedButtons = 9; + repeated HydratedTemplateButton hydratedButtons = 8; + optional string templateId = 9; oneof title { DocumentMessage documentMessage = 1; string hydratedTitleText = 2; @@ -372,6 +386,8 @@ message HydratedFourRowTemplate { } message TemplateMessage { + optional ContextInfo contextInfo = 3; + optional HydratedFourRowTemplate hydratedTemplate = 4; oneof format { FourRowTemplate fourRowTemplate = 1; HydratedFourRowTemplate hydratedFourRowTemplate = 2; @@ -379,9 +395,10 @@ message TemplateMessage { } message TemplateButtonReplyMessage { - optional string selectedButtonId = 1; - repeated string selectedButtonDisplayText = 2; + optional string selectedId = 1; + optional string selectedDisplayText = 2; optional ContextInfo contextInfo = 3; + optional uint32 selectedIndex = 4; } message ProductSnapshot { @@ -394,6 +411,7 @@ message ProductSnapshot { optional string retailerId = 7; optional string url = 8; optional uint32 productImageCount = 9; + optional string firstImageId = 11; } message ProductMessage { @@ -409,6 +427,16 @@ message GroupInviteMessage { optional string groupName = 4; optional bytes jpegThumbnail = 5; optional string caption = 6; + optional ContextInfo contextInfo = 7; +} + +message DeviceSentMessage { + optional string destinationJid = 1; + optional Message message = 2; +} + +message DeviceSyncMessage { + optional bytes serializedXmlBytes = 1; } message Message { @@ -434,8 +462,11 @@ message Message { optional CancelPaymentRequestMessage cancelPaymentRequestMessage = 24; optional TemplateMessage templateMessage = 25; optional StickerMessage stickerMessage = 26; - optional ProductMessage productMessage = 27; optional GroupInviteMessage groupInviteMessage = 28; + optional TemplateButtonReplyMessage templateButtonReplyMessage = 29; + optional ProductMessage productMessage = 30; + optional DeviceSentMessage deviceSentMessage = 31; + optional DeviceSyncMessage deviceSyncMessage = 32; } message MessageKey { @@ -447,9 +478,10 @@ message MessageKey { message WebFeatures { enum WEB_FEATURES_FLAG { - NOT_IMPLEMENTED = 0; - IMPLEMENTED = 1; - OPTIONAL = 2; + NOT_STARTED = 0; + FORCE_UPGRADE = 1; + DEVELOPMENT = 2; + PRODUCTION = 3; } optional WEB_FEATURES_FLAG labelsDisplay = 1; optional WEB_FEATURES_FLAG voipIndividualOutgoing = 2; @@ -473,6 +505,14 @@ message WebFeatures { optional WEB_FEATURES_FLAG voipIndividualVideo = 22; optional WEB_FEATURES_FLAG thirdPartyStickers = 23; optional WEB_FEATURES_FLAG frequentlyForwardedSetting = 24; + optional WEB_FEATURES_FLAG groupsV4JoinPermission = 25; + optional WEB_FEATURES_FLAG recentStickers = 26; + optional WEB_FEATURES_FLAG catalog = 27; + optional WEB_FEATURES_FLAG starredStickers = 28; + optional WEB_FEATURES_FLAG voipGroupCall = 29; + optional WEB_FEATURES_FLAG templateMessage = 30; + optional WEB_FEATURES_FLAG templateMessageInteractivity = 31; + optional WEB_FEATURES_FLAG ephemeralMessages = 32; } message TabletNotificationsInfo { @@ -614,6 +654,9 @@ message WebMessageInfo { BIZ_TWO_TIER_MIGRATION_BOTTOM = 67; OVERSIZED = 68; GROUP_CHANGE_NO_FREQUENTLY_FORWARDED = 69; + GROUP_V4_ADD_INVITE_SENT = 70; + GROUP_PARTICIPANT_ADD_REQUEST_JOIN = 71; + CHANGE_EPHEMERAL_SETTING = 72; } optional WEB_MESSAGE_INFO_STUBTYPE messageStubType = 24; optional bool clearMedia = 25; @@ -623,4 +666,6 @@ message WebMessageInfo { optional PaymentInfo paymentInfo = 29; optional LiveLocationMessage finalLiveLocation = 30; optional PaymentInfo quotedPaymentInfo = 31; -} + optional uint64 ephemeralStartTimestamp = 32; + optional uint32 ephemeralDuration = 33; +}
\ No newline at end of file diff --git a/vendor/github.com/Rhymen/go-whatsapp/conn.go b/vendor/github.com/Rhymen/go-whatsapp/conn.go index 915ad4d9..26df39da 100644 --- a/vendor/github.com/Rhymen/go-whatsapp/conn.go +++ b/vendor/github.com/Rhymen/go-whatsapp/conn.go @@ -93,6 +93,8 @@ type Conn struct { loginSessionLock sync.RWMutex Proxy func(*http.Request) (*url.URL, error) + + writerLock sync.RWMutex } type websocketWrapper struct { diff --git a/vendor/github.com/Rhymen/go-whatsapp/contact.go b/vendor/github.com/Rhymen/go-whatsapp/contact.go index bcaf8734..92d0a4ad 100644 --- a/vendor/github.com/Rhymen/go-whatsapp/contact.go +++ b/vendor/github.com/Rhymen/go-whatsapp/contact.go @@ -10,11 +10,11 @@ import ( type Presence string const ( - PresenceAvailable = "available" - PresenceUnavailable = "unavailable" - PresenceComposing = "composing" - PresenceRecording = "recording" - PresencePaused = "paused" + PresenceAvailable Presence = "available" + PresenceUnavailable Presence = "unavailable" + PresenceComposing Presence = "composing" + PresenceRecording Presence = "recording" + PresencePaused Presence = "paused" ) //TODO: filename? WhatsApp uses Store.Contacts for these functions diff --git a/vendor/github.com/Rhymen/go-whatsapp/go.mod b/vendor/github.com/Rhymen/go-whatsapp/go.mod index ead71f94..53ba08f5 100644 --- a/vendor/github.com/Rhymen/go-whatsapp/go.mod +++ b/vendor/github.com/Rhymen/go-whatsapp/go.mod @@ -10,3 +10,5 @@ require ( github.com/pkg/errors v0.8.1 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 ) + +go 1.13 diff --git a/vendor/github.com/Rhymen/go-whatsapp/handler.go b/vendor/github.com/Rhymen/go-whatsapp/handler.go index a70d15bf..1188f794 100644 --- a/vendor/github.com/Rhymen/go-whatsapp/handler.go +++ b/vendor/github.com/Rhymen/go-whatsapp/handler.go @@ -82,7 +82,7 @@ type LocationMessageHandler interface { } /* -The StickerMessageHandler interface needs to be implemented to receive location messages dispatched by the dispatcher. +The StickerMessageHandler interface needs to be implemented to receive sticker messages dispatched by the dispatcher. */ type StickerMessageHandler interface { Handler @@ -90,6 +90,14 @@ type StickerMessageHandler interface { } /* +The ContactMessageHandler interface needs to be implemented to receive contact messages dispatched by the dispatcher. +*/ +type ContactMessageHandler interface { + Handler + HandleContactMessage(message ContactMessage) +} + +/* The JsonMessageHandler interface needs to be implemented to receive json messages dispatched by the dispatcher. These json messages contain status updates of every kind sent by WhatsAppWeb servers. WhatsAppWeb uses these messages to built a Store, which is used to save these "secondary" information. These messages may contain @@ -267,6 +275,17 @@ func (wac *Conn) handleWithCustomHandlers(message interface{}, handlers []Handle } } + case ContactMessage: + for _, h := range handlers { + if x, ok := h.(ContactMessageHandler); ok { + if wac.shouldCallSynchronously(h) { + x.HandleContactMessage(m) + } else { + go x.HandleContactMessage(m) + } + } + } + case *proto.WebMessageInfo: for _, h := range handlers { if x, ok := h.(RawMessageHandler); ok { diff --git a/vendor/github.com/Rhymen/go-whatsapp/message.go b/vendor/github.com/Rhymen/go-whatsapp/message.go index 5f69f83e..77e7e1c3 100644 --- a/vendor/github.com/Rhymen/go-whatsapp/message.go +++ b/vendor/github.com/Rhymen/go-whatsapp/message.go @@ -23,64 +23,53 @@ const ( MediaDocument MediaType = "WhatsApp Document Keys" ) -var msgInfo MessageInfo - func (wac *Conn) Send(msg interface{}) (string, error) { - var err error - var ch <-chan string var msgProto *proto.WebMessageInfo switch m := msg.(type) { case *proto.WebMessageInfo: - ch, err = wac.sendProto(m) + msgProto = m case TextMessage: msgProto = getTextProto(m) - msgInfo = getMessageInfo(msgProto) - ch, err = wac.sendProto(msgProto) case ImageMessage: + var err error m.url, m.mediaKey, m.fileEncSha256, m.fileSha256, m.fileLength, err = wac.Upload(m.Content, MediaImage) if err != nil { return "ERROR", fmt.Errorf("image upload failed: %v", err) } msgProto = getImageProto(m) - msgInfo = getMessageInfo(msgProto) - ch, err = wac.sendProto(msgProto) case VideoMessage: + var err error m.url, m.mediaKey, m.fileEncSha256, m.fileSha256, m.fileLength, err = wac.Upload(m.Content, MediaVideo) if err != nil { return "ERROR", fmt.Errorf("video upload failed: %v", err) } msgProto = getVideoProto(m) - msgInfo = getMessageInfo(msgProto) - ch, err = wac.sendProto(msgProto) case DocumentMessage: + var err error m.url, m.mediaKey, m.fileEncSha256, m.fileSha256, m.fileLength, err = wac.Upload(m.Content, MediaDocument) if err != nil { return "ERROR", fmt.Errorf("document upload failed: %v", err) } msgProto = getDocumentProto(m) - msgInfo = getMessageInfo(msgProto) - ch, err = wac.sendProto(msgProto) case AudioMessage: + var err error m.url, m.mediaKey, m.fileEncSha256, m.fileSha256, m.fileLength, err = wac.Upload(m.Content, MediaAudio) if err != nil { return "ERROR", fmt.Errorf("audio upload failed: %v", err) } msgProto = getAudioProto(m) - msgInfo = getMessageInfo(msgProto) - ch, err = wac.sendProto(msgProto) case LocationMessage: msgProto = GetLocationProto(m) - msgInfo = getMessageInfo(msgProto) - ch, err = wac.sendProto(msgProto) case LiveLocationMessage: msgProto = GetLiveLocationProto(m) - msgInfo = getMessageInfo(msgProto) - ch, err = wac.sendProto(msgProto) + case ContactMessage: + msgProto = getContactMessageProto(m) default: return "ERROR", fmt.Errorf("cannot match type %T, use message types declared in the package", msg) } + ch, err := wac.sendProto(msgProto) if err != nil { return "ERROR", fmt.Errorf("could not send proto: %v", err) } @@ -95,7 +84,7 @@ func (wac *Conn) Send(msg interface{}) (string, error) { return "ERROR", fmt.Errorf("message sending responded with %d", resp["status"]) } if int(resp["status"].(float64)) == 200 { - return msgInfo.Id, nil + return getMessageInfo(msgProto).Id, nil } case <-time.After(wac.msgTimeout): return "ERROR", fmt.Errorf("sending message timed out") @@ -124,15 +113,13 @@ func init() { MessageInfo contains general message information. It is part of every of every message type. */ type MessageInfo struct { - Id string - RemoteJid string - SenderJid string - FromMe bool - Timestamp uint64 - PushName string - Status MessageStatus - QuotedMessageID string - QuotedMessage proto.Message + Id string + RemoteJid string + SenderJid string + FromMe bool + Timestamp uint64 + PushName string + Status MessageStatus Source *proto.WebMessageInfo } @@ -185,14 +172,35 @@ func getInfoProto(info *MessageInfo) *proto.WebMessageInfo { } } -func getContextInfoProto(info *MessageInfo) *proto.ContextInfo { - if len(info.QuotedMessageID) > 0 { +/* +ContextInfo represents contextinfo of every message +*/ +type ContextInfo struct { + QuotedMessageID string //StanzaId + QuotedMessage *proto.Message + Participant string + IsForwarded bool +} + +func getMessageContext(msg *proto.ContextInfo) ContextInfo { + + return ContextInfo{ + QuotedMessageID: msg.GetStanzaId(), //StanzaId + QuotedMessage: msg.GetQuotedMessage(), + Participant: msg.GetParticipant(), + IsForwarded: msg.GetIsForwarded(), + } +} + +func getContextInfoProto(context *ContextInfo) *proto.ContextInfo { + if len(context.QuotedMessageID) > 0 { contextInfo := &proto.ContextInfo{ - StanzaId: &info.QuotedMessageID, + StanzaId: &context.QuotedMessageID, } - if &info.QuotedMessage != nil { - contextInfo.QuotedMessage = &info.QuotedMessage + if &context.QuotedMessage != nil { + contextInfo.QuotedMessage = context.QuotedMessage + contextInfo.Participant = &context.Participant } return contextInfo @@ -205,24 +213,28 @@ func getContextInfoProto(info *MessageInfo) *proto.ContextInfo { TextMessage represents a text message. */ type TextMessage struct { - Info MessageInfo - Text string + Info MessageInfo + Text string + ContextInfo ContextInfo } func getTextMessage(msg *proto.WebMessageInfo) TextMessage { text := TextMessage{Info: getMessageInfo(msg)} if m := msg.GetMessage().GetExtendedTextMessage(); m != nil { text.Text = m.GetText() - text.Info.QuotedMessageID = m.GetContextInfo().GetStanzaId() + + text.ContextInfo = getMessageContext(m.GetContextInfo()) } else { text.Text = msg.GetMessage().GetConversation() + } + return text } func getTextProto(msg TextMessage) *proto.WebMessageInfo { p := getInfoProto(&msg.Info) - contextInfo := getContextInfoProto(&msg.Info) + contextInfo := getContextInfoProto(&msg.ContextInfo) if contextInfo == nil { p.Message = &proto.Message{ @@ -255,6 +267,7 @@ type ImageMessage struct { fileEncSha256 []byte fileSha256 []byte fileLength uint64 + ContextInfo ContextInfo } func getImageMessage(msg *proto.WebMessageInfo) ImageMessage { @@ -270,10 +283,7 @@ func getImageMessage(msg *proto.WebMessageInfo) ImageMessage { fileEncSha256: image.GetFileEncSha256(), fileSha256: image.GetFileSha256(), fileLength: image.GetFileLength(), - } - - if contextInfo := image.GetContextInfo(); contextInfo != nil { - imageMessage.Info.QuotedMessageID = contextInfo.GetStanzaId() + ContextInfo: getMessageContext(image.GetContextInfo()), } return imageMessage @@ -281,7 +291,7 @@ func getImageMessage(msg *proto.WebMessageInfo) ImageMessage { func getImageProto(msg ImageMessage) *proto.WebMessageInfo { p := getInfoProto(&msg.Info) - contextInfo := getContextInfoProto(&msg.Info) + contextInfo := getContextInfoProto(&msg.ContextInfo) p.Message = &proto.Message{ ImageMessage: &proto.ImageMessage{ @@ -323,6 +333,7 @@ type VideoMessage struct { fileEncSha256 []byte fileSha256 []byte fileLength uint64 + ContextInfo ContextInfo } func getVideoMessage(msg *proto.WebMessageInfo) VideoMessage { @@ -340,10 +351,7 @@ func getVideoMessage(msg *proto.WebMessageInfo) VideoMessage { fileEncSha256: vid.GetFileEncSha256(), fileSha256: vid.GetFileSha256(), fileLength: vid.GetFileLength(), - } - - if contextInfo := vid.GetContextInfo(); contextInfo != nil { - videoMessage.Info.QuotedMessageID = contextInfo.GetStanzaId() + ContextInfo: getMessageContext(vid.GetContextInfo()), } return videoMessage @@ -351,7 +359,7 @@ func getVideoMessage(msg *proto.WebMessageInfo) VideoMessage { func getVideoProto(msg VideoMessage) *proto.WebMessageInfo { p := getInfoProto(&msg.Info) - contextInfo := getContextInfoProto(&msg.Info) + contextInfo := getContextInfoProto(&msg.ContextInfo) p.Message = &proto.Message{ VideoMessage: &proto.VideoMessage{ @@ -393,6 +401,7 @@ type AudioMessage struct { fileEncSha256 []byte fileSha256 []byte fileLength uint64 + ContextInfo ContextInfo } func getAudioMessage(msg *proto.WebMessageInfo) AudioMessage { @@ -407,10 +416,7 @@ func getAudioMessage(msg *proto.WebMessageInfo) AudioMessage { fileEncSha256: aud.GetFileEncSha256(), fileSha256: aud.GetFileSha256(), fileLength: aud.GetFileLength(), - } - - if contextInfo := aud.GetContextInfo(); contextInfo != nil { - audioMessage.Info.QuotedMessageID = contextInfo.GetStanzaId() + ContextInfo: getMessageContext(aud.GetContextInfo()), } return audioMessage @@ -418,7 +424,7 @@ func getAudioMessage(msg *proto.WebMessageInfo) AudioMessage { func getAudioProto(msg AudioMessage) *proto.WebMessageInfo { p := getInfoProto(&msg.Info) - contextInfo := getContextInfoProto(&msg.Info) + contextInfo := getContextInfoProto(&msg.ContextInfo) p.Message = &proto.Message{ AudioMessage: &proto.AudioMessage{ Url: &msg.url, @@ -459,6 +465,7 @@ type DocumentMessage struct { fileEncSha256 []byte fileSha256 []byte fileLength uint64 + ContextInfo ContextInfo } func getDocumentMessage(msg *proto.WebMessageInfo) DocumentMessage { @@ -476,10 +483,7 @@ func getDocumentMessage(msg *proto.WebMessageInfo) DocumentMessage { fileEncSha256: doc.GetFileEncSha256(), fileSha256: doc.GetFileSha256(), fileLength: doc.GetFileLength(), - } - - if contextInfo := doc.GetContextInfo(); contextInfo != nil { - documentMessage.Info.QuotedMessageID = contextInfo.GetStanzaId() + ContextInfo: getMessageContext(doc.GetContextInfo()), } return documentMessage @@ -487,7 +491,7 @@ func getDocumentMessage(msg *proto.WebMessageInfo) DocumentMessage { func getDocumentProto(msg DocumentMessage) *proto.WebMessageInfo { p := getInfoProto(&msg.Info) - contextInfo := getContextInfoProto(&msg.Info) + contextInfo := getContextInfoProto(&msg.ContextInfo) p.Message = &proto.Message{ DocumentMessage: &proto.DocumentMessage{ JpegThumbnail: msg.Thumbnail, @@ -523,6 +527,7 @@ type LocationMessage struct { Address string Url string JpegThumbnail []byte + ContextInfo ContextInfo } func GetLocationMessage(msg *proto.WebMessageInfo) LocationMessage { @@ -536,10 +541,7 @@ func GetLocationMessage(msg *proto.WebMessageInfo) LocationMessage { Address: loc.GetAddress(), Url: loc.GetUrl(), JpegThumbnail: loc.GetJpegThumbnail(), - } - - if contextInfo := loc.GetContextInfo(); contextInfo != nil { - locationMessage.Info.QuotedMessageID = contextInfo.GetStanzaId() + ContextInfo: getMessageContext(loc.GetContextInfo()), } return locationMessage @@ -547,7 +549,7 @@ func GetLocationMessage(msg *proto.WebMessageInfo) LocationMessage { func GetLocationProto(msg LocationMessage) *proto.WebMessageInfo { p := getInfoProto(&msg.Info) - contextInfo := getContextInfoProto(&msg.Info) + contextInfo := getContextInfoProto(&msg.ContextInfo) p.Message = &proto.Message{ LocationMessage: &proto.LocationMessage{ @@ -576,6 +578,7 @@ type LiveLocationMessage struct { Caption string SequenceNumber int64 JpegThumbnail []byte + ContextInfo ContextInfo } func GetLiveLocationMessage(msg *proto.WebMessageInfo) LiveLocationMessage { @@ -591,10 +594,7 @@ func GetLiveLocationMessage(msg *proto.WebMessageInfo) LiveLocationMessage { Caption: loc.GetCaption(), SequenceNumber: loc.GetSequenceNumber(), JpegThumbnail: loc.GetJpegThumbnail(), - } - - if contextInfo := loc.GetContextInfo(); contextInfo != nil { - liveLocationMessage.Info.QuotedMessageID = contextInfo.GetStanzaId() + ContextInfo: getMessageContext(loc.GetContextInfo()), } return liveLocationMessage @@ -602,7 +602,7 @@ func GetLiveLocationMessage(msg *proto.WebMessageInfo) LiveLocationMessage { func GetLiveLocationProto(msg LiveLocationMessage) *proto.WebMessageInfo { p := getInfoProto(&msg.Info) - contextInfo := getContextInfoProto(&msg.Info) + contextInfo := getContextInfoProto(&msg.ContextInfo) p.Message = &proto.Message{ LiveLocationMessage: &proto.LiveLocationMessage{ DegreesLatitude: &msg.DegreesLatitude, @@ -625,7 +625,6 @@ StickerMessage represents a sticker message. type StickerMessage struct { Info MessageInfo - Thumbnail []byte Type string Content io.Reader url string @@ -633,30 +632,79 @@ type StickerMessage struct { fileEncSha256 []byte fileSha256 []byte fileLength uint64 + + ContextInfo ContextInfo } func getStickerMessage(msg *proto.WebMessageInfo) StickerMessage { sticker := msg.GetMessage().GetStickerMessage() - StickerMessage := StickerMessage{ + stickerMessage := StickerMessage{ Info: getMessageInfo(msg), - Thumbnail: sticker.GetPngThumbnail(), url: sticker.GetUrl(), mediaKey: sticker.GetMediaKey(), Type: sticker.GetMimetype(), fileEncSha256: sticker.GetFileEncSha256(), fileSha256: sticker.GetFileSha256(), fileLength: sticker.GetFileLength(), + ContextInfo: getMessageContext(sticker.GetContextInfo()), } - if contextInfo := sticker.GetContextInfo(); contextInfo != nil { - StickerMessage.Info.QuotedMessageID = contextInfo.GetStanzaId() + return stickerMessage +} + +/* +Download is the function to retrieve Sticker media data. The media gets downloaded, validated and returned. +*/ + +func (m *StickerMessage) Download() ([]byte, error) { + return Download(m.url, m.mediaKey, MediaImage, int(m.fileLength)) +} + +/* +ContactMessage represents a contact message. +*/ +type ContactMessage struct { + Info MessageInfo + + DisplayName string + Vcard string + + ContextInfo ContextInfo +} + +func getContactMessage(msg *proto.WebMessageInfo) ContactMessage { + contact := msg.GetMessage().GetContactMessage() + + contactMessage := ContactMessage{ + Info: getMessageInfo(msg), + + DisplayName: contact.GetDisplayName(), + Vcard: contact.GetVcard(), + + ContextInfo: getMessageContext(contact.GetContextInfo()), + } + + return contactMessage +} + +func getContactMessageProto(msg ContactMessage) *proto.WebMessageInfo { + p := getInfoProto(&msg.Info) + contextInfo := getContextInfoProto(&msg.ContextInfo) + + p.Message = &proto.Message{ + ContactMessage: &proto.ContactMessage{ + DisplayName: &msg.DisplayName, + Vcard: &msg.Vcard, + ContextInfo: contextInfo, + }, } - return StickerMessage + return p } func ParseProtoMessage(msg *proto.WebMessageInfo) interface{} { + switch { case msg.GetMessage().GetAudioMessage() != nil: @@ -686,8 +734,12 @@ func ParseProtoMessage(msg *proto.WebMessageInfo) interface{} { case msg.GetMessage().GetStickerMessage() != nil: return getStickerMessage(msg) + case msg.GetMessage().GetContactMessage() != nil: + return getContactMessage(msg) + default: //cannot match message + } return nil diff --git a/vendor/github.com/Rhymen/go-whatsapp/profile.go b/vendor/github.com/Rhymen/go-whatsapp/profile.go new file mode 100644 index 00000000..d4af102c --- /dev/null +++ b/vendor/github.com/Rhymen/go-whatsapp/profile.go @@ -0,0 +1,43 @@ +package whatsapp + +import ( + "fmt" + "github.com/Rhymen/go-whatsapp/binary" + "strconv" + "time" +) + +// Pictures must be JPG 640x640 and 96x96, respectively +func (wac *Conn) UploadProfilePic(image, preview []byte) (<-chan string, error) { + tag := fmt.Sprintf("%d.--%d", time.Now().Unix(), wac.msgCount*19) + n := binary.Node{ + Description: "action", + Attributes: map[string]string{ + "type": "set", + "epoch": strconv.Itoa(wac.msgCount), + }, + Content: []interface{}{ + binary.Node{ + Description: "picture", + Attributes: map[string]string{ + "id": tag, + "jid": wac.Info.Wid, + "type": "set", + }, + Content: []binary.Node{ + { + Description: "image", + Attributes: nil, + Content: image, + }, + { + Description: "preview", + Attributes: nil, + Content: preview, + }, + }, + }, + }, + } + return wac.writeBinary(n, profile, 136, tag) +} diff --git a/vendor/github.com/Rhymen/go-whatsapp/write.go b/vendor/github.com/Rhymen/go-whatsapp/write.go index b3704e4a..1a2f4d7b 100644 --- a/vendor/github.com/Rhymen/go-whatsapp/write.go +++ b/vendor/github.com/Rhymen/go-whatsapp/write.go @@ -5,16 +5,22 @@ import ( "crypto/sha256" "encoding/json" "fmt" + "strconv" + + "time" + "github.com/Rhymen/go-whatsapp/binary" "github.com/Rhymen/go-whatsapp/crypto/cbc" "github.com/gorilla/websocket" "github.com/pkg/errors" - "strconv" - "time" ) //writeJson enqueues a json message into the writeChan func (wac *Conn) writeJson(data []interface{}) (<-chan string, error) { + + wac.writerLock.Lock() + defer wac.writerLock.Unlock() + d, err := json.Marshal(data) if err != nil { return nil, err @@ -38,6 +44,9 @@ func (wac *Conn) writeBinary(node binary.Node, metric metric, flag flag, message return nil, ErrMissingMessageTag } + wac.writerLock.Lock() + defer wac.writerLock.Unlock() + data, err := wac.encryptBinaryMessage(node) if err != nil { return nil, errors.Wrap(err, "encryptBinaryMessage(node) failed") |