feat: add `SpectateCommunity` api

- added `SpectateCommunity` endpoint, it is supposed to be used in
  scenarios where we want to "Go to public Community" and see its
  content without joining
- added `spectated` field to `Community`, it means we are observing the
  community and its chats but we are not members

Use case:
https://github.com/status-im/status-desktop/issues/7072#issuecomment-1246560885
This commit is contained in:
Patryk Osmaczko 2022-09-20 21:57:39 +02:00 committed by osmaczko
parent bf04ff3502
commit 73a45dd58e
13 changed files with 435 additions and 245 deletions

View File

@ -30,6 +30,7 @@ type Config struct {
Joined bool
Requested bool
Verified bool
Spectated bool
Muted bool
Logger *zap.Logger
RequestedToJoinAt uint64
@ -186,6 +187,7 @@ func (o *Community) MarshalJSON() ([]byte, error) {
Admin bool `json:"admin"`
Verified bool `json:"verified"`
Joined bool `json:"joined"`
Spectated bool `json:"spectated"`
RequestedAccessAt int `json:"requestedAccessAt"`
Name string `json:"name"`
Description string `json:"description"`
@ -214,6 +216,7 @@ func (o *Community) MarshalJSON() ([]byte, error) {
Chats: make(map[string]CommunityChat),
Categories: make(map[string]CommunityCategory),
Joined: o.config.Joined,
Spectated: o.config.Spectated,
CanRequestAccess: o.CanRequestAccess(o.config.MemberIdentity),
CanJoin: o.canJoin(),
CanManageUsers: o.CanManageUsers(o.config.MemberIdentity),
@ -820,6 +823,11 @@ func (o *Community) Join() {
func (o *Community) Leave() {
o.config.Joined = false
o.config.Spectated = false
}
func (o *Community) Spectate() {
o.config.Spectated = true
}
func (o *Community) Encrypted() bool {
@ -834,6 +842,10 @@ func (o *Community) Joined() bool {
return o.config.Joined
}
func (o *Community) Spectated() bool {
return o.config.Spectated
}
func (o *Community) Verified() bool {
return o.config.Verified
}
@ -869,8 +881,8 @@ func (o *Community) UpdateCommunityDescription(signer *ecdsa.PublicKey, descript
return response, nil
}
// We only calculate changes if we joined the community or we requested access, otherwise not interested
if o.config.Joined || o.config.RequestedToJoinAt > 0 {
// We only calculate changes if we joined/spectated the community or we requested access, otherwise not interested
if o.config.Joined || o.config.Spectated || o.config.RequestedToJoinAt > 0 {
// Check for new members at the org level
for pk, member := range description.Members {
if _, ok := o.config.CommunityDescription.Members[pk]; !ok {

View File

@ -274,6 +274,10 @@ func (m *Manager) Joined() ([]*Community, error) {
return m.persistence.JoinedCommunities(m.identity)
}
func (m *Manager) Spectated() ([]*Community, error) {
return m.persistence.SpectatedCommunities(m.identity)
}
func (m *Manager) JoinedAndPendingCommunitiesWithRequests() ([]*Community, error) {
return m.persistence.JoinedAndPendingCommunitiesWithRequests(m.identity)
}
@ -1023,6 +1027,21 @@ func (m *Manager) JoinCommunity(id types.HexBytes) (*Community, error) {
return community, nil
}
func (m *Manager) SpectateCommunity(id types.HexBytes) (*Community, error) {
community, err := m.GetByID(id)
if err != nil {
return nil, err
}
if community == nil {
return nil, ErrOrgNotFound
}
community.Spectate()
if err = m.persistence.SaveCommunity(community); err != nil {
return nil, err
}
return community, nil
}
func (m *Manager) GetMagnetlinkMessageClock(communityID types.HexBytes) (uint64, error) {
return m.persistence.GetMagnetlinkMessageClock(communityID)
}

View File

@ -25,7 +25,7 @@ var ErrOldRequestToJoin = errors.New("old request to join")
var ErrOldRequestToLeave = errors.New("old request to leave")
const OR = " OR "
const communitiesBaseQuery = `SELECT c.id, c.private_key, c.description,c.joined,c.verified,c.muted,r.clock FROM communities_communities c LEFT JOIN communities_requests_to_join r ON c.id = r.community_id AND r.public_key = ?`
const communitiesBaseQuery = `SELECT c.id, c.private_key, c.description,c.joined,c.spectated,c.verified,c.muted,r.clock FROM communities_communities c LEFT JOIN communities_requests_to_join r ON c.id = r.community_id AND r.public_key = ?`
func (p *Persistence) SaveCommunity(community *Community) error {
id := community.ID()
@ -35,7 +35,7 @@ func (p *Persistence) SaveCommunity(community *Community) error {
return err
}
_, err = p.db.Exec(`INSERT INTO communities_communities (id, private_key, description, joined, verified) VALUES (?, ?, ?, ?, ?)`, id, crypto.FromECDSA(privateKey), description, community.config.Joined, community.config.Verified)
_, err = p.db.Exec(`INSERT INTO communities_communities (id, private_key, description, joined, spectated, verified) VALUES (?, ?, ?, ?, ?, ?)`, id, crypto.FromECDSA(privateKey), description, community.config.Joined, community.config.Spectated, community.config.Verified)
return err
}
@ -95,14 +95,14 @@ func (p *Persistence) queryCommunities(memberIdentity *ecdsa.PublicKey, query st
for rows.Next() {
var publicKeyBytes, privateKeyBytes, descriptionBytes []byte
var joined, verified, muted bool
var joined, spectated, verified, muted bool
var requestedToJoinAt sql.NullInt64
err := rows.Scan(&publicKeyBytes, &privateKeyBytes, &descriptionBytes, &joined, &verified, &muted, &requestedToJoinAt)
err := rows.Scan(&publicKeyBytes, &privateKeyBytes, &descriptionBytes, &joined, &spectated, &verified, &muted, &requestedToJoinAt)
if err != nil {
return nil, err
}
org, err := unmarshalCommunityFromDB(memberIdentity, publicKeyBytes, privateKeyBytes, descriptionBytes, joined, verified, muted, uint64(requestedToJoinAt.Int64), p.logger)
org, err := unmarshalCommunityFromDB(memberIdentity, publicKeyBytes, privateKeyBytes, descriptionBytes, joined, spectated, verified, muted, uint64(requestedToJoinAt.Int64), p.logger)
if err != nil {
return nil, err
}
@ -122,6 +122,11 @@ func (p *Persistence) JoinedCommunities(memberIdentity *ecdsa.PublicKey) ([]*Com
return p.queryCommunities(memberIdentity, query)
}
func (p *Persistence) SpectatedCommunities(memberIdentity *ecdsa.PublicKey) ([]*Community, error) {
query := communitiesBaseQuery + ` WHERE c.spectated`
return p.queryCommunities(memberIdentity, query)
}
func (p *Persistence) rowsToCommunities(memberIdentity *ecdsa.PublicKey, rows *sql.Rows) (comms []*Community, err error) {
defer func() {
if err != nil {
@ -138,7 +143,7 @@ func (p *Persistence) rowsToCommunities(memberIdentity *ecdsa.PublicKey, rows *s
// Community specific fields
var publicKeyBytes, privateKeyBytes, descriptionBytes []byte
var joined, verified, muted bool
var joined, spectated, verified, muted bool
// Request to join specific fields
var rtjID, rtjCommunityID []byte
@ -146,13 +151,13 @@ func (p *Persistence) rowsToCommunities(memberIdentity *ecdsa.PublicKey, rows *s
var rtjClock, rtjState sql.NullInt64
err = rows.Scan(
&publicKeyBytes, &privateKeyBytes, &descriptionBytes, &joined, &verified, &muted,
&publicKeyBytes, &privateKeyBytes, &descriptionBytes, &joined, &spectated, &verified, &muted,
&rtjID, &rtjPublicKey, &rtjClock, &rtjENSName, &rtjChatID, &rtjCommunityID, &rtjState)
if err != nil {
return nil, err
}
comm, err = unmarshalCommunityFromDB(memberIdentity, publicKeyBytes, privateKeyBytes, descriptionBytes, joined, verified, muted, uint64(rtjClock.Int64), p.logger)
comm, err = unmarshalCommunityFromDB(memberIdentity, publicKeyBytes, privateKeyBytes, descriptionBytes, joined, spectated, verified, muted, uint64(rtjClock.Int64), p.logger)
if err != nil {
return nil, err
}
@ -169,7 +174,7 @@ func (p *Persistence) rowsToCommunities(memberIdentity *ecdsa.PublicKey, rows *s
func (p *Persistence) JoinedAndPendingCommunitiesWithRequests(memberIdentity *ecdsa.PublicKey) (comms []*Community, err error) {
query := `SELECT
c.id, c.private_key, c.description, c.joined, c.verified, c.muted,
c.id, c.private_key, c.description, c.joined, c.spectated, c.verified, c.muted,
r.id, r.public_key, r.clock, r.ens_name, r.chat_id, r.community_id, r.state
FROM communities_communities c
LEFT JOIN communities_requests_to_join r ON c.id = r.community_id AND r.public_key = ?
@ -185,7 +190,7 @@ WHERE c.Joined OR r.state = ?`
func (p *Persistence) DeletedCommunities(memberIdentity *ecdsa.PublicKey) (comms []*Community, err error) {
query := `SELECT
c.id, c.private_key, c.description, c.joined, c.verified, c.muted,
c.id, c.private_key, c.description, c.joined, c.spectated, c.verified, c.muted,
r.id, r.public_key, r.clock, r.ens_name, r.chat_id, r.community_id, r.state
FROM communities_communities c
LEFT JOIN communities_requests_to_join r ON c.id = r.community_id AND r.public_key = ?
@ -207,11 +212,12 @@ func (p *Persistence) CreatedCommunities(memberIdentity *ecdsa.PublicKey) ([]*Co
func (p *Persistence) GetByID(memberIdentity *ecdsa.PublicKey, id []byte) (*Community, error) {
var publicKeyBytes, privateKeyBytes, descriptionBytes []byte
var joined bool
var spectated bool
var verified bool
var muted bool
var requestedToJoinAt sql.NullInt64
err := p.db.QueryRow(communitiesBaseQuery+` WHERE c.id = ?`, common.PubkeyToHex(memberIdentity), id).Scan(&publicKeyBytes, &privateKeyBytes, &descriptionBytes, &joined, &verified, &muted, &requestedToJoinAt)
err := p.db.QueryRow(communitiesBaseQuery+` WHERE c.id = ?`, common.PubkeyToHex(memberIdentity), id).Scan(&publicKeyBytes, &privateKeyBytes, &descriptionBytes, &joined, &spectated, &verified, &muted, &requestedToJoinAt)
if err == sql.ErrNoRows {
return nil, nil
@ -219,10 +225,10 @@ func (p *Persistence) GetByID(memberIdentity *ecdsa.PublicKey, id []byte) (*Comm
return nil, err
}
return unmarshalCommunityFromDB(memberIdentity, publicKeyBytes, privateKeyBytes, descriptionBytes, joined, verified, muted, uint64(requestedToJoinAt.Int64), p.logger)
return unmarshalCommunityFromDB(memberIdentity, publicKeyBytes, privateKeyBytes, descriptionBytes, joined, spectated, verified, muted, uint64(requestedToJoinAt.Int64), p.logger)
}
func unmarshalCommunityFromDB(memberIdentity *ecdsa.PublicKey, publicKeyBytes, privateKeyBytes, descriptionBytes []byte, joined, verified, muted bool, requestedToJoinAt uint64, logger *zap.Logger) (*Community, error) {
func unmarshalCommunityFromDB(memberIdentity *ecdsa.PublicKey, publicKeyBytes, privateKeyBytes, descriptionBytes []byte, joined, spectated, verified, muted bool, requestedToJoinAt uint64, logger *zap.Logger) (*Community, error) {
var privateKey *ecdsa.PrivateKey
var err error
@ -263,6 +269,7 @@ func unmarshalCommunityFromDB(memberIdentity *ecdsa.PublicKey, publicKeyBytes, p
Muted: muted,
RequestedToJoinAt: requestedToJoinAt,
Joined: joined,
Spectated: spectated,
}
return New(config)
}

View File

@ -42,6 +42,36 @@ func (s *PersistenceSuite) SetupTest() {
s.db = &Persistence{db: db}
}
func (s *PersistenceSuite) TestSaveCommunity() {
id, err := crypto.GenerateKey()
s.Require().NoError(err)
// there is one community inserted by default
communities, err := s.db.AllCommunities(&id.PublicKey)
s.Require().NoError(err)
s.Require().Len(communities, 1)
community := Community{
config: &Config{
PrivateKey: id,
ID: &id.PublicKey,
Joined: true,
Spectated: true,
Verified: true,
CommunityDescription: &protobuf.CommunityDescription{},
},
}
s.Require().NoError(s.db.SaveCommunity(&community))
communities, err = s.db.AllCommunities(&id.PublicKey)
s.Require().NoError(err)
s.Require().Len(communities, 2)
s.Equal(types.HexBytes(crypto.CompressPubkey(&id.PublicKey)), communities[1].ID())
s.Equal(true, communities[1].Joined())
s.Equal(true, communities[1].Spectated())
s.Equal(true, communities[1].Verified())
}
func (s *PersistenceSuite) TestShouldHandleSyncCommunity() {
sc := &protobuf.SyncCommunity{
Id: []byte("0x123456"),
@ -244,6 +274,7 @@ func (s *PersistenceSuite) TestGetSyncedRawCommunity() {
Description: []byte("this is a description"),
Joined: true,
Verified: true,
Spectated: true,
}
// add a new community to the db

View File

@ -11,6 +11,7 @@ type RawCommunityRow struct {
PrivateKey []byte
Description []byte
Joined bool
Spectated bool
Verified bool
SyncedAt uint64
Muted bool
@ -22,6 +23,7 @@ func fromSyncCommunityProtobuf(syncCommProto *protobuf.SyncCommunity) RawCommuni
PrivateKey: syncCommProto.PrivateKey,
Description: syncCommProto.Description,
Joined: syncCommProto.Joined,
Spectated: syncCommProto.Spectated,
Verified: syncCommProto.Verified,
SyncedAt: syncCommProto.Clock,
Muted: syncCommProto.Muted,
@ -40,6 +42,7 @@ func (p *Persistence) scanRowToStruct(rowScan func(dest ...interface{}) error) (
&rcr.Verified,
&rcr.Muted,
&syncedAt,
&rcr.Spectated,
)
if syncedAt.Valid {
rcr.SyncedAt = uint64(syncedAt.Time.Unix())

View File

@ -1831,6 +1831,7 @@ func (s *MessengerCommunitiesSuite) TestSyncCommunity() {
s.Equal(newCommunity.Verified(), tnc.Verified())
s.Equal(newCommunity.Muted(), tnc.Muted())
s.Equal(newCommunity.Joined(), tnc.Joined())
s.Equal(newCommunity.Spectated(), tnc.Spectated())
s.Equal(newCommunity.IsAdmin(), tnc.IsAdmin())
s.Equal(newCommunity.InvitationOnly(), tnc.InvitationOnly())
}

View File

@ -209,6 +209,10 @@ func (m *Messenger) JoinedCommunities() ([]*communities.Community, error) {
return m.communitiesManager.Joined()
}
func (m *Messenger) SpectatedCommunities() ([]*communities.Community, error) {
return m.communitiesManager.Spectated()
}
func (m *Messenger) CuratedCommunities() (*communities.KnownCommunitiesResponse, error) {
// Revert code to https://github.com/status-im/status-go/blob/e6a3f63ec7f2fa691878ed35f921413dc8acfc66/protocol/messenger_communities.go#L211-L226 once the curated communities contract is deployed to mainnet
@ -258,51 +262,14 @@ func (m *Messenger) CuratedCommunities() (*communities.KnownCommunitiesResponse,
return response, nil
}
func (m *Messenger) JoinCommunity(ctx context.Context, communityID types.HexBytes) (*MessengerResponse, error) {
mr, err := m.joinCommunity(ctx, communityID)
if err != nil {
return nil, err
}
communitySettings := communities.CommunitySettings{
CommunityID: communityID.String(),
HistoryArchiveSupportEnabled: true,
}
err = m.communitiesManager.SaveCommunitySettings(communitySettings)
if err != nil {
return nil, err
}
mr.AddCommunitySettings(&communitySettings)
if com, ok := mr.communities[communityID.String()]; ok {
err = m.syncCommunity(context.Background(), com)
if err != nil {
return nil, err
}
}
return mr, nil
}
func (m *Messenger) joinCommunity(ctx context.Context, communityID types.HexBytes) (*MessengerResponse, error) {
logger := m.logger.Named("joinCommunity")
response := &MessengerResponse{}
community, err := m.communitiesManager.JoinCommunity(communityID)
if err != nil {
logger.Debug("m.communitiesManager.JoinCommunity error", zap.Error(err))
return nil, err
}
func (m *Messenger) initCommunityChats(community *communities.Community) ([]*Chat, error) {
logger := m.logger.Named("initCommunityChats")
chatIDs := community.DefaultFilters()
chats := CreateCommunityChats(community, m.getTimesource())
response.AddChats(chats)
for _, chat := range response.Chats() {
for _, chat := range chats {
chatIDs = append(chatIDs, chat.ID)
}
@ -342,28 +309,123 @@ func (m *Messenger) joinCommunity(ctx context.Context, communityID types.HexByte
}
}
response.AddCommunity(community)
if err = m.saveChats(chats); err != nil {
logger.Debug("m.saveChats error", zap.Error(err))
return nil, err
}
err = m.reregisterForPushNotifications()
return chats, nil
}
func (m *Messenger) initCommunitySettings(communityID types.HexBytes) (*communities.CommunitySettings, error) {
communitySettings, err := m.communitiesManager.GetCommunitySettingsByID(communityID)
if err != nil {
return nil, err
}
if communitySettings != nil {
return communitySettings, nil
}
communitySettings = &communities.CommunitySettings{
CommunityID: communityID.String(),
HistoryArchiveSupportEnabled: true,
}
if err := m.communitiesManager.SaveCommunitySettings(*communitySettings); err != nil {
return nil, err
}
return communitySettings, nil
}
func (m *Messenger) JoinCommunity(ctx context.Context, communityID types.HexBytes) (*MessengerResponse, error) {
mr, err := m.joinCommunity(ctx, communityID)
if err != nil {
return nil, err
}
err = m.sendCurrentUserStatusToCommunity(ctx, community)
if com, ok := mr.communities[communityID.String()]; ok {
err = m.syncCommunity(context.Background(), com)
if err != nil {
return nil, err
}
}
return mr, nil
}
func (m *Messenger) joinCommunity(ctx context.Context, communityID types.HexBytes) (*MessengerResponse, error) {
logger := m.logger.Named("joinCommunity")
response := &MessengerResponse{}
community, err := m.communitiesManager.JoinCommunity(communityID)
if err != nil {
logger.Debug("m.communitiesManager.JoinCommunity error", zap.Error(err))
return nil, err
}
// chats and settings are already initialized for spectated communities
if !community.Spectated() {
chats, err := m.initCommunityChats(community)
if err != nil {
return nil, err
}
response.AddChats(chats)
if _, err = m.initCommunitySettings(communityID); err != nil {
return nil, err
}
}
communitySettings, err := m.communitiesManager.GetCommunitySettingsByID(communityID)
if err != nil {
return nil, err
}
response.AddCommunity(community)
response.AddCommunitySettings(communitySettings)
if err = m.reregisterForPushNotifications(); err != nil {
return nil, err
}
if err = m.sendCurrentUserStatusToCommunity(ctx, community); err != nil {
logger.Debug("m.sendCurrentUserStatusToCommunity error", zap.Error(err))
return nil, err
}
err = m.PublishIdentityImage()
if err = m.PublishIdentityImage(); err != nil {
return nil, err
}
return response, nil
}
func (m *Messenger) SpectateCommunity(communityID types.HexBytes) (*MessengerResponse, error) {
logger := m.logger.Named("SpectateCommunity")
response := &MessengerResponse{}
community, err := m.communitiesManager.SpectateCommunity(communityID)
if err != nil {
logger.Debug("SpectateCommunity error", zap.Error(err))
return nil, err
}
chats, err := m.initCommunityChats(community)
if err != nil {
return nil, err
}
response.AddChats(chats)
settings, err := m.initCommunitySettings(communityID)
if err != nil {
return nil, err
}
response.AddCommunitySettings(settings)
response.AddCommunity(community)
return response, nil
}

View File

@ -63,6 +63,7 @@
// 1662723928_add_discord_author_image_fields.up.sql (75B)
// 1664195977_add_deleted_for_mes.up.sql (352B)
// 1664367420_add_discord_attachments_table.up.sql (350B)
// 1665079662_add_spectated_column_in_communities.up.sql (86B)
// README.md (554B)
// doc.go (850B)
@ -148,7 +149,7 @@ func _000001_initDownDbSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "000001_init.down.db.sql", size: 65, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "000001_init.down.db.sql", size: 65, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5e, 0xbb, 0x3f, 0x1, 0x75, 0x19, 0x70, 0x86, 0xa7, 0x34, 0x40, 0x17, 0x34, 0x3e, 0x18, 0x51, 0x79, 0xd4, 0x22, 0xad, 0x8f, 0x80, 0xcc, 0xa6, 0xcc, 0x6, 0x2b, 0x62, 0x2, 0x47, 0xba, 0xf9}}
return a, nil
}
@ -168,7 +169,7 @@ func _000001_initUpDbSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "000001_init.up.db.sql", size: 2719, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "000001_init.up.db.sql", size: 2719, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x60, 0xdc, 0xeb, 0xe, 0xc2, 0x4f, 0x75, 0xa, 0xf6, 0x3e, 0xc7, 0xc4, 0x4, 0xe2, 0xe1, 0xa4, 0x73, 0x2f, 0x4a, 0xad, 0x1a, 0x0, 0xc3, 0x93, 0x9d, 0x77, 0x3e, 0x31, 0x91, 0x77, 0x2e, 0xc8}}
return a, nil
}
@ -188,7 +189,7 @@ func _000002_add_last_ens_clock_valueUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "000002_add_last_ens_clock_value.up.sql", size: 77, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "000002_add_last_ens_clock_value.up.sql", size: 77, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4d, 0x3, 0x8f, 0xd5, 0x85, 0x83, 0x47, 0xbe, 0xf9, 0x82, 0x7e, 0x81, 0xa4, 0xbd, 0xaa, 0xd5, 0x98, 0x18, 0x5, 0x2d, 0x82, 0x42, 0x3b, 0x3, 0x50, 0xc3, 0x1e, 0x84, 0x35, 0xf, 0xb6, 0x2b}}
return a, nil
}
@ -208,7 +209,7 @@ func _1586358095_add_replaceUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1586358095_add_replace.up.sql", size: 224, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1586358095_add_replace.up.sql", size: 224, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd2, 0xb3, 0xa9, 0xc7, 0x7f, 0x9d, 0x8f, 0x43, 0x8c, 0x9e, 0x58, 0x8d, 0x44, 0xbc, 0xfa, 0x6b, 0x5f, 0x3f, 0x5a, 0xbe, 0xe8, 0xb1, 0x16, 0xf, 0x91, 0x2a, 0xa0, 0x71, 0xbb, 0x8d, 0x6b, 0xcb}}
return a, nil
}
@ -228,7 +229,7 @@ func _1588665364_add_image_dataUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1588665364_add_image_data.up.sql", size: 186, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1588665364_add_image_data.up.sql", size: 186, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd6, 0xc6, 0x35, 0xb4, 0x4c, 0x39, 0x96, 0x29, 0x30, 0xda, 0xf4, 0x8f, 0xcb, 0xf1, 0x9f, 0x84, 0xdc, 0x88, 0xd4, 0xd5, 0xbc, 0xb6, 0x5b, 0x46, 0x78, 0x67, 0x76, 0x1a, 0x5, 0x36, 0xdc, 0xe5}}
return a, nil
}
@ -248,7 +249,7 @@ func _1589365189_add_pow_targetUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1589365189_add_pow_target.up.sql", size: 66, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1589365189_add_pow_target.up.sql", size: 66, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4e, 0x3a, 0xe2, 0x2e, 0x7d, 0xaf, 0xbb, 0xcc, 0x21, 0xa1, 0x7a, 0x41, 0x9a, 0xd0, 0xbb, 0xa9, 0xc8, 0x35, 0xf9, 0x32, 0x34, 0x46, 0x44, 0x9a, 0x86, 0x40, 0x7c, 0xb9, 0x23, 0xc7, 0x3, 0x3f}}
return a, nil
}
@ -268,7 +269,7 @@ func _1591277220_add_index_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1591277220_add_index_messages.up.sql", size: 240, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1591277220_add_index_messages.up.sql", size: 240, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9c, 0xfe, 0xbe, 0xd5, 0xb8, 0x8f, 0xdd, 0xef, 0xbb, 0xa8, 0xad, 0x7f, 0xed, 0x5b, 0x5b, 0x2f, 0xe6, 0x82, 0x27, 0x78, 0x1f, 0xb9, 0x57, 0xdc, 0x8, 0xc2, 0xb2, 0xa9, 0x9a, 0x4, 0xe1, 0x7a}}
return a, nil
}
@ -288,7 +289,7 @@ func _1593087212_add_mute_chat_and_raw_message_fieldsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1593087212_add_mute_chat_and_raw_message_fields.up.sql", size: 215, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1593087212_add_mute_chat_and_raw_message_fields.up.sql", size: 215, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x73, 0x99, 0x61, 0xd1, 0xaa, 0xb4, 0xbf, 0xaf, 0xd7, 0x20, 0x17, 0x40, 0xf9, 0x2, 0xfb, 0xcc, 0x40, 0x2a, 0xd, 0x86, 0x36, 0x30, 0x88, 0x89, 0x25, 0x80, 0x42, 0xb0, 0x5b, 0xe9, 0x73, 0x78}}
return a, nil
}
@ -308,7 +309,7 @@ func _1595862781_add_audio_dataUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1595862781_add_audio_data.up.sql", size: 246, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1595862781_add_audio_data.up.sql", size: 246, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xae, 0xd2, 0xee, 0x55, 0xfb, 0x36, 0xa4, 0x92, 0x66, 0xe, 0x81, 0x62, 0x1e, 0x7a, 0x69, 0xa, 0xd5, 0x4b, 0xa5, 0x6a, 0x8d, 0x1d, 0xce, 0xf3, 0x3e, 0xc0, 0x5f, 0x9c, 0x66, 0x1b, 0xb4, 0xed}}
return a, nil
}
@ -328,7 +329,7 @@ func _1595865249_create_emoji_reactions_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1595865249_create_emoji_reactions_table.up.sql", size: 300, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1595865249_create_emoji_reactions_table.up.sql", size: 300, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3e, 0xc5, 0x43, 0x5c, 0x3d, 0x53, 0x43, 0x2c, 0x1a, 0xa5, 0xb6, 0xbf, 0x7, 0x4, 0x5a, 0x3e, 0x40, 0x8b, 0xa4, 0x57, 0x12, 0x58, 0xbc, 0x42, 0xe2, 0xc3, 0xde, 0x76, 0x98, 0x80, 0xe2, 0xbe}}
return a, nil
}
@ -348,7 +349,7 @@ func _1596805115_create_group_chat_invitations_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1596805115_create_group_chat_invitations_table.up.sql", size: 231, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1596805115_create_group_chat_invitations_table.up.sql", size: 231, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6d, 0xb1, 0x14, 0x6d, 0x54, 0x28, 0x67, 0xc3, 0x23, 0x6a, 0xfc, 0x80, 0xdf, 0x9e, 0x4c, 0x35, 0x36, 0xf, 0xf8, 0xf3, 0x5f, 0xae, 0xad, 0xb, 0xc1, 0x51, 0x8e, 0x17, 0x7, 0xe5, 0x7f, 0x91}}
return a, nil
}
@ -368,7 +369,7 @@ func _1597322655_add_invitation_admin_chat_fieldUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1597322655_add_invitation_admin_chat_field.up.sql", size: 54, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1597322655_add_invitation_admin_chat_field.up.sql", size: 54, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa9, 0x7a, 0xa0, 0xf2, 0xdb, 0x13, 0x91, 0x91, 0xa8, 0x34, 0x1a, 0xa1, 0x49, 0x68, 0xd5, 0xae, 0x2c, 0xd8, 0xd5, 0xea, 0x8f, 0x8c, 0xc7, 0x2, 0x4e, 0x58, 0x2c, 0x3a, 0x14, 0xd4, 0x4f, 0x2c}}
return a, nil
}
@ -388,7 +389,7 @@ func _1597757544_add_nicknameUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1597757544_add_nickname.up.sql", size: 52, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1597757544_add_nickname.up.sql", size: 52, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf4, 0xa2, 0x64, 0x50, 0xc5, 0x4, 0xb9, 0x8b, 0xd1, 0x18, 0x9b, 0xc3, 0x91, 0x36, 0x2a, 0x1f, 0xc3, 0x6c, 0x2d, 0x92, 0xf8, 0x5e, 0xff, 0xb1, 0x59, 0x61, 0x2, 0x1c, 0xe1, 0x85, 0x90, 0xa4}}
return a, nil
}
@ -408,7 +409,7 @@ func _1598955122_add_mentionsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1598955122_add_mentions.up.sql", size: 52, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1598955122_add_mentions.up.sql", size: 52, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8d, 0x22, 0x17, 0x92, 0xd2, 0x11, 0x4e, 0x7, 0x93, 0x9a, 0x55, 0xfd, 0xb, 0x97, 0xc4, 0x63, 0x6a, 0x81, 0x97, 0xcd, 0xb2, 0xf8, 0x4b, 0x5f, 0x3c, 0xfa, 0x3a, 0x38, 0x53, 0x10, 0xed, 0x9d}}
return a, nil
}
@ -428,7 +429,7 @@ func _1599641390_add_emoji_reactions_indexUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1599641390_add_emoji_reactions_index.up.sql", size: 126, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1599641390_add_emoji_reactions_index.up.sql", size: 126, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf9, 0xd8, 0xdc, 0xa7, 0xb, 0x92, 0x7a, 0x61, 0x37, 0x24, 0x1c, 0x77, 0x5e, 0xe, 0x7e, 0xfc, 0x9f, 0x98, 0x7b, 0x65, 0xe7, 0xf9, 0x71, 0x57, 0x89, 0x2d, 0x90, 0x1b, 0xf6, 0x5e, 0x37, 0xe8}}
return a, nil
}
@ -448,7 +449,7 @@ func _1599720851_add_seen_index_remove_long_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1599720851_add_seen_index_remove_long_messages.up.sql", size: 150, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1599720851_add_seen_index_remove_long_messages.up.sql", size: 150, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x24, 0x1c, 0xc4, 0x78, 0x91, 0xc7, 0xeb, 0xfe, 0xc8, 0xa0, 0xd8, 0x13, 0x27, 0x97, 0xc8, 0x96, 0x56, 0x97, 0x33, 0x2c, 0x1e, 0x16, 0x8a, 0xd3, 0x49, 0x99, 0x3, 0xe9, 0xbb, 0xc4, 0x5, 0x3c}}
return a, nil
}
@ -468,7 +469,7 @@ func _1603198582_add_profile_chat_fieldUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1603198582_add_profile_chat_field.up.sql", size: 45, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1603198582_add_profile_chat_field.up.sql", size: 45, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xaa, 0xca, 0xe, 0x46, 0xa0, 0x9, 0x9d, 0x47, 0x57, 0xe9, 0xfb, 0x17, 0xeb, 0x9c, 0xf6, 0xb8, 0x1d, 0xe9, 0xd, 0x0, 0xd5, 0xe5, 0xd8, 0x9e, 0x60, 0xa, 0xbf, 0x32, 0x2c, 0x52, 0x7f, 0x6a}}
return a, nil
}
@ -488,7 +489,7 @@ func _1603816533_add_linksUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1603816533_add_links.up.sql", size: 48, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1603816533_add_links.up.sql", size: 48, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc9, 0x24, 0xd6, 0x1d, 0xa, 0x83, 0x1e, 0x4d, 0xf, 0xae, 0x4d, 0x8c, 0x51, 0x32, 0xa8, 0x37, 0xb0, 0x14, 0xfb, 0x32, 0x34, 0xc8, 0xc, 0x4e, 0x5b, 0xc5, 0x15, 0x65, 0x73, 0x0, 0x0, 0x1d}}
return a, nil
}
@ -508,7 +509,7 @@ func _1603888149_create_chat_identity_last_published_tableUpSql() (*asset, error
return nil, err
}
info := bindataFileInfo{name: "1603888149_create_chat_identity_last_published_table.up.sql", size: 407, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1603888149_create_chat_identity_last_published_table.up.sql", size: 407, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7f, 0x9, 0xf, 0xfb, 0xdb, 0x3c, 0x86, 0x70, 0x82, 0xda, 0x10, 0x25, 0xe2, 0x4e, 0x40, 0x45, 0xab, 0x8b, 0x1c, 0x91, 0x7c, 0xf1, 0x70, 0x2e, 0x81, 0xf3, 0x71, 0x45, 0xda, 0xe2, 0xa4, 0x57}}
return a, nil
}
@ -528,7 +529,7 @@ func _1605075346_add_communitiesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1605075346_add_communities.up.sql", size: 6971, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1605075346_add_communities.up.sql", size: 6971, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1f, 0x64, 0xea, 0xb4, 0xae, 0x9e, 0xdb, 0x9, 0x58, 0xb6, 0x5c, 0x7a, 0x50, 0xc5, 0xfe, 0x93, 0x5d, 0x36, 0x85, 0x5d, 0x6a, 0xba, 0xc9, 0x7e, 0x84, 0xd7, 0xbf, 0x2a, 0x53, 0xf3, 0x97, 0xf1}}
return a, nil
}
@ -548,7 +549,7 @@ func _1610117927_add_message_cacheUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1610117927_add_message_cache.up.sql", size: 142, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1610117927_add_message_cache.up.sql", size: 142, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0xf1, 0xf0, 0x82, 0x79, 0x28, 0x19, 0xc2, 0x39, 0x6a, 0xa5, 0x96, 0x59, 0x23, 0xa0, 0xed, 0x60, 0x58, 0x86, 0x9, 0xb9, 0xad, 0xfb, 0xa, 0xe3, 0x47, 0x6e, 0xa1, 0x18, 0xe8, 0x39, 0x2c}}
return a, nil
}
@ -568,7 +569,7 @@ func _1610959908_add_dont_wrap_to_raw_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1610959908_add_dont_wrap_to_raw_messages.up.sql", size: 83, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1610959908_add_dont_wrap_to_raw_messages.up.sql", size: 83, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x71, 0x2, 0x9a, 0xca, 0xd4, 0x38, 0x44, 0x30, 0x2b, 0xa8, 0x27, 0x32, 0x63, 0x53, 0x22, 0x60, 0x59, 0x84, 0x23, 0x96, 0x77, 0xf0, 0x56, 0xd7, 0x94, 0xe0, 0x95, 0x28, 0x6, 0x1d, 0x4e, 0xb1}}
return a, nil
}
@ -588,7 +589,7 @@ func _1610960912_add_send_on_personal_topicUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1610960912_add_send_on_personal_topic.up.sql", size: 82, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1610960912_add_send_on_personal_topic.up.sql", size: 82, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x77, 0xac, 0x2f, 0xc4, 0xd, 0xa7, 0x1b, 0x37, 0x30, 0xc2, 0x68, 0xee, 0xde, 0x54, 0x5e, 0xbf, 0x3f, 0xa0, 0xd6, 0xc6, 0x9f, 0xd4, 0x34, 0x12, 0x76, 0x1e, 0x66, 0x4a, 0xfc, 0xf, 0xee, 0xc9}}
return a, nil
}
@ -608,7 +609,7 @@ func _1612870480_add_datasync_idUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1612870480_add_datasync_id.up.sql", size: 111, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1612870480_add_datasync_id.up.sql", size: 111, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0x9a, 0xbc, 0xfa, 0xaa, 0x8c, 0x9c, 0x37, 0x67, 0x15, 0x9c, 0x7e, 0x78, 0x75, 0x66, 0x82, 0x18, 0x72, 0x10, 0xbc, 0xd4, 0xab, 0x44, 0xfe, 0x57, 0x85, 0x6d, 0x19, 0xf5, 0x96, 0x8a, 0xbe}}
return a, nil
}
@ -628,7 +629,7 @@ func _1614152139_add_communities_request_to_joinUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1614152139_add_communities_request_to_join.up.sql", size: 831, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1614152139_add_communities_request_to_join.up.sql", size: 831, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x11, 0x3, 0x26, 0xf9, 0x29, 0x50, 0x4f, 0xcd, 0x46, 0xe5, 0xb1, 0x6b, 0xb9, 0x2, 0x40, 0xb1, 0xdf, 0x4a, 0x4c, 0x7a, 0xda, 0x3, 0x35, 0xcd, 0x2d, 0xcc, 0x80, 0x7d, 0x57, 0x5f, 0x3, 0x5c}}
return a, nil
}
@ -648,7 +649,7 @@ func _1615374373_add_confirmationsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1615374373_add_confirmations.up.sql", size: 227, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1615374373_add_confirmations.up.sql", size: 227, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdd, 0xa6, 0x65, 0xc5, 0x1d, 0xb2, 0x77, 0x36, 0xe3, 0x79, 0xda, 0xe8, 0x7a, 0xa4, 0xdf, 0x45, 0xae, 0xd8, 0xb4, 0xba, 0x90, 0xfd, 0x74, 0x71, 0x14, 0x75, 0x73, 0x72, 0xb9, 0x9e, 0x1, 0x81}}
return a, nil
}
@ -668,7 +669,7 @@ func _1617694931_add_notification_centerUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1617694931_add_notification_center.up.sql", size: 572, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1617694931_add_notification_center.up.sql", size: 572, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0x45, 0xc6, 0xc9, 0x73, 0xbb, 0x1f, 0xda, 0xa3, 0x4d, 0x19, 0x98, 0x85, 0x2d, 0xca, 0xda, 0xcc, 0x3b, 0x32, 0xff, 0xc7, 0x7b, 0xe3, 0x9f, 0x9b, 0x2a, 0x93, 0xf5, 0xdf, 0x65, 0x38, 0x91}}
return a, nil
}
@ -688,7 +689,7 @@ func _1618923660_create_pin_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1618923660_create_pin_messages.up.sql", size: 265, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1618923660_create_pin_messages.up.sql", size: 265, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x61, 0x44, 0x3a, 0xbe, 0x30, 0xd2, 0x7e, 0xc0, 0xe2, 0x8e, 0x65, 0x53, 0x54, 0xbb, 0x7a, 0x1c, 0xb3, 0x5d, 0xd2, 0xa6, 0xa9, 0x28, 0xb7, 0xa4, 0x5f, 0x8b, 0x9, 0x5f, 0x17, 0xc1, 0x85, 0x21}}
return a, nil
}
@ -708,7 +709,7 @@ func _1619094007_add_joined_chat_fieldUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1619094007_add_joined_chat_field.up.sql", size: 101, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1619094007_add_joined_chat_field.up.sql", size: 101, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfa, 0x30, 0x81, 0x3a, 0x2f, 0x9f, 0xb3, 0x0, 0x55, 0x8e, 0x1d, 0xa8, 0xb0, 0x68, 0xf0, 0x40, 0x1a, 0x6c, 0xaa, 0xfc, 0x33, 0xd1, 0xd1, 0x55, 0x3f, 0xf2, 0xbd, 0x54, 0xa1, 0x2b, 0x40, 0x95}}
return a, nil
}
@ -728,7 +729,7 @@ func _1619099821_add_last_synced_fieldUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1619099821_add_last_synced_field.up.sql", size: 226, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1619099821_add_last_synced_field.up.sql", size: 226, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf, 0x52, 0x22, 0xe, 0x2f, 0xd7, 0x93, 0x5f, 0x42, 0xc2, 0x93, 0x4, 0x35, 0x6f, 0xc9, 0x19, 0xed, 0x6b, 0x52, 0x6f, 0xae, 0x99, 0xe2, 0x68, 0x3d, 0x4f, 0x40, 0xe, 0xe1, 0xa, 0x47, 0x21}}
return a, nil
}
@ -748,7 +749,7 @@ func _1621933219_add_mentionedUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1621933219_add_mentioned.up.sql", size: 70, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1621933219_add_mentioned.up.sql", size: 70, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0x76, 0x8a, 0xc9, 0x7, 0x8f, 0xa5, 0xcb, 0x12, 0x21, 0x4e, 0xfe, 0x96, 0x77, 0xcf, 0x7f, 0x76, 0x75, 0x36, 0x2c, 0xf8, 0x1d, 0x13, 0xcb, 0xcd, 0x6e, 0x70, 0xbf, 0xf5, 0x93, 0x67, 0xd1}}
return a, nil
}
@ -768,7 +769,7 @@ func _1622010048_add_unviewed_mentions_countUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1622010048_add_unviewed_mentions_count.up.sql", size: 114, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1622010048_add_unviewed_mentions_count.up.sql", size: 114, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7c, 0x16, 0x85, 0xa6, 0x5b, 0xe1, 0x66, 0xb9, 0x84, 0xbe, 0x7f, 0xa, 0x77, 0x23, 0xb9, 0xef, 0x8e, 0x2, 0x8, 0xfc, 0x61, 0xb2, 0x43, 0xa9, 0x63, 0xae, 0xb4, 0xdf, 0x30, 0xb1, 0x61, 0x4b}}
return a, nil
}
@ -788,7 +789,7 @@ func _1622061278_add_message_activity_center_notification_fieldUpSql() (*asset,
return nil, err
}
info := bindataFileInfo{name: "1622061278_add_message_activity_center_notification_field.up.sql", size: 80, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1622061278_add_message_activity_center_notification_field.up.sql", size: 80, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8, 0xc, 0xa6, 0x1f, 0xa5, 0xc6, 0x7c, 0x6f, 0xab, 0x2c, 0x2d, 0xb5, 0xa4, 0xdd, 0xc1, 0xd6, 0x44, 0x83, 0xf9, 0xb1, 0xa5, 0xce, 0x34, 0x3d, 0x2, 0xa9, 0x35, 0xcf, 0xc6, 0xb2, 0x43, 0x37}}
return a, nil
}
@ -808,7 +809,7 @@ func _1622464518_set_synced_to_fromUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1622464518_set_synced_to_from.up.sql", size: 105, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1622464518_set_synced_to_from.up.sql", size: 105, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x33, 0x3e, 0x2b, 0xa, 0x1e, 0xc7, 0x6d, 0x6f, 0xd1, 0x1d, 0xe8, 0x4b, 0xdd, 0x92, 0x76, 0xea, 0xf2, 0x3e, 0x15, 0x85, 0xc4, 0xc3, 0x31, 0xf1, 0xc0, 0xa2, 0xd7, 0x47, 0xde, 0x4e, 0xfd, 0xc6}}
return a, nil
}
@ -828,7 +829,7 @@ func _1622464519_add_chat_descriptionUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1622464519_add_chat_description.up.sql", size: 93, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1622464519_add_chat_description.up.sql", size: 93, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0x2e, 0x89, 0x31, 0xec, 0xef, 0xeb, 0x43, 0xf5, 0x96, 0x6d, 0xce, 0x91, 0x8a, 0x37, 0x2a, 0x11, 0x7a, 0x3f, 0xd9, 0x10, 0xbb, 0xa1, 0xbc, 0x7, 0xe0, 0x3b, 0xa5, 0xf4, 0xa6, 0xf4, 0xa1}}
return a, nil
}
@ -848,7 +849,7 @@ func _1622622253_add_pinned_by_to_pin_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1622622253_add_pinned_by_to_pin_messages.up.sql", size: 52, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1622622253_add_pinned_by_to_pin_messages.up.sql", size: 52, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9b, 0x94, 0xa3, 0x45, 0x91, 0x1e, 0x66, 0xd1, 0x96, 0x5a, 0xaf, 0xfa, 0x29, 0x39, 0xa8, 0x3a, 0x97, 0x4c, 0x65, 0x6, 0x96, 0x90, 0x4c, 0xfe, 0xce, 0x7d, 0x5d, 0xd4, 0xb3, 0x8, 0x6d, 0x5f}}
return a, nil
}
@ -868,7 +869,7 @@ func _1623938329_add_author_activity_center_notification_fieldUpSql() (*asset, e
return nil, err
}
info := bindataFileInfo{name: "1623938329_add_author_activity_center_notification_field.up.sql", size: 66, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1623938329_add_author_activity_center_notification_field.up.sql", size: 66, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0xe6, 0xa7, 0xd5, 0x26, 0xff, 0xab, 0x92, 0x88, 0xf0, 0xd3, 0x34, 0xd9, 0x2f, 0xe7, 0x18, 0x1a, 0x40, 0xf9, 0xbe, 0x8e, 0xfc, 0xd0, 0x4f, 0x1f, 0x4a, 0xb9, 0x83, 0x3f, 0xa9, 0xde, 0xb}}
return a, nil
}
@ -888,7 +889,7 @@ func _1623938330_add_edit_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1623938330_add_edit_messages.up.sql", size: 369, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1623938330_add_edit_messages.up.sql", size: 369, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7e, 0xd2, 0xce, 0xe, 0x5c, 0x19, 0xbe, 0x5e, 0x29, 0xbe, 0x9b, 0x31, 0x53, 0x76, 0xb2, 0xc8, 0x56, 0xf0, 0x82, 0xfe, 0x7d, 0x6c, 0xe8, 0x5c, 0xe9, 0x7a, 0x5d, 0x5, 0xc4, 0x92, 0x38, 0xe3}}
return a, nil
}
@ -908,7 +909,7 @@ func _1624978434_add_muted_communityUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1624978434_add_muted_community.up.sql", size: 82, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1624978434_add_muted_community.up.sql", size: 82, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6, 0xdc, 0x6e, 0x6f, 0x97, 0xc7, 0x3d, 0x50, 0xab, 0x80, 0x87, 0x44, 0x43, 0x38, 0xe6, 0xc5, 0xc1, 0x91, 0x26, 0xf, 0x16, 0xe, 0xd9, 0x32, 0x37, 0x25, 0x96, 0x25, 0x6, 0xc8, 0xb5, 0x4a}}
return a, nil
}
@ -928,7 +929,7 @@ func _1625018910_add_repply_message_activity_center_notification_fieldUpSql() (*
return nil, err
}
info := bindataFileInfo{name: "1625018910_add_repply_message_activity_center_notification_field.up.sql", size: 86, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1625018910_add_repply_message_activity_center_notification_field.up.sql", size: 86, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf2, 0x52, 0x12, 0x40, 0xd8, 0x6f, 0x71, 0x97, 0x46, 0x39, 0xaa, 0x74, 0x41, 0xcd, 0x45, 0x4c, 0xe8, 0xd9, 0xe2, 0x56, 0x8e, 0x78, 0x18, 0x62, 0xf6, 0xa8, 0x36, 0xe9, 0x9a, 0x1f, 0xc, 0xb1}}
return a, nil
}
@ -948,7 +949,7 @@ func _1625762506_add_deleted_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1625762506_add_deleted_messages.up.sql", size: 357, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1625762506_add_deleted_messages.up.sql", size: 357, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd5, 0x61, 0x42, 0xb6, 0x8c, 0x7f, 0x2d, 0xec, 0xa9, 0x6d, 0x3d, 0x0, 0xa3, 0x32, 0xd8, 0x4a, 0x38, 0x5c, 0x97, 0xfc, 0x68, 0xde, 0xa9, 0xb7, 0xd8, 0xde, 0xb, 0x29, 0x93, 0xdc, 0x81, 0xf8}}
return a, nil
}
@ -968,7 +969,7 @@ func _1627388946_add_communities_synced_atUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1627388946_add_communities_synced_at.up.sql", size: 87, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1627388946_add_communities_synced_at.up.sql", size: 87, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc1, 0xbd, 0x9b, 0x6a, 0xc9, 0x1a, 0x7a, 0x34, 0xcf, 0x5f, 0x80, 0x9e, 0x8c, 0x1c, 0xc0, 0xec, 0x4e, 0x78, 0xb0, 0x2d, 0x15, 0x77, 0x38, 0x4a, 0x6a, 0x5, 0x84, 0xf5, 0x8d, 0x8b, 0xbe, 0x9}}
return a, nil
}
@ -988,7 +989,7 @@ func _1628280060_createUsermessagesIndexSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1628280060_create-usermessages-index.sql", size: 80, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1628280060_create-usermessages-index.sql", size: 80, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0x6f, 0x70, 0x47, 0x40, 0xab, 0xa8, 0x60, 0xe0, 0xf9, 0x8, 0x7e, 0x19, 0x9d, 0xba, 0x33, 0x16, 0xfc, 0x3c, 0xdc, 0xa8, 0xa6, 0x53, 0x61, 0x39, 0x82, 0x91, 0xcf, 0x69, 0xd8, 0xf2, 0xcf}}
return a, nil
}
@ -1008,7 +1009,7 @@ func _1632303896_modify_contacts_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1632303896_modify_contacts_table.up.sql", size: 1574, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1632303896_modify_contacts_table.up.sql", size: 1574, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x81, 0x1e, 0x6c, 0x3c, 0xd, 0xd7, 0x7d, 0xbb, 0x19, 0xbc, 0xe4, 0x7, 0xfd, 0xf8, 0x66, 0x6d, 0x78, 0xf6, 0x4, 0xe6, 0x51, 0xe4, 0xe6, 0xdc, 0xe, 0x5a, 0x2e, 0xac, 0xe6, 0xe7, 0x24, 0x69}}
return a, nil
}
@ -1028,7 +1029,7 @@ func _1633349838_add_emoji_column_in_chatsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1633349838_add_emoji_column_in_chats.up.sql", size: 52, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1633349838_add_emoji_column_in_chats.up.sql", size: 52, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcb, 0x33, 0xcb, 0x3b, 0xa9, 0x99, 0x77, 0x6a, 0xea, 0xc4, 0x39, 0xd7, 0xa1, 0x49, 0xa7, 0xdf, 0xff, 0x72, 0xda, 0x34, 0x21, 0x67, 0x66, 0xca, 0x65, 0x46, 0x1, 0xa6, 0x4e, 0xf9, 0x38, 0x86}}
return a, nil
}
@ -1048,7 +1049,7 @@ func _1634831235_add_highlight_column_in_chatsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1634831235_add_highlight_column_in_chats.up.sql", size: 62, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1634831235_add_highlight_column_in_chats.up.sql", size: 62, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xaa, 0x63, 0x5c, 0x73, 0x19, 0x83, 0xbd, 0x35, 0x80, 0x9f, 0x66, 0xec, 0x4c, 0xbc, 0x9d, 0x2d, 0x52, 0x91, 0x6d, 0xb3, 0x2b, 0x87, 0xde, 0x24, 0x46, 0x5c, 0xd, 0xfd, 0x78, 0xf5, 0xe3, 0xe9}}
return a, nil
}
@ -1068,7 +1069,7 @@ func _1634896007_add_last_updated_locally_and_removedUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1634896007_add_last_updated_locally_and_removed.up.sql", size: 131, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1634896007_add_last_updated_locally_and_removed.up.sql", size: 131, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2e, 0xa8, 0x34, 0xe2, 0xc0, 0x62, 0xc8, 0xd6, 0x5a, 0x87, 0xe3, 0x70, 0xe1, 0xc4, 0x16, 0x9c, 0x60, 0x2e, 0x98, 0xf0, 0x91, 0x84, 0xbe, 0xe0, 0xdf, 0x3e, 0x4d, 0x24, 0xc4, 0x6c, 0x40, 0x17}}
return a, nil
}
@ -1088,7 +1089,7 @@ func _1635840039_add_clock_read_at_column_in_chatsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1635840039_add_clock_read_at_column_in_chats.up.sql", size: 245, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1635840039_add_clock_read_at_column_in_chats.up.sql", size: 245, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6c, 0xba, 0x3f, 0xba, 0x1a, 0x71, 0xa8, 0x9, 0x19, 0xbe, 0x1e, 0x38, 0x50, 0x30, 0x3a, 0x52, 0x15, 0x29, 0xee, 0x49, 0x19, 0x6f, 0x53, 0xc2, 0xc6, 0x6c, 0xd9, 0x80, 0x7e, 0xb9, 0x58, 0x7a}}
return a, nil
}
@ -1108,7 +1109,7 @@ func _1637852321_add_received_invitation_admin_column_in_chatsUpSql() (*asset, e
return nil, err
}
info := bindataFileInfo{name: "1637852321_add_received_invitation_admin_column_in_chats.up.sql", size: 72, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1637852321_add_received_invitation_admin_column_in_chats.up.sql", size: 72, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x70, 0x8b, 0x92, 0x56, 0x83, 0x70, 0x7f, 0x6, 0xb2, 0xd, 0x1c, 0x2f, 0xcc, 0x93, 0xc3, 0x85, 0x8c, 0xc2, 0x38, 0x94, 0x7e, 0x88, 0x3f, 0x39, 0x34, 0xf8, 0x90, 0xcf, 0x83, 0x68, 0x3d, 0xe5}}
return a, nil
}
@ -1128,7 +1129,7 @@ func _1645034601_display_nameUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1645034601_display_name.up.sql", size: 110, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1645034601_display_name.up.sql", size: 110, mode: os.FileMode(0664), modTime: time.Unix(1647514829, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x15, 0xfc, 0xda, 0x70, 0x53, 0x19, 0x90, 0x20, 0x4, 0x1c, 0x99, 0x42, 0x53, 0x1a, 0xd6, 0xb8, 0xbb, 0x8a, 0xe8, 0xbe, 0xcc, 0xb7, 0xc, 0x7f, 0x73, 0x50, 0x18, 0xf1, 0x8b, 0x18, 0x54, 0x64}}
return a, nil
}
@ -1148,7 +1149,7 @@ func _1645034602_add_mutual_contact_requestUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1645034602_add_mutual_contact_request.up.sql", size: 454, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1645034602_add_mutual_contact_request.up.sql", size: 454, mode: os.FileMode(0664), modTime: time.Unix(1657187476, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1a, 0xe0, 0x5d, 0x68, 0xb8, 0x50, 0xa4, 0xbb, 0x3e, 0x4f, 0x2, 0x87, 0xad, 0x87, 0x6e, 0x38, 0xdf, 0xc8, 0x4c, 0xe2, 0x5f, 0xd1, 0x6, 0xdc, 0xe7, 0xbd, 0x4a, 0x9c, 0xf3, 0x91, 0xa1, 0x51}}
return a, nil
}
@ -1168,7 +1169,7 @@ func _1650373957_add_contact_request_stateUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1650373957_add_contact_request_state.up.sql", size: 59, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1650373957_add_contact_request_state.up.sql", size: 59, mode: os.FileMode(0664), modTime: time.Unix(1657187476, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5e, 0xc1, 0x3f, 0x29, 0xe, 0x19, 0x86, 0x1a, 0x4c, 0x6c, 0x2a, 0x90, 0x9d, 0xdf, 0xb1, 0xb, 0x72, 0x25, 0xcd, 0x6c, 0x5f, 0xd, 0x51, 0x9e, 0x85, 0xc0, 0x9, 0xb7, 0xbc, 0x87, 0x23, 0xec}}
return a, nil
}
@ -1188,7 +1189,7 @@ func _1656958989_contact_verificationUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1656958989_contact_verification.up.sql", size: 624, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1656958989_contact_verification.up.sql", size: 624, mode: os.FileMode(0664), modTime: time.Unix(1657187476, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3a, 0x3f, 0x28, 0x38, 0x33, 0xdb, 0xe9, 0x4d, 0xc0, 0x54, 0x8c, 0x2a, 0x73, 0xc4, 0xdd, 0x5c, 0xc5, 0x1a, 0x93, 0x4b, 0x6, 0x13, 0xbe, 0x42, 0xd2, 0x7f, 0xd4, 0xc, 0xc5, 0x4e, 0x6d, 0xce}}
return a, nil
}
@ -1208,7 +1209,7 @@ func _1658236268_add_discord_message_authors_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1658236268_add_discord_message_authors_table.up.sql", size: 191, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1658236268_add_discord_message_authors_table.up.sql", size: 191, mode: os.FileMode(0664), modTime: time.Unix(1661976396, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3d, 0xb7, 0xdb, 0x79, 0x1, 0x15, 0xe7, 0x76, 0x5d, 0x22, 0x54, 0x82, 0x9a, 0xbe, 0x24, 0xc1, 0x82, 0xcf, 0x67, 0x91, 0x53, 0xcc, 0xac, 0x74, 0x18, 0x61, 0x69, 0x68, 0x19, 0xca, 0x2b, 0xa8}}
return a, nil
}
@ -1228,7 +1229,7 @@ func _1659619997_add_discord_messages_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1659619997_add_discord_messages_table.up.sql", size: 371, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1659619997_add_discord_messages_table.up.sql", size: 371, mode: os.FileMode(0664), modTime: time.Unix(1661976396, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0x12, 0x9c, 0x96, 0xe2, 0x42, 0x3f, 0x94, 0x62, 0xc2, 0x76, 0xab, 0x3b, 0x4c, 0x85, 0x36, 0x48, 0xcc, 0x73, 0x60, 0x93, 0x5a, 0xd6, 0x7, 0xd6, 0x0, 0xee, 0x1b, 0x1e, 0x34, 0x58, 0x99}}
return a, nil
}
@ -1248,7 +1249,7 @@ func _1660226788_create_chat_identity_social_linksUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1660226788_create_chat_identity_social_links.up.sql", size: 318, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1660226788_create_chat_identity_social_links.up.sql", size: 318, mode: os.FileMode(0664), modTime: time.Unix(1661976396, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3c, 0x76, 0x40, 0xe9, 0x85, 0xc4, 0x38, 0xf8, 0xe5, 0x5d, 0xe8, 0x13, 0x46, 0x1b, 0xc, 0x1, 0xe9, 0x2f, 0x74, 0xd1, 0x79, 0x59, 0xa4, 0xdb, 0x4a, 0x4a, 0xf4, 0x98, 0x58, 0x3c, 0x57, 0xd3}}
return a, nil
}
@ -1268,7 +1269,7 @@ func _1660226789_add_walletconnectsessions_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1660226789_add_walletconnectsessions_table.up.sql", size: 215, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1660226789_add_walletconnectsessions_table.up.sql", size: 215, mode: os.FileMode(0664), modTime: time.Unix(1661976396, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf8, 0x5c, 0x72, 0x2, 0xed, 0x36, 0x19, 0x91, 0x4d, 0x1a, 0xc1, 0xab, 0x84, 0xfa, 0x41, 0xb1, 0x46, 0xa5, 0xdb, 0x3f, 0x76, 0x47, 0xd3, 0x75, 0x3c, 0x6a, 0x8e, 0x78, 0xe6, 0x41, 0xdc, 0x7f}}
return a, nil
}
@ -1288,7 +1289,7 @@ func _1661242854_add_communities_requests_to_leaveUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1661242854_add_communities_requests_to_leave.up.sql", size: 204, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "1661242854_add_communities_requests_to_leave.up.sql", size: 204, mode: os.FileMode(0664), modTime: time.Unix(1661976396, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x49, 0x2e, 0x7d, 0x14, 0xef, 0x6e, 0x95, 0x4b, 0x6, 0x70, 0x2e, 0xd1, 0xf6, 0x59, 0xf9, 0xe, 0x56, 0xa, 0x9c, 0x80, 0x18, 0xca, 0xb9, 0x49, 0x19, 0xf, 0x89, 0x94, 0x36, 0x6d, 0x93, 0x9a}}
return a, nil
}
@ -1308,7 +1309,7 @@ func _1662044232_add_chat_imageUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1662044232_add_chat_image.up.sql", size: 49, mode: os.FileMode(0664), modTime: time.Unix(1662722310, 0)}
info := bindataFileInfo{name: "1662044232_add_chat_image.up.sql", size: 49, mode: os.FileMode(0664), modTime: time.Unix(1663702301, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb3, 0x74, 0xdf, 0x50, 0x79, 0x73, 0x9e, 0xd0, 0xff, 0xa4, 0xd3, 0x87, 0xc3, 0x48, 0x31, 0x6c, 0xdf, 0xa6, 0x20, 0x85, 0xe6, 0x4e, 0x19, 0x9d, 0xef, 0xcc, 0x84, 0x2b, 0x5d, 0x44, 0x34, 0x6}}
return a, nil
}
@ -1328,7 +1329,7 @@ func _1662106895_add_chat_first_message_timestampUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1662106895_add_chat_first_message_timestamp.up.sql", size: 113, mode: os.FileMode(0664), modTime: time.Unix(1662722310, 0)}
info := bindataFileInfo{name: "1662106895_add_chat_first_message_timestamp.up.sql", size: 113, mode: os.FileMode(0664), modTime: time.Unix(1663702301, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8b, 0x55, 0x74, 0xfa, 0xf5, 0x51, 0x85, 0x19, 0xfd, 0xfb, 0x6, 0x79, 0x4d, 0x1d, 0xd, 0x3, 0x46, 0x66, 0x34, 0x1e, 0xce, 0x91, 0x21, 0x29, 0xf6, 0x71, 0xe7, 0x31, 0x39, 0x8f, 0x9d, 0x5}}
return a, nil
}
@ -1348,7 +1349,7 @@ func _1662723928_add_discord_author_image_fieldsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1662723928_add_discord_author_image_fields.up.sql", size: 75, mode: os.FileMode(0664), modTime: time.Unix(1664368053, 0)}
info := bindataFileInfo{name: "1662723928_add_discord_author_image_fields.up.sql", size: 75, mode: os.FileMode(0664), modTime: time.Unix(1663702301, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1e, 0x5b, 0x48, 0x57, 0x98, 0x55, 0x9a, 0xf1, 0x75, 0xf7, 0xb5, 0x41, 0x5e, 0x96, 0xc5, 0xce, 0xfc, 0x30, 0x5c, 0x15, 0x35, 0x9e, 0x4e, 0x4a, 0x3b, 0x38, 0x42, 0xc4, 0x27, 0x3c, 0x87, 0xbf}}
return a, nil
}
@ -1368,7 +1369,7 @@ func _1664195977_add_deleted_for_mesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1664195977_add_deleted_for_mes.up.sql", size: 352, mode: os.FileMode(0664), modTime: time.Unix(1664368692, 0)}
info := bindataFileInfo{name: "1664195977_add_deleted_for_mes.up.sql", size: 352, mode: os.FileMode(0664), modTime: time.Unix(1665079602, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7d, 0x9d, 0x13, 0x9, 0xaa, 0x44, 0x14, 0x93, 0xe2, 0xf5, 0x53, 0xb7, 0x79, 0xa8, 0x18, 0xf0, 0x6c, 0xa4, 0x9c, 0x73, 0xc1, 0xaa, 0xc5, 0x2e, 0xc5, 0x41, 0xd7, 0x24, 0xb0, 0xd7, 0xb8, 0xdf}}
return a, nil
}
@ -1388,11 +1389,31 @@ func _1664367420_add_discord_attachments_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1664367420_add_discord_attachments_table.up.sql", size: 350, mode: os.FileMode(0664), modTime: time.Unix(1664438057, 0)}
info := bindataFileInfo{name: "1664367420_add_discord_attachments_table.up.sql", size: 350, mode: os.FileMode(0664), modTime: time.Unix(1665079602, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x48, 0xe1, 0xb6, 0x4f, 0x6f, 0x92, 0x0, 0xb4, 0xf, 0x55, 0x12, 0x1c, 0x98, 0x6d, 0xbc, 0x1e, 0xfd, 0xae, 0x1c, 0xce, 0xd1, 0x3d, 0x2, 0x21, 0x2e, 0xc0, 0x13, 0xa, 0xb2, 0xec, 0x81, 0x13}}
return a, nil
}
var __1665079662_add_spectated_column_in_communitiesUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\xc6\x31\x0e\x02\x21\x10\x05\xd0\xde\x53\xfc\x7b\x58\x0d\x32\x54\x5f\x26\xd1\xa1\x36\x06\x29\x28\x70\x37\x81\xbd\xff\xb6\xdb\x3d\xa1\xeb\x0b\x2e\x81\x8a\xba\x8d\x71\xfc\xfb\xea\x6d\x7e\x2e\x86\xc4\x88\x87\xb1\x3c\x33\xe6\xde\xea\xfa\xae\xf6\x43\x30\x23\xb2\x39\x72\x21\x11\x35\x49\xa1\x23\x09\xdf\x7a\xbf\x9d\x01\x00\x00\xff\xff\xe5\x76\xfe\x9f\x56\x00\x00\x00")
func _1665079662_add_spectated_column_in_communitiesUpSqlBytes() ([]byte, error) {
return bindataRead(
__1665079662_add_spectated_column_in_communitiesUpSql,
"1665079662_add_spectated_column_in_communities.up.sql",
)
}
func _1665079662_add_spectated_column_in_communitiesUpSql() (*asset, error) {
bytes, err := _1665079662_add_spectated_column_in_communitiesUpSqlBytes()
if err != nil {
return nil, err
}
info := bindataFileInfo{name: "1665079662_add_spectated_column_in_communities.up.sql", size: 86, mode: os.FileMode(0664), modTime: time.Unix(1665079602, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa0, 0x5d, 0xfe, 0xe2, 0xbe, 0xdf, 0xba, 0x45, 0xe9, 0xfc, 0xa7, 0x5f, 0xda, 0x19, 0xdb, 0x40, 0x96, 0x59, 0x78, 0xa, 0xd7, 0x4a, 0xca, 0x1a, 0x93, 0xfb, 0xae, 0x6d, 0x74, 0x7, 0x36, 0xdd}}
return a, nil
}
var _readmeMd = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x91\xc1\xce\xd3\x30\x10\x84\xef\x7e\x8a\x91\x7a\x01\xa9\x2a\x8f\xc0\x0d\x71\x82\x03\x48\x1c\xc9\x36\x9e\x36\x96\x1c\x6f\xf0\xae\x93\xe6\xed\x91\xa3\xc2\xdf\xff\x66\xed\xd8\x33\xdf\x78\x4f\xa7\x13\xbe\xea\x06\x57\x6c\x35\x39\x31\xa7\x7b\x15\x4f\x5a\xec\x73\x08\xbf\x08\x2d\x79\x7f\x4a\x43\x5b\x86\x17\xfd\x8c\x21\xea\x56\x5e\x47\x90\x4a\x14\x75\x48\xde\x64\x37\x2c\x6a\x96\xae\x99\x48\x05\xf6\x27\x77\x13\xad\x08\xae\x8a\x51\xe7\x25\xf3\xf1\xa9\x9f\xf9\x58\x58\x2c\xad\xbc\xe0\x8b\x56\xf0\x21\x5d\xeb\x4c\x95\xb3\xae\x84\x60\xd4\xdc\xe6\x82\x5d\x1b\x36\x6d\x39\x62\x92\xf5\xb8\x11\xdb\x92\xd3\x28\xce\xe0\x13\xe1\x72\xcd\x3c\x63\xd4\x65\x87\xae\xac\xe8\xc3\x28\x2e\x67\x44\x66\x3a\x21\x25\xa2\x72\xac\x14\x67\xbc\x84\x9f\x53\x32\x8c\x52\x70\x25\x56\xd6\xfd\x8d\x05\x37\xad\x30\x9d\x9f\xa6\x86\x0f\xcd\x58\x7f\xcf\x34\x93\x3b\xed\x90\x9f\xa4\x1f\xcf\x30\x85\x4d\x07\x58\xaf\x7f\x25\xc4\x9d\xf3\x72\x64\x84\xd0\x7f\xf9\x9b\x3a\x2d\x84\xef\x85\x48\x66\x8d\xd8\x88\x9b\x8c\x8c\x98\x5b\xf6\x74\x14\x4e\x33\x0d\xc9\xe0\x93\x38\xda\x12\xc5\x69\xbd\xe4\xf0\x2e\x7a\x78\x07\x1c\xfe\x13\x9f\x91\x29\x31\x95\x7b\x7f\x62\x59\x37\xb4\xe5\x5e\x25\xfe\x33\xee\xd5\x53\x71\xd6\xda\x3a\xd8\xcb\xde\x2e\xf8\xa1\x90\x55\x53\x0c\xc7\xaa\x0d\xe9\x76\x14\x29\x1c\x7b\x68\xdd\x2f\xe1\x6f\x00\x00\x00\xff\xff\x3c\x0a\xc2\xfe\x2a\x02\x00\x00")
func readmeMdBytes() ([]byte, error) {
@ -1408,7 +1429,7 @@ func readmeMd() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "README.md", size: 554, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "README.md", size: 554, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1c, 0x6e, 0xfb, 0xcc, 0x81, 0x94, 0x4d, 0x8c, 0xa0, 0x3b, 0x5, 0xb0, 0x18, 0xd6, 0xbb, 0xb3, 0x79, 0xc8, 0x8f, 0xff, 0xc1, 0x10, 0xf9, 0xf, 0x20, 0x1b, 0x4a, 0x74, 0x96, 0x42, 0xd7, 0xa8}}
return a, nil
}
@ -1428,7 +1449,7 @@ func docGo() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "doc.go", size: 850, mode: os.FileMode(0664), modTime: time.Unix(1662647306, 0)}
info := bindataFileInfo{name: "doc.go", size: 850, mode: os.FileMode(0664), modTime: time.Unix(1645777807, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa0, 0xcc, 0x41, 0xe1, 0x61, 0x12, 0x97, 0xe, 0x36, 0x8c, 0xa7, 0x9e, 0xe0, 0x6e, 0x59, 0x9e, 0xee, 0xd5, 0x4a, 0xcf, 0x1e, 0x60, 0xd6, 0xc3, 0x3a, 0xc9, 0x6c, 0xf2, 0x86, 0x5a, 0xb4, 0x1e}}
return a, nil
}
@ -1650,6 +1671,8 @@ var _bindata = map[string]func() (*asset, error){
"1664367420_add_discord_attachments_table.up.sql": _1664367420_add_discord_attachments_tableUpSql,
"1665079662_add_spectated_column_in_communities.up.sql": _1665079662_add_spectated_column_in_communitiesUpSql,
"README.md": readmeMd,
"doc.go": docGo,
@ -1759,6 +1782,7 @@ var _bintree = &bintree{nil, map[string]*bintree{
"1662723928_add_discord_author_image_fields.up.sql": &bintree{_1662723928_add_discord_author_image_fieldsUpSql, map[string]*bintree{}},
"1664195977_add_deleted_for_mes.up.sql": &bintree{_1664195977_add_deleted_for_mesUpSql, map[string]*bintree{}},
"1664367420_add_discord_attachments_table.up.sql": &bintree{_1664367420_add_discord_attachments_tableUpSql, map[string]*bintree{}},
"1665079662_add_spectated_column_in_communities.up.sql": &bintree{_1665079662_add_spectated_column_in_communitiesUpSql, map[string]*bintree{}},
"README.md": &bintree{readmeMd, map[string]*bintree{}},
"doc.go": &bintree{docGo, map[string]*bintree{}},
}}

View File

@ -0,0 +1 @@
ALTER TABLE communities_communities ADD COLUMN spectated BOOL NOT NULL DEFAULT FALSE;

View File

@ -907,6 +907,7 @@ type SyncCommunity struct {
RequestsToJoin []*SyncCommunityRequestsToJoin `protobuf:"bytes,8,rep,name=requests_to_join,json=requestsToJoin,proto3" json:"requests_to_join,omitempty"`
Settings *SyncCommunitySettings `protobuf:"bytes,9,opt,name=settings,proto3" json:"settings,omitempty"`
Encrypted bool `protobuf:"varint,10,opt,name=encrypted,proto3" json:"encrypted,omitempty"`
Spectated bool `protobuf:"varint,11,opt,name=spectated,proto3" json:"spectated,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -1007,6 +1008,13 @@ func (m *SyncCommunity) GetEncrypted() bool {
return false
}
func (m *SyncCommunity) GetSpectated() bool {
if m != nil {
return m.Spectated
}
return false
}
type SyncCommunityRequestsToJoin struct {
Id []byte `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
PublicKey string `protobuf:"bytes,2,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"`
@ -2118,123 +2126,123 @@ func init() {
}
var fileDescriptor_d61ab7221f0b5518 = []byte{
// 1878 bytes of a gzipped FileDescriptorProto
// 1887 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x57, 0x4f, 0x73, 0x1b, 0x49,
0x15, 0xdf, 0x91, 0x64, 0xfd, 0x79, 0x92, 0x6c, 0x6d, 0x6f, 0x48, 0x66, 0x9d, 0xa4, 0xe2, 0x9d,
0xb0, 0xb5, 0x3e, 0x80, 0x97, 0xca, 0x42, 0x2d, 0x6c, 0x76, 0x8b, 0x55, 0x64, 0xd5, 0x46, 0x9b,
0x44, 0x71, 0x8d, 0xed, 0x04, 0x28, 0xaa, 0xa6, 0xda, 0x33, 0x1d, 0xab, 0xd1, 0x68, 0x66, 0x98,
0x6e, 0x39, 0x0c, 0x1f, 0x80, 0x33, 0xc5, 0x85, 0x2b, 0x67, 0xb8, 0x71, 0xe6, 0x03, 0x70, 0xe3,
0xc0, 0x11, 0x8a, 0x0f, 0xc0, 0x81, 0xcf, 0x40, 0xbd, 0xee, 0x9e, 0xd1, 0x8c, 0x2d, 0x19, 0x53,
0x9c, 0x38, 0xa9, 0xdf, 0xd3, 0xeb, 0xee, 0xd7, 0xbf, 0xf7, 0xef, 0x37, 0xd0, 0x4f, 0x28, 0x4f,
0x79, 0x74, 0x7e, 0x90, 0xa4, 0xb1, 0x8c, 0x49, 0x5b, 0xfd, 0x9c, 0x2d, 0xdf, 0x38, 0xbf, 0xb7,
0xa0, 0xf9, 0x84, 0xfa, 0xf3, 0x65, 0x42, 0x6e, 0xc1, 0x96, 0x1f, 0xc6, 0xfe, 0xdc, 0xb6, 0xf6,
0xac, 0xfd, 0x86, 0xab, 0x05, 0xb2, 0x0d, 0x35, 0x1e, 0xd8, 0xb5, 0x3d, 0x6b, 0xbf, 0xe3, 0xd6,
0x78, 0x40, 0x7e, 0x08, 0x6d, 0x3f, 0x8e, 0x24, 0xf5, 0xa5, 0xb0, 0xeb, 0x7b, 0xf5, 0xfd, 0xee,
0xa3, 0x87, 0x07, 0xf9, 0x69, 0x07, 0xc7, 0x59, 0xe4, 0x4f, 0x22, 0x21, 0x69, 0x18, 0x52, 0xc9,
0xe3, 0x68, 0xa4, 0x2d, 0x5f, 0x3d, 0x72, 0x8b, 0x4d, 0xe4, 0x07, 0xd0, 0xf5, 0xe3, 0xc5, 0x62,
0x19, 0x71, 0xc9, 0x99, 0xb0, 0x1b, 0xea, 0x8c, 0x3b, 0xd5, 0x33, 0x46, 0xc6, 0x20, 0x73, 0xcb,
0xb6, 0xce, 0x9f, 0x1a, 0xd0, 0x7b, 0xb1, 0x0c, 0x25, 0x1f, 0xfa, 0x7e, 0xbc, 0x8c, 0x24, 0x21,
0xd0, 0x88, 0xe8, 0x82, 0x29, 0x8f, 0x3b, 0xae, 0x5a, 0x93, 0x7b, 0xd0, 0x91, 0x7c, 0xc1, 0x84,
0xa4, 0x8b, 0x44, 0xf9, 0x5d, 0x77, 0x57, 0x0a, 0xfc, 0x97, 0x07, 0x2c, 0x92, 0xdc, 0x8f, 0x23,
0xbb, 0xae, 0xb6, 0xad, 0x14, 0xe4, 0x4b, 0x00, 0x3f, 0x0e, 0xe3, 0xd4, 0x9b, 0x51, 0x31, 0x33,
0xae, 0x7d, 0xb0, 0x72, 0xad, 0x7c, 0xf7, 0xc1, 0x28, 0x0e, 0xe3, 0x65, 0xfa, 0x94, 0x8a, 0x99,
0xdb, 0x51, 0x9b, 0x70, 0x49, 0x6c, 0x68, 0x29, 0x61, 0x12, 0xd8, 0x5b, 0xea, 0xee, 0x5c, 0x24,
0x1f, 0xc1, 0xce, 0x9c, 0x65, 0x3e, 0x4d, 0x03, 0xcf, 0x04, 0xc3, 0x6e, 0xaa, 0xfb, 0xb7, 0x8d,
0xfa, 0x48, 0x6b, 0xc9, 0x1d, 0x68, 0xcd, 0x59, 0xe6, 0x2d, 0x79, 0x60, 0xb7, 0x94, 0x41, 0x73,
0xce, 0xb2, 0x53, 0x1e, 0x90, 0xcf, 0xa1, 0xc9, 0x17, 0xf4, 0x9c, 0x09, 0xbb, 0xad, 0x3c, 0xfb,
0xe6, 0x06, 0xcf, 0x26, 0xea, 0x3d, 0x32, 0x9b, 0xa0, 0xb1, 0x6b, 0xf6, 0xec, 0x3a, 0x00, 0x2b,
0x97, 0x31, 0xd8, 0x3c, 0x0a, 0xd8, 0x2f, 0x6c, 0x6b, 0xaf, 0xbe, 0x5f, 0x77, 0xb5, 0xb0, 0xfb,
0x37, 0x0b, 0xfa, 0x95, 0xdd, 0x65, 0x67, 0xac, 0x8a, 0x33, 0x39, 0xf4, 0xb5, 0x12, 0xf4, 0x36,
0xb4, 0x12, 0x9a, 0x85, 0x31, 0x0d, 0x14, 0xb4, 0x3d, 0x37, 0x17, 0xf1, 0xba, 0xb7, 0x3c, 0x90,
0x88, 0x29, 0x82, 0xa2, 0x05, 0x72, 0x1b, 0x9a, 0x33, 0xc6, 0xcf, 0x67, 0xd2, 0x60, 0x65, 0x24,
0xb2, 0x0b, 0xed, 0x37, 0x3c, 0x64, 0x82, 0xff, 0x92, 0x29, 0x8c, 0xea, 0x6e, 0x21, 0x93, 0x87,
0xd0, 0x4f, 0xd5, 0xca, 0x93, 0x34, 0x3d, 0x67, 0x52, 0x61, 0x54, 0x77, 0x7b, 0x5a, 0x79, 0xa2,
0x74, 0xab, 0x54, 0x6e, 0x97, 0x52, 0xd9, 0xf9, 0xab, 0x05, 0xef, 0x3d, 0x8f, 0x7d, 0x1a, 0x1a,
0xa4, 0x8f, 0x8c, 0x73, 0xdf, 0x83, 0xc6, 0x9c, 0x65, 0x42, 0x41, 0x51, 0x89, 0xf7, 0x1a, 0xe3,
0x83, 0x67, 0x2c, 0x73, 0x95, 0x39, 0xf9, 0x0c, 0x7a, 0x0b, 0x84, 0x9d, 0x6a, 0xd8, 0x15, 0x12,
0xdd, 0x47, 0xb7, 0xd7, 0x07, 0xc5, 0xad, 0xd8, 0xe2, 0x0b, 0x13, 0x2a, 0xc4, 0xdb, 0x38, 0x0d,
0x4c, 0x16, 0x16, 0xf2, 0xee, 0xb7, 0xa1, 0xfe, 0x8c, 0x65, 0x6b, 0x73, 0x9b, 0x40, 0x23, 0xa0,
0x92, 0xaa, 0xab, 0x7a, 0xae, 0x5a, 0x3b, 0xbf, 0xb2, 0x60, 0x80, 0x3e, 0x96, 0xeb, 0x6e, 0x43,
0x2d, 0x7f, 0x04, 0x3b, 0xbc, 0x64, 0xe5, 0x15, 0x85, 0xbd, 0x5d, 0x56, 0x4f, 0x02, 0xf2, 0x00,
0xba, 0x01, 0xbb, 0xe0, 0x3e, 0xf3, 0x64, 0x96, 0x30, 0xe3, 0x21, 0x68, 0xd5, 0x49, 0x96, 0xb0,
0xc2, 0xb9, 0xc6, 0xca, 0x39, 0xe7, 0x9f, 0x16, 0xdc, 0xd9, 0xd0, 0x00, 0x6e, 0xd8, 0x5b, 0x1e,
0x42, 0x3f, 0x49, 0x63, 0x0c, 0xb5, 0xa7, 0x92, 0xd6, 0x5c, 0xdc, 0x33, 0x4a, 0x9d, 0x91, 0xef,
0x43, 0x9b, 0x45, 0xc2, 0x2b, 0x5d, 0xdf, 0x62, 0x91, 0x98, 0x22, 0x3c, 0x1f, 0x40, 0x2f, 0xa4,
0x42, 0x7a, 0xcb, 0x24, 0xa0, 0x92, 0xe9, 0x0a, 0x6c, 0xb8, 0x5d, 0xd4, 0x9d, 0x6a, 0x15, 0xbe,
0x4c, 0x64, 0x42, 0xb2, 0x85, 0x27, 0xe9, 0xb9, 0xb0, 0x9b, 0x7b, 0x75, 0x7c, 0x99, 0x56, 0x9d,
0xd0, 0x73, 0x41, 0x3e, 0x84, 0xed, 0x10, 0xc3, 0xee, 0x45, 0xdc, 0x9f, 0xab, 0x4b, 0x74, 0x11,
0xf6, 0x95, 0x76, 0x6a, 0x94, 0xce, 0x3f, 0xea, 0xf0, 0xfe, 0xc6, 0x6e, 0x47, 0xbe, 0x03, 0xb7,
0xca, 0x8e, 0x78, 0x6a, 0x6f, 0x98, 0x99, 0xd7, 0x93, 0x92, 0x43, 0xcf, 0xf5, 0x3f, 0xff, 0xc7,
0x50, 0x60, 0x6c, 0x69, 0x10, 0xb0, 0xc0, 0xee, 0xec, 0x59, 0xfb, 0x6d, 0x57, 0x0b, 0xd8, 0x0b,
0xce, 0x30, 0xc8, 0x2c, 0xb0, 0x41, 0xe9, 0x73, 0x11, 0xed, 0x17, 0x4b, 0xf4, 0xa9, 0xab, 0xed,
0x95, 0x80, 0xf6, 0x29, 0x5b, 0xc4, 0x17, 0x2c, 0xb0, 0x7b, 0xda, 0xde, 0x88, 0x64, 0x0f, 0x7a,
0x33, 0x2a, 0x3c, 0x75, 0xac, 0xb7, 0x14, 0x76, 0x5f, 0xfd, 0x0d, 0x33, 0x2a, 0x86, 0xa8, 0x3a,
0x15, 0xe4, 0x63, 0x78, 0xef, 0x82, 0xa5, 0xfc, 0x0d, 0xf7, 0x75, 0x5e, 0x0b, 0x49, 0xe5, 0x52,
0xd8, 0xdb, 0xaa, 0x33, 0x90, 0xf2, 0x5f, 0xc7, 0xea, 0x1f, 0x44, 0x47, 0xa6, 0x4b, 0x21, 0x73,
0xcb, 0x1d, 0x65, 0xd9, 0x55, 0x3a, 0x6d, 0xe2, 0xbc, 0xbd, 0x9a, 0xcc, 0xf9, 0xd4, 0x59, 0x9f,
0xcc, 0x57, 0x22, 0x56, 0x5b, 0x13, 0xb1, 0xcb, 0x61, 0xa9, 0x5f, 0x09, 0x8b, 0xf3, 0x04, 0x76,
0x2f, 0x5f, 0x7c, 0xb4, 0x3c, 0x0b, 0xb9, 0x3f, 0x9a, 0xd1, 0x1b, 0x16, 0x92, 0xf3, 0xaf, 0x1a,
0xf4, 0x2b, 0x73, 0xf4, 0x3f, 0xee, 0xeb, 0xa9, 0xac, 0x7b, 0x00, 0xdd, 0x24, 0xe5, 0x17, 0x54,
0x32, 0x6f, 0xce, 0x32, 0xd3, 0xc4, 0xc1, 0xa8, 0xb0, 0x29, 0xed, 0x61, 0x63, 0x10, 0x7e, 0xca,
0x13, 0xf4, 0x4b, 0x25, 0x5d, 0xcf, 0x2d, 0xab, 0xb0, 0xa7, 0xff, 0x2c, 0xe6, 0x91, 0x49, 0xb9,
0xb6, 0x6b, 0x24, 0xec, 0x78, 0x3a, 0x10, 0x2c, 0x50, 0x3d, 0xbd, 0xed, 0x16, 0xf2, 0x2a, 0x23,
0x5a, 0xe5, 0x8c, 0x78, 0x09, 0x83, 0x94, 0xfd, 0x7c, 0xc9, 0x84, 0x14, 0x9e, 0x8c, 0x3d, 0x3c,
0xc7, 0x0c, 0xbe, 0x0f, 0x37, 0xb1, 0x05, 0x63, 0x7e, 0x12, 0x7f, 0x1d, 0xf3, 0xc8, 0xdd, 0x4e,
0x2b, 0x32, 0x79, 0x0c, 0x6d, 0xc1, 0xa4, 0xe4, 0xd1, 0xb9, 0x50, 0xb9, 0xda, 0x7d, 0xf4, 0x60,
0xc3, 0x41, 0xc7, 0xc6, 0xcc, 0x2d, 0x36, 0x20, 0x71, 0x60, 0x91, 0x9f, 0x66, 0x89, 0x2c, 0x32,
0x7a, 0xa5, 0x70, 0xfe, 0x62, 0xc1, 0xdd, 0x6b, 0x5c, 0x31, 0x40, 0x5b, 0x05, 0xd0, 0xf7, 0x01,
0x12, 0x15, 0x54, 0x85, 0xb3, 0x0e, 0x5c, 0x47, 0x6b, 0x10, 0xe6, 0x22, 0x5a, 0xf5, 0x72, 0xb4,
0xae, 0x29, 0xf7, 0x3b, 0xd0, 0xf2, 0x67, 0x54, 0x62, 0x47, 0xdf, 0xd2, 0x63, 0x1a, 0xc5, 0x49,
0x80, 0x09, 0x97, 0x33, 0xa8, 0x0c, 0xff, 0x6d, 0xea, 0x88, 0x15, 0xba, 0x89, 0x42, 0x1f, 0xcb,
0x40, 0x57, 0x77, 0xc3, 0xd5, 0x82, 0xf3, 0x9b, 0x1a, 0x0c, 0x2e, 0xe7, 0x21, 0xf9, 0xa2, 0x44,
0xfe, 0xae, 0x4c, 0xcb, 0x0d, 0xed, 0xb0, 0x44, 0xfd, 0xbe, 0x82, 0x9e, 0x79, 0x35, 0x7a, 0x27,
0xec, 0xda, 0x65, 0x1a, 0xb3, 0x39, 0xf1, 0xdd, 0x6e, 0x52, 0xac, 0x05, 0x79, 0x0c, 0xad, 0x7c,
0xea, 0xd6, 0x55, 0x20, 0xaf, 0x71, 0x23, 0x1f, 0xc0, 0xf9, 0x8e, 0xff, 0x85, 0x80, 0x7e, 0x0a,
0x3b, 0xea, 0x5f, 0x74, 0xc8, 0x74, 0xa7, 0x9b, 0x15, 0xe4, 0xe7, 0x70, 0x2b, 0xdf, 0xf8, 0x82,
0x09, 0x81, 0x84, 0xcc, 0x65, 0xf4, 0xa6, 0xbb, 0xbf, 0x84, 0xdb, 0xb8, 0x7b, 0xe8, 0x4b, 0x7e,
0xc1, 0x65, 0x36, 0x62, 0x91, 0x64, 0xe9, 0x35, 0xfb, 0x07, 0x50, 0xe7, 0x81, 0x86, 0xb7, 0xe7,
0xe2, 0xd2, 0x39, 0xd4, 0x4d, 0xa5, 0x7a, 0xc2, 0xd0, 0xf7, 0x19, 0x66, 0xef, 0x8d, 0x4f, 0x19,
0xeb, 0x24, 0xaf, 0x9e, 0x72, 0xc8, 0xc5, 0x82, 0x0b, 0xf1, 0x5f, 0x1c, 0xf3, 0x3b, 0x0b, 0x7a,
0x78, 0xce, 0x93, 0x38, 0x9e, 0x2f, 0x68, 0x3a, 0xdf, 0xbc, 0x71, 0x99, 0x86, 0x06, 0x06, 0x5c,
0x16, 0xac, 0xa3, 0x5e, 0xa2, 0x44, 0x77, 0xa1, 0xa3, 0xda, 0xad, 0x87, 0xb6, 0xba, 0x2a, 0xda,
0x4a, 0x71, 0x9a, 0x86, 0xe5, 0xa1, 0xb2, 0x55, 0x1d, 0x2a, 0xf7, 0x01, 0x02, 0x16, 0x32, 0x1c,
0xce, 0x54, 0xaa, 0xaa, 0x68, 0xb8, 0x1d, 0xa3, 0x19, 0x4a, 0xe7, 0x6b, 0x9d, 0xfc, 0xa3, 0x90,
0xd1, 0xf4, 0x29, 0x17, 0x32, 0x4e, 0xb3, 0x72, 0x8d, 0x59, 0x95, 0x1a, 0xbb, 0x0f, 0xe0, 0xa3,
0xa1, 0x3e, 0xab, 0xa6, 0xcf, 0x32, 0x9a, 0xa1, 0x74, 0xfe, 0x6c, 0x01, 0xc1, 0xc3, 0x8e, 0xf4,
0x20, 0x38, 0xe2, 0xbe, 0x5c, 0xa6, 0x6c, 0x2d, 0xbf, 0x2b, 0x11, 0xe8, 0xda, 0x06, 0x02, 0x8d,
0x6f, 0xef, 0x5f, 0x25, 0xd0, 0x0d, 0xa5, 0xce, 0x09, 0xf4, 0x5d, 0xe8, 0xa8, 0x41, 0xa4, 0x18,
0xf4, 0x96, 0xfa, 0x4b, 0x31, 0xe8, 0xe3, 0xb5, 0x0c, 0xba, 0xa9, 0x0c, 0x36, 0x30, 0xe8, 0x56,
0x99, 0x41, 0xcf, 0xe0, 0xbd, 0xab, 0x2f, 0x11, 0x9b, 0x3f, 0x12, 0xbe, 0x0f, 0xed, 0xc4, 0x18,
0x99, 0x62, 0xbf, 0x57, 0xad, 0xb3, 0xea, 0x49, 0x6e, 0x61, 0xed, 0xfc, 0xa1, 0x06, 0xef, 0xa2,
0xc1, 0x6b, 0x1a, 0x86, 0x4c, 0x5e, 0x3f, 0x79, 0x6d, 0x68, 0xd1, 0x20, 0x48, 0x99, 0x10, 0x39,
0x6a, 0x46, 0x44, 0x7c, 0xde, 0xaa, 0x03, 0x14, 0x6c, 0x6d, 0xd7, 0x48, 0x88, 0x3d, 0xc6, 0x4e,
0xa1, 0xd6, 0x76, 0xd5, 0x1a, 0x75, 0x8a, 0xec, 0xea, 0xfe, 0xa9, 0xd6, 0x78, 0x32, 0xc6, 0x1e,
0xa7, 0xb9, 0xfe, 0x56, 0xcb, 0x45, 0xb4, 0x4e, 0xa8, 0x9c, 0x19, 0x46, 0xa4, 0xd6, 0x38, 0x22,
0x8a, 0x16, 0xae, 0xbe, 0x3c, 0x7a, 0xe5, 0x9e, 0x9e, 0xc7, 0xbb, 0x53, 0x8a, 0x37, 0xbe, 0x07,
0x3f, 0x0f, 0xd5, 0x40, 0xe9, 0xb8, 0x5a, 0x50, 0x51, 0xe5, 0x41, 0xc0, 0x22, 0xc3, 0x90, 0x8c,
0xb4, 0x99, 0x22, 0x39, 0x2f, 0x74, 0x86, 0x55, 0xc0, 0x12, 0xe4, 0x53, 0x68, 0x9b, 0x9e, 0x97,
0x77, 0xeb, 0xbb, 0x55, 0xf4, 0x2b, 0xf6, 0x6e, 0x61, 0xec, 0xfc, 0xd6, 0x82, 0x6f, 0xac, 0x9d,
0x87, 0x1b, 0x02, 0x70, 0x79, 0xc8, 0xe8, 0x92, 0xad, 0x0c, 0x99, 0x31, 0x3c, 0x98, 0xe9, 0x3a,
0xf2, 0x68, 0xea, 0xcf, 0xf8, 0x05, 0xf3, 0xc4, 0x32, 0x49, 0xe2, 0x54, 0x7a, 0x2c, 0xa2, 0x67,
0xa1, 0xe1, 0x42, 0x6d, 0xf7, 0x9e, 0x31, 0x1b, 0x6a, 0xab, 0x63, 0x6d, 0x34, 0xd6, 0x36, 0xce,
0x1f, 0x2d, 0xdd, 0x81, 0x4f, 0x90, 0xa9, 0x21, 0xf7, 0x63, 0xe9, 0x0d, 0xbf, 0x2d, 0xbe, 0x80,
0xa6, 0x21, 0x7b, 0x78, 0xcf, 0xf6, 0x65, 0x0e, 0x51, 0x3a, 0xf0, 0xe0, 0x64, 0x45, 0x03, 0x5d,
0xb3, 0xc9, 0xf9, 0x0c, 0xba, 0x25, 0x35, 0xe9, 0x42, 0xeb, 0x74, 0xfa, 0x6c, 0xfa, 0xf2, 0xf5,
0x74, 0xf0, 0x0e, 0x0a, 0x27, 0xee, 0xe9, 0xf1, 0xc9, 0xf8, 0x70, 0x60, 0x91, 0x77, 0xa1, 0x7f,
0x3a, 0x55, 0xe2, 0xeb, 0x97, 0xee, 0xc9, 0xd3, 0x1f, 0x0f, 0x6a, 0xce, 0xaf, 0xeb, 0x9a, 0x4b,
0xbe, 0x2a, 0x11, 0x51, 0xc3, 0x0f, 0x36, 0x38, 0x4f, 0xa0, 0xf1, 0x26, 0x8d, 0x17, 0xf9, 0xc7,
0x35, 0xae, 0xf1, 0x41, 0x32, 0x36, 0xad, 0xaf, 0x26, 0x63, 0xcc, 0x36, 0x7f, 0x86, 0x01, 0x8c,
0xce, 0x73, 0x3a, 0xb0, 0x52, 0x60, 0x48, 0x0c, 0xfb, 0xd1, 0x5d, 0xc9, 0xf0, 0xff, 0x42, 0x37,
0x54, 0xdf, 0xa0, 0x29, 0x13, 0x49, 0x1c, 0x89, 0x3c, 0xbb, 0x0b, 0x19, 0x5b, 0x5a, 0xca, 0x92,
0x90, 0xeb, 0xcd, 0xba, 0x07, 0x74, 0x8c, 0x66, 0x28, 0x09, 0x5b, 0x4f, 0xb8, 0xdb, 0x0a, 0xd9,
0xef, 0x56, 0x91, 0x5d, 0xf3, 0xea, 0x83, 0x57, 0x57, 0x28, 0xf9, 0x3a, 0x9a, 0xee, 0xfc, 0x08,
0xc8, 0x55, 0xcb, 0x2b, 0xd8, 0x1f, 0x8d, 0xa7, 0x87, 0x93, 0xe9, 0x57, 0x03, 0x8b, 0xf4, 0xa0,
0x3d, 0x1c, 0x8d, 0xc6, 0x47, 0x18, 0x89, 0x1a, 0x4a, 0x87, 0xe3, 0xd1, 0xf3, 0xc9, 0x74, 0x7c,
0x38, 0xa8, 0xa3, 0x34, 0x1a, 0x4e, 0x47, 0xe3, 0xe7, 0xe3, 0xc3, 0x41, 0xc3, 0xf9, 0xbb, 0xa5,
0x07, 0x62, 0xce, 0x51, 0xb4, 0x5f, 0x87, 0xcc, 0xe7, 0x62, 0xf3, 0xe7, 0xf3, 0x3d, 0xe8, 0x18,
0xfc, 0x26, 0x79, 0x66, 0xad, 0x14, 0xe4, 0xa7, 0xb0, 0x13, 0x98, 0xfd, 0x5e, 0x25, 0xd3, 0x3e,
0xb9, 0x4c, 0x2d, 0xd6, 0x5d, 0x79, 0x90, 0x2f, 0x0c, 0x1c, 0xdb, 0x41, 0x45, 0x76, 0xbe, 0x05,
0xdb, 0x55, 0x8b, 0xca, 0x63, 0xdf, 0xa9, 0x3c, 0xd6, 0x7a, 0xd2, 0xff, 0x49, 0xf7, 0xe0, 0xe3,
0xc7, 0xf9, 0xb5, 0x67, 0x4d, 0xb5, 0xfa, 0xe4, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xd8,
0x66, 0x70, 0x06, 0x14, 0x00, 0x00,
0x15, 0xdf, 0xd1, 0xc8, 0xfa, 0xf3, 0x24, 0xd9, 0xda, 0xde, 0x90, 0xcc, 0x3a, 0x49, 0xc5, 0x3b,
0x61, 0x6b, 0x7d, 0x00, 0x2f, 0x95, 0x85, 0x5a, 0xd8, 0xec, 0x16, 0xab, 0xc8, 0xaa, 0x8d, 0x36,
0x89, 0xe2, 0x1a, 0xdb, 0x09, 0x50, 0x54, 0x4d, 0xb5, 0x67, 0x3a, 0x56, 0xa3, 0xd1, 0xcc, 0x30,
0xdd, 0x72, 0x18, 0x3e, 0x00, 0x27, 0x0e, 0x14, 0x17, 0xae, 0x9c, 0xe1, 0xc6, 0x99, 0x0f, 0xc0,
0x8d, 0x03, 0x47, 0x28, 0x3e, 0x00, 0x9f, 0x82, 0x7a, 0xdd, 0x3d, 0xd2, 0x8c, 0x2d, 0x19, 0x53,
0x9c, 0x38, 0x4d, 0xbf, 0x37, 0xaf, 0x5f, 0xbf, 0x7e, 0x7f, 0x7f, 0x0d, 0xbd, 0x94, 0xf2, 0x8c,
0xc7, 0xe7, 0x07, 0x69, 0x96, 0xc8, 0x84, 0xb4, 0xd4, 0xe7, 0x6c, 0xf1, 0xc6, 0xfd, 0x83, 0x05,
0x8d, 0x27, 0x34, 0x98, 0x2d, 0x52, 0x72, 0x0b, 0xb6, 0x82, 0x28, 0x09, 0x66, 0x8e, 0xb5, 0x67,
0xed, 0xd7, 0x3d, 0x4d, 0x90, 0x6d, 0xa8, 0xf1, 0xd0, 0xa9, 0xed, 0x59, 0xfb, 0x6d, 0xaf, 0xc6,
0x43, 0xf2, 0x43, 0x68, 0x05, 0x49, 0x2c, 0x69, 0x20, 0x85, 0x63, 0xef, 0xd9, 0xfb, 0x9d, 0x47,
0x0f, 0x0f, 0x0a, 0x6d, 0x07, 0xc7, 0x79, 0x1c, 0x8c, 0x63, 0x21, 0x69, 0x14, 0x51, 0xc9, 0x93,
0x78, 0xa8, 0x25, 0x5f, 0x3d, 0xf2, 0x96, 0x9b, 0xc8, 0x0f, 0xa0, 0x13, 0x24, 0xf3, 0xf9, 0x22,
0xe6, 0x92, 0x33, 0xe1, 0xd4, 0x95, 0x8e, 0x3b, 0x55, 0x1d, 0x43, 0x23, 0x90, 0x7b, 0x65, 0x59,
0xf7, 0xcf, 0x75, 0xe8, 0xbe, 0x58, 0x44, 0x92, 0x0f, 0x82, 0x20, 0x59, 0xc4, 0x92, 0x10, 0xa8,
0xc7, 0x74, 0xce, 0x94, 0xc5, 0x6d, 0x4f, 0xad, 0xc9, 0x3d, 0x68, 0x4b, 0x3e, 0x67, 0x42, 0xd2,
0x79, 0xaa, 0xec, 0xb6, 0xbd, 0x15, 0x03, 0xff, 0xf2, 0x90, 0xc5, 0x92, 0x07, 0x49, 0xec, 0xd8,
0x6a, 0xdb, 0x8a, 0x41, 0xbe, 0x04, 0x08, 0x92, 0x28, 0xc9, 0xfc, 0x29, 0x15, 0x53, 0x63, 0xda,
0x07, 0x2b, 0xd3, 0xca, 0x67, 0x1f, 0x0c, 0x93, 0x28, 0x59, 0x64, 0x4f, 0xa9, 0x98, 0x7a, 0x6d,
0xb5, 0x09, 0x97, 0xc4, 0x81, 0xa6, 0x22, 0xc6, 0xa1, 0xb3, 0xa5, 0xce, 0x2e, 0x48, 0xf2, 0x11,
0xec, 0xcc, 0x58, 0x1e, 0xd0, 0x2c, 0xf4, 0x4d, 0x30, 0x9c, 0x86, 0x3a, 0x7f, 0xdb, 0xb0, 0x8f,
0x34, 0x97, 0xdc, 0x81, 0xe6, 0x8c, 0xe5, 0xfe, 0x82, 0x87, 0x4e, 0x53, 0x09, 0x34, 0x66, 0x2c,
0x3f, 0xe5, 0x21, 0xf9, 0x1c, 0x1a, 0x7c, 0x4e, 0xcf, 0x99, 0x70, 0x5a, 0xca, 0xb2, 0x6f, 0x6e,
0xb0, 0x6c, 0xac, 0xee, 0x23, 0xf3, 0x31, 0x0a, 0x7b, 0x66, 0xcf, 0xae, 0x0b, 0xb0, 0x32, 0x19,
0x83, 0xcd, 0xe3, 0x90, 0xfd, 0xc2, 0xb1, 0xf6, 0xec, 0x7d, 0xdb, 0xd3, 0xc4, 0xee, 0xdf, 0x2d,
0xe8, 0x55, 0x76, 0x97, 0x8d, 0xb1, 0x2a, 0xc6, 0x14, 0xae, 0xaf, 0x95, 0x5c, 0xef, 0x40, 0x33,
0xa5, 0x79, 0x94, 0xd0, 0x50, 0xb9, 0xb6, 0xeb, 0x15, 0x24, 0x1e, 0xf7, 0x96, 0x87, 0x12, 0x7d,
0x8a, 0x4e, 0xd1, 0x04, 0xb9, 0x0d, 0x8d, 0x29, 0xe3, 0xe7, 0x53, 0x69, 0x7c, 0x65, 0x28, 0xb2,
0x0b, 0xad, 0x37, 0x3c, 0x62, 0x82, 0xff, 0x92, 0x29, 0x1f, 0xd9, 0xde, 0x92, 0x26, 0x0f, 0xa1,
0x97, 0xa9, 0x95, 0x2f, 0x69, 0x76, 0xce, 0xa4, 0xf2, 0x91, 0xed, 0x75, 0x35, 0xf3, 0x44, 0xf1,
0x56, 0xa9, 0xdc, 0x2a, 0xa5, 0xb2, 0xfb, 0x37, 0x0b, 0xde, 0x7b, 0x9e, 0x04, 0x34, 0x32, 0x9e,
0x3e, 0x32, 0xc6, 0x7d, 0x0f, 0xea, 0x33, 0x96, 0x0b, 0xe5, 0x8a, 0x4a, 0xbc, 0xd7, 0x08, 0x1f,
0x3c, 0x63, 0xb9, 0xa7, 0xc4, 0xc9, 0x67, 0xd0, 0x9d, 0xa3, 0xdb, 0xa9, 0x76, 0xbb, 0xf2, 0x44,
0xe7, 0xd1, 0xed, 0xf5, 0x41, 0xf1, 0x2a, 0xb2, 0x78, 0xc3, 0x94, 0x0a, 0xf1, 0x36, 0xc9, 0x42,
0x93, 0x85, 0x4b, 0x7a, 0xf7, 0xdb, 0x60, 0x3f, 0x63, 0xf9, 0xda, 0xdc, 0x26, 0x50, 0x0f, 0xa9,
0xa4, 0xea, 0xa8, 0xae, 0xa7, 0xd6, 0xee, 0xaf, 0x2c, 0xe8, 0xa3, 0x8d, 0xe5, 0xba, 0xdb, 0x50,
0xcb, 0x1f, 0xc1, 0x0e, 0x2f, 0x49, 0xf9, 0xcb, 0xc2, 0xde, 0x2e, 0xb3, 0xc7, 0x21, 0x79, 0x00,
0x9d, 0x90, 0x5d, 0xf0, 0x80, 0xf9, 0x32, 0x4f, 0x99, 0xb1, 0x10, 0x34, 0xeb, 0x24, 0x4f, 0xd9,
0xd2, 0xb8, 0xfa, 0xca, 0x38, 0xf7, 0x5f, 0x16, 0xdc, 0xd9, 0xd0, 0x00, 0x6e, 0xd8, 0x5b, 0x1e,
0x42, 0x2f, 0xcd, 0x12, 0x0c, 0xb5, 0xaf, 0x92, 0xd6, 0x1c, 0xdc, 0x35, 0x4c, 0x9d, 0x91, 0xef,
0x43, 0x8b, 0xc5, 0xc2, 0x2f, 0x1d, 0xdf, 0x64, 0xb1, 0x98, 0xa0, 0x7b, 0x3e, 0x80, 0x6e, 0x44,
0x85, 0xf4, 0x17, 0x69, 0x48, 0x25, 0xd3, 0x15, 0x58, 0xf7, 0x3a, 0xc8, 0x3b, 0xd5, 0x2c, 0xbc,
0x99, 0xc8, 0x85, 0x64, 0x73, 0x5f, 0xd2, 0x73, 0xe1, 0x34, 0xf6, 0x6c, 0xbc, 0x99, 0x66, 0x9d,
0xd0, 0x73, 0x41, 0x3e, 0x84, 0xed, 0x08, 0xc3, 0xee, 0xc7, 0x3c, 0x98, 0xa9, 0x43, 0x74, 0x11,
0xf6, 0x14, 0x77, 0x62, 0x98, 0xee, 0x3f, 0x6d, 0x78, 0x7f, 0x63, 0xb7, 0x23, 0xdf, 0x81, 0x5b,
0x65, 0x43, 0x7c, 0xb5, 0x37, 0xca, 0xcd, 0xed, 0x49, 0xc9, 0xa0, 0xe7, 0xfa, 0xcf, 0xff, 0xb1,
0x2b, 0x30, 0xb6, 0x34, 0x0c, 0x59, 0xe8, 0xb4, 0xf7, 0xac, 0xfd, 0x96, 0xa7, 0x09, 0xec, 0x05,
0x67, 0x18, 0x64, 0x16, 0x3a, 0xa0, 0xf8, 0x05, 0x89, 0xf2, 0xf3, 0x05, 0xda, 0xd4, 0xd1, 0xf2,
0x8a, 0x40, 0xf9, 0x8c, 0xcd, 0x93, 0x0b, 0x16, 0x3a, 0x5d, 0x2d, 0x6f, 0x48, 0xb2, 0x07, 0xdd,
0x29, 0x15, 0xbe, 0x52, 0xeb, 0x2f, 0x84, 0xd3, 0x53, 0xbf, 0x61, 0x4a, 0xc5, 0x00, 0x59, 0xa7,
0x82, 0x7c, 0x0c, 0xef, 0x5d, 0xb0, 0x8c, 0xbf, 0xe1, 0x81, 0xce, 0x6b, 0x21, 0xa9, 0x5c, 0x08,
0x67, 0x5b, 0x75, 0x06, 0x52, 0xfe, 0x75, 0xac, 0xfe, 0xa0, 0x77, 0x64, 0xb6, 0x10, 0xb2, 0x90,
0xdc, 0x51, 0x92, 0x1d, 0xc5, 0xd3, 0x22, 0xee, 0xdb, 0xab, 0xc9, 0x5c, 0x4c, 0x9d, 0xf5, 0xc9,
0x7c, 0x25, 0x62, 0xb5, 0x35, 0x11, 0xbb, 0x1c, 0x16, 0xfb, 0x4a, 0x58, 0xdc, 0x27, 0xb0, 0x7b,
0xf9, 0xe0, 0xa3, 0xc5, 0x59, 0xc4, 0x83, 0xe1, 0x94, 0xde, 0xb0, 0x90, 0xdc, 0x5f, 0xdb, 0xd0,
0xab, 0xcc, 0xd1, 0xff, 0xb8, 0xaf, 0xab, 0xb2, 0xee, 0x01, 0x74, 0xd2, 0x8c, 0x5f, 0x50, 0xc9,
0xfc, 0x19, 0xcb, 0x4d, 0x13, 0x07, 0xc3, 0xc2, 0xa6, 0xb4, 0x87, 0x8d, 0x41, 0x04, 0x19, 0x4f,
0xd1, 0x2e, 0x95, 0x74, 0x5d, 0xaf, 0xcc, 0xc2, 0x9e, 0xfe, 0xb3, 0x84, 0xc7, 0x26, 0xe5, 0x5a,
0x9e, 0xa1, 0xb0, 0xe3, 0xe9, 0x40, 0xb0, 0x50, 0xf5, 0xf4, 0x96, 0xb7, 0xa4, 0x57, 0x19, 0xd1,
0x2c, 0x67, 0xc4, 0x4b, 0xe8, 0x67, 0xec, 0xe7, 0x0b, 0x26, 0xa4, 0xf0, 0x65, 0xe2, 0xa3, 0x1e,
0x33, 0xf8, 0x3e, 0xdc, 0x84, 0x16, 0x8c, 0xf8, 0x49, 0xf2, 0x75, 0xc2, 0x63, 0x6f, 0x3b, 0xab,
0xd0, 0xe4, 0x31, 0xb4, 0x04, 0x93, 0x92, 0xc7, 0xe7, 0x42, 0xe5, 0x6a, 0xe7, 0xd1, 0x83, 0x0d,
0x8a, 0x8e, 0x8d, 0x98, 0xb7, 0xdc, 0x80, 0xc0, 0x81, 0xc5, 0x41, 0x96, 0xa7, 0x72, 0x99, 0xd1,
0x2b, 0x06, 0xfe, 0x15, 0x29, 0x0b, 0x24, 0x5d, 0xe5, 0xf5, 0x8a, 0xe1, 0xfe, 0xd5, 0x82, 0xbb,
0xd7, 0x18, 0x6a, 0xc2, 0x60, 0x2d, 0xc3, 0x70, 0x1f, 0x20, 0x55, 0x21, 0x57, 0x51, 0xd0, 0x61,
0x6d, 0x6b, 0x0e, 0x06, 0x61, 0x19, 0x4b, 0xbb, 0x1c, 0xcb, 0x6b, 0x9a, 0xc1, 0x1d, 0x68, 0x06,
0x53, 0x2a, 0xb1, 0xdf, 0x6f, 0xe9, 0x21, 0x8e, 0xe4, 0x38, 0xc4, 0x74, 0x2c, 0xf0, 0x55, 0x8e,
0x7f, 0x1b, 0x3a, 0x9e, 0x4b, 0xde, 0x58, 0xc5, 0x06, 0x8b, 0x44, 0xd7, 0x7e, 0xdd, 0xd3, 0x84,
0xfb, 0xdb, 0x1a, 0xf4, 0x2f, 0x67, 0x29, 0xf9, 0xa2, 0x04, 0x0d, 0xaf, 0xcc, 0xd2, 0x0d, 0xcd,
0xb2, 0x04, 0x0c, 0xbf, 0x82, 0xae, 0xb9, 0x35, 0x5a, 0x27, 0x9c, 0xda, 0x65, 0x90, 0xb3, 0xb9,
0x2c, 0xbc, 0x4e, 0xba, 0x5c, 0x0b, 0xf2, 0x18, 0x9a, 0xc5, 0x4c, 0xb6, 0x55, 0x98, 0xaf, 0x31,
0xa3, 0x18, 0xcf, 0xc5, 0x8e, 0xff, 0x05, 0x9e, 0x7e, 0x0a, 0x3b, 0xea, 0x2f, 0x1a, 0x64, 0x7a,
0xd7, 0xcd, 0xca, 0xf5, 0x73, 0xb8, 0x55, 0x6c, 0x7c, 0xc1, 0x84, 0x40, 0xb8, 0xe6, 0x31, 0x7a,
0xd3, 0xdd, 0x5f, 0xc2, 0x6d, 0xdc, 0x3d, 0x08, 0x24, 0xbf, 0xe0, 0x32, 0x1f, 0xb2, 0x58, 0xb2,
0xec, 0x9a, 0xfd, 0x7d, 0xb0, 0x79, 0xa8, 0xdd, 0xdb, 0xf5, 0x70, 0xe9, 0x1e, 0xea, 0x96, 0x53,
0xd5, 0x30, 0x08, 0x02, 0xa6, 0x72, 0xfb, 0xa6, 0x5a, 0x46, 0x3a, 0xc9, 0xab, 0x5a, 0x0e, 0xb9,
0x98, 0x73, 0x21, 0xfe, 0x0b, 0x35, 0xbf, 0xb7, 0xa0, 0x8b, 0x7a, 0x9e, 0x24, 0xc9, 0x6c, 0x4e,
0xb3, 0xd9, 0xe6, 0x8d, 0x8b, 0x2c, 0x32, 0x6e, 0xc0, 0xe5, 0x12, 0x93, 0xd8, 0x25, 0xc0, 0x74,
0x17, 0xda, 0xaa, 0x19, 0xfb, 0x28, 0xab, 0xab, 0xa2, 0xa5, 0x18, 0xa7, 0x59, 0x54, 0x1e, 0x39,
0x5b, 0xd5, 0x91, 0x73, 0x1f, 0x20, 0x64, 0x11, 0xc3, 0xd1, 0x4d, 0xa5, 0xaa, 0x8a, 0xba, 0xd7,
0x36, 0x9c, 0x81, 0x74, 0xbf, 0xd6, 0xc9, 0x3f, 0x8c, 0x18, 0xcd, 0x9e, 0x72, 0x21, 0x93, 0x2c,
0x2f, 0xd7, 0x98, 0x55, 0xa9, 0xb1, 0xfb, 0x00, 0x01, 0x0a, 0x6a, 0x5d, 0x35, 0xad, 0xcb, 0x70,
0x06, 0xd2, 0xfd, 0x8b, 0x05, 0x04, 0x95, 0x1d, 0xe9, 0x31, 0x71, 0xc4, 0x03, 0xb9, 0xc8, 0xd8,
0x5a, 0xf4, 0x57, 0x82, 0xd7, 0xb5, 0x0d, 0xf0, 0x1a, 0xef, 0xde, 0xbb, 0x0a, 0xaf, 0xeb, 0x8a,
0x5d, 0xc0, 0xeb, 0xbb, 0xd0, 0x56, 0x63, 0x4a, 0xe1, 0xeb, 0x2d, 0xf5, 0x4b, 0xe1, 0xeb, 0xe3,
0xb5, 0xf8, 0xba, 0xa1, 0x04, 0x36, 0xe0, 0xeb, 0x66, 0x19, 0x5f, 0x4f, 0xe1, 0xbd, 0xab, 0x37,
0x11, 0x9b, 0x9f, 0x10, 0xdf, 0x87, 0x56, 0x6a, 0x84, 0x4c, 0xb1, 0xdf, 0xab, 0xd6, 0x59, 0x55,
0x93, 0xb7, 0x94, 0x76, 0xff, 0x58, 0x83, 0x77, 0x51, 0xe0, 0x35, 0x8d, 0x22, 0x26, 0xaf, 0x9f,
0xcb, 0x0e, 0x34, 0x69, 0x18, 0x66, 0x4c, 0x88, 0xc2, 0x6b, 0x86, 0x44, 0xff, 0xbc, 0x55, 0x0a,
0x94, 0xdb, 0x5a, 0x9e, 0xa1, 0xd0, 0xf7, 0x18, 0x3b, 0xe5, 0xb5, 0x96, 0xa7, 0xd6, 0xc8, 0x53,
0x50, 0x58, 0xf7, 0x4f, 0xb5, 0x46, 0xcd, 0x18, 0x7b, 0x9c, 0xf5, 0xfa, 0x25, 0x57, 0x90, 0x28,
0x9d, 0x52, 0x39, 0x35, 0x78, 0x49, 0xad, 0x71, 0x44, 0x2c, 0x5b, 0xb8, 0x7a, 0x97, 0x74, 0xcb,
0x3d, 0xbd, 0x88, 0x77, 0xbb, 0x14, 0x6f, 0xbc, 0x0f, 0x3e, 0x1e, 0xd5, 0xb8, 0x69, 0x7b, 0x9a,
0x50, 0x51, 0xe5, 0x61, 0xc8, 0x62, 0x33, 0x67, 0x0c, 0xb5, 0x19, 0x40, 0xb9, 0x2f, 0x74, 0x86,
0x55, 0x9c, 0x25, 0xc8, 0xa7, 0xd0, 0x32, 0x3d, 0xaf, 0xe8, 0xd6, 0x77, 0xab, 0xde, 0xaf, 0xc8,
0x7b, 0x4b, 0x61, 0xf7, 0x77, 0x16, 0x7c, 0x63, 0xed, 0xb4, 0xdc, 0x10, 0x80, 0xcb, 0x43, 0x46,
0x97, 0x6c, 0x65, 0xc8, 0x8c, 0xe0, 0xc1, 0x54, 0xd7, 0x91, 0x4f, 0xb3, 0x60, 0xca, 0x2f, 0x98,
0x2f, 0x16, 0x69, 0x9a, 0x64, 0xd2, 0x67, 0x31, 0x3d, 0x8b, 0x0c, 0x52, 0x6a, 0x79, 0xf7, 0x8c,
0xd8, 0x40, 0x4b, 0x1d, 0x6b, 0xa1, 0x91, 0x96, 0x71, 0xff, 0x64, 0xe9, 0x0e, 0x7c, 0x82, 0x38,
0x0e, 0x91, 0x21, 0xcb, 0x6e, 0xf8, 0xf2, 0xf8, 0x02, 0x1a, 0x06, 0x0a, 0xe2, 0x39, 0xdb, 0x97,
0x11, 0x46, 0x49, 0xe1, 0xc1, 0xc9, 0x0a, 0x24, 0x7a, 0x66, 0x93, 0xfb, 0x19, 0x74, 0x4a, 0x6c,
0xd2, 0x81, 0xe6, 0xe9, 0xe4, 0xd9, 0xe4, 0xe5, 0xeb, 0x49, 0xff, 0x1d, 0x24, 0x4e, 0xbc, 0xd3,
0xe3, 0x93, 0xd1, 0x61, 0xdf, 0x22, 0xef, 0x42, 0xef, 0x74, 0xa2, 0xc8, 0xd7, 0x2f, 0xbd, 0x93,
0xa7, 0x3f, 0xee, 0xd7, 0xdc, 0xdf, 0xd8, 0x1a, 0x69, 0xbe, 0x2a, 0xc1, 0x54, 0x83, 0x0f, 0x36,
0x18, 0x4f, 0xa0, 0xfe, 0x26, 0x4b, 0xe6, 0xc5, 0xd3, 0x1b, 0xd7, 0x78, 0x21, 0x99, 0x98, 0xd6,
0x57, 0x93, 0x09, 0x66, 0x5b, 0x30, 0xc5, 0x00, 0xc6, 0xe7, 0x05, 0x1c, 0x58, 0x31, 0x30, 0x24,
0x06, 0x1b, 0xe9, 0xae, 0x64, 0x5e, 0x07, 0x4b, 0xde, 0x40, 0xbd, 0x50, 0x33, 0x26, 0xd2, 0x24,
0x16, 0x45, 0x76, 0x2f, 0x69, 0x6c, 0x69, 0x19, 0x4b, 0x23, 0xae, 0x37, 0xeb, 0x1e, 0xd0, 0x36,
0x9c, 0x81, 0x24, 0x6c, 0x3d, 0x1c, 0x6f, 0x29, 0xcf, 0x7e, 0xb7, 0xea, 0xd9, 0x35, 0xb7, 0x3e,
0x78, 0x75, 0x05, 0xb0, 0xaf, 0x03, 0xf1, 0xee, 0x8f, 0x80, 0x5c, 0x95, 0xbc, 0xe2, 0xfb, 0xa3,
0xd1, 0xe4, 0x70, 0x3c, 0xf9, 0xaa, 0x6f, 0x91, 0x2e, 0xb4, 0x06, 0xc3, 0xe1, 0xe8, 0x08, 0x23,
0x51, 0x43, 0xea, 0x70, 0x34, 0x7c, 0x3e, 0x9e, 0x8c, 0x0e, 0xfb, 0x36, 0x52, 0xc3, 0xc1, 0x64,
0x38, 0x7a, 0x3e, 0x3a, 0xec, 0xd7, 0xdd, 0x7f, 0x58, 0x7a, 0x20, 0x16, 0x18, 0x45, 0xdb, 0x75,
0xc8, 0x02, 0x2e, 0x36, 0x3f, 0xae, 0xef, 0x41, 0xdb, 0xf8, 0x6f, 0x5c, 0x64, 0xd6, 0x8a, 0x41,
0x7e, 0x0a, 0x3b, 0xa1, 0xd9, 0xef, 0x57, 0x32, 0xed, 0x93, 0xcb, 0xd0, 0x62, 0xdd, 0x91, 0x07,
0xc5, 0xc2, 0xb8, 0x63, 0x3b, 0xac, 0xd0, 0xee, 0xb7, 0x60, 0xbb, 0x2a, 0x51, 0xb9, 0xec, 0x3b,
0x95, 0xcb, 0x5a, 0x4f, 0x7a, 0x3f, 0xe9, 0x1c, 0x7c, 0xfc, 0xb8, 0x38, 0xf6, 0xac, 0xa1, 0x56,
0x9f, 0xfc, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x83, 0xab, 0x6c, 0x28, 0x24, 0x14, 0x00, 0x00,
}

View File

@ -104,6 +104,7 @@ message SyncCommunity {
repeated SyncCommunityRequestsToJoin requests_to_join = 8;
SyncCommunitySettings settings = 9;
bool encrypted = 10;
bool spectated = 11;
}
message SyncCommunityRequestsToJoin {
@ -166,7 +167,7 @@ message SyncProfilePicture {
string name = 1;
bytes payload = 2;
uint32 width = 3;
uint32 height = 4;
uint32 height = 4;
uint32 file_size = 5;
uint32 resize_target = 6;
uint64 clock = 7;

View File

@ -110,11 +110,26 @@ type API struct {
s *Service
}
func unique(communities []*communities.Community) (result []*communities.Community) {
inResult := make(map[string]bool)
for _, community := range communities {
if _, ok := inResult[community.IDString()]; !ok {
inResult[community.IDString()] = true
result = append(result, community)
}
}
return result
}
func (api *API) GetChats(ctx context.Context) (map[string]ChannelGroup, error) {
joinedCommunities, err := api.s.messenger.JoinedCommunities()
if err != nil {
return nil, err
}
spectatedCommunities, err := api.s.messenger.SpectatedCommunities()
if err != nil {
return nil, err
}
channels := api.s.messenger.Chats()
@ -152,7 +167,7 @@ func (api *API) GetChats(ctx context.Context) (map[string]ChannelGroup, error) {
result[pubKey].Chats[chat.ID] = c
}
for _, community := range joinedCommunities {
for _, community := range unique(append(joinedCommunities, spectatedCommunities...)) {
chGrp := ChannelGroup{
Type: Community,
Name: community.Name(),

View File

@ -374,6 +374,12 @@ func (api *PublicAPI) CuratedCommunities(parent context.Context) (*communities.K
return api.service.messenger.CuratedCommunities()
}
// SpectateCommunity spectates community with the given ID
// Meaning user is only a spectator, not a member
func (api *PublicAPI) SpectateCommunity(parent context.Context, communityID types.HexBytes) (*protocol.MessengerResponse, error) {
return api.service.messenger.SpectateCommunity(communityID)
}
// JoinCommunity joins a community with the given ID
func (api *PublicAPI) JoinCommunity(parent context.Context, communityID types.HexBytes) (*protocol.MessengerResponse, error) {
return api.service.messenger.JoinCommunity(parent, communityID)