fix: profile social links updated

This commit is contained in:
Sale Djenic 2023-06-05 13:10:26 +02:00 committed by saledjenic
parent 15d2b4fe80
commit cff7d2f693
25 changed files with 1324 additions and 814 deletions

View File

@ -1 +1 @@
0.154.5
0.154.7

View File

@ -65,6 +65,7 @@
// 1685041348_settings_table_add_latest_derived_path_column.up.sql (115B)
// 1685440989_update_color_id_accounts.up.sql (918B)
// 1685463947_add_to_asset_to_multitransaction.up.sql (61B)
// 1685880973_add_profile_links_settings_table.up.sql (1.254kB)
// doc.go (74B)
package migrations
@ -75,6 +76,7 @@ import (
"crypto/sha256"
"fmt"
"io"
"io/ioutil"
"os"
"path/filepath"
"strings"
@ -84,7 +86,7 @@ import (
func bindataRead(data []byte, name string) ([]byte, error) {
gz, err := gzip.NewReader(bytes.NewBuffer(data))
if err != nil {
return nil, fmt.Errorf("read %q: %w", name, err)
return nil, fmt.Errorf("read %q: %v", name, err)
}
var buf bytes.Buffer
@ -92,7 +94,7 @@ func bindataRead(data []byte, name string) ([]byte, error) {
clErr := gz.Close()
if err != nil {
return nil, fmt.Errorf("read %q: %w", name, err)
return nil, fmt.Errorf("read %q: %v", name, err)
}
if clErr != nil {
return nil, err
@ -148,7 +150,7 @@ func _1640111208_dummyUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1640111208_dummy.up.sql", size: 258, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1640111208_dummy.up.sql", size: 258, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3e, 0xf0, 0xae, 0x20, 0x6e, 0x75, 0xd1, 0x36, 0x14, 0xf2, 0x40, 0xe5, 0xd6, 0x7a, 0xc4, 0xa5, 0x72, 0xaa, 0xb5, 0x4d, 0x71, 0x97, 0xb8, 0xe8, 0x95, 0x22, 0x95, 0xa2, 0xac, 0xaf, 0x48, 0x58}}
return a, nil
}
@ -168,7 +170,7 @@ func _1642666031_add_removed_clock_to_bookmarksUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1642666031_add_removed_clock_to_bookmarks.up.sql", size: 117, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1642666031_add_removed_clock_to_bookmarks.up.sql", size: 117, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x84, 0x4e, 0x38, 0x99, 0x7a, 0xc, 0x90, 0x13, 0xec, 0xfe, 0x2f, 0x55, 0xff, 0xb7, 0xb6, 0xaa, 0x96, 0xc6, 0x92, 0x79, 0xcc, 0xee, 0x4e, 0x99, 0x53, 0xfe, 0x1c, 0xbb, 0x32, 0x2, 0xa4, 0x27}}
return a, nil
}
@ -188,7 +190,7 @@ func _1643644541_gif_api_key_settingUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1643644541_gif_api_key_setting.up.sql", size: 108, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1643644541_gif_api_key_setting.up.sql", size: 108, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1b, 0x94, 0x28, 0xfb, 0x66, 0xd1, 0x7c, 0xb8, 0x89, 0xe2, 0xb4, 0x71, 0x65, 0x24, 0x57, 0x22, 0x95, 0x38, 0x97, 0x3, 0x9b, 0xc6, 0xa4, 0x41, 0x7b, 0xba, 0xf7, 0xdb, 0x70, 0xf7, 0x20, 0x3a}}
return a, nil
}
@ -208,7 +210,7 @@ func _1644188994_recent_stickersUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1644188994_recent_stickers.up.sql", size: 79, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1644188994_recent_stickers.up.sql", size: 79, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1e, 0xad, 0xaa, 0x30, 0xbf, 0x4, 0x7, 0xf8, 0xc3, 0x3, 0xb8, 0x97, 0x23, 0x2b, 0xbd, 0x1c, 0x60, 0x69, 0xb0, 0x42, 0x5e, 0x6b, 0xd, 0xa7, 0xa3, 0x6b, 0x2e, 0xdc, 0x70, 0x13, 0x72, 0x7}}
return a, nil
}
@ -228,7 +230,7 @@ func _1646659233_add_address_to_dapp_permisssionUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1646659233_add_address_to_dapp_permisssion.up.sql", size: 700, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1646659233_add_address_to_dapp_permisssion.up.sql", size: 700, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xed, 0xb0, 0x35, 0xcc, 0x2e, 0x16, 0xe6, 0x15, 0x86, 0x2c, 0x37, 0x80, 0xae, 0xa3, 0xc5, 0x31, 0x78, 0x5, 0x9d, 0xcd, 0x7b, 0xeb, 0x5f, 0xf2, 0xb3, 0x74, 0x72, 0xdf, 0xcf, 0x88, 0xb, 0x40}}
return a, nil
}
@ -248,7 +250,7 @@ func _1646841105_add_emoji_accountUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1646841105_add_emoji_account.up.sql", size: 96, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1646841105_add_emoji_account.up.sql", size: 96, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe6, 0x77, 0x29, 0x95, 0x18, 0x64, 0x82, 0x63, 0xe7, 0xaf, 0x6c, 0xa9, 0x15, 0x7d, 0x46, 0xa6, 0xbc, 0xdf, 0xa7, 0xd, 0x2b, 0xd2, 0x2d, 0x97, 0x4d, 0xa, 0x6b, 0xd, 0x6e, 0x90, 0x42, 0x5c}}
return a, nil
}
@ -268,7 +270,7 @@ func _1647278782_display_nameUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1647278782_display_name.up.sql", size: 110, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1647278782_display_name.up.sql", size: 110, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf4, 0xa1, 0x1f, 0x3e, 0x61, 0x65, 0x8d, 0xff, 0xee, 0xde, 0xc5, 0x91, 0xd9, 0x5c, 0xb5, 0xe2, 0xf0, 0xb7, 0xe7, 0x5c, 0x5c, 0x16, 0x25, 0x89, 0xee, 0x78, 0x12, 0xea, 0x3e, 0x48, 0x41, 0xa6}}
return a, nil
}
@ -288,7 +290,7 @@ func _1647862838_reset_last_backupUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1647862838_reset_last_backup.up.sql", size: 37, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1647862838_reset_last_backup.up.sql", size: 37, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x21, 0xe3, 0xd5, 0xf6, 0x5f, 0xfe, 0x65, 0xfa, 0x1d, 0x88, 0xf8, 0x5f, 0x24, 0x71, 0x34, 0x68, 0x96, 0x2a, 0x60, 0x87, 0x15, 0x82, 0x4d, 0x8a, 0x59, 0x3d, 0x1f, 0xd8, 0x56, 0xd4, 0xfb, 0xda}}
return a, nil
}
@ -308,7 +310,7 @@ func _1647871652_add_settings_sync_clock_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1647871652_add_settings_sync_clock_table.up.sql", size: 1044, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1647871652_add_settings_sync_clock_table.up.sql", size: 1044, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd8, 0x58, 0xec, 0x85, 0x90, 0xfa, 0x30, 0x98, 0x98, 0x9a, 0xa6, 0xa8, 0x96, 0x2b, 0x38, 0x93, 0xf3, 0xae, 0x46, 0x74, 0xa4, 0x41, 0x62, 0x9b, 0x2, 0x86, 0xbf, 0xe5, 0x2a, 0xce, 0xe2, 0xc0}}
return a, nil
}
@ -328,7 +330,7 @@ func _1647880168_add_torrent_configUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1647880168_add_torrent_config.up.sql", size: 211, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1647880168_add_torrent_config.up.sql", size: 211, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1, 0x92, 0x22, 0x37, 0x96, 0xf3, 0xb5, 0x5b, 0x27, 0xd0, 0x7d, 0x43, 0x5, 0x4e, 0x9d, 0xe2, 0x49, 0xbe, 0x86, 0x31, 0xa1, 0x89, 0xff, 0xd6, 0x51, 0xe0, 0x9c, 0xb, 0xda, 0xfc, 0xf2, 0x93}}
return a, nil
}
@ -348,7 +350,7 @@ func _1647882837_add_communities_settings_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1647882837_add_communities_settings_table.up.sql", size: 206, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1647882837_add_communities_settings_table.up.sql", size: 206, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xbd, 0x87, 0x78, 0x99, 0xd9, 0x5d, 0xbd, 0xf7, 0x57, 0x9c, 0xca, 0x97, 0xbd, 0xb3, 0xe9, 0xb5, 0x89, 0x31, 0x3f, 0xf6, 0x5c, 0x13, 0xb, 0xc3, 0x54, 0x93, 0x18, 0x40, 0x7, 0x82, 0xfe, 0x7e}}
return a, nil
}
@ -368,7 +370,7 @@ func _1647956635_add_waku_messages_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1647956635_add_waku_messages_table.up.sql", size: 266, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1647956635_add_waku_messages_table.up.sql", size: 266, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd1, 0xe, 0xe1, 0xdc, 0xda, 0x2e, 0x89, 0x8d, 0xdc, 0x2a, 0x1c, 0x13, 0xa1, 0xfc, 0xfe, 0xf, 0xb2, 0xb9, 0x85, 0xc8, 0x45, 0xd6, 0xd1, 0x7, 0x5c, 0xa3, 0x8, 0x47, 0x44, 0x6d, 0x96, 0xe0}}
return a, nil
}
@ -388,7 +390,7 @@ func _1648554928_network_testUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1648554928_network_test.up.sql", size: 132, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1648554928_network_test.up.sql", size: 132, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9a, 0xc5, 0x7f, 0x87, 0xf3, 0x2c, 0xf7, 0xbb, 0xd3, 0x3a, 0x4e, 0x76, 0x88, 0xca, 0xaf, 0x73, 0xce, 0x8f, 0xa1, 0xf6, 0x3d, 0x4d, 0xed, 0x6f, 0x49, 0xf2, 0xfe, 0x56, 0x2a, 0x60, 0x68, 0xca}}
return a, nil
}
@ -408,7 +410,7 @@ func _1649174829_add_visitble_tokenUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1649174829_add_visitble_token.up.sql", size: 84, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1649174829_add_visitble_token.up.sql", size: 84, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa3, 0x22, 0xc0, 0x2b, 0x3f, 0x4f, 0x3d, 0x5e, 0x4c, 0x68, 0x7c, 0xd0, 0x15, 0x36, 0x9f, 0xec, 0xa1, 0x2a, 0x7b, 0xb4, 0xe3, 0xc6, 0xc9, 0xb4, 0x81, 0x50, 0x4a, 0x11, 0x3b, 0x35, 0x7, 0xcf}}
return a, nil
}
@ -428,7 +430,7 @@ func _1649882262_add_derived_from_accountsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1649882262_add_derived_from_accounts.up.sql", size: 110, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1649882262_add_derived_from_accounts.up.sql", size: 110, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x11, 0xb9, 0x44, 0x4d, 0x85, 0x8d, 0x7f, 0xb4, 0xae, 0x4f, 0x5c, 0x66, 0x64, 0xb6, 0xe2, 0xe, 0x3d, 0xad, 0x9d, 0x8, 0x4f, 0xab, 0x6e, 0xa8, 0x7d, 0x76, 0x3, 0xad, 0x96, 0x1, 0xee, 0x5c}}
return a, nil
}
@ -448,7 +450,7 @@ func _1650612625_add_community_message_archive_hashes_tableUpSql() (*asset, erro
return nil, err
}
info := bindataFileInfo{name: "1650612625_add_community_message_archive_hashes_table.up.sql", size: 130, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1650612625_add_community_message_archive_hashes_table.up.sql", size: 130, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x48, 0x31, 0xb3, 0x75, 0x23, 0xe2, 0x45, 0xe, 0x47, 0x1b, 0x35, 0xa5, 0x6e, 0x83, 0x4e, 0x64, 0x7d, 0xd7, 0xa2, 0xda, 0xe9, 0x53, 0xf1, 0x16, 0x86, 0x2c, 0x57, 0xad, 0xfa, 0xca, 0x39, 0xde}}
return a, nil
}
@ -468,7 +470,7 @@ func _1650616788_add_communities_archives_info_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1650616788_add_communities_archives_info_table.up.sql", size: 208, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1650616788_add_communities_archives_info_table.up.sql", size: 208, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd1, 0x4f, 0x80, 0x45, 0xb9, 0xd9, 0x15, 0xe2, 0x78, 0xd0, 0xcb, 0x71, 0xc1, 0x1b, 0xb7, 0x1b, 0x1b, 0x97, 0xfe, 0x47, 0x53, 0x3c, 0x62, 0xbc, 0xdd, 0x3a, 0x94, 0x1a, 0xc, 0x48, 0x76, 0xe}}
return a, nil
}
@ -488,7 +490,7 @@ func _1652715604_add_clock_accountsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1652715604_add_clock_accounts.up.sql", size: 62, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1652715604_add_clock_accounts.up.sql", size: 62, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb6, 0xd9, 0x8d, 0x73, 0xc9, 0xef, 0xfa, 0xb1, 0x4b, 0xa5, 0xf3, 0x5, 0x19, 0x26, 0x46, 0xf8, 0x47, 0x93, 0xdb, 0xac, 0x2, 0xef, 0xf9, 0x71, 0x56, 0x83, 0xe6, 0x2d, 0xb0, 0xd7, 0x83, 0x5c}}
return a, nil
}
@ -508,7 +510,7 @@ func _1653037334_add_notifications_settings_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1653037334_add_notifications_settings_table.up.sql", size: 1276, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1653037334_add_notifications_settings_table.up.sql", size: 1276, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4b, 0xc4, 0x65, 0xac, 0xa, 0xf2, 0xef, 0xb6, 0x39, 0x3c, 0xc5, 0xb1, 0xb2, 0x9c, 0x86, 0x58, 0xe0, 0x38, 0xcb, 0x57, 0x3c, 0x76, 0x73, 0x87, 0x79, 0x4e, 0xf6, 0xed, 0xb0, 0x8e, 0x9e, 0xa}}
return a, nil
}
@ -528,7 +530,7 @@ func _1654702119_add_mutual_contact_settingsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1654702119_add_mutual_contact_settings.up.sql", size: 78, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1654702119_add_mutual_contact_settings.up.sql", size: 78, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x26, 0x66, 0x67, 0x50, 0xfe, 0xd7, 0xe3, 0x29, 0x8b, 0xff, 0x9d, 0x5a, 0x87, 0xa7, 0x99, 0x6e, 0xd6, 0xcd, 0x2e, 0xbb, 0x17, 0xdf, 0x7f, 0xf7, 0xa3, 0xfa, 0x32, 0x7c, 0x2d, 0x92, 0xc8, 0x74}}
return a, nil
}
@ -548,7 +550,7 @@ func _1655375270_add_clock_field_to_communities_settings_tableUpSql() (*asset, e
return nil, err
}
info := bindataFileInfo{name: "1655375270_add_clock_field_to_communities_settings_table.up.sql", size: 74, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1655375270_add_clock_field_to_communities_settings_table.up.sql", size: 74, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x19, 0xc5, 0xc0, 0xf9, 0x84, 0x53, 0xdf, 0x83, 0xcf, 0xb6, 0x40, 0x6d, 0xf5, 0xdc, 0x77, 0x37, 0xb7, 0xe3, 0xa, 0x75, 0xe7, 0x6, 0x11, 0xca, 0x2b, 0x51, 0x92, 0xdd, 0x7d, 0xdb, 0xc3, 0xf5}}
return a, nil
}
@ -568,7 +570,7 @@ func _1655385721_drop_networks_configUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1655385721_drop_networks_config.up.sql", size: 27, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1655385721_drop_networks_config.up.sql", size: 27, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfc, 0xa7, 0x20, 0xbb, 0x67, 0x21, 0xe, 0xc6, 0xc8, 0x21, 0x74, 0xe0, 0xce, 0xc8, 0xe2, 0x2, 0xb4, 0xea, 0xf0, 0xe5, 0xc4, 0x4d, 0xdd, 0xd4, 0x52, 0x31, 0xa9, 0x3d, 0xcd, 0xd8, 0x9b, 0xab}}
return a, nil
}
@ -588,7 +590,7 @@ func _1655385724_networks_chaincolor_shortnameUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1655385724_networks_chainColor_shortName.up.sql", size: 220, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1655385724_networks_chainColor_shortName.up.sql", size: 220, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd9, 0xe7, 0x84, 0xbb, 0x5f, 0xd2, 0x2c, 0x42, 0x88, 0x62, 0x52, 0xb6, 0x58, 0x31, 0xac, 0xc, 0x96, 0x2b, 0x1b, 0xe5, 0x4e, 0x9a, 0x3a, 0xf6, 0xf6, 0xfc, 0xa9, 0x1a, 0x35, 0x62, 0x28, 0x88}}
return a, nil
}
@ -608,7 +610,7 @@ func _1655456688_add_deleted_at_field_to_bookmarks_tableUpSql() (*asset, error)
return nil, err
}
info := bindataFileInfo{name: "1655456688_add_deleted_at_field_to_bookmarks_table.up.sql", size: 69, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1655456688_add_deleted_at_field_to_bookmarks_table.up.sql", size: 69, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe7, 0x9a, 0xbd, 0x9a, 0xc9, 0xf, 0xdf, 0x90, 0x0, 0x5d, 0xea, 0x6e, 0x7d, 0x51, 0x95, 0xcd, 0x90, 0xd3, 0x1a, 0x36, 0x6c, 0xf4, 0xbd, 0xa7, 0x6b, 0xbf, 0xe5, 0xdb, 0xa3, 0x88, 0xe3, 0x50}}
return a, nil
}
@ -628,7 +630,7 @@ func _1655462032_create_bookmarks_deleted_at_indexUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1655462032_create_bookmarks_deleted_at_index.up.sql", size: 81, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1655462032_create_bookmarks_deleted_at_index.up.sql", size: 81, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf, 0x8e, 0x20, 0x6b, 0x14, 0x9e, 0xcd, 0x97, 0xd3, 0xfe, 0x62, 0x3, 0x26, 0x59, 0x1, 0x6c, 0x99, 0xef, 0x6d, 0x21, 0xd4, 0xb5, 0xa3, 0xf4, 0x39, 0x40, 0x54, 0x6, 0xd, 0x60, 0x13, 0x38}}
return a, nil
}
@ -648,7 +650,7 @@ func _1657617291_add_multi_transactions_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1657617291_add_multi_transactions_table.up.sql", size: 412, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1657617291_add_multi_transactions_table.up.sql", size: 412, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x86, 0xb0, 0x4e, 0x8c, 0x4, 0x82, 0xb4, 0x43, 0xaa, 0xd0, 0x16, 0xdd, 0xcb, 0x88, 0x81, 0xac, 0x4, 0x34, 0x1a, 0x8f, 0x2e, 0xc5, 0x69, 0xb, 0xf0, 0x17, 0xf7, 0xe3, 0x9, 0xe, 0x54, 0xe0}}
return a, nil
}
@ -668,7 +670,7 @@ func _1660134042_add_social_links_settings_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1660134042_add_social_links_settings_table.up.sql", size: 334, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1660134042_add_social_links_settings_table.up.sql", size: 334, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x84, 0x73, 0xb6, 0xe7, 0x3f, 0xaa, 0x39, 0x9a, 0x56, 0x56, 0x31, 0xf1, 0x8e, 0x26, 0x23, 0x1, 0xe4, 0xfa, 0x98, 0xfe, 0x78, 0x87, 0x20, 0xcb, 0x52, 0xf4, 0x38, 0x7f, 0xc4, 0x1c, 0x4, 0x22}}
return a, nil
}
@ -688,7 +690,7 @@ func _1660134060_settings_bioUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1660134060_settings_bio.up.sql", size: 91, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1660134060_settings_bio.up.sql", size: 91, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x46, 0x25, 0xa0, 0xa6, 0x47, 0xff, 0xbc, 0x2a, 0x0, 0xff, 0x59, 0x4b, 0xb0, 0xc9, 0x4e, 0x15, 0xe4, 0xd9, 0xda, 0xeb, 0xfe, 0x55, 0x98, 0xc3, 0x9d, 0x96, 0xe7, 0xf, 0xd1, 0x5c, 0x93, 0x73}}
return a, nil
}
@ -708,7 +710,7 @@ func _1660134070_add_wakuv2_storeUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1660134070_add_wakuv2_store.up.sql", size: 269, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1660134070_add_wakuv2_store.up.sql", size: 269, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1d, 0xe6, 0xc3, 0x9, 0xef, 0xdc, 0xae, 0x49, 0x30, 0x78, 0x54, 0xd6, 0xdb, 0xbf, 0xc0, 0x8e, 0x25, 0x8f, 0xfc, 0x67, 0x80, 0x39, 0x37, 0xd4, 0x86, 0xc1, 0x85, 0xc8, 0x99, 0xc4, 0x59, 0xd4}}
return a, nil
}
@ -728,7 +730,7 @@ func _1660134072_waku2_store_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1660134072_waku2_store_messages.up.sql", size: 497, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1660134072_waku2_store_messages.up.sql", size: 497, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3e, 0xeb, 0xb4, 0xa0, 0xa1, 0x2b, 0xcb, 0x4c, 0x3c, 0xc6, 0xd0, 0xe8, 0x96, 0xe3, 0x96, 0xf1, 0x4f, 0x1f, 0xe0, 0xe7, 0x1f, 0x85, 0xa3, 0xe, 0xf7, 0x52, 0x56, 0x63, 0x2b, 0xb0, 0x87, 0x7b}}
return a, nil
}
@ -748,7 +750,7 @@ func _1662365868_add_key_uid_accountsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1662365868_add_key_uid_accounts.up.sql", size: 68, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1662365868_add_key_uid_accounts.up.sql", size: 68, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc6, 0xd8, 0x2f, 0x2f, 0x3b, 0xa8, 0xbd, 0x6d, 0xf6, 0x87, 0x7e, 0xd2, 0xf1, 0xa2, 0xf7, 0x81, 0x6a, 0x23, 0x10, 0xbc, 0xbf, 0x5b, 0xe7, 0x2b, 0x9c, 0xa9, 0x8a, 0x18, 0xbb, 0xd0, 0x86, 0x91}}
return a, nil
}
@ -768,7 +770,7 @@ func _1662447680_add_keypairs_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1662447680_add_keypairs_table.up.sql", size: 218, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1662447680_add_keypairs_table.up.sql", size: 218, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdc, 0x25, 0xa9, 0xc7, 0x63, 0x27, 0x97, 0x35, 0x5f, 0x6b, 0xab, 0x26, 0xcb, 0xf9, 0xbd, 0x5e, 0xac, 0x3, 0xa0, 0x5e, 0xb9, 0x71, 0xa3, 0x1f, 0xb3, 0x4f, 0x7f, 0x79, 0x28, 0x48, 0xbe, 0xc}}
return a, nil
}
@ -788,7 +790,7 @@ func _1662460056_move_favourites_to_saved_addressesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1662460056_move_favourites_to_saved_addresses.up.sql", size: 233, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1662460056_move_favourites_to_saved_addresses.up.sql", size: 233, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0xa2, 0x8c, 0xa3, 0xec, 0xad, 0xdf, 0xc3, 0x48, 0x5, 0x9b, 0x50, 0x25, 0x59, 0xae, 0x7d, 0xee, 0x58, 0xd2, 0x41, 0x27, 0xf2, 0x22, 0x2e, 0x9a, 0xb9, 0x4a, 0xcc, 0x38, 0x6e, 0x3a, 0xb2}}
return a, nil
}
@ -808,7 +810,7 @@ func _1662738097_add_base_fee_transactionUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1662738097_add_base_fee_transaction.up.sql", size: 112, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1662738097_add_base_fee_transaction.up.sql", size: 112, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6b, 0xfb, 0x10, 0xae, 0xfc, 0x77, 0x70, 0x98, 0x6f, 0xec, 0xaa, 0xcd, 0x7, 0xc7, 0x74, 0x23, 0xc, 0xd5, 0x1e, 0x82, 0xdd, 0xfe, 0xff, 0x3b, 0xd2, 0x49, 0x10, 0x5b, 0x30, 0xc, 0x2d, 0xb0}}
return a, nil
}
@ -828,7 +830,7 @@ func _1662972194_add_keypairs_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1662972194_add_keypairs_table.up.sql", size: 345, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1662972194_add_keypairs_table.up.sql", size: 345, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xab, 0x76, 0xf2, 0x86, 0xe1, 0x7e, 0xe9, 0x47, 0x32, 0x48, 0xd5, 0x6b, 0xe5, 0xd, 0xab, 0xb7, 0xf1, 0xd4, 0xf1, 0xad, 0x38, 0xa6, 0x11, 0xe7, 0xce, 0x5c, 0x11, 0x11, 0xf, 0x47, 0xb2, 0x4}}
return a, nil
}
@ -848,7 +850,7 @@ func _1664392661_add_third_party_id_to_waku_messagesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1664392661_add_third_party_id_to_waku_messages.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1664392661_add_third_party_id_to_waku_messages.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfd, 0x67, 0x66, 0x9e, 0x66, 0x74, 0xce, 0x1c, 0xb, 0x1b, 0x9d, 0xd5, 0xfc, 0x65, 0xe, 0x83, 0x90, 0x4c, 0x61, 0x4e, 0x6b, 0xe7, 0x86, 0xbe, 0x36, 0x4f, 0x91, 0x36, 0x4, 0x47, 0x7b, 0x82}}
return a, nil
}
@ -868,7 +870,7 @@ func _1664783660_add_sync_info_to_saved_addressesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1664783660_add_sync_info_to_saved_addresses.up.sql", size: 388, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1664783660_add_sync_info_to_saved_addresses.up.sql", size: 388, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x67, 0x7c, 0x3a, 0x95, 0x4e, 0x55, 0xb2, 0xbd, 0xb4, 0x18, 0x93, 0xc1, 0xcf, 0x9f, 0x12, 0xbb, 0x49, 0x8a, 0x2a, 0x6a, 0x2a, 0x7f, 0xad, 0x44, 0xc3, 0xf, 0x3a, 0x79, 0x18, 0xb9, 0x4c, 0x64}}
return a, nil
}
@ -888,7 +890,7 @@ func _1668109917_wakunodesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1668109917_wakunodes.up.sql", size: 99, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1668109917_wakunodes.up.sql", size: 99, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x29, 0xaa, 0x9e, 0x2, 0x66, 0x85, 0x69, 0xa8, 0xd9, 0xe2, 0x4b, 0x8d, 0x2a, 0x9c, 0xdf, 0xd2, 0xef, 0x64, 0x58, 0xe3, 0xa6, 0xe7, 0xc1, 0xd1, 0xc8, 0x9c, 0xc0, 0x2c, 0x1, 0xa8, 0x7b, 0x81}}
return a, nil
}
@ -908,7 +910,7 @@ func _1670249678_display_name_to_settings_sync_clock_tableUpSql() (*asset, error
return nil, err
}
info := bindataFileInfo{name: "1670249678_display_name_to_settings_sync_clock_table.up.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1670249678_display_name_to_settings_sync_clock_table.up.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x39, 0x18, 0xdc, 0xc4, 0x1f, 0x79, 0x22, 0x16, 0x4d, 0xdf, 0x6c, 0x66, 0xd5, 0xa4, 0x88, 0x5d, 0x5, 0x37, 0xa7, 0x41, 0x5, 0x50, 0xae, 0x12, 0xfa, 0x7e, 0x89, 0x24, 0x5c, 0xae, 0x30, 0xfc}}
return a, nil
}
@ -928,7 +930,7 @@ func _1670836810_add_imported_flag_to_community_archive_hashesUpSql() (*asset, e
return nil, err
}
info := bindataFileInfo{name: "1670836810_add_imported_flag_to_community_archive_hashes.up.sql", size: 144, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1670836810_add_imported_flag_to_community_archive_hashes.up.sql", size: 144, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6f, 0xf, 0xf0, 0xbd, 0xfe, 0x63, 0x25, 0x8f, 0x5e, 0x46, 0x4b, 0x45, 0x31, 0x8b, 0x3e, 0xd8, 0x6b, 0x5d, 0x9d, 0x6d, 0x10, 0x9a, 0x87, 0x4b, 0x18, 0xc6, 0x39, 0x81, 0x6e, 0xe4, 0x75, 0xfb}}
return a, nil
}
@ -948,7 +950,7 @@ func _1671438731_add_magnetlink_uri_to_communities_archive_infoUpSql() (*asset,
return nil, err
}
info := bindataFileInfo{name: "1671438731_add_magnetlink_uri_to_communities_archive_info.up.sql", size: 86, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1671438731_add_magnetlink_uri_to_communities_archive_info.up.sql", size: 86, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xda, 0x8b, 0x4b, 0xd6, 0xd8, 0xe2, 0x3d, 0xf7, 0x6b, 0xcd, 0x1e, 0x70, 0x9, 0x2e, 0x35, 0x4, 0x61, 0xc3, 0xb5, 0x9d, 0xc5, 0x27, 0x21, 0xa, 0x5a, 0xd6, 0x3e, 0xa6, 0x24, 0xa2, 0x12, 0xdf}}
return a, nil
}
@ -968,7 +970,7 @@ func _1672933930_switcher_cardUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1672933930_switcher_card.up.sql", size: 162, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1672933930_switcher_card.up.sql", size: 162, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x39, 0xba, 0xdc, 0xbb, 0x40, 0x4, 0xf2, 0x10, 0xdf, 0xb4, 0xd2, 0x80, 0x8a, 0x74, 0x4d, 0xf6, 0xbc, 0x50, 0x7, 0xd, 0x22, 0x7f, 0xc4, 0xaf, 0xaa, 0xde, 0xdc, 0x71, 0xe9, 0x42, 0x98, 0x36}}
return a, nil
}
@ -988,7 +990,7 @@ func _1674056187_add_price_cacheUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1674056187_add_price_cache.up.sql", size: 255, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1674056187_add_price_cache.up.sql", size: 255, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb7, 0x79, 0x6a, 0x9b, 0x28, 0xd1, 0x22, 0xf0, 0x84, 0x76, 0x40, 0x39, 0x49, 0x15, 0x5d, 0xaa, 0xfd, 0x11, 0xff, 0x13, 0x27, 0x42, 0x12, 0xfa, 0x82, 0xe6, 0x7a, 0xf0, 0x5e, 0x1f, 0xe3, 0xba}}
return a, nil
}
@ -1008,7 +1010,7 @@ func _1674136690_ens_usernamesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1674136690_ens_usernames.up.sql", size: 98, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1674136690_ens_usernames.up.sql", size: 98, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x81, 0x7a, 0xf3, 0xa8, 0x88, 0x99, 0xd6, 0x9c, 0x69, 0x48, 0x3c, 0x10, 0xda, 0x72, 0xdc, 0x14, 0xd, 0x6e, 0x8c, 0x82, 0x92, 0x2d, 0x2c, 0xee, 0x4c, 0x70, 0xa4, 0xdc, 0x5c, 0x5, 0x2, 0xc3}}
return a, nil
}
@ -1028,7 +1030,7 @@ func _1674232431_add_balance_historyUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1674232431_add_balance_history.up.sql", size: 698, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1674232431_add_balance_history.up.sql", size: 698, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf7, 0xb5, 0x18, 0xca, 0x4a, 0x93, 0xbb, 0x6f, 0xa4, 0xee, 0xe4, 0x3e, 0xff, 0x6a, 0x4b, 0xe2, 0xe1, 0x61, 0x28, 0xee, 0xc5, 0x26, 0x57, 0x61, 0x5e, 0x6d, 0x44, 0x1e, 0x85, 0x43, 0x70, 0xa2}}
return a, nil
}
@ -1048,7 +1050,7 @@ func _1676368933_keypairs_to_keycardsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1676368933_keypairs_to_keycards.up.sql", size: 639, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1676368933_keypairs_to_keycards.up.sql", size: 639, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x81, 0x93, 0x27, 0x2, 0xf0, 0x37, 0x81, 0x65, 0xa4, 0xb3, 0x5b, 0x60, 0x36, 0x95, 0xfc, 0x81, 0xf0, 0x3b, 0x7c, 0xc3, 0x2c, 0x85, 0xbd, 0x38, 0x46, 0xa4, 0x95, 0x4a, 0x6, 0x3e, 0x74, 0xd5}}
return a, nil
}
@ -1068,7 +1070,7 @@ func _1676951398_add_currency_format_cacheUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1676951398_add_currency_format_cache.up.sql", size: 291, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1676951398_add_currency_format_cache.up.sql", size: 291, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf9, 0xa3, 0x76, 0x35, 0xca, 0xf, 0xe8, 0xdf, 0xd9, 0x61, 0xf9, 0xed, 0xfc, 0x6d, 0xf5, 0xe, 0x11, 0x88, 0xbd, 0x14, 0x92, 0xc6, 0x57, 0x53, 0xe, 0xcd, 0x52, 0xf4, 0xa9, 0xb1, 0xdd, 0xfd}}
return a, nil
}
@ -1088,7 +1090,7 @@ func _1676968196_keycards_add_clock_columnUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1676968196_keycards_add_clock_column.up.sql", size: 73, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1676968196_keycards_add_clock_column.up.sql", size: 73, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4c, 0xf, 0x1c, 0x28, 0x41, 0x57, 0x57, 0x6c, 0xe, 0x75, 0x6b, 0x75, 0x12, 0x0, 0x18, 0x1e, 0x88, 0x1e, 0x45, 0xe0, 0x32, 0xb9, 0xd4, 0xd9, 0x2e, 0xc8, 0xb, 0x80, 0x6, 0x51, 0x3d, 0x28}}
return a, nil
}
@ -1108,7 +1110,7 @@ func _1676968197_add_fallback_rpc_to_networksUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1676968197_add_fallback_rpc_to_networks.up.sql", size: 112, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1676968197_add_fallback_rpc_to_networks.up.sql", size: 112, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x77, 0x6a, 0xc6, 0x45, 0xfa, 0x62, 0x84, 0x74, 0x6d, 0x7c, 0xd7, 0x1d, 0x79, 0xb6, 0x38, 0x43, 0xa8, 0x8, 0x6b, 0x75, 0x3d, 0x9, 0x2, 0xc5, 0x9f, 0xbb, 0x45, 0x56, 0x4c, 0x4e, 0x17, 0x89}}
return a, nil
}
@ -1128,7 +1130,7 @@ func _1677674090_add_chains_ens_istest_to_saved_addressesUpSql() (*asset, error)
return nil, err
}
info := bindataFileInfo{name: "1677674090_add_chains_ens_istest_to_saved_addresses.up.sql", size: 638, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1677674090_add_chains_ens_istest_to_saved_addresses.up.sql", size: 638, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa8, 0x2d, 0xa4, 0x1b, 0xf6, 0x6a, 0x13, 0x7b, 0xe, 0x59, 0xcd, 0xe2, 0x4e, 0x81, 0x99, 0xc4, 0x33, 0x84, 0xde, 0x66, 0xca, 0xac, 0x2f, 0x5, 0x90, 0xac, 0xfd, 0x4e, 0xfc, 0x55, 0x44, 0xe5}}
return a, nil
}
@ -1148,7 +1150,7 @@ func _1677681143_accounts_table_type_column_updateUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1677681143_accounts_table_type_column_update.up.sql", size: 135, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1677681143_accounts_table_type_column_update.up.sql", size: 135, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd2, 0xc4, 0x6, 0x42, 0x50, 0x1d, 0xf4, 0x48, 0x55, 0xbc, 0xa2, 0x19, 0xdd, 0xad, 0xc8, 0xc, 0xa7, 0x30, 0xb6, 0xaf, 0xe, 0x2b, 0xaa, 0x2a, 0xa4, 0xe1, 0xb9, 0x41, 0x23, 0x66, 0xd3, 0x3}}
return a, nil
}
@ -1168,7 +1170,7 @@ func _1678264207_accounts_table_new_columns_addedUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1678264207_accounts_table_new_columns_added.up.sql", size: 130, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1678264207_accounts_table_new_columns_added.up.sql", size: 130, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf4, 0xd4, 0xf3, 0x35, 0xef, 0x5c, 0x19, 0x3c, 0x15, 0x90, 0x60, 0xbd, 0x1f, 0x81, 0xf0, 0x86, 0x73, 0x89, 0xa0, 0x70, 0xf2, 0x46, 0xae, 0xea, 0xd0, 0xc6, 0x9e, 0x55, 0x4a, 0x54, 0x62, 0xbb}}
return a, nil
}
@ -1188,7 +1190,7 @@ func _1680770368_add_bio_to_settings_sync_clock_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1680770368_add_bio_to_settings_sync_clock_table.up.sql", size: 75, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1680770368_add_bio_to_settings_sync_clock_table.up.sql", size: 75, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4a, 0x52, 0xf6, 0x3f, 0xaa, 0xd, 0xa0, 0xee, 0xe8, 0xe6, 0x16, 0x21, 0x80, 0x61, 0xe4, 0x7a, 0x4e, 0x37, 0x8d, 0x30, 0x51, 0x20, 0x4d, 0x15, 0x47, 0xfb, 0x6, 0xa1, 0xce, 0xc8, 0x27, 0x5a}}
return a, nil
}
@ -1208,7 +1210,7 @@ func _1681110436_add_mnemonic_to_settings_sync_clock_tableUpSql() (*asset, error
return nil, err
}
info := bindataFileInfo{name: "1681110436_add_mnemonic_to_settings_sync_clock_table.up.sql", size: 311, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1681110436_add_mnemonic_to_settings_sync_clock_table.up.sql", size: 311, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3d, 0x74, 0x81, 0x7d, 0x9e, 0x77, 0xb6, 0xfe, 0xe3, 0xcb, 0x48, 0xe5, 0x5f, 0x39, 0x23, 0xa1, 0x7d, 0x53, 0x22, 0xe8, 0x96, 0x15, 0x8a, 0x1e, 0x8e, 0xbc, 0xe2, 0x1d, 0xc4, 0xc2, 0x56, 0x34}}
return a, nil
}
@ -1228,7 +1230,7 @@ func _1681392602_9d_sync_periodUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1681392602_9d_sync_period.up.sql", size: 60, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1681392602_9d_sync_period.up.sql", size: 60, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc9, 0xa, 0x90, 0x29, 0x7f, 0x76, 0x98, 0xa7, 0x71, 0x80, 0x5a, 0x2f, 0xbe, 0x23, 0x9a, 0xd4, 0xf4, 0x39, 0x19, 0xd3, 0xa5, 0x34, 0x6e, 0x67, 0x6a, 0xbe, 0x8a, 0xad, 0x21, 0xc7, 0xba, 0x88}}
return a, nil
}
@ -1248,7 +1250,7 @@ func _1681762078_default_sync_period_9dUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1681762078_default_sync_period_9d.up.sql", size: 3002, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1681762078_default_sync_period_9d.up.sql", size: 3002, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3e, 0xd9, 0x26, 0xfc, 0xa9, 0x45, 0xc1, 0x81, 0xa8, 0xe2, 0x2c, 0xe9, 0x3c, 0xea, 0x1d, 0x37, 0x11, 0x45, 0x8c, 0x6c, 0xbc, 0xc2, 0x6, 0x69, 0x2, 0x75, 0x29, 0x40, 0x9f, 0xc5, 0xbb, 0x36}}
return a, nil
}
@ -1268,7 +1270,7 @@ func _1681780680_add_clock_to_social_links_settingsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1681780680_add_clock_to_social_links_settings.up.sql", size: 137, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1681780680_add_clock_to_social_links_settings.up.sql", size: 137, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x63, 0x11, 0xf5, 0x41, 0xe5, 0x5a, 0xf4, 0xe3, 0xf3, 0x14, 0x87, 0x28, 0xd8, 0xf0, 0x52, 0x31, 0x8, 0xd5, 0xbb, 0xf4, 0xff, 0x55, 0x5f, 0x42, 0x90, 0xcb, 0xf7, 0x46, 0x2, 0x6, 0xbe, 0x42}}
return a, nil
}
@ -1288,7 +1290,7 @@ func _1682073779_settings_table_remove_latest_derived_path_columnUpSql() (*asset
return nil, err
}
info := bindataFileInfo{name: "1682073779_settings_table_remove_latest_derived_path_column.up.sql", size: 4470, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1682073779_settings_table_remove_latest_derived_path_column.up.sql", size: 4470, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7a, 0x36, 0x2, 0x41, 0xd, 0x5c, 0xd1, 0x92, 0x85, 0x6d, 0x84, 0xff, 0x67, 0xa7, 0x4c, 0x67, 0xa4, 0xef, 0x52, 0x69, 0x1f, 0x22, 0x25, 0x92, 0xc, 0xb3, 0x89, 0x50, 0x91, 0xc, 0x49, 0xf9}}
return a, nil
}
@ -1308,7 +1310,7 @@ func _1682146075_add_created_at_to_saved_addressesUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1682146075_add_created_at_to_saved_addresses.up.sql", size: 107, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1682146075_add_created_at_to_saved_addresses.up.sql", size: 107, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x88, 0xfe, 0x35, 0x9c, 0x6b, 0xdf, 0x67, 0x18, 0x16, 0xe4, 0xc9, 0xd4, 0x77, 0x7c, 0x4, 0xe2, 0x6c, 0x41, 0xd9, 0x53, 0x97, 0xfe, 0x5, 0xa3, 0x23, 0xce, 0x82, 0xad, 0x92, 0x5e, 0xd7, 0x7d}}
return a, nil
}
@ -1328,7 +1330,7 @@ func _1682393575_sync_ens_nameUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1682393575_sync_ens_name.up.sql", size: 713, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1682393575_sync_ens_name.up.sql", size: 713, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfb, 0xea, 0xcb, 0x4d, 0x71, 0x5a, 0x49, 0x19, 0x8b, 0xef, 0x66, 0x27, 0x33, 0x89, 0xb0, 0xe, 0x37, 0x1b, 0x41, 0x8, 0x12, 0xcc, 0x56, 0xd8, 0x1b, 0xf, 0xf8, 0x50, 0x4b, 0x93, 0xf1, 0x29}}
return a, nil
}
@ -1348,7 +1350,7 @@ func _1683457503_add_blocks_ranges_sequential_tableUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1683457503_add_blocks_ranges_sequential_table.up.sql", size: 263, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "1683457503_add_blocks_ranges_sequential_table.up.sql", size: 263, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfe, 0x57, 0x2e, 0x0, 0x6a, 0x6e, 0xd7, 0xeb, 0xe6, 0x66, 0x79, 0x32, 0x22, 0x82, 0x92, 0xf4, 0xc9, 0xf1, 0x58, 0x1a, 0x45, 0x60, 0x77, 0x50, 0xe7, 0x54, 0x4a, 0xc0, 0x42, 0x3a, 0x4f, 0x35}}
return a, nil
}
@ -1368,7 +1370,7 @@ func _1683627613_accounts_and_keycards_improvementsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1683627613_accounts_and_keycards_improvements.up.sql", size: 3640, mode: os.FileMode(0644), modTime: time.Unix(1685358731, 0)}
info := bindataFileInfo{name: "1683627613_accounts_and_keycards_improvements.up.sql", size: 3640, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8e, 0xbe, 0x62, 0xf5, 0x9, 0x42, 0x8c, 0x8f, 0xa8, 0x45, 0xe7, 0x36, 0xc9, 0xde, 0xf4, 0xe2, 0xfd, 0xc4, 0x8, 0xd0, 0xa3, 0x8, 0x64, 0xe2, 0x56, 0xcc, 0xa7, 0x6d, 0xc5, 0xcc, 0x82, 0x2c}}
return a, nil
}
@ -1388,7 +1390,7 @@ func _1685041348_settings_table_add_latest_derived_path_columnUpSql() (*asset, e
return nil, err
}
info := bindataFileInfo{name: "1685041348_settings_table_add_latest_derived_path_column.up.sql", size: 115, mode: os.FileMode(0644), modTime: time.Unix(1685358731, 0)}
info := bindataFileInfo{name: "1685041348_settings_table_add_latest_derived_path_column.up.sql", size: 115, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x21, 0xd4, 0x1b, 0xbf, 0x8, 0xf9, 0xd4, 0xb0, 0xa0, 0x6, 0x5b, 0xfb, 0x7e, 0xff, 0xfa, 0xbf, 0xcc, 0x64, 0x47, 0x81, 0x8b, 0x5e, 0x17, 0x6a, 0xa7, 0xa4, 0x35, 0x8f, 0x30, 0x4f, 0xd9, 0xd}}
return a, nil
}
@ -1408,7 +1410,7 @@ func _1685440989_update_color_id_accountsUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1685440989_update_color_id_accounts.up.sql", size: 918, mode: os.FileMode(0644), modTime: time.Unix(1685733628, 0)}
info := bindataFileInfo{name: "1685440989_update_color_id_accounts.up.sql", size: 918, mode: os.FileMode(0644), modTime: time.Unix(1685977515, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0x2e, 0x51, 0x1d, 0x2d, 0x16, 0x84, 0xd6, 0xe8, 0xbc, 0x20, 0x53, 0x47, 0xb8, 0x40, 0x21, 0x52, 0x5c, 0xd9, 0xbb, 0xea, 0xe2, 0xa5, 0x77, 0xc8, 0x35, 0x4c, 0xe0, 0x9d, 0x42, 0x44, 0x50}}
return a, nil
}
@ -1428,11 +1430,31 @@ func _1685463947_add_to_asset_to_multitransactionUpSql() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "1685463947_add_to_asset_to_multitransaction.up.sql", size: 61, mode: os.FileMode(0644), modTime: time.Unix(1685964120, 0)}
info := bindataFileInfo{name: "1685463947_add_to_asset_to_multitransaction.up.sql", size: 61, mode: os.FileMode(0644), modTime: time.Unix(1685979377, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd3, 0x66, 0x15, 0x10, 0xfa, 0x66, 0x81, 0x68, 0xd9, 0xb4, 0x93, 0x9e, 0x11, 0xed, 0x1d, 0x16, 0x9d, 0x5a, 0xf8, 0xd7, 0x8, 0xea, 0x7a, 0xaf, 0xe4, 0xb3, 0x22, 0x19, 0xca, 0xff, 0x75, 0x7c}}
return a, nil
}
var __1685880973_add_profile_links_settings_tableUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x93\xdd\x6e\xdb\x46\x10\x85\xef\xf9\x14\xa7\xee\x45\x45\xc0\x8c\xec\x26\x46\x8a\x06\x2e\xc0\x4a\x74\x4d\x84\x96\x0c\x8a\x6e\x9b\x2b\x65\xbd\x1c\x91\x0b\x2f\x77\x95\xdd\xa1\x59\xbf\x7d\xc1\x1f\xb9\x16\xa0\x16\xbd\x5b\x62\xce\xfc\x7d\x67\x18\x45\x58\x38\x12\x4c\x30\xd4\x81\xc5\xa3\x26\x74\x35\x39\x42\x47\xe8\x94\xd6\xf0\x6c\x1d\x61\xef\xec\x4e\x69\x82\xb7\x52\x09\x0d\xad\xcc\x93\x3f\x0f\xa2\x08\x62\xc7\xe4\x50\x2a\x2f\x5b\xef\x95\x35\xa8\x99\xf7\xfe\xe7\xf9\xbc\x52\x5c\xb7\x8f\xef\xa4\x6d\xe6\x9e\x05\xb7\x3e\x52\xaf\xaf\xca\xce\xf7\xad\xd6\xf3\xf7\x57\x57\x3f\x7e\xaf\xbc\x6f\x49\xda\xa6\x21\xc3\xd1\xe5\xd5\xc7\xf7\x3f\x5d\x7e\xbc\xf8\xf0\xa1\x2f\xde\x11\x4a\x92\xaa\xa4\x12\x6c\xe1\x68\xaf\x85\x24\x70\x4d\x20\xc3\xca\x11\xca\xc7\x69\x66\x69\x0d\x93\x61\x58\x03\x7a\x26\xf7\x02\x59\x0b\x53\x11\x66\x8f\x24\x45\xeb\x09\x76\x07\xae\x05\x63\x6f\xbd\xe2\x7e\x4e\x69\x75\xdb\x18\x28\x0f\x63\x19\x86\xa8\xa4\x32\x0c\x16\x79\x12\x17\x09\x8a\xf8\xd7\x2c\x41\x7a\x83\xd5\xba\x40\xf2\x67\xba\x29\x36\x07\x04\xdb\x11\xc1\x76\x40\x80\x59\x00\x30\xfd\xc5\xf8\x3d\xce\x17\xb7\x71\x3e\x24\xac\x1e\xb2\x0c\x8b\xdb\x64\xf1\x19\x33\x4d\xa6\xe2\x7a\xc6\x4e\x35\xb3\x5e\x18\x86\xf8\x05\x17\xe1\x79\x00\xb4\x4e\xff\xaf\xb4\xd6\xe9\x37\x59\xf7\x79\x7a\x17\xe7\x5f\xf0\x39\xf9\x82\xa1\xe2\x79\x5f\x28\x0c\xc2\x4f\x41\x70\xec\xe6\xb4\x21\x5b\x3c\x11\xed\x21\xb5\x95\x4f\x23\x07\x82\x16\x9e\x0f\x8c\xec\xee\xa4\xbd\x98\x79\x65\xe4\x3f\x68\x95\x3f\x38\x50\x42\x68\x0d\x67\x3b\xf8\x5a\xb8\xd1\x10\x2f\x1a\x9a\x5a\x3c\x0b\xdd\x52\x18\xc4\x59\x91\xe4\x13\x49\x4f\xcc\xca\x54\x7e\xeb\x5f\x8c\xdc\x8e\xb2\x78\xb9\xc4\x62\x9d\x3d\xdc\xad\x70\x84\x34\x5d\x15\xc9\x6f\xc9\x1b\x24\xcb\xe4\x26\x7e\xc8\x0a\x5c\x8c\x1b\xa6\xc6\x93\x63\x28\xc3\x16\x5f\x4f\x99\xf2\x75\xbc\x89\x20\x5d\x6d\x92\xbc\xe8\xeb\xad\xff\xc5\xbc\x37\xf8\x80\x4d\x92\x25\x8b\x62\xd8\x7d\x3b\x06\x86\x67\xeb\x74\x00\xdc\xe4\xeb\xbb\xa3\x31\xb7\x87\x95\x02\xe0\x8f\xdb\x24\x4f\x5e\xd5\xf8\xee\x1a\x67\x67\xe3\xac\x37\xce\x36\xf0\xb6\x21\x38\x12\xde\x9a\x01\xd5\xce\x6a\x6d\x3b\x65\x2a\xf8\x6f\x1a\xa5\x25\x6f\x7e\x60\x74\xd6\x3d\x81\x6b\x67\xdb\xaa\xc6\xeb\x7f\x82\x46\x55\x4e\xf4\x07\xeb\xcf\x21\x34\xd7\x43\xb8\xaf\xf2\xad\xed\xcf\x5c\x79\x48\xeb\x1c\x49\x7e\xd7\xf7\x8b\x22\x6c\x88\x87\xf8\x08\x79\x67\xdd\x49\x73\x7b\xf1\xc3\xfd\xb2\xbf\xf5\x13\xde\xf4\xd1\x1e\x48\x31\x3e\x70\x6c\xd0\x35\x66\x13\xab\x37\xe2\xff\x44\x34\x29\x4e\x71\x3a\xc4\xb2\xf4\x2e\x2d\x70\x19\x8e\xdf\xa3\xd2\xbf\x18\xae\x89\x95\xdc\xaa\x12\xd7\x38\x53\xe5\x84\x75\xe9\xec\x1e\x56\x97\x93\xd1\xcb\x7c\x7d\x7f\x38\xb4\x53\xfd\x3f\xfd\x1d\x00\x00\xff\xff\x16\x8e\x9a\x75\xe6\x04\x00\x00")
func _1685880973_add_profile_links_settings_tableUpSqlBytes() ([]byte, error) {
return bindataRead(
__1685880973_add_profile_links_settings_tableUpSql,
"1685880973_add_profile_links_settings_table.up.sql",
)
}
func _1685880973_add_profile_links_settings_tableUpSql() (*asset, error) {
bytes, err := _1685880973_add_profile_links_settings_tableUpSqlBytes()
if err != nil {
return nil, err
}
info := bindataFileInfo{name: "1685880973_add_profile_links_settings_table.up.sql", size: 1254, mode: os.FileMode(0644), modTime: time.Unix(1685979377, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcc, 0xa4, 0xea, 0x41, 0x4e, 0xf, 0xea, 0x99, 0x9c, 0x8c, 0xe4, 0x22, 0xb7, 0x64, 0x8c, 0x9a, 0xac, 0x6, 0xc3, 0xbc, 0x4a, 0x40, 0xbe, 0x79, 0x73, 0x30, 0x29, 0x33, 0x88, 0x6a, 0x81, 0xf7}}
return a, nil
}
var _docGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\xc9\xb1\x0d\xc4\x20\x0c\x05\xd0\x9e\x29\xfe\x02\xd8\xfd\x6d\xe3\x4b\xac\x2f\x44\x82\x09\x78\x7f\xa5\x49\xfd\xa6\x1d\xdd\xe8\xd8\xcf\x55\x8a\x2a\xe3\x47\x1f\xbe\x2c\x1d\x8c\xfa\x6f\xe3\xb4\x34\xd4\xd9\x89\xbb\x71\x59\xb6\x18\x1b\x35\x20\xa2\x9f\x0a\x03\xa2\xe5\x0d\x00\x00\xff\xff\x60\xcd\x06\xbe\x4a\x00\x00\x00")
func docGoBytes() ([]byte, error) {
@ -1448,7 +1470,7 @@ func docGo() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "doc.go", size: 74, mode: os.FileMode(0644), modTime: time.Unix(1684852796, 0)}
info := bindataFileInfo{name: "doc.go", size: 74, mode: os.FileMode(0644), modTime: time.Unix(1685950754, 0)}
a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0x7c, 0x28, 0xcd, 0x47, 0xf2, 0xfa, 0x7c, 0x51, 0x2d, 0xd8, 0x38, 0xb, 0xb0, 0x34, 0x9d, 0x4c, 0x62, 0xa, 0x9e, 0x28, 0xc3, 0x31, 0x23, 0xd9, 0xbb, 0x89, 0x9f, 0xa0, 0x89, 0x1f, 0xe8}}
return a, nil
}
@ -1544,88 +1566,150 @@ func AssetNames() []string {
// _bindata is a table, holding each asset generator, mapped to its name.
var _bindata = map[string]func() (*asset, error){
"1640111208_dummy.up.sql": _1640111208_dummyUpSql,
"1642666031_add_removed_clock_to_bookmarks.up.sql": _1642666031_add_removed_clock_to_bookmarksUpSql,
"1643644541_gif_api_key_setting.up.sql": _1643644541_gif_api_key_settingUpSql,
"1644188994_recent_stickers.up.sql": _1644188994_recent_stickersUpSql,
"1646659233_add_address_to_dapp_permisssion.up.sql": _1646659233_add_address_to_dapp_permisssionUpSql,
"1646841105_add_emoji_account.up.sql": _1646841105_add_emoji_accountUpSql,
"1647278782_display_name.up.sql": _1647278782_display_nameUpSql,
"1647862838_reset_last_backup.up.sql": _1647862838_reset_last_backupUpSql,
"1647871652_add_settings_sync_clock_table.up.sql": _1647871652_add_settings_sync_clock_tableUpSql,
"1647880168_add_torrent_config.up.sql": _1647880168_add_torrent_configUpSql,
"1647882837_add_communities_settings_table.up.sql": _1647882837_add_communities_settings_tableUpSql,
"1647956635_add_waku_messages_table.up.sql": _1647956635_add_waku_messages_tableUpSql,
"1648554928_network_test.up.sql": _1648554928_network_testUpSql,
"1649174829_add_visitble_token.up.sql": _1649174829_add_visitble_tokenUpSql,
"1649882262_add_derived_from_accounts.up.sql": _1649882262_add_derived_from_accountsUpSql,
"1650612625_add_community_message_archive_hashes_table.up.sql": _1650612625_add_community_message_archive_hashes_tableUpSql,
"1650616788_add_communities_archives_info_table.up.sql": _1650616788_add_communities_archives_info_tableUpSql,
"1652715604_add_clock_accounts.up.sql": _1652715604_add_clock_accountsUpSql,
"1653037334_add_notifications_settings_table.up.sql": _1653037334_add_notifications_settings_tableUpSql,
"1654702119_add_mutual_contact_settings.up.sql": _1654702119_add_mutual_contact_settingsUpSql,
"1655375270_add_clock_field_to_communities_settings_table.up.sql": _1655375270_add_clock_field_to_communities_settings_tableUpSql,
"1655385721_drop_networks_config.up.sql": _1655385721_drop_networks_configUpSql,
"1655385724_networks_chainColor_shortName.up.sql": _1655385724_networks_chaincolor_shortnameUpSql,
"1655456688_add_deleted_at_field_to_bookmarks_table.up.sql": _1655456688_add_deleted_at_field_to_bookmarks_tableUpSql,
"1655462032_create_bookmarks_deleted_at_index.up.sql": _1655462032_create_bookmarks_deleted_at_indexUpSql,
"1657617291_add_multi_transactions_table.up.sql": _1657617291_add_multi_transactions_tableUpSql,
"1660134042_add_social_links_settings_table.up.sql": _1660134042_add_social_links_settings_tableUpSql,
"1660134060_settings_bio.up.sql": _1660134060_settings_bioUpSql,
"1660134070_add_wakuv2_store.up.sql": _1660134070_add_wakuv2_storeUpSql,
"1660134072_waku2_store_messages.up.sql": _1660134072_waku2_store_messagesUpSql,
"1662365868_add_key_uid_accounts.up.sql": _1662365868_add_key_uid_accountsUpSql,
"1662447680_add_keypairs_table.up.sql": _1662447680_add_keypairs_tableUpSql,
"1662460056_move_favourites_to_saved_addresses.up.sql": _1662460056_move_favourites_to_saved_addressesUpSql,
"1662738097_add_base_fee_transaction.up.sql": _1662738097_add_base_fee_transactionUpSql,
"1662972194_add_keypairs_table.up.sql": _1662972194_add_keypairs_tableUpSql,
"1664392661_add_third_party_id_to_waku_messages.up.sql": _1664392661_add_third_party_id_to_waku_messagesUpSql,
"1664783660_add_sync_info_to_saved_addresses.up.sql": _1664783660_add_sync_info_to_saved_addressesUpSql,
"1668109917_wakunodes.up.sql": _1668109917_wakunodesUpSql,
"1670249678_display_name_to_settings_sync_clock_table.up.sql": _1670249678_display_name_to_settings_sync_clock_tableUpSql,
"1670836810_add_imported_flag_to_community_archive_hashes.up.sql": _1670836810_add_imported_flag_to_community_archive_hashesUpSql,
"1671438731_add_magnetlink_uri_to_communities_archive_info.up.sql": _1671438731_add_magnetlink_uri_to_communities_archive_infoUpSql,
"1672933930_switcher_card.up.sql": _1672933930_switcher_cardUpSql,
"1674056187_add_price_cache.up.sql": _1674056187_add_price_cacheUpSql,
"1674136690_ens_usernames.up.sql": _1674136690_ens_usernamesUpSql,
"1674232431_add_balance_history.up.sql": _1674232431_add_balance_historyUpSql,
"1676368933_keypairs_to_keycards.up.sql": _1676368933_keypairs_to_keycardsUpSql,
"1676951398_add_currency_format_cache.up.sql": _1676951398_add_currency_format_cacheUpSql,
"1676968196_keycards_add_clock_column.up.sql": _1676968196_keycards_add_clock_columnUpSql,
"1676968197_add_fallback_rpc_to_networks.up.sql": _1676968197_add_fallback_rpc_to_networksUpSql,
"1677674090_add_chains_ens_istest_to_saved_addresses.up.sql": _1677674090_add_chains_ens_istest_to_saved_addressesUpSql,
"1677681143_accounts_table_type_column_update.up.sql": _1677681143_accounts_table_type_column_updateUpSql,
"1678264207_accounts_table_new_columns_added.up.sql": _1678264207_accounts_table_new_columns_addedUpSql,
"1680770368_add_bio_to_settings_sync_clock_table.up.sql": _1680770368_add_bio_to_settings_sync_clock_tableUpSql,
"1681110436_add_mnemonic_to_settings_sync_clock_table.up.sql": _1681110436_add_mnemonic_to_settings_sync_clock_tableUpSql,
"1681392602_9d_sync_period.up.sql": _1681392602_9d_sync_periodUpSql,
"1681762078_default_sync_period_9d.up.sql": _1681762078_default_sync_period_9dUpSql,
"1681780680_add_clock_to_social_links_settings.up.sql": _1681780680_add_clock_to_social_links_settingsUpSql,
"1640111208_dummy.up.sql": _1640111208_dummyUpSql,
"1642666031_add_removed_clock_to_bookmarks.up.sql": _1642666031_add_removed_clock_to_bookmarksUpSql,
"1643644541_gif_api_key_setting.up.sql": _1643644541_gif_api_key_settingUpSql,
"1644188994_recent_stickers.up.sql": _1644188994_recent_stickersUpSql,
"1646659233_add_address_to_dapp_permisssion.up.sql": _1646659233_add_address_to_dapp_permisssionUpSql,
"1646841105_add_emoji_account.up.sql": _1646841105_add_emoji_accountUpSql,
"1647278782_display_name.up.sql": _1647278782_display_nameUpSql,
"1647862838_reset_last_backup.up.sql": _1647862838_reset_last_backupUpSql,
"1647871652_add_settings_sync_clock_table.up.sql": _1647871652_add_settings_sync_clock_tableUpSql,
"1647880168_add_torrent_config.up.sql": _1647880168_add_torrent_configUpSql,
"1647882837_add_communities_settings_table.up.sql": _1647882837_add_communities_settings_tableUpSql,
"1647956635_add_waku_messages_table.up.sql": _1647956635_add_waku_messages_tableUpSql,
"1648554928_network_test.up.sql": _1648554928_network_testUpSql,
"1649174829_add_visitble_token.up.sql": _1649174829_add_visitble_tokenUpSql,
"1649882262_add_derived_from_accounts.up.sql": _1649882262_add_derived_from_accountsUpSql,
"1650612625_add_community_message_archive_hashes_table.up.sql": _1650612625_add_community_message_archive_hashes_tableUpSql,
"1650616788_add_communities_archives_info_table.up.sql": _1650616788_add_communities_archives_info_tableUpSql,
"1652715604_add_clock_accounts.up.sql": _1652715604_add_clock_accountsUpSql,
"1653037334_add_notifications_settings_table.up.sql": _1653037334_add_notifications_settings_tableUpSql,
"1654702119_add_mutual_contact_settings.up.sql": _1654702119_add_mutual_contact_settingsUpSql,
"1655375270_add_clock_field_to_communities_settings_table.up.sql": _1655375270_add_clock_field_to_communities_settings_tableUpSql,
"1655385721_drop_networks_config.up.sql": _1655385721_drop_networks_configUpSql,
"1655385724_networks_chainColor_shortName.up.sql": _1655385724_networks_chaincolor_shortnameUpSql,
"1655456688_add_deleted_at_field_to_bookmarks_table.up.sql": _1655456688_add_deleted_at_field_to_bookmarks_tableUpSql,
"1655462032_create_bookmarks_deleted_at_index.up.sql": _1655462032_create_bookmarks_deleted_at_indexUpSql,
"1657617291_add_multi_transactions_table.up.sql": _1657617291_add_multi_transactions_tableUpSql,
"1660134042_add_social_links_settings_table.up.sql": _1660134042_add_social_links_settings_tableUpSql,
"1660134060_settings_bio.up.sql": _1660134060_settings_bioUpSql,
"1660134070_add_wakuv2_store.up.sql": _1660134070_add_wakuv2_storeUpSql,
"1660134072_waku2_store_messages.up.sql": _1660134072_waku2_store_messagesUpSql,
"1662365868_add_key_uid_accounts.up.sql": _1662365868_add_key_uid_accountsUpSql,
"1662447680_add_keypairs_table.up.sql": _1662447680_add_keypairs_tableUpSql,
"1662460056_move_favourites_to_saved_addresses.up.sql": _1662460056_move_favourites_to_saved_addressesUpSql,
"1662738097_add_base_fee_transaction.up.sql": _1662738097_add_base_fee_transactionUpSql,
"1662972194_add_keypairs_table.up.sql": _1662972194_add_keypairs_tableUpSql,
"1664392661_add_third_party_id_to_waku_messages.up.sql": _1664392661_add_third_party_id_to_waku_messagesUpSql,
"1664783660_add_sync_info_to_saved_addresses.up.sql": _1664783660_add_sync_info_to_saved_addressesUpSql,
"1668109917_wakunodes.up.sql": _1668109917_wakunodesUpSql,
"1670249678_display_name_to_settings_sync_clock_table.up.sql": _1670249678_display_name_to_settings_sync_clock_tableUpSql,
"1670836810_add_imported_flag_to_community_archive_hashes.up.sql": _1670836810_add_imported_flag_to_community_archive_hashesUpSql,
"1671438731_add_magnetlink_uri_to_communities_archive_info.up.sql": _1671438731_add_magnetlink_uri_to_communities_archive_infoUpSql,
"1672933930_switcher_card.up.sql": _1672933930_switcher_cardUpSql,
"1674056187_add_price_cache.up.sql": _1674056187_add_price_cacheUpSql,
"1674136690_ens_usernames.up.sql": _1674136690_ens_usernamesUpSql,
"1674232431_add_balance_history.up.sql": _1674232431_add_balance_historyUpSql,
"1676368933_keypairs_to_keycards.up.sql": _1676368933_keypairs_to_keycardsUpSql,
"1676951398_add_currency_format_cache.up.sql": _1676951398_add_currency_format_cacheUpSql,
"1676968196_keycards_add_clock_column.up.sql": _1676968196_keycards_add_clock_columnUpSql,
"1676968197_add_fallback_rpc_to_networks.up.sql": _1676968197_add_fallback_rpc_to_networksUpSql,
"1677674090_add_chains_ens_istest_to_saved_addresses.up.sql": _1677674090_add_chains_ens_istest_to_saved_addressesUpSql,
"1677681143_accounts_table_type_column_update.up.sql": _1677681143_accounts_table_type_column_updateUpSql,
"1678264207_accounts_table_new_columns_added.up.sql": _1678264207_accounts_table_new_columns_addedUpSql,
"1680770368_add_bio_to_settings_sync_clock_table.up.sql": _1680770368_add_bio_to_settings_sync_clock_tableUpSql,
"1681110436_add_mnemonic_to_settings_sync_clock_table.up.sql": _1681110436_add_mnemonic_to_settings_sync_clock_tableUpSql,
"1681392602_9d_sync_period.up.sql": _1681392602_9d_sync_periodUpSql,
"1681762078_default_sync_period_9d.up.sql": _1681762078_default_sync_period_9dUpSql,
"1681780680_add_clock_to_social_links_settings.up.sql": _1681780680_add_clock_to_social_links_settingsUpSql,
"1682073779_settings_table_remove_latest_derived_path_column.up.sql": _1682073779_settings_table_remove_latest_derived_path_columnUpSql,
"1682146075_add_created_at_to_saved_addresses.up.sql": _1682146075_add_created_at_to_saved_addressesUpSql,
"1682393575_sync_ens_name.up.sql": _1682393575_sync_ens_nameUpSql,
"1683457503_add_blocks_ranges_sequential_table.up.sql": _1683457503_add_blocks_ranges_sequential_tableUpSql,
"1683627613_accounts_and_keycards_improvements.up.sql": _1683627613_accounts_and_keycards_improvementsUpSql,
"1685041348_settings_table_add_latest_derived_path_column.up.sql": _1685041348_settings_table_add_latest_derived_path_columnUpSql,
"1685440989_update_color_id_accounts.up.sql": _1685440989_update_color_id_accountsUpSql,
"1685463947_add_to_asset_to_multitransaction.up.sql": _1685463947_add_to_asset_to_multitransactionUpSql,
"1682146075_add_created_at_to_saved_addresses.up.sql": _1682146075_add_created_at_to_saved_addressesUpSql,
"1682393575_sync_ens_name.up.sql": _1682393575_sync_ens_nameUpSql,
"1683457503_add_blocks_ranges_sequential_table.up.sql": _1683457503_add_blocks_ranges_sequential_tableUpSql,
"1683627613_accounts_and_keycards_improvements.up.sql": _1683627613_accounts_and_keycards_improvementsUpSql,
"1685041348_settings_table_add_latest_derived_path_column.up.sql": _1685041348_settings_table_add_latest_derived_path_columnUpSql,
"1685440989_update_color_id_accounts.up.sql": _1685440989_update_color_id_accountsUpSql,
"1685463947_add_to_asset_to_multitransaction.up.sql": _1685463947_add_to_asset_to_multitransactionUpSql,
"1685880973_add_profile_links_settings_table.up.sql": _1685880973_add_profile_links_settings_tableUpSql,
"doc.go": docGo,
}
// AssetDebug is true if the assets were built with the debug flag enabled.
const AssetDebug = false
// AssetDir returns the file names below a certain
// directory embedded in the file by go-bindata.
// For example if you run go-bindata on data/... and data contains the
// following hierarchy:
//
// data/
// foo.txt
// img/
// a.png
// b.png
//
// data/
// foo.txt
// img/
// a.png
// b.png
// then AssetDir("data") would return []string{"foo.txt", "img"},
// AssetDir("data/img") would return []string{"a.png", "b.png"},
// AssetDir("foo.txt") and AssetDir("notexist") would return an error, and
@ -1658,72 +1742,73 @@ type bintree struct {
}
var _bintree = &bintree{nil, map[string]*bintree{
"1640111208_dummy.up.sql": {_1640111208_dummyUpSql, map[string]*bintree{}},
"1642666031_add_removed_clock_to_bookmarks.up.sql": {_1642666031_add_removed_clock_to_bookmarksUpSql, map[string]*bintree{}},
"1643644541_gif_api_key_setting.up.sql": {_1643644541_gif_api_key_settingUpSql, map[string]*bintree{}},
"1644188994_recent_stickers.up.sql": {_1644188994_recent_stickersUpSql, map[string]*bintree{}},
"1646659233_add_address_to_dapp_permisssion.up.sql": {_1646659233_add_address_to_dapp_permisssionUpSql, map[string]*bintree{}},
"1646841105_add_emoji_account.up.sql": {_1646841105_add_emoji_accountUpSql, map[string]*bintree{}},
"1647278782_display_name.up.sql": {_1647278782_display_nameUpSql, map[string]*bintree{}},
"1647862838_reset_last_backup.up.sql": {_1647862838_reset_last_backupUpSql, map[string]*bintree{}},
"1647871652_add_settings_sync_clock_table.up.sql": {_1647871652_add_settings_sync_clock_tableUpSql, map[string]*bintree{}},
"1647880168_add_torrent_config.up.sql": {_1647880168_add_torrent_configUpSql, map[string]*bintree{}},
"1647882837_add_communities_settings_table.up.sql": {_1647882837_add_communities_settings_tableUpSql, map[string]*bintree{}},
"1647956635_add_waku_messages_table.up.sql": {_1647956635_add_waku_messages_tableUpSql, map[string]*bintree{}},
"1648554928_network_test.up.sql": {_1648554928_network_testUpSql, map[string]*bintree{}},
"1649174829_add_visitble_token.up.sql": {_1649174829_add_visitble_tokenUpSql, map[string]*bintree{}},
"1649882262_add_derived_from_accounts.up.sql": {_1649882262_add_derived_from_accountsUpSql, map[string]*bintree{}},
"1650612625_add_community_message_archive_hashes_table.up.sql": {_1650612625_add_community_message_archive_hashes_tableUpSql, map[string]*bintree{}},
"1650616788_add_communities_archives_info_table.up.sql": {_1650616788_add_communities_archives_info_tableUpSql, map[string]*bintree{}},
"1652715604_add_clock_accounts.up.sql": {_1652715604_add_clock_accountsUpSql, map[string]*bintree{}},
"1653037334_add_notifications_settings_table.up.sql": {_1653037334_add_notifications_settings_tableUpSql, map[string]*bintree{}},
"1654702119_add_mutual_contact_settings.up.sql": {_1654702119_add_mutual_contact_settingsUpSql, map[string]*bintree{}},
"1655375270_add_clock_field_to_communities_settings_table.up.sql": {_1655375270_add_clock_field_to_communities_settings_tableUpSql, map[string]*bintree{}},
"1655385721_drop_networks_config.up.sql": {_1655385721_drop_networks_configUpSql, map[string]*bintree{}},
"1655385724_networks_chainColor_shortName.up.sql": {_1655385724_networks_chaincolor_shortnameUpSql, map[string]*bintree{}},
"1655456688_add_deleted_at_field_to_bookmarks_table.up.sql": {_1655456688_add_deleted_at_field_to_bookmarks_tableUpSql, map[string]*bintree{}},
"1655462032_create_bookmarks_deleted_at_index.up.sql": {_1655462032_create_bookmarks_deleted_at_indexUpSql, map[string]*bintree{}},
"1657617291_add_multi_transactions_table.up.sql": {_1657617291_add_multi_transactions_tableUpSql, map[string]*bintree{}},
"1660134042_add_social_links_settings_table.up.sql": {_1660134042_add_social_links_settings_tableUpSql, map[string]*bintree{}},
"1660134060_settings_bio.up.sql": {_1660134060_settings_bioUpSql, map[string]*bintree{}},
"1660134070_add_wakuv2_store.up.sql": {_1660134070_add_wakuv2_storeUpSql, map[string]*bintree{}},
"1660134072_waku2_store_messages.up.sql": {_1660134072_waku2_store_messagesUpSql, map[string]*bintree{}},
"1662365868_add_key_uid_accounts.up.sql": {_1662365868_add_key_uid_accountsUpSql, map[string]*bintree{}},
"1662447680_add_keypairs_table.up.sql": {_1662447680_add_keypairs_tableUpSql, map[string]*bintree{}},
"1662460056_move_favourites_to_saved_addresses.up.sql": {_1662460056_move_favourites_to_saved_addressesUpSql, map[string]*bintree{}},
"1662738097_add_base_fee_transaction.up.sql": {_1662738097_add_base_fee_transactionUpSql, map[string]*bintree{}},
"1662972194_add_keypairs_table.up.sql": {_1662972194_add_keypairs_tableUpSql, map[string]*bintree{}},
"1664392661_add_third_party_id_to_waku_messages.up.sql": {_1664392661_add_third_party_id_to_waku_messagesUpSql, map[string]*bintree{}},
"1664783660_add_sync_info_to_saved_addresses.up.sql": {_1664783660_add_sync_info_to_saved_addressesUpSql, map[string]*bintree{}},
"1668109917_wakunodes.up.sql": {_1668109917_wakunodesUpSql, map[string]*bintree{}},
"1670249678_display_name_to_settings_sync_clock_table.up.sql": {_1670249678_display_name_to_settings_sync_clock_tableUpSql, map[string]*bintree{}},
"1670836810_add_imported_flag_to_community_archive_hashes.up.sql": {_1670836810_add_imported_flag_to_community_archive_hashesUpSql, map[string]*bintree{}},
"1671438731_add_magnetlink_uri_to_communities_archive_info.up.sql": {_1671438731_add_magnetlink_uri_to_communities_archive_infoUpSql, map[string]*bintree{}},
"1672933930_switcher_card.up.sql": {_1672933930_switcher_cardUpSql, map[string]*bintree{}},
"1674056187_add_price_cache.up.sql": {_1674056187_add_price_cacheUpSql, map[string]*bintree{}},
"1674136690_ens_usernames.up.sql": {_1674136690_ens_usernamesUpSql, map[string]*bintree{}},
"1674232431_add_balance_history.up.sql": {_1674232431_add_balance_historyUpSql, map[string]*bintree{}},
"1676368933_keypairs_to_keycards.up.sql": {_1676368933_keypairs_to_keycardsUpSql, map[string]*bintree{}},
"1676951398_add_currency_format_cache.up.sql": {_1676951398_add_currency_format_cacheUpSql, map[string]*bintree{}},
"1676968196_keycards_add_clock_column.up.sql": {_1676968196_keycards_add_clock_columnUpSql, map[string]*bintree{}},
"1676968197_add_fallback_rpc_to_networks.up.sql": {_1676968197_add_fallback_rpc_to_networksUpSql, map[string]*bintree{}},
"1677674090_add_chains_ens_istest_to_saved_addresses.up.sql": {_1677674090_add_chains_ens_istest_to_saved_addressesUpSql, map[string]*bintree{}},
"1677681143_accounts_table_type_column_update.up.sql": {_1677681143_accounts_table_type_column_updateUpSql, map[string]*bintree{}},
"1678264207_accounts_table_new_columns_added.up.sql": {_1678264207_accounts_table_new_columns_addedUpSql, map[string]*bintree{}},
"1680770368_add_bio_to_settings_sync_clock_table.up.sql": {_1680770368_add_bio_to_settings_sync_clock_tableUpSql, map[string]*bintree{}},
"1681110436_add_mnemonic_to_settings_sync_clock_table.up.sql": {_1681110436_add_mnemonic_to_settings_sync_clock_tableUpSql, map[string]*bintree{}},
"1681392602_9d_sync_period.up.sql": {_1681392602_9d_sync_periodUpSql, map[string]*bintree{}},
"1681762078_default_sync_period_9d.up.sql": {_1681762078_default_sync_period_9dUpSql, map[string]*bintree{}},
"1681780680_add_clock_to_social_links_settings.up.sql": {_1681780680_add_clock_to_social_links_settingsUpSql, map[string]*bintree{}},
"1682073779_settings_table_remove_latest_derived_path_column.up.sql": {_1682073779_settings_table_remove_latest_derived_path_columnUpSql, map[string]*bintree{}},
"1682146075_add_created_at_to_saved_addresses.up.sql": {_1682146075_add_created_at_to_saved_addressesUpSql, map[string]*bintree{}},
"1682393575_sync_ens_name.up.sql": {_1682393575_sync_ens_nameUpSql, map[string]*bintree{}},
"1683457503_add_blocks_ranges_sequential_table.up.sql": {_1683457503_add_blocks_ranges_sequential_tableUpSql, map[string]*bintree{}},
"1683627613_accounts_and_keycards_improvements.up.sql": {_1683627613_accounts_and_keycards_improvementsUpSql, map[string]*bintree{}},
"1685041348_settings_table_add_latest_derived_path_column.up.sql": {_1685041348_settings_table_add_latest_derived_path_columnUpSql, map[string]*bintree{}},
"1685440989_update_color_id_accounts.up.sql": {_1685440989_update_color_id_accountsUpSql, map[string]*bintree{}},
"1685463947_add_to_asset_to_multitransaction.up.sql": {_1685463947_add_to_asset_to_multitransactionUpSql, map[string]*bintree{}},
"doc.go": {docGo, map[string]*bintree{}},
"1640111208_dummy.up.sql": &bintree{_1640111208_dummyUpSql, map[string]*bintree{}},
"1642666031_add_removed_clock_to_bookmarks.up.sql": &bintree{_1642666031_add_removed_clock_to_bookmarksUpSql, map[string]*bintree{}},
"1643644541_gif_api_key_setting.up.sql": &bintree{_1643644541_gif_api_key_settingUpSql, map[string]*bintree{}},
"1644188994_recent_stickers.up.sql": &bintree{_1644188994_recent_stickersUpSql, map[string]*bintree{}},
"1646659233_add_address_to_dapp_permisssion.up.sql": &bintree{_1646659233_add_address_to_dapp_permisssionUpSql, map[string]*bintree{}},
"1646841105_add_emoji_account.up.sql": &bintree{_1646841105_add_emoji_accountUpSql, map[string]*bintree{}},
"1647278782_display_name.up.sql": &bintree{_1647278782_display_nameUpSql, map[string]*bintree{}},
"1647862838_reset_last_backup.up.sql": &bintree{_1647862838_reset_last_backupUpSql, map[string]*bintree{}},
"1647871652_add_settings_sync_clock_table.up.sql": &bintree{_1647871652_add_settings_sync_clock_tableUpSql, map[string]*bintree{}},
"1647880168_add_torrent_config.up.sql": &bintree{_1647880168_add_torrent_configUpSql, map[string]*bintree{}},
"1647882837_add_communities_settings_table.up.sql": &bintree{_1647882837_add_communities_settings_tableUpSql, map[string]*bintree{}},
"1647956635_add_waku_messages_table.up.sql": &bintree{_1647956635_add_waku_messages_tableUpSql, map[string]*bintree{}},
"1648554928_network_test.up.sql": &bintree{_1648554928_network_testUpSql, map[string]*bintree{}},
"1649174829_add_visitble_token.up.sql": &bintree{_1649174829_add_visitble_tokenUpSql, map[string]*bintree{}},
"1649882262_add_derived_from_accounts.up.sql": &bintree{_1649882262_add_derived_from_accountsUpSql, map[string]*bintree{}},
"1650612625_add_community_message_archive_hashes_table.up.sql": &bintree{_1650612625_add_community_message_archive_hashes_tableUpSql, map[string]*bintree{}},
"1650616788_add_communities_archives_info_table.up.sql": &bintree{_1650616788_add_communities_archives_info_tableUpSql, map[string]*bintree{}},
"1652715604_add_clock_accounts.up.sql": &bintree{_1652715604_add_clock_accountsUpSql, map[string]*bintree{}},
"1653037334_add_notifications_settings_table.up.sql": &bintree{_1653037334_add_notifications_settings_tableUpSql, map[string]*bintree{}},
"1654702119_add_mutual_contact_settings.up.sql": &bintree{_1654702119_add_mutual_contact_settingsUpSql, map[string]*bintree{}},
"1655375270_add_clock_field_to_communities_settings_table.up.sql": &bintree{_1655375270_add_clock_field_to_communities_settings_tableUpSql, map[string]*bintree{}},
"1655385721_drop_networks_config.up.sql": &bintree{_1655385721_drop_networks_configUpSql, map[string]*bintree{}},
"1655385724_networks_chainColor_shortName.up.sql": &bintree{_1655385724_networks_chaincolor_shortnameUpSql, map[string]*bintree{}},
"1655456688_add_deleted_at_field_to_bookmarks_table.up.sql": &bintree{_1655456688_add_deleted_at_field_to_bookmarks_tableUpSql, map[string]*bintree{}},
"1655462032_create_bookmarks_deleted_at_index.up.sql": &bintree{_1655462032_create_bookmarks_deleted_at_indexUpSql, map[string]*bintree{}},
"1657617291_add_multi_transactions_table.up.sql": &bintree{_1657617291_add_multi_transactions_tableUpSql, map[string]*bintree{}},
"1660134042_add_social_links_settings_table.up.sql": &bintree{_1660134042_add_social_links_settings_tableUpSql, map[string]*bintree{}},
"1660134060_settings_bio.up.sql": &bintree{_1660134060_settings_bioUpSql, map[string]*bintree{}},
"1660134070_add_wakuv2_store.up.sql": &bintree{_1660134070_add_wakuv2_storeUpSql, map[string]*bintree{}},
"1660134072_waku2_store_messages.up.sql": &bintree{_1660134072_waku2_store_messagesUpSql, map[string]*bintree{}},
"1662365868_add_key_uid_accounts.up.sql": &bintree{_1662365868_add_key_uid_accountsUpSql, map[string]*bintree{}},
"1662447680_add_keypairs_table.up.sql": &bintree{_1662447680_add_keypairs_tableUpSql, map[string]*bintree{}},
"1662460056_move_favourites_to_saved_addresses.up.sql": &bintree{_1662460056_move_favourites_to_saved_addressesUpSql, map[string]*bintree{}},
"1662738097_add_base_fee_transaction.up.sql": &bintree{_1662738097_add_base_fee_transactionUpSql, map[string]*bintree{}},
"1662972194_add_keypairs_table.up.sql": &bintree{_1662972194_add_keypairs_tableUpSql, map[string]*bintree{}},
"1664392661_add_third_party_id_to_waku_messages.up.sql": &bintree{_1664392661_add_third_party_id_to_waku_messagesUpSql, map[string]*bintree{}},
"1664783660_add_sync_info_to_saved_addresses.up.sql": &bintree{_1664783660_add_sync_info_to_saved_addressesUpSql, map[string]*bintree{}},
"1668109917_wakunodes.up.sql": &bintree{_1668109917_wakunodesUpSql, map[string]*bintree{}},
"1670249678_display_name_to_settings_sync_clock_table.up.sql": &bintree{_1670249678_display_name_to_settings_sync_clock_tableUpSql, map[string]*bintree{}},
"1670836810_add_imported_flag_to_community_archive_hashes.up.sql": &bintree{_1670836810_add_imported_flag_to_community_archive_hashesUpSql, map[string]*bintree{}},
"1671438731_add_magnetlink_uri_to_communities_archive_info.up.sql": &bintree{_1671438731_add_magnetlink_uri_to_communities_archive_infoUpSql, map[string]*bintree{}},
"1672933930_switcher_card.up.sql": &bintree{_1672933930_switcher_cardUpSql, map[string]*bintree{}},
"1674056187_add_price_cache.up.sql": &bintree{_1674056187_add_price_cacheUpSql, map[string]*bintree{}},
"1674136690_ens_usernames.up.sql": &bintree{_1674136690_ens_usernamesUpSql, map[string]*bintree{}},
"1674232431_add_balance_history.up.sql": &bintree{_1674232431_add_balance_historyUpSql, map[string]*bintree{}},
"1676368933_keypairs_to_keycards.up.sql": &bintree{_1676368933_keypairs_to_keycardsUpSql, map[string]*bintree{}},
"1676951398_add_currency_format_cache.up.sql": &bintree{_1676951398_add_currency_format_cacheUpSql, map[string]*bintree{}},
"1676968196_keycards_add_clock_column.up.sql": &bintree{_1676968196_keycards_add_clock_columnUpSql, map[string]*bintree{}},
"1676968197_add_fallback_rpc_to_networks.up.sql": &bintree{_1676968197_add_fallback_rpc_to_networksUpSql, map[string]*bintree{}},
"1677674090_add_chains_ens_istest_to_saved_addresses.up.sql": &bintree{_1677674090_add_chains_ens_istest_to_saved_addressesUpSql, map[string]*bintree{}},
"1677681143_accounts_table_type_column_update.up.sql": &bintree{_1677681143_accounts_table_type_column_updateUpSql, map[string]*bintree{}},
"1678264207_accounts_table_new_columns_added.up.sql": &bintree{_1678264207_accounts_table_new_columns_addedUpSql, map[string]*bintree{}},
"1680770368_add_bio_to_settings_sync_clock_table.up.sql": &bintree{_1680770368_add_bio_to_settings_sync_clock_tableUpSql, map[string]*bintree{}},
"1681110436_add_mnemonic_to_settings_sync_clock_table.up.sql": &bintree{_1681110436_add_mnemonic_to_settings_sync_clock_tableUpSql, map[string]*bintree{}},
"1681392602_9d_sync_period.up.sql": &bintree{_1681392602_9d_sync_periodUpSql, map[string]*bintree{}},
"1681762078_default_sync_period_9d.up.sql": &bintree{_1681762078_default_sync_period_9dUpSql, map[string]*bintree{}},
"1681780680_add_clock_to_social_links_settings.up.sql": &bintree{_1681780680_add_clock_to_social_links_settingsUpSql, map[string]*bintree{}},
"1682073779_settings_table_remove_latest_derived_path_column.up.sql": &bintree{_1682073779_settings_table_remove_latest_derived_path_columnUpSql, map[string]*bintree{}},
"1682146075_add_created_at_to_saved_addresses.up.sql": &bintree{_1682146075_add_created_at_to_saved_addressesUpSql, map[string]*bintree{}},
"1682393575_sync_ens_name.up.sql": &bintree{_1682393575_sync_ens_nameUpSql, map[string]*bintree{}},
"1683457503_add_blocks_ranges_sequential_table.up.sql": &bintree{_1683457503_add_blocks_ranges_sequential_tableUpSql, map[string]*bintree{}},
"1683627613_accounts_and_keycards_improvements.up.sql": &bintree{_1683627613_accounts_and_keycards_improvementsUpSql, map[string]*bintree{}},
"1685041348_settings_table_add_latest_derived_path_column.up.sql": &bintree{_1685041348_settings_table_add_latest_derived_path_columnUpSql, map[string]*bintree{}},
"1685440989_update_color_id_accounts.up.sql": &bintree{_1685440989_update_color_id_accountsUpSql, map[string]*bintree{}},
"1685463947_add_to_asset_to_multitransaction.up.sql": &bintree{_1685463947_add_to_asset_to_multitransactionUpSql, map[string]*bintree{}},
"1685880973_add_profile_links_settings_table.up.sql": &bintree{_1685880973_add_profile_links_settings_tableUpSql, map[string]*bintree{}},
"doc.go": &bintree{docGo, map[string]*bintree{}},
}}
// RestoreAsset restores an asset under the given directory.
@ -1740,7 +1825,7 @@ func RestoreAsset(dir, name string) error {
if err != nil {
return err
}
err = os.WriteFile(_filePath(dir, name), data, info.Mode())
err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode())
if err != nil {
return err
}

View File

@ -0,0 +1,30 @@
-- Create new table where we will store profile social links,
-- after discussion https://github.com/status-im/status-go/pull/3552#issuecomment-1573817044
-- we decided to replace the entire db table content on every change (because of that position column is not needed)
CREATE TABLE IF NOT EXISTS profile_social_links (
text VARCHAR NOT NULL CHECK (length(trim(text)) > 0),
url VARCHAR NOT NULL CHECK (length(trim(url)) > 0),
PRIMARY KEY (text, url)
);
-- Create new column to keep clock of the last change of profile social links (since content is replaced all row share the same clock value)
ALTER TABLE settings_sync_clock ADD COLUMN social_links INTEGER NOT NULL DEFAULT 0;
-- Insert into `profile_social_links` table
INSERT INTO profile_social_links (text, url)
SELECT link_text, link_url
FROM social_links_settings
WHERE link_url != "";
-- From some reason the following sql doesn't work through status-go migrations, although the query is correct.
-- -- Set the clock for profile social links
-- UPDATE settings_sync_clock
-- SET
-- social_links = (SELECT clock
-- FROM social_links_settings
-- WHERE link_url != ""
-- LIMIT 1)
-- WHERE synthetic_id = "id";
-- Drop old table
DROP TABLE social_links_settings;

View File

@ -8,6 +8,14 @@ import (
"github.com/status-im/status-go/protocol/identity"
)
const (
MaxNumOfSocialLinks = 20
)
var (
ErrNilSocialLinkProvided = errors.New("social links, nil object provided")
)
type SocialLinksSettings struct {
db *sql.DB
}
@ -18,68 +26,60 @@ func NewSocialLinksSettings(db *sql.DB) *SocialLinksSettings {
}
}
func (s *SocialLinksSettings) GetSocialLink(text string) (*identity.SocialLink, error) {
rows, err := s.db.Query(`SELECT link_text, link_url, clock FROM social_links_settings WHERE link_text = ?`, text)
func (s *SocialLinksSettings) getSocialLinksClock(tx *sql.Tx) (result uint64, err error) {
query := "SELECT social_links FROM settings_sync_clock WHERE synthetic_id = 'id'"
if tx == nil {
err = s.db.QueryRow(query).Scan(&result)
} else {
err = tx.QueryRow(query).Scan(&result)
}
return result, err
}
func (s *SocialLinksSettings) getSocialLinks(tx *sql.Tx) (identity.SocialLinks, error) {
var (
rows *sql.Rows
err error
)
query := "SELECT * FROM profile_social_links"
if tx == nil {
rows, err = s.db.Query(query)
} else {
rows, err = tx.Query(query)
}
if err != nil {
return nil, err
}
defer rows.Close()
if rows.Next() {
link := identity.SocialLink{}
var url sql.NullString
err = rows.Scan(
&link.Text, &url, &link.Clock,
)
var socialLinks identity.SocialLinks
for rows.Next() {
socialLink := &identity.SocialLink{}
err := rows.Scan(&socialLink.Text, &socialLink.URL)
if err != nil {
return nil, err
}
if url.Valid {
link.URL = url.String
}
return &link, nil
socialLinks = append(socialLinks, socialLink)
}
return nil, nil
err = rows.Err()
if err != nil {
return nil, err
}
return socialLinks, nil
}
func (s *SocialLinksSettings) GetSocialLinks() (identity.SocialLinks, error) {
rows, err := s.db.Query(`SELECT link_text, link_url, clock FROM social_links_settings`)
if err != nil {
return nil, err
}
defer rows.Close()
links := identity.SocialLinks{}
for rows.Next() {
link := identity.SocialLink{}
var url sql.NullString
err := rows.Scan(
&link.Text, &url, &link.Clock,
)
if err != nil {
return nil, err
}
if url.Valid {
link.URL = url.String
}
links = append(links, link)
}
return links, nil
return s.getSocialLinks(nil)
}
// Be careful, it removes every row before insertion
func (s *SocialLinksSettings) SetSocialLinks(links *identity.SocialLinks) (err error) {
if links == nil {
return errors.New("can't set social links, nil object provided")
}
func (s *SocialLinksSettings) GetSocialLinksClock() (result uint64, err error) {
return s.getSocialLinksClock(nil)
}
func (s *SocialLinksSettings) AddOrReplaceSocialLinksIfNewer(links identity.SocialLinks, clock uint64) error {
tx, err := s.db.BeginTx(context.Background(), &sql.TxOptions{})
if err != nil {
return err
@ -89,57 +89,53 @@ func (s *SocialLinksSettings) SetSocialLinks(links *identity.SocialLinks) (err e
err = tx.Commit()
return
}
// don't shadow original error
_ = tx.Rollback()
}()
// remove everything
_, err = tx.Exec(`DELETE from social_links_settings`)
dbClock, err := s.getSocialLinksClock(tx)
if err != nil {
return err
}
stmt, err := tx.Prepare("INSERT INTO social_links_settings (link_text, link_url, clock) VALUES (?, ?, ?)")
if dbClock > clock {
return nil
}
dbLinks, err := s.getSocialLinks(tx)
if err != nil {
return err
}
if len(dbLinks) > 0 {
_, err = tx.Exec("DELETE from profile_social_links")
if err != nil {
return err
}
}
stmt, err := tx.Prepare("INSERT INTO profile_social_links (text, url) VALUES (?, ?)")
if err != nil {
return err
}
defer stmt.Close()
for _, link := range *links {
for _, link := range links {
if link == nil {
return ErrNilSocialLinkProvided
}
_, err = stmt.Exec(
link.Text,
link.URL,
link.Clock,
)
if err != nil {
return err
}
}
return nil
}
stmt, err = tx.Prepare("UPDATE settings_sync_clock SET social_links = ? WHERE synthetic_id = 'id'")
if err != nil {
return err
}
func (s *SocialLinksSettings) UpdateSocialLinkFromSync(link *identity.SocialLink) error {
if link == nil {
return errors.New("can't update social link, nil object provided")
}
tx, err := s.db.BeginTx(context.Background(), &sql.TxOptions{})
if err != nil {
return err
}
defer func() {
if err == nil {
err = tx.Commit()
return
}
// don't shadow original error
_ = tx.Rollback()
}()
stmt, err := tx.Prepare("UPDATE social_links_settings SET link_text = ?, link_url = ?, clock = ? WHERE link_text = ? AND clock < ?")
if err != nil {
return err
}
_, err = stmt.Exec(link.Text, link.URL, link.Clock, link.Text, link.Clock)
if err != nil {
return err
}
return stmt.Close()
_, err = stmt.Exec(clock)
return err
}

View File

@ -27,91 +27,207 @@ func openTestDB(t *testing.T) (*SocialLinksSettings, func()) {
}
}
func socialLinksWithDefaults(twitter, personalSite, github, youtube, discord, telegram string) identity.SocialLinks {
func profileSocialLinks() identity.SocialLinks {
return identity.SocialLinks{
{
Text: identity.TwitterID,
URL: twitter,
URL: "https://twitter.com/ethstatus",
},
{
Text: identity.PersonalSiteID,
URL: personalSite,
},
{
Text: identity.GithubID,
URL: github,
},
{
Text: identity.YoutubeID,
URL: youtube,
},
{
Text: identity.DiscordID,
URL: discord,
},
{
Text: identity.TelegramID,
URL: telegram,
},
}
}
func TestDatabase(t *testing.T) {
socialLinkSettings, stop := openTestDB(t)
defer stop()
// fresh database should have default rows
links, err := socialLinkSettings.GetSocialLinks()
require.NoError(t, err)
require.True(t, links.Equals(socialLinksWithDefaults("", "", "", "", "", "")))
// cleaning db should not remove default rows
links = identity.SocialLinks{}
err = socialLinkSettings.SetSocialLinks(&links)
require.NoError(t, err)
links, err = socialLinkSettings.GetSocialLinks()
require.NoError(t, err)
require.True(t, links.Equals(identity.SocialLinks{}))
// custom links
links = identity.SocialLinks{
{
Text: identity.TwitterID,
URL: "Status_ico",
URL: "https://twitter.com/StatusIMBlog",
},
{
Text: identity.TelegramID,
URL: "dummy.telegram",
},
{
Text: identity.YoutubeID,
URL: "https://www.youtube.com/@Statusim",
},
{
Text: identity.YoutubeID,
URL: "https://www.youtube.com/@EthereumProtocol",
},
{
Text: "customLink",
URL: "customLink.com",
},
}
err = socialLinkSettings.SetSocialLinks(&links)
require.NoError(t, err)
expected := identity.SocialLinks{
{
Text: identity.TwitterID,
URL: "Status_ico",
},
{
Text: identity.TelegramID,
URL: "dummy.telegram",
},
}
expected = append(expected, identity.SocialLink{Text: "customLink", URL: "customLink.com"})
links, err = socialLinkSettings.GetSocialLinks()
require.NoError(t, err)
require.True(t, links.Equals(expected))
// cleaning database with defaults should remove custom links
links = socialLinksWithDefaults("", "", "", "", "", "")
err = socialLinkSettings.SetSocialLinks(&links)
require.NoError(t, err)
links, err = socialLinkSettings.GetSocialLinks()
require.NoError(t, err)
require.True(t, links.Equals(socialLinksWithDefaults("", "", "", "", "", "")))
}
func TestProfileSocialLinksSaveAndGet(t *testing.T) {
socialLinkSettings, stop := openTestDB(t)
defer stop()
// db is empty at the beginning
links, err := socialLinkSettings.GetSocialLinks()
require.NoError(t, err)
require.Len(t, links, 0)
clock := uint64(1)
// add profile social links with new clock
profileSocialLinks1 := profileSocialLinks()[:2]
err = socialLinkSettings.AddOrReplaceSocialLinksIfNewer(profileSocialLinks1, clock)
require.NoError(t, err)
// check social links
links, err = socialLinkSettings.GetSocialLinks()
require.NoError(t, err)
require.Len(t, links, len(profileSocialLinks1))
require.True(t, profileSocialLinks1.Equal(links))
oldClock := uint64(0)
// delete add profile social links with old clock
profileSocialLinks2 := profileSocialLinks()
err = socialLinkSettings.AddOrReplaceSocialLinksIfNewer(profileSocialLinks2, oldClock)
require.NoError(t, err)
// check social links
links, err = socialLinkSettings.GetSocialLinks()
require.NoError(t, err)
require.Len(t, links, len(profileSocialLinks1))
require.True(t, profileSocialLinks1.Equal(links))
// check clock
dbClock, err := socialLinkSettings.GetSocialLinksClock()
require.NoError(t, err)
require.Equal(t, clock, dbClock)
}
func TestProfileSocialLinksUpdate(t *testing.T) {
socialLinkSettings, stop := openTestDB(t)
defer stop()
// db is empty at the beginning
links, err := socialLinkSettings.GetSocialLinks()
require.NoError(t, err)
require.Len(t, links, 0)
clock := uint64(1)
// add profile social links
profileSocialLinks := profileSocialLinks()
err = socialLinkSettings.AddOrReplaceSocialLinksIfNewer(profileSocialLinks, clock)
require.NoError(t, err)
clock = 2
// test sociial link update
updateLinkAtIndex := 2
profileSocialLinks[updateLinkAtIndex].Text = identity.GithubID
profileSocialLinks[updateLinkAtIndex].URL = "https://github.com/status-im"
err = socialLinkSettings.AddOrReplaceSocialLinksIfNewer(profileSocialLinks, clock)
require.NoError(t, err)
// check social links
links, err = socialLinkSettings.GetSocialLinks()
require.NoError(t, err)
require.Len(t, links, len(profileSocialLinks))
require.True(t, profileSocialLinks.Equal(links))
// check clock
dbClock, err := socialLinkSettings.GetSocialLinksClock()
require.NoError(t, err)
require.Equal(t, clock, dbClock)
}
func TestProfileSocialLinksDelete(t *testing.T) {
socialLinkSettings, stop := openTestDB(t)
defer stop()
// db is empty at the beginning
links, err := socialLinkSettings.GetSocialLinks()
require.NoError(t, err)
require.Len(t, links, 0)
clock := uint64(1)
// add profile social links
profileSocialLinks := profileSocialLinks()
totalLinks := len(profileSocialLinks)
err = socialLinkSettings.AddOrReplaceSocialLinksIfNewer(profileSocialLinks, clock)
require.NoError(t, err)
// check
links, err = socialLinkSettings.GetSocialLinks()
require.NoError(t, err)
require.Len(t, links, totalLinks)
require.True(t, profileSocialLinks.Equal(links))
// prepare new links to save
removeLinkAtIndex := 2
removedLink := profileSocialLinks[removeLinkAtIndex]
profileSocialLinks = append(profileSocialLinks[:removeLinkAtIndex], profileSocialLinks[removeLinkAtIndex+1:]...)
oldClock := uint64(0)
// test delete with old clock
err = socialLinkSettings.AddOrReplaceSocialLinksIfNewer(profileSocialLinks, oldClock)
require.NoError(t, err)
// check
links, err = socialLinkSettings.GetSocialLinks()
require.NoError(t, err)
require.Len(t, links, totalLinks)
require.True(t, links.Contains(removedLink))
clock = 2
// test delete link new clock
err = socialLinkSettings.AddOrReplaceSocialLinksIfNewer(profileSocialLinks, clock)
require.NoError(t, err)
// check social links
links, err = socialLinkSettings.GetSocialLinks()
require.NoError(t, err)
require.Len(t, links, totalLinks-1)
require.True(t, profileSocialLinks.Equal(links))
require.False(t, links.Contains(removedLink))
// check clock
dbClock, err := socialLinkSettings.GetSocialLinksClock()
require.NoError(t, err)
require.Equal(t, clock, dbClock)
}
func TestProfileSocialLinksReorder(t *testing.T) {
socialLinkSettings, stop := openTestDB(t)
defer stop()
// db is empty at the beginning
links, err := socialLinkSettings.GetSocialLinks()
require.NoError(t, err)
require.Len(t, links, 0)
clock := uint64(1)
// add profile social links
profileSocialLinks := profileSocialLinks()
totalLinks := len(profileSocialLinks)
err = socialLinkSettings.AddOrReplaceSocialLinksIfNewer(profileSocialLinks, clock)
require.NoError(t, err)
// check social links
links, err = socialLinkSettings.GetSocialLinks()
require.NoError(t, err)
require.Len(t, links, len(profileSocialLinks))
require.True(t, profileSocialLinks.Equal(links))
var randomLinksOrder identity.SocialLinks
for i := len(profileSocialLinks) - 1; i >= 3; i-- {
randomLinksOrder = append(randomLinksOrder, profileSocialLinks[i])
}
randomLinksOrder = append(randomLinksOrder, profileSocialLinks[:3]...)
clock = 2
// test reorder links
err = socialLinkSettings.AddOrReplaceSocialLinksIfNewer(randomLinksOrder, clock)
require.NoError(t, err)
// check social links
links, err = socialLinkSettings.GetSocialLinks()
require.NoError(t, err)
require.Len(t, randomLinksOrder, totalLinks)
require.True(t, randomLinksOrder.Equal(links))
// check clock
dbClock, err := socialLinkSettings.GetSocialLinksClock()
require.NoError(t, err)
require.Equal(t, clock, dbClock)
}

View File

@ -2,7 +2,6 @@ package identity
import (
"encoding/json"
"reflect"
"github.com/status-im/status-go/protocol/protobuf"
)
@ -18,33 +17,79 @@ const (
)
type SocialLink struct {
Text string `json:"text"`
URL string `json:"url"`
Clock uint64 `json:"clock"`
Text string `json:"text"`
URL string `json:"url"`
}
type SocialLinks []SocialLink
type SocialLinks []*SocialLink
func NewSocialLinks(links []*protobuf.SocialLink) *SocialLinks {
type SocialLinksInfo struct {
Links []*SocialLink `json:"links"`
Removed bool `json:"removed"`
}
func NewSocialLinks(links []*protobuf.SocialLink) SocialLinks {
res := SocialLinks{}
for _, link := range links {
res = append(res, SocialLink{Text: link.Text, URL: link.Url})
res = append(res, &SocialLink{Text: link.Text, URL: link.Url})
}
return &res
return res
}
func (s *SocialLink) ToProtobuf() *protobuf.SocialLink {
return &protobuf.SocialLink{
Text: s.Text,
Url: s.URL,
}
}
func (s *SocialLink) Equal(link *SocialLink) bool {
return s.Text == link.Text && s.URL == link.URL
}
func (s *SocialLinks) ToProtobuf() []*protobuf.SocialLink {
res := []*protobuf.SocialLink{}
for _, link := range *s {
res = append(res, &protobuf.SocialLink{Text: link.Text, Url: link.URL})
res = append(res, link.ToProtobuf())
}
return res
}
func (s SocialLinks) Equals(rhs SocialLinks) bool {
return reflect.DeepEqual(s, rhs)
func (s *SocialLinks) ToSyncProtobuf(clock uint64) *protobuf.SyncSocialLinks {
res := &protobuf.SyncSocialLinks{
Clock: clock,
}
for _, link := range *s {
res.SocialLinks = append(res.SocialLinks, link.ToProtobuf())
}
return res
}
// Equal means the same links at the same order
func (s *SocialLinks) Equal(links SocialLinks) bool {
if len(*s) != len(links) {
return false
}
for i := range *s {
if !(*s)[i].Equal(links[i]) {
return false
}
}
return true
}
func (s *SocialLinks) Contains(link *SocialLink) bool {
if len(*s) == 0 {
return false
}
for _, l := range *s {
if l.Equal(link) {
return true
}
}
return false
}
func (s *SocialLinks) Serialize() ([]byte, error) {
return json.Marshal(s)
return json.Marshal(*s)
}

View File

@ -22,10 +22,10 @@ func TestEquals(t *testing.T) {
protobufLinks := []*protobuf.SocialLink{}
transformedLinks := NewSocialLinks(protobufLinks)
require.False(t, socialLinks.Equals(*transformedLinks))
require.False(t, socialLinks.Equal(transformedLinks))
protobufLinks = append(protobufLinks, &protobuf.SocialLink{Text: "A", Url: "B"})
protobufLinks = append(protobufLinks, &protobuf.SocialLink{Text: "X", Url: "Y"})
transformedLinks = NewSocialLinks(protobufLinks)
require.True(t, socialLinks.Equals(*transformedLinks))
require.True(t, socialLinks.Equal(transformedLinks))
}

View File

@ -973,7 +973,7 @@ func (m *Messenger) attachChatIdentity(cca *protobuf.ContactCodeAdvertisement) e
return err
}
identityHash, err := m.getIdentityHash(displayName, bio, img, &socialLinks)
identityHash, err := m.getIdentityHash(displayName, bio, img, socialLinks)
if err != nil {
return err
}
@ -1053,7 +1053,7 @@ func (m *Messenger) handleStandaloneChatIdentity(chat *Chat) error {
return err
}
identityHash, err := m.getIdentityHash(displayName, bio, img, &socialLinks)
identityHash, err := m.getIdentityHash(displayName, bio, img, socialLinks)
if err != nil {
return err
}
@ -1066,7 +1066,7 @@ func (m *Messenger) handleStandaloneChatIdentity(chat *Chat) error {
return nil
}
func (m *Messenger) getIdentityHash(displayName, bio string, img *images.IdentityImage, socialLinks *identity.SocialLinks) ([]byte, error) {
func (m *Messenger) getIdentityHash(displayName, bio string, img *images.IdentityImage, socialLinks identity.SocialLinks) ([]byte, error) {
socialLinksData, err := socialLinks.Serialize()
if err != nil {
return []byte{}, err
@ -1113,7 +1113,7 @@ func (m *Messenger) shouldPublishChatIdentity(chatID string) (bool, error) {
return false, err
}
identityHash, err := m.getIdentityHash(displayName, bio, img, &socialLinks)
identityHash, err := m.getIdentityHash(displayName, bio, img, socialLinks)
if err != nil {
return false, err
}
@ -2514,7 +2514,7 @@ func (m *Messenger) SyncDevices(ctx context.Context, ensName, photoPath string,
return err
}
return m.syncSocialSettings(ctx, rawMessageHandler)
return m.syncSocialLinks(context.Background(), rawMessageHandler)
}
func (m *Messenger) syncContactRequestDecision(ctx context.Context, requestID string, accepted bool, rawMessageHandler RawMessageHandler) error {
@ -4246,17 +4246,17 @@ func (m *Messenger) handleRetrievedMessages(chatWithMessages map[transport.Filte
allMessagesProcessed = false
continue
}
case protobuf.SyncSocialLinkSetting:
case protobuf.SyncSocialLinks:
if !common.IsPubKeyEqual(messageState.CurrentMessageState.PublicKey, &m.identity.PublicKey) {
logger.Warn("not coming from us, ignoring")
continue
}
p := msg.ParsedMessage.Interface().(protobuf.SyncSocialLinkSetting)
p := msg.ParsedMessage.Interface().(protobuf.SyncSocialLinks)
m.outputToCSV(msg.TransportMessage.Timestamp, msg.ID, senderID, filter.Topic, filter.ChatID, msg.Type, p)
err = m.HandleSyncSocialLinkSetting(messageState, p)
err = m.HandleSyncSocialLinks(messageState, p)
if err != nil {
logger.Warn("failed to handle SyncSocialLinkSetting", zap.Error(err))
logger.Warn("failed to handle HandleSyncSocialLinks", zap.Error(err))
allMessagesProcessed = false
continue
}
@ -6284,62 +6284,74 @@ func (m *Messenger) syncDeleteForMeMessage(ctx context.Context, rawMessageDispat
})
}
func (m *Messenger) syncSocialSettings(ctx context.Context, rawMessageDispatcher RawMessageHandler) error {
func (m *Messenger) syncSocialLinks(ctx context.Context, rawMessageDispatcher RawMessageHandler) error {
if !m.hasPairedDevices() {
return nil
}
socialLinks, err := m.settings.GetSocialLinks()
dbSocialLinks, err := m.settings.GetSocialLinks()
if err != nil {
return err
}
for _, link := range socialLinks {
syncMessage := &protobuf.SyncSocialLinkSetting{
Text: link.Text,
Url: link.URL,
Clock: link.Clock,
}
encodedMessage, err2 := proto.Marshal(syncMessage)
if err2 != nil {
return err
}
err = m.withChatClock(func(chatID string, clock uint64) error {
rawMessage := common.RawMessage{
LocalChatID: chatID,
Payload: encodedMessage,
MessageType: protobuf.ApplicationMetadataMessage_SYNC_SOCIAL_LINK_SETTING,
ResendAutomatically: true,
}
_, err = rawMessageDispatcher(ctx, rawMessage)
return err
})
if err != nil {
return err
}
dbClock, err := m.settings.GetSocialLinksClock()
if err != nil {
return err
}
return nil
_, chat := m.getLastClockWithRelatedChat()
encodedMessage, err := proto.Marshal(dbSocialLinks.ToSyncProtobuf(dbClock))
if err != nil {
return err
}
rawMessage := common.RawMessage{
LocalChatID: chat.ID,
Payload: encodedMessage,
MessageType: protobuf.ApplicationMetadataMessage_SYNC_SOCIAL_LINKS,
ResendAutomatically: true,
}
_, err = rawMessageDispatcher(ctx, rawMessage)
return err
}
func (m *Messenger) HandleSyncSocialLinkSetting(state *ReceivedMessageState, message protobuf.SyncSocialLinkSetting) error {
return m.handleSyncSocialLinkSetting(message, func(link *identity.SocialLink) {
state.Response.AddSocialLinkSetting(link)
func (m *Messenger) HandleSyncSocialLinks(state *ReceivedMessageState, message protobuf.SyncSocialLinks) error {
return m.handleSyncSocialLinks(&message, func(links identity.SocialLinks) {
state.Response.SocialLinksInfo = &identity.SocialLinksInfo{
Links: links,
Removed: len(links) == 0,
}
})
}
func (m *Messenger) handleSyncSocialLinkSetting(message protobuf.SyncSocialLinkSetting, callback func(*identity.SocialLink)) error {
link := &identity.SocialLink{
Text: message.Text,
URL: message.Url,
Clock: message.Clock,
func (m *Messenger) handleSyncSocialLinks(message *protobuf.SyncSocialLinks, callback func(identity.SocialLinks)) error {
if message == nil {
return nil
}
if err := ValidateSocialLink(link); err != nil {
return err
var (
links identity.SocialLinks
err error
)
for _, sl := range message.SocialLinks {
link := &identity.SocialLink{
Text: sl.Text,
URL: sl.Url,
}
err = ValidateSocialLink(link)
if err != nil {
return err
}
links = append(links, link)
}
err := m.settings.UpdateSocialLinkFromSync(link)
err = m.settings.AddOrReplaceSocialLinksIfNewer(links, message.Clock)
if err != nil {
return err
}
callback(link)
callback(links)
return nil
}

View File

@ -379,13 +379,15 @@ func (m *Messenger) backupProfile(ctx context.Context, clock uint64) ([]*protobu
if err != nil {
return nil, err
}
socialLinkSettingProtos := make([]*protobuf.SyncSocialLinkSetting, len(socialLinks))
for i, socialLink := range socialLinks {
socialLinkSettingProtos[i] = &protobuf.SyncSocialLinkSetting{
Text: socialLink.Text,
Url: socialLink.URL,
Clock: socialLink.Clock,
}
socialLinksClock, err := m.settings.GetSocialLinksClock()
if err != nil {
return nil, err
}
syncSocialLinks := &protobuf.SyncSocialLinks{
SocialLinks: socialLinks.ToProtobuf(),
Clock: socialLinksClock,
}
ensUsernameDetails, err := m.getEnsUsernameDetails()
@ -408,7 +410,7 @@ func (m *Messenger) backupProfile(ctx context.Context, clock uint64) ([]*protobu
DisplayName: displayName,
Pictures: pictureProtos,
DisplayNameClock: displayNameClock,
SocialLinkSettings: socialLinkSettingProtos,
SocialLinks: syncSocialLinks,
EnsUsernameDetails: ensUsernameDetailProtos,
},
}

View File

@ -146,16 +146,12 @@ func (m *Messenger) handleBackedUpProfile(message *protobuf.BackedUpProfile, bac
}
}
var links identity.SocialLinks
for _, s := range message.SocialLinkSettings {
err = m.handleSyncSocialLinkSetting(*s, func(link *identity.SocialLink) {
links = append(links, *link)
})
if err != nil {
return err
}
err = m.handleSyncSocialLinks(message.SocialLinks, func(links identity.SocialLinks) {
response.SetSocialLinks(links)
})
if err != nil {
return err
}
response.SetSocialLinks(links)
var ensUsernameDetails []*ensservice.UsernameDetail
for _, d := range message.EnsUsernameDetails {

View File

@ -163,13 +163,22 @@ func (s *MessengerBackupSuite) TestBackupProfile() {
iis := images.SampleIdentityImages()
s.Require().NoError(bob1.multiAccounts.StoreIdentityImages(bob1KeyUID, iis, false))
err = bob1.SetSocialLinks(&identity.SocialLinks{
profileSocialLinks := identity.SocialLinks{
{
Text: identity.GithubID,
URL: "https://github.com/status-im",
Clock: 1,
Text: identity.TwitterID,
URL: "https://twitter.com/ethstatus",
},
})
{
Text: identity.TwitterID,
URL: "https://twitter.com/StatusIMBlog",
},
{
Text: identity.GithubID,
URL: "https://github.com/status-im",
},
}
profileSocialLinksClock := uint64(1)
err = bob1.settings.AddOrReplaceSocialLinksIfNewer(profileSocialLinks, profileSocialLinksClock)
s.Require().NoError(err)
bob1EnsUsernameDetail, err := bob1.saveEnsUsernameDetailProto(protobuf.SyncEnsUsernameDetail{
@ -197,9 +206,13 @@ func (s *MessengerBackupSuite) TestBackupProfile() {
s.Require().NoError(err)
s.Require().Equal(imagesExpected, string(jBob1Images))
bob1SocialLink, err := bob1.settings.GetSocialLink(identity.GithubID)
bob1SocialLinks, err := bob1.settings.GetSocialLinks()
s.Require().NoError(err)
s.Require().NotNil(bob1SocialLink)
s.Require().Len(bob1SocialLinks, len(profileSocialLinks))
bob1SocialLinksClock, err := bob1.settings.GetSocialLinksClock()
s.Require().NoError(err)
s.Require().Equal(profileSocialLinksClock, bob1SocialLinksClock)
bob1EnsUsernameDetails, err := bob1.getEnsUsernameDetails()
s.Require().NoError(err)
@ -215,9 +228,13 @@ func (s *MessengerBackupSuite) TestBackupProfile() {
s.Require().NoError(err)
s.Require().Equal(expectedEmpty, bob2Images)
bob2SocialLink, err := bob2.settings.GetSocialLink(identity.GithubID)
bob2SocialLinks, err := bob2.settings.GetSocialLinks()
s.Require().NoError(err)
s.Require().Equal("", bob2SocialLink.URL)
s.Require().Len(bob2SocialLinks, 0)
bob2SocialLinksClock, err := bob2.settings.GetSocialLinksClock()
s.Require().NoError(err)
s.Require().Equal(uint64(0), bob2SocialLinksClock)
bob2EnsUsernameDetails, err := bob2.getEnsUsernameDetails()
s.Require().NoError(err)
@ -248,10 +265,14 @@ func (s *MessengerBackupSuite) TestBackupProfile() {
s.Require().Equal(bob2Images[0].Payload, bob1Images[0].Payload)
s.Require().Equal(bob2Images[1].Payload, bob1Images[1].Payload)
bob2SocialLink, err = bob2.settings.GetSocialLink(identity.GithubID)
bob2SocialLinks, err = bob2.settings.GetSocialLinks()
s.Require().NoError(err)
s.Require().NotNil(bob2SocialLink)
s.Require().Equal(bob1SocialLink.URL, bob2SocialLink.URL)
s.Require().Len(bob2SocialLinks, len(profileSocialLinks))
s.Require().True(profileSocialLinks.Equal(bob2SocialLinks))
bob2SocialLinksClock, err = bob2.settings.GetSocialLinksClock()
s.Require().NoError(err)
s.Require().Equal(profileSocialLinksClock, bob2SocialLinksClock)
bob2EnsUsernameDetails, err = bob2.getEnsUsernameDetails()
s.Require().NoError(err)

View File

@ -2698,8 +2698,8 @@ func (m *Messenger) HandleChatIdentity(state *ReceivedMessageState, ci protobuf.
return err
}
if !contact.SocialLinks.Equals(*socialLinks) {
contact.SocialLinks = *socialLinks
if !contact.SocialLinks.Equal(socialLinks) {
contact.SocialLinks = socialLinks
contactModified = true
}
}

View File

@ -9,6 +9,7 @@ import (
"strings"
"github.com/status-im/status-go/multiaccounts/settings"
sociallinkssettings "github.com/status-im/status-go/multiaccounts/settings_social_links"
"github.com/status-im/status-go/protocol/encryption/multidevice"
"github.com/status-im/status-go/protocol/identity"
"github.com/status-im/status-go/protocol/identity/alias"
@ -131,10 +132,10 @@ func (m *Messenger) SetBio(bio string) error {
return m.publishContactCode()
}
func ValidateSocialLinks(socialLinks *identity.SocialLinks) error {
for _, link := range *socialLinks {
func ValidateSocialLinks(socialLinks identity.SocialLinks) error {
for _, link := range socialLinks {
l := link
if err := ValidateSocialLink(&l); err != nil {
if err := ValidateSocialLink(l); err != nil {
return err
}
}
@ -148,33 +149,35 @@ func ValidateSocialLink(link *identity.SocialLink) error {
return nil
}
func (m *Messenger) SetSocialLinks(socialLinks *identity.SocialLinks) error {
func (m *Messenger) AddOrReplaceSocialLinks(socialLinks identity.SocialLinks) error {
if len(socialLinks) > sociallinkssettings.MaxNumOfSocialLinks {
return errors.New("exceeded maximum number of social links")
}
currentSocialLinks, err := m.settings.GetSocialLinks()
if err != nil {
return err
}
if currentSocialLinks.Equals(*socialLinks) {
if currentSocialLinks.Equal(socialLinks) {
return nil // Do nothing
}
if err = ValidateSocialLinks(socialLinks); err != nil {
return err
}
err = m.withChatClock(func(chatID string, clock uint64) error {
for _, link := range *socialLinks {
if link.Clock == 0 {
link.Clock = clock
}
}
return nil
})
err = ValidateSocialLinks(socialLinks)
if err != nil {
return err
}
if err = m.settings.SetSocialLinks(socialLinks); err != nil {
err = m.withChatClock(func(chatID string, clock uint64) error {
err = m.settings.AddOrReplaceSocialLinksIfNewer(socialLinks, clock)
if err != nil {
return err
}
err = m.syncSocialLinks(context.Background(), m.dispatchMessage)
return err
})
if err != nil {
return err
}
@ -182,16 +185,11 @@ func (m *Messenger) SetSocialLinks(socialLinks *identity.SocialLinks) error {
return err
}
err = m.publishContactCode()
if err != nil {
return err
}
return m.syncSocialSettings(context.Background(), m.dispatchMessage)
return m.publishContactCode()
}
func (m *Messenger) GetSocialLink(text string) (*identity.SocialLink, error) {
return m.settings.GetSocialLink(text)
func (m *Messenger) GetSocialLinks() (identity.SocialLinks, error) {
return m.settings.GetSocialLinks()
}
func (m *Messenger) setInstallationHostname() error {

View File

@ -0,0 +1,217 @@
package protocol
import (
"context"
"crypto/ecdsa"
"errors"
"testing"
gethbridge "github.com/status-im/status-go/eth-node/bridge/geth"
"github.com/status-im/status-go/eth-node/crypto"
"github.com/status-im/status-go/protocol/encryption/multidevice"
"github.com/status-im/status-go/protocol/identity"
"github.com/status-im/status-go/protocol/tt"
"github.com/status-im/status-go/waku"
"github.com/stretchr/testify/suite"
"go.uber.org/zap"
"github.com/status-im/status-go/eth-node/types"
)
func TestMessengerSocialLinksHandlerSuite(t *testing.T) {
suite.Run(t, new(MessengerSocialLinksHandlerSuite))
}
type MessengerSocialLinksHandlerSuite struct {
suite.Suite
m *Messenger // main instance of Messenger
privateKey *ecdsa.PrivateKey // private key for the main instance of Messenger
// If one wants to send messages between different instances of Messenger,
// a single Waku service should be shared.
shh types.Waku
logger *zap.Logger
}
func (s *MessengerSocialLinksHandlerSuite) SetupTest() {
s.logger = tt.MustCreateTestLogger()
config := waku.DefaultConfig
config.MinimumAcceptedPoW = 0
shh := waku.New(&config, s.logger)
s.shh = gethbridge.NewGethWakuWrapper(shh)
s.Require().NoError(shh.Start())
s.m = s.newMessenger(s.shh)
s.privateKey = s.m.identity
// We start the messenger in order to receive installations
_, err := s.m.Start()
s.Require().NoError(err)
}
func (s *MessengerSocialLinksHandlerSuite) TearDownTest() {
s.Require().NoError(s.m.Shutdown())
}
func (s *MessengerSocialLinksHandlerSuite) newMessenger(shh types.Waku) *Messenger {
privateKey, err := crypto.GenerateKey()
s.Require().NoError(err)
messenger, err := newMessengerWithKey(s.shh, privateKey, s.logger, nil)
s.Require().NoError(err)
return messenger
}
func profileSocialLinks() identity.SocialLinks {
return identity.SocialLinks{
{
Text: identity.TwitterID,
URL: "https://twitter.com/ethstatus",
},
{
Text: identity.TwitterID,
URL: "https://twitter.com/StatusIMBlog",
},
{
Text: identity.TelegramID,
URL: "dummy.telegram",
},
{
Text: identity.YoutubeID,
URL: "https://www.youtube.com/@Statusim",
},
{
Text: identity.YoutubeID,
URL: "https://www.youtube.com/@EthereumProtocol",
},
{
Text: "customLink",
URL: "customLink.com",
},
}
}
func (s *MessengerSocialLinksHandlerSuite) TestSocialLinks() {
// db is empty for alice
links, err := s.m.settings.GetSocialLinks()
s.Require().NoError(err)
s.Require().Len(links, 0)
// Create new device
alicesOtherDevice, err := newMessengerWithKey(s.shh, s.m.identity, s.logger, nil)
s.Require().NoError(err)
// db is empty for alice's other device
links, err = alicesOtherDevice.settings.GetSocialLinks()
s.Require().NoError(err)
s.Require().Len(links, 0)
// Pair devices
im1 := &multidevice.InstallationMetadata{
Name: "alice's-other-device",
DeviceType: "alice's-other-device-type",
}
err = alicesOtherDevice.SetInstallationMetadata(alicesOtherDevice.installationID, im1)
s.Require().NoError(err)
response, err := alicesOtherDevice.SendPairInstallation(context.Background(), nil)
s.Require().NoError(err)
s.Require().NotNil(response)
s.Require().Len(response.Chats(), 1)
s.Require().False(response.Chats()[0].Active)
// Wait for the message to reach its destination
response, err = WaitOnMessengerResponse(
s.m,
func(r *MessengerResponse) bool { return len(r.Installations) > 0 },
"installation not received",
)
s.Require().NoError(err)
actualInstallation := response.Installations[0]
s.Require().Equal(alicesOtherDevice.installationID, actualInstallation.ID)
s.Require().NotNil(actualInstallation.InstallationMetadata)
s.Require().Equal("alice's-other-device", actualInstallation.InstallationMetadata.Name)
s.Require().Equal("alice's-other-device-type", actualInstallation.InstallationMetadata.DeviceType)
err = s.m.EnableInstallation(alicesOtherDevice.installationID)
s.Require().NoError(err)
// Set social links on alice's device
profileSocialLinks := profileSocialLinks()
err = s.m.AddOrReplaceSocialLinks(profileSocialLinks)
s.Require().NoError(err)
err = tt.RetryWithBackOff(func() error {
response, err := alicesOtherDevice.RetrieveAll()
if err != nil {
return err
}
if response.SocialLinksInfo == nil ||
len(response.SocialLinksInfo.Links) != len(profileSocialLinks) {
return errors.New("no sync data received")
}
return nil
})
s.Require().NoError(err)
// Check social links on alice's other device
links, err = alicesOtherDevice.settings.GetSocialLinks()
s.Require().NoError(err)
s.Require().Len(links, len(profileSocialLinks))
// Delete some social links on alice's device
removeLinkAtIndex := 2
removedLink := profileSocialLinks[removeLinkAtIndex]
profileSocialLinks = append(profileSocialLinks[:removeLinkAtIndex], profileSocialLinks[removeLinkAtIndex+1:]...)
err = s.m.AddOrReplaceSocialLinks(profileSocialLinks)
s.Require().NoError(err)
err = tt.RetryWithBackOff(func() error {
response, err := alicesOtherDevice.RetrieveAll()
if err != nil {
return err
}
if response.SocialLinksInfo == nil ||
len(response.SocialLinksInfo.Links) != len(profileSocialLinks) {
return errors.New("no sync data received")
}
return nil
})
s.Require().NoError(err)
// Check social links on alice's other device
links, err = alicesOtherDevice.settings.GetSocialLinks()
s.Require().NoError(err)
s.Require().Len(links, len(profileSocialLinks))
s.Require().False(links.Contains(removedLink))
// Delete all social links on alice's device
profileSocialLinks = identity.SocialLinks{}
err = s.m.AddOrReplaceSocialLinks(profileSocialLinks)
s.Require().NoError(err)
err = tt.RetryWithBackOff(func() error {
response, err := alicesOtherDevice.RetrieveAll()
if err != nil {
return err
}
if response.SocialLinksInfo == nil ||
!response.SocialLinksInfo.Removed {
return errors.New("no sync data received")
}
return nil
})
s.Require().NoError(err)
// Check social links on alice's other device
links, err = alicesOtherDevice.settings.GetSocialLinks()
s.Require().NoError(err)
s.Require().Len(links, 0)
}

View File

@ -5,8 +5,6 @@ import (
ensservice "github.com/status-im/status-go/services/ens"
"github.com/status-im/status-go/protocol/identity"
"github.com/status-im/status-go/services/browsers"
"github.com/status-im/status-go/services/wallet"
@ -18,6 +16,7 @@ import (
"github.com/status-im/status-go/protocol/communities"
"github.com/status-im/status-go/protocol/discord"
"github.com/status-im/status-go/protocol/encryption/multidevice"
"github.com/status-im/status-go/protocol/identity"
"github.com/status-im/status-go/protocol/protobuf"
"github.com/status-im/status-go/protocol/verification"
localnotifications "github.com/status-im/status-go/services/local-notifications"
@ -77,7 +76,7 @@ type MessengerResponse struct {
savedAddresses map[string]*wallet.SavedAddress
Keycards []*accounts.Keycard
keycardActions []*accounts.KeycardAction
socialLinkSettings []*identity.SocialLink
SocialLinksInfo *identity.SocialLinksInfo
ensUsernameDetails []*ensservice.UsernameDetail
}
@ -120,7 +119,7 @@ func (r *MessengerResponse) MarshalJSON() ([]byte, error) {
SavedAddresses []*wallet.SavedAddress `json:"savedAddresses,omitempty"`
Keycards []*accounts.Keycard `json:"keycards,omitempty"`
KeycardActions []*accounts.KeycardAction `json:"keycardActions,omitempty"`
SocialLinkSettings []*identity.SocialLink `json:"socialLinkSettings,omitempty"`
SocialLinksInfo *identity.SocialLinksInfo `json:"socialLinksInfo,omitempty"`
EnsUsernameDetails []*ensservice.UsernameDetail `json:"ensUsernameDetails,omitempty"`
}{
Contacts: r.Contacts,
@ -156,7 +155,7 @@ func (r *MessengerResponse) MarshalJSON() ([]byte, error) {
DiscordOldestMessageTimestamp: r.DiscordOldestMessageTimestamp,
Keycards: r.Keycards,
KeycardActions: r.KeycardActions(),
SocialLinkSettings: r.SocialLinkSettings(),
SocialLinksInfo: r.SocialLinksInfo,
EnsUsernameDetails: r.EnsUsernameDetails(),
}
@ -285,10 +284,10 @@ func (r *MessengerResponse) IsEmpty() bool {
len(r.savedAddresses)+
len(r.Keycards)+
len(r.keycardActions) == 0 &&
len(r.socialLinkSettings) == 0 &&
len(r.ensUsernameDetails) == 0 &&
r.currentStatus == nil &&
r.activityCenterState == nil
r.activityCenterState == nil &&
r.SocialLinksInfo == nil
}
// Merge takes another response and appends the new Chats & new Messages and replaces
@ -319,7 +318,6 @@ func (r *MessengerResponse) Merge(response *MessengerResponse) error {
r.AddInstallations(response.Installations)
r.AddSavedAddresses(response.SavedAddresses())
r.AddKeycardActions(response.KeycardActions())
r.AddSocialLinkSettings(response.SocialLinkSettings())
r.AddEnsUsernameDetails(response.EnsUsernameDetails())
r.AddBookmarks(response.GetBookmarks())
r.CommunityChanges = append(r.CommunityChanges, response.CommunityChanges...)
@ -327,6 +325,7 @@ func (r *MessengerResponse) Merge(response *MessengerResponse) error {
r.Accounts = append(r.Accounts, response.Accounts...)
r.Keypairs = append(r.Keypairs, response.Keypairs...)
r.Keycards = append(r.Keycards, response.Keycards...)
r.SocialLinksInfo = response.SocialLinksInfo
return nil
}
@ -477,18 +476,6 @@ func (r *MessengerResponse) KeycardActions() []*accounts.KeycardAction {
return r.keycardActions
}
func (r *MessengerResponse) AddSocialLinkSetting(socialLinkSettings *identity.SocialLink) {
r.socialLinkSettings = append(r.socialLinkSettings, socialLinkSettings)
}
func (r *MessengerResponse) AddSocialLinkSettings(socialLinkSettings []*identity.SocialLink) {
r.socialLinkSettings = append(r.socialLinkSettings, socialLinkSettings...)
}
func (r *MessengerResponse) SocialLinkSettings() []*identity.SocialLink {
return r.socialLinkSettings
}
func (r *MessengerResponse) AddEnsUsernameDetail(detail *ensservice.UsernameDetail) {
r.ensUsernameDetails = append(r.ensUsernameDetails, detail)
}

View File

@ -226,15 +226,15 @@ func (m *Messenger) HandleSyncRawMessages(rawMessages []*protobuf.RawMessage) er
m.logger.Error("failed to handleSyncSavedAddress when HandleSyncRawMessages", zap.Error(err))
continue
}
case protobuf.ApplicationMetadataMessage_SYNC_SOCIAL_LINK_SETTING:
var message protobuf.SyncSocialLinkSetting
case protobuf.ApplicationMetadataMessage_SYNC_SOCIAL_LINKS:
var message protobuf.SyncSocialLinks
err := proto.Unmarshal(rawMessage.GetPayload(), &message)
if err != nil {
return err
}
err = m.HandleSyncSocialLinkSetting(state, message)
err = m.HandleSyncSocialLinks(state, message)
if err != nil {
m.logger.Error("failed to HandleSyncSocialLinkSetting when HandleSyncRawMessages", zap.Error(err))
m.logger.Error("failed to HandleSyncSocialLinks when HandleSyncRawMessages", zap.Error(err))
continue
}
case protobuf.ApplicationMetadataMessage_SYNC_ENS_USERNAME_DETAIL:

View File

@ -718,7 +718,7 @@ func (db sqlitePersistence) Contacts() ([]*Contact, error) {
return nil, err
}
link := identity.SocialLink{}
link := &identity.SocialLink{}
if text.Valid {
link.Text = text.String
}

View File

@ -86,7 +86,7 @@ const (
ApplicationMetadataMessage_CANCEL_CONTACT_VERIFICATION ApplicationMetadataMessage_Type = 61
ApplicationMetadataMessage_SYNC_KEYPAIR ApplicationMetadataMessage_Type = 62
ApplicationMetadataMessage_SYNC_KEYCARD_ACTION ApplicationMetadataMessage_Type = 63
ApplicationMetadataMessage_SYNC_SOCIAL_LINK_SETTING ApplicationMetadataMessage_Type = 64
ApplicationMetadataMessage_SYNC_SOCIAL_LINKS ApplicationMetadataMessage_Type = 64
ApplicationMetadataMessage_SYNC_ENS_USERNAME_DETAIL ApplicationMetadataMessage_Type = 65
ApplicationMetadataMessage_SYNC_FULL_KEYPAIR ApplicationMetadataMessage_Type = 66
)
@ -155,7 +155,7 @@ var ApplicationMetadataMessage_Type_name = map[int32]string{
61: "CANCEL_CONTACT_VERIFICATION",
62: "SYNC_KEYPAIR",
63: "SYNC_KEYCARD_ACTION",
64: "SYNC_SOCIAL_LINK_SETTING",
64: "SYNC_SOCIAL_LINKS",
65: "SYNC_ENS_USERNAME_DETAIL",
66: "SYNC_FULL_KEYPAIR",
}
@ -224,7 +224,7 @@ var ApplicationMetadataMessage_Type_value = map[string]int32{
"CANCEL_CONTACT_VERIFICATION": 61,
"SYNC_KEYPAIR": 62,
"SYNC_KEYCARD_ACTION": 63,
"SYNC_SOCIAL_LINK_SETTING": 64,
"SYNC_SOCIAL_LINKS": 64,
"SYNC_ENS_USERNAME_DETAIL": 65,
"SYNC_FULL_KEYPAIR": 66,
}
@ -306,64 +306,64 @@ func init() {
var fileDescriptor_ad09a6406fcf24c7 = []byte{
// 959 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x55, 0x6b, 0x73, 0x13, 0x37,
0x17, 0x7e, 0x03, 0x79, 0x13, 0x50, 0x6e, 0x8a, 0xc8, 0xc5, 0xb9, 0x1b, 0x43, 0x43, 0x80, 0xd6,
0xb4, 0xd0, 0x76, 0xda, 0x52, 0xda, 0xca, 0xd2, 0x89, 0x2d, 0xbc, 0x2b, 0x2d, 0x92, 0xd6, 0x1d,
0xf7, 0x8b, 0xc6, 0x14, 0x97, 0xc9, 0x0c, 0x10, 0x0f, 0x31, 0x1f, 0xf2, 0x2b, 0xfb, 0x2b, 0xfa,
0x3f, 0x3a, 0xda, 0x8b, 0xd6, 0x49, 0x9c, 0xf2, 0x29, 0xf1, 0x79, 0x1e, 0x1d, 0xe9, 0x3c, 0xe7,
0x39, 0x67, 0x51, 0x63, 0x30, 0x1a, 0xbd, 0x3b, 0xf9, 0x73, 0x30, 0x3e, 0x39, 0xfd, 0xe0, 0xde,
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x55, 0x6b, 0x73, 0x53, 0x37,
0x13, 0x7e, 0x03, 0x79, 0x13, 0x50, 0x6e, 0x8a, 0xc8, 0xc5, 0xb9, 0x1b, 0x43, 0x43, 0x80, 0xd6,
0xb4, 0xd0, 0x76, 0xda, 0x52, 0xda, 0xca, 0xd2, 0xc6, 0x16, 0x3e, 0x47, 0x3a, 0x48, 0x3a, 0xee,
0xb8, 0x5f, 0x34, 0xa6, 0xb8, 0x4c, 0x66, 0x80, 0x78, 0x88, 0xf9, 0x90, 0x7f, 0xd8, 0x5f, 0xd1,
0xdf, 0xd2, 0xd1, 0xb9, 0xe8, 0x38, 0x89, 0x53, 0x3e, 0x25, 0xde, 0x7d, 0x76, 0x57, 0xfb, 0xec,
0xb3, 0x7b, 0x50, 0x63, 0x30, 0x1a, 0xbd, 0x3b, 0xf9, 0x73, 0x30, 0x3e, 0x39, 0xfd, 0xe0, 0xde,
0x0f, 0xc7, 0x83, 0x37, 0x83, 0xf1, 0xc0, 0xbd, 0x1f, 0x9e, 0x9d, 0x0d, 0xde, 0x0e, 0x9b, 0xa3,
0x8f, 0xa7, 0xe3, 0x53, 0x72, 0x2b, 0xfb, 0xf3, 0xfa, 0xd3, 0x5f, 0x8d, 0x7f, 0x56, 0xd0, 0x36,
0xad, 0x0e, 0xc4, 0x05, 0x3f, 0xce, 0xe9, 0x64, 0x17, 0xdd, 0x3e, 0x3b, 0x79, 0xfb, 0x61, 0x30,
0xfe, 0xf4, 0x71, 0x58, 0x9b, 0xa9, 0xcf, 0x1c, 0x2d, 0xea, 0x2a, 0x40, 0x6a, 0x68, 0x7e, 0x34,
0x38, 0x7f, 0x77, 0x3a, 0x78, 0x53, 0xbb, 0x91, 0x61, 0xe5, 0x4f, 0xf2, 0x02, 0xcd, 0x8e, 0xcf,
0x47, 0xc3, 0xda, 0xcd, 0xfa, 0xcc, 0xd1, 0xf2, 0xd3, 0x87, 0xcd, 0xf2, 0xbe, 0xe6, 0xf5, 0x77,
0x35, 0xed, 0xf9, 0x68, 0xa8, 0xb3, 0x63, 0x8d, 0xbf, 0x97, 0xd1, 0xac, 0xff, 0x49, 0x16, 0xd0,
0x7c, 0x2a, 0xbb, 0x52, 0xfd, 0x2e, 0xf1, 0xff, 0x08, 0x46, 0x8b, 0xac, 0x43, 0xad, 0x8b, 0xc1,
0x18, 0xda, 0x06, 0x3c, 0x43, 0x08, 0x5a, 0x66, 0x4a, 0x5a, 0xca, 0xac, 0x4b, 0x13, 0x4e, 0x2d,
0xe0, 0x1b, 0x64, 0x0f, 0x6d, 0xc5, 0x10, 0xb7, 0x40, 0x9b, 0x8e, 0x48, 0x8a, 0x70, 0x38, 0x72,
0x93, 0xac, 0xa3, 0xd5, 0x84, 0x0a, 0xed, 0x84, 0x34, 0x96, 0x46, 0x11, 0xb5, 0x42, 0x49, 0x3c,
0xeb, 0xc3, 0xa6, 0x2f, 0xd9, 0xc5, 0xf0, 0xff, 0xc9, 0x3d, 0x74, 0xa0, 0xe1, 0x55, 0x0a, 0xc6,
0x3a, 0xca, 0xb9, 0x06, 0x63, 0xdc, 0xb1, 0xd2, 0xce, 0x6a, 0x2a, 0x0d, 0x65, 0x19, 0x69, 0x8e,
0x3c, 0x42, 0x87, 0x94, 0x31, 0x48, 0xac, 0xfb, 0x1c, 0x77, 0x9e, 0x3c, 0x46, 0x0f, 0x38, 0xb0,
0x48, 0x48, 0xf8, 0x2c, 0xf9, 0x16, 0xd9, 0x44, 0x77, 0x4a, 0xd2, 0x24, 0x70, 0x9b, 0xac, 0x21,
0x6c, 0x40, 0xf2, 0x0b, 0x51, 0x44, 0x0e, 0xd0, 0xce, 0xe5, 0xdc, 0x93, 0x84, 0x05, 0x2f, 0xcd,
0x95, 0x22, 0x5d, 0x21, 0x20, 0x5e, 0x9c, 0x0e, 0x53, 0xc6, 0x54, 0x2a, 0x2d, 0x5e, 0x22, 0x77,
0xd1, 0xde, 0x55, 0x38, 0x49, 0x5b, 0x91, 0x60, 0xce, 0xf7, 0x05, 0x2f, 0x93, 0x7d, 0xb4, 0x5d,
0xf6, 0x83, 0x29, 0x0e, 0x8e, 0xf2, 0x1e, 0x68, 0x2b, 0x0c, 0xc4, 0x20, 0x2d, 0x5e, 0x21, 0x0d,
0xb4, 0x9f, 0xa4, 0xa6, 0xe3, 0xa4, 0xb2, 0xe2, 0x58, 0xb0, 0x3c, 0x85, 0x86, 0xb6, 0x30, 0x56,
0xe7, 0x92, 0x63, 0xaf, 0xd0, 0x7f, 0x73, 0x9c, 0x06, 0x93, 0x28, 0x69, 0x00, 0xaf, 0x92, 0x1d,
0xb4, 0x79, 0x95, 0xfc, 0x2a, 0x05, 0xdd, 0xc7, 0x84, 0xdc, 0x47, 0xf5, 0x6b, 0xc0, 0x2a, 0xc5,
0x1d, 0x5f, 0xf5, 0xb4, 0xfb, 0x32, 0xfd, 0xf0, 0x9a, 0x2f, 0x69, 0x1a, 0x5c, 0x1c, 0x5f, 0xf7,
0x16, 0x84, 0x58, 0xbd, 0x14, 0x4e, 0x43, 0xa1, 0xf3, 0x06, 0xd9, 0x42, 0xeb, 0x6d, 0xad, 0xd2,
0x24, 0x93, 0xc5, 0x09, 0xd9, 0x13, 0x36, 0xaf, 0x6e, 0x93, 0xac, 0xa2, 0xa5, 0x3c, 0xc8, 0x41,
0x5a, 0x61, 0xfb, 0xb8, 0xe6, 0xd9, 0x4c, 0xc5, 0x71, 0x2a, 0x85, 0xed, 0x3b, 0x0e, 0x86, 0x69,
0x91, 0x64, 0xec, 0x2d, 0x52, 0x43, 0x6b, 0x15, 0x34, 0x91, 0x67, 0xdb, 0xbf, 0xba, 0x42, 0x42,
0xb7, 0x95, 0x7b, 0xa9, 0x84, 0xc4, 0x3b, 0x64, 0x05, 0x2d, 0x24, 0x42, 0x06, 0xdb, 0xef, 0xfa,
0xd9, 0x01, 0x2e, 0xaa, 0xd9, 0xd9, 0xf3, 0x2f, 0x31, 0x96, 0xda, 0xd4, 0x94, 0xa3, 0xb3, 0xef,
0x6b, 0xe1, 0x10, 0xc1, 0xc4, 0xbc, 0x1c, 0x78, 0x53, 0x4d, 0xf3, 0x4c, 0x71, 0x35, 0xae, 0x93,
0xad, 0x02, 0xe2, 0x02, 0x1f, 0xe7, 0x70, 0xb2, 0x8b, 0x6e, 0x9f, 0x9d, 0xbc, 0xfd, 0x30, 0x18,
0x7f, 0xfa, 0x38, 0xac, 0xcd, 0xd4, 0x67, 0x8e, 0x16, 0x75, 0x65, 0x20, 0x35, 0x34, 0x3f, 0x1a,
0x9c, 0xbf, 0x3b, 0x1d, 0xbc, 0xa9, 0xdd, 0xc8, 0x7c, 0xe5, 0x4f, 0xf2, 0x02, 0xcd, 0x8e, 0xcf,
0x47, 0xc3, 0xda, 0xcd, 0xfa, 0xcc, 0xd1, 0xf2, 0xd3, 0x87, 0xcd, 0xb2, 0x5e, 0xf3, 0xfa, 0x5a,
0x4d, 0x7b, 0x3e, 0x1a, 0xea, 0x2c, 0xac, 0xf1, 0xf7, 0x32, 0x9a, 0xf5, 0x3f, 0xc9, 0x02, 0x9a,
0x4f, 0x65, 0x57, 0xaa, 0xdf, 0x25, 0xfe, 0x1f, 0xc1, 0x68, 0x91, 0x75, 0xa8, 0x75, 0x31, 0x18,
0x43, 0xdb, 0x80, 0x67, 0x08, 0x41, 0xcb, 0x4c, 0x49, 0x4b, 0x99, 0x75, 0x69, 0xc2, 0xa9, 0x05,
0x7c, 0x83, 0xec, 0xa1, 0xad, 0x18, 0xe2, 0x16, 0x68, 0xd3, 0x11, 0x49, 0x61, 0x0e, 0x21, 0x37,
0xc9, 0x3a, 0x5a, 0x4d, 0xa8, 0xd0, 0x4e, 0x48, 0x63, 0x69, 0x14, 0x51, 0x2b, 0x94, 0xc4, 0xb3,
0xde, 0x6c, 0xfa, 0x92, 0x5d, 0x34, 0xff, 0x9f, 0xdc, 0x43, 0x07, 0x1a, 0x5e, 0xa5, 0x60, 0xac,
0xa3, 0x9c, 0x6b, 0x30, 0xc6, 0x1d, 0x2b, 0xed, 0xac, 0xa6, 0xd2, 0x50, 0x96, 0x81, 0xe6, 0xc8,
0x23, 0x74, 0x48, 0x19, 0x83, 0xc4, 0xba, 0xcf, 0x61, 0xe7, 0xc9, 0x63, 0xf4, 0x80, 0x03, 0x8b,
0x84, 0x84, 0xcf, 0x82, 0x6f, 0x91, 0x4d, 0x74, 0xa7, 0x04, 0x4d, 0x3a, 0x6e, 0x93, 0x35, 0x84,
0x0d, 0x48, 0x7e, 0xc1, 0x8a, 0xc8, 0x01, 0xda, 0xb9, 0x9c, 0x7b, 0x12, 0xb0, 0xe0, 0xa9, 0xb9,
0xd2, 0xa4, 0x2b, 0x08, 0xc4, 0x8b, 0xd3, 0xdd, 0x94, 0x31, 0x95, 0x4a, 0x8b, 0x97, 0xc8, 0x5d,
0xb4, 0x77, 0xd5, 0x9d, 0xa4, 0xad, 0x48, 0x30, 0xe7, 0xe7, 0x82, 0x97, 0xc9, 0x3e, 0xda, 0x2e,
0xe7, 0xc1, 0x14, 0x07, 0x47, 0x79, 0x0f, 0xb4, 0x15, 0x06, 0x62, 0x90, 0x16, 0xaf, 0x90, 0x06,
0xda, 0x4f, 0x52, 0xd3, 0x71, 0x52, 0x59, 0x71, 0x2c, 0x58, 0x9e, 0x42, 0x43, 0x5b, 0x18, 0xab,
0x73, 0xca, 0xb1, 0x67, 0xe8, 0xbf, 0x31, 0x4e, 0x83, 0x49, 0x94, 0x34, 0x80, 0x57, 0xc9, 0x0e,
0xda, 0xbc, 0x0a, 0x7e, 0x95, 0x82, 0xee, 0x63, 0x42, 0xee, 0xa3, 0xfa, 0x35, 0xce, 0x2a, 0xc5,
0x1d, 0xdf, 0xf5, 0xb4, 0x7a, 0x19, 0x7f, 0x78, 0xcd, 0xb7, 0x34, 0xcd, 0x5d, 0x84, 0xaf, 0x7b,
0x09, 0x42, 0xac, 0x5e, 0x0a, 0xa7, 0xa1, 0xe0, 0x79, 0x83, 0x6c, 0xa1, 0xf5, 0xb6, 0x56, 0x69,
0x92, 0xd1, 0xe2, 0x84, 0xec, 0x09, 0x9b, 0x77, 0xb7, 0x49, 0x56, 0xd1, 0x52, 0x6e, 0xe4, 0x20,
0xad, 0xb0, 0x7d, 0x5c, 0xf3, 0x68, 0xa6, 0xe2, 0x38, 0x95, 0xc2, 0xf6, 0x1d, 0x07, 0xc3, 0xb4,
0x48, 0x32, 0xf4, 0x16, 0xa9, 0xa1, 0xb5, 0xca, 0x35, 0x91, 0x67, 0xdb, 0xbf, 0xba, 0xf2, 0x84,
0x69, 0x2b, 0xf7, 0x52, 0x09, 0x89, 0x77, 0xc8, 0x0a, 0x5a, 0x48, 0x84, 0x0c, 0xb2, 0xdf, 0xf5,
0xbb, 0x03, 0x5c, 0x54, 0xbb, 0xb3, 0xe7, 0x5f, 0x62, 0x2c, 0xb5, 0xa9, 0x29, 0x57, 0x67, 0xdf,
0xf7, 0xc2, 0x21, 0x82, 0x89, 0x7d, 0x39, 0xf0, 0xa2, 0x9a, 0xa6, 0x99, 0xa2, 0x34, 0xae, 0x93,
0x6d, 0xb4, 0x41, 0xa5, 0x92, 0xfd, 0x58, 0xa5, 0xc6, 0xc5, 0x60, 0xb5, 0x60, 0xae, 0x45, 0x2d,
0xeb, 0xe0, 0xbb, 0x61, 0xaa, 0xb2, 0x92, 0x35, 0xc4, 0xaa, 0x07, 0x1c, 0x37, 0x7c, 0xd7, 0xaa,
0x70, 0x71, 0x95, 0xf1, 0x02, 0x72, 0x7c, 0x8f, 0x20, 0x34, 0xd7, 0xa2, 0xac, 0x9b, 0x26, 0xf8,
0x7e, 0x70, 0xa4, 0x57, 0xb6, 0xe7, 0x2b, 0x65, 0x20, 0x2d, 0xe8, 0x9c, 0xfa, 0x45, 0x70, 0xe4,
0x65, 0x38, 0x9f, 0x46, 0xe0, 0xf8, 0xd0, 0x3b, 0x6e, 0x2a, 0x85, 0x0b, 0x13, 0x0b, 0x63, 0x80,
0xe3, 0x07, 0x99, 0x12, 0x9e, 0xd3, 0x52, 0xaa, 0x1b, 0x53, 0xdd, 0xc5, 0x47, 0x64, 0x03, 0x91,
0xfc, 0x85, 0x11, 0x50, 0xed, 0x3a, 0xc2, 0x58, 0xa5, 0xfb, 0xf8, 0xa1, 0x97, 0x31, 0x8b, 0x1b,
0xb0, 0x56, 0xc8, 0x36, 0x7e, 0x44, 0xea, 0x68, 0xb7, 0x6a, 0x04, 0xd5, 0xac, 0x23, 0x7a, 0xe0,
0x62, 0xda, 0x96, 0x60, 0x23, 0x21, 0xbb, 0xf8, 0xb1, 0x6f, 0x62, 0x76, 0x26, 0xd1, 0xea, 0x58,
0x44, 0xe0, 0x12, 0xc1, 0x6c, 0xaa, 0x01, 0x7f, 0x19, 0xb2, 0x95, 0x33, 0xf6, 0x55, 0x26, 0x66,
0xbe, 0x4a, 0xca, 0x39, 0x2a, 0x9d, 0xd8, 0xf4, 0xaa, 0x69, 0xb0, 0x3a, 0x1f, 0xae, 0x8b, 0xe0,
0x13, 0x72, 0x88, 0x1a, 0xd7, 0xfa, 0xa1, 0xb2, 0xeb, 0xd7, 0x95, 0xf4, 0x81, 0x5c, 0x94, 0x62,
0xf0, 0x37, 0xbe, 0x96, 0xf2, 0x68, 0x79, 0x43, 0x0f, 0x74, 0xb0, 0x3d, 0x7e, 0xea, 0xdd, 0x70,
0xe9, 0x7d, 0x17, 0x08, 0xcf, 0x7c, 0x8a, 0x72, 0x07, 0x4d, 0x65, 0x7c, 0x1b, 0x3c, 0x61, 0x75,
0x6a, 0x2c, 0x70, 0x97, 0x1a, 0xd0, 0xf8, 0xbb, 0xd0, 0xea, 0x49, 0x76, 0xa8, 0xef, 0xfb, 0xd0,
0xea, 0x4b, 0x95, 0x3b, 0x0e, 0x4c, 0x18, 0x9f, 0xf8, 0x87, 0x7c, 0xf9, 0x4c, 0x91, 0x20, 0x02,
0xda, 0x03, 0xfc, 0xa3, 0xc7, 0xb3, 0x14, 0x85, 0xc5, 0xfd, 0xba, 0x8d, 0x2b, 0xa7, 0xff, 0x14,
0x7a, 0x6e, 0x68, 0x0f, 0x78, 0xb9, 0x95, 0xf1, 0x73, 0xbf, 0x46, 0xaa, 0xbc, 0x8c, 0x4a, 0x06,
0xd1, 0x95, 0x89, 0xfb, 0xd9, 0x2b, 0x53, 0x60, 0x53, 0xeb, 0x7e, 0x11, 0x9a, 0xdd, 0x85, 0xbe,
0xff, 0x00, 0xe1, 0x5f, 0xfc, 0x7a, 0x2f, 0x23, 0x8c, 0x6a, 0xee, 0x8a, 0xfd, 0xf1, 0x2b, 0xd9,
0x45, 0xb5, 0xfc, 0x25, 0x8a, 0x09, 0x1a, 0x39, 0xef, 0xa3, 0xe0, 0xb8, 0xdf, 0x02, 0x0a, 0xd2,
0x64, 0xe2, 0x49, 0x1a, 0x83, 0xe3, 0x60, 0xa9, 0x88, 0x30, 0x0d, 0xf2, 0x1e, 0xa7, 0x51, 0x14,
0xee, 0x6a, 0xb5, 0x96, 0xfe, 0x58, 0x68, 0x3e, 0x79, 0x5e, 0x7e, 0x86, 0x5f, 0xcf, 0x65, 0xff,
0x3d, 0xfb, 0x37, 0x00, 0x00, 0xff, 0xff, 0xef, 0xbf, 0x60, 0xd4, 0x2d, 0x08, 0x00, 0x00,
0xeb, 0xe0, 0xbb, 0x61, 0xab, 0xb2, 0x96, 0x35, 0xc4, 0xaa, 0x07, 0x1c, 0x37, 0xfc, 0xd4, 0x2a,
0x73, 0x51, 0xca, 0x78, 0x02, 0x39, 0xbe, 0x47, 0x10, 0x9a, 0x6b, 0x51, 0xd6, 0x4d, 0x13, 0x7c,
0x3f, 0x28, 0xd2, 0x33, 0xdb, 0xf3, 0x9d, 0x32, 0x90, 0x16, 0x74, 0x0e, 0xfd, 0x22, 0x28, 0xf2,
0xb2, 0x3b, 0xdf, 0x46, 0xe0, 0xf8, 0xd0, 0x2b, 0x6e, 0x2a, 0x84, 0x0b, 0x13, 0x0b, 0x63, 0x80,
0xe3, 0x07, 0x19, 0x13, 0x1e, 0xd3, 0x52, 0xaa, 0x1b, 0x53, 0xdd, 0xc5, 0x47, 0x64, 0x03, 0x91,
0xfc, 0x85, 0x11, 0x50, 0xed, 0x3a, 0xc2, 0x58, 0xa5, 0xfb, 0xf8, 0xa1, 0xa7, 0x31, 0xb3, 0x1b,
0xb0, 0x56, 0xc8, 0x36, 0x7e, 0x44, 0xea, 0x68, 0xb7, 0x1a, 0x04, 0xd5, 0xac, 0x23, 0x7a, 0xe0,
0x62, 0xda, 0x96, 0x60, 0x23, 0x21, 0xbb, 0xf8, 0xb1, 0x1f, 0x62, 0x16, 0x93, 0x68, 0x75, 0x2c,
0x22, 0x70, 0x89, 0x60, 0x36, 0xd5, 0x80, 0xbf, 0x0c, 0xd9, 0xca, 0x1d, 0xfb, 0x2a, 0x23, 0x33,
0x3f, 0x25, 0xe5, 0x1e, 0x95, 0x4a, 0x6c, 0x7a, 0xd6, 0x34, 0x58, 0x9d, 0x2f, 0xd7, 0x45, 0xe7,
0x13, 0x72, 0x88, 0x1a, 0xd7, 0xea, 0xa1, 0x92, 0xeb, 0xd7, 0x15, 0xf5, 0x01, 0x5c, 0xb4, 0x62,
0xf0, 0x37, 0xbe, 0x97, 0x32, 0xb4, 0xac, 0xd0, 0x03, 0x1d, 0x64, 0x8f, 0x9f, 0x7a, 0x35, 0x5c,
0x7a, 0xdf, 0x05, 0xc0, 0x33, 0x9f, 0xa2, 0xbc, 0x41, 0x53, 0x11, 0xdf, 0x06, 0x4d, 0x58, 0x9d,
0x1a, 0x0b, 0xdc, 0xa5, 0x06, 0x34, 0xfe, 0x2e, 0x8c, 0x7a, 0x12, 0x1d, 0xfa, 0xfb, 0x3e, 0x8c,
0xfa, 0x52, 0xe7, 0x8e, 0x03, 0x13, 0xc6, 0x27, 0xfe, 0x21, 0x3f, 0x3e, 0x53, 0x28, 0x88, 0x80,
0xf6, 0x00, 0xff, 0xe8, 0xfd, 0x59, 0x8a, 0x42, 0xe2, 0xfe, 0xdc, 0xc6, 0x95, 0xd2, 0x7f, 0x0a,
0x33, 0x37, 0xb4, 0x07, 0xbc, 0xbc, 0xca, 0xf8, 0xb9, 0x3f, 0x23, 0x55, 0x5e, 0x46, 0x25, 0x83,
0xe8, 0xca, 0xc6, 0xfd, 0xec, 0x99, 0x29, 0x7c, 0x53, 0xfb, 0x7e, 0x11, 0x86, 0xdd, 0x85, 0xbe,
0xff, 0x00, 0xe1, 0x5f, 0xfc, 0x79, 0x2f, 0x2d, 0x8c, 0x6a, 0xee, 0x8a, 0xfb, 0xf1, 0x6b, 0xa0,
0xc8, 0x28, 0x26, 0x68, 0xe4, 0xbc, 0x8e, 0x0c, 0xfe, 0x8d, 0xec, 0xa2, 0x5a, 0x66, 0x06, 0x69,
0x32, 0xd6, 0x24, 0x8d, 0xc1, 0x71, 0xb0, 0x54, 0x44, 0x98, 0x86, 0xa0, 0xe3, 0x34, 0x8a, 0x42,
0x91, 0x56, 0x6b, 0xe9, 0x8f, 0x85, 0xe6, 0x93, 0xe7, 0xe5, 0xf7, 0xf7, 0xf5, 0x5c, 0xf6, 0xdf,
0xb3, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x5f, 0xbf, 0xf4, 0x92, 0x26, 0x08, 0x00, 0x00,
}

View File

@ -76,7 +76,7 @@ message ApplicationMetadataMessage {
CANCEL_CONTACT_VERIFICATION = 61;
SYNC_KEYPAIR = 62;
SYNC_KEYCARD_ACTION = 63;
SYNC_SOCIAL_LINK_SETTING = 64;
SYNC_SOCIAL_LINKS = 64;
SYNC_ENS_USERNAME_DETAIL = 65;
SYNC_FULL_KEYPAIR = 66;
}

View File

@ -2678,7 +2678,7 @@ type BackedUpProfile struct {
DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
DisplayNameClock uint64 `protobuf:"varint,3,opt,name=display_name_clock,json=displayNameClock,proto3" json:"display_name_clock,omitempty"`
Pictures []*SyncProfilePicture `protobuf:"bytes,4,rep,name=pictures,proto3" json:"pictures,omitempty"`
SocialLinkSettings []*SyncSocialLinkSetting `protobuf:"bytes,5,rep,name=social_link_settings,json=socialLinkSettings,proto3" json:"social_link_settings,omitempty"`
SocialLinks *SyncSocialLinks `protobuf:"bytes,5,opt,name=social_links,json=socialLinks,proto3" json:"social_links,omitempty"`
EnsUsernameDetails []*SyncEnsUsernameDetail `protobuf:"bytes,6,rep,name=ens_username_details,json=ensUsernameDetails,proto3" json:"ens_username_details,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
@ -2738,9 +2738,9 @@ func (m *BackedUpProfile) GetPictures() []*SyncProfilePicture {
return nil
}
func (m *BackedUpProfile) GetSocialLinkSettings() []*SyncSocialLinkSetting {
func (m *BackedUpProfile) GetSocialLinks() *SyncSocialLinks {
if m != nil {
return m.SocialLinkSettings
return m.SocialLinks
}
return nil
}
@ -2989,55 +2989,47 @@ func (m *SyncKeycardAction) GetKeycard() *SyncKeycard {
return nil
}
type SyncSocialLinkSetting struct {
Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"`
Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"`
Clock uint64 `protobuf:"varint,3,opt,name=clock,proto3" json:"clock,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
type SyncSocialLinks struct {
SocialLinks []*SocialLink `protobuf:"bytes,1,rep,name=social_links,json=socialLinks,proto3" json:"social_links,omitempty"`
Clock uint64 `protobuf:"varint,2,opt,name=clock,proto3" json:"clock,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *SyncSocialLinkSetting) Reset() { *m = SyncSocialLinkSetting{} }
func (m *SyncSocialLinkSetting) String() string { return proto.CompactTextString(m) }
func (*SyncSocialLinkSetting) ProtoMessage() {}
func (*SyncSocialLinkSetting) Descriptor() ([]byte, []int) {
func (m *SyncSocialLinks) Reset() { *m = SyncSocialLinks{} }
func (m *SyncSocialLinks) String() string { return proto.CompactTextString(m) }
func (*SyncSocialLinks) ProtoMessage() {}
func (*SyncSocialLinks) Descriptor() ([]byte, []int) {
return fileDescriptor_d61ab7221f0b5518, []int{36}
}
func (m *SyncSocialLinkSetting) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SyncSocialLinkSetting.Unmarshal(m, b)
func (m *SyncSocialLinks) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SyncSocialLinks.Unmarshal(m, b)
}
func (m *SyncSocialLinkSetting) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_SyncSocialLinkSetting.Marshal(b, m, deterministic)
func (m *SyncSocialLinks) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_SyncSocialLinks.Marshal(b, m, deterministic)
}
func (m *SyncSocialLinkSetting) XXX_Merge(src proto.Message) {
xxx_messageInfo_SyncSocialLinkSetting.Merge(m, src)
func (m *SyncSocialLinks) XXX_Merge(src proto.Message) {
xxx_messageInfo_SyncSocialLinks.Merge(m, src)
}
func (m *SyncSocialLinkSetting) XXX_Size() int {
return xxx_messageInfo_SyncSocialLinkSetting.Size(m)
func (m *SyncSocialLinks) XXX_Size() int {
return xxx_messageInfo_SyncSocialLinks.Size(m)
}
func (m *SyncSocialLinkSetting) XXX_DiscardUnknown() {
xxx_messageInfo_SyncSocialLinkSetting.DiscardUnknown(m)
func (m *SyncSocialLinks) XXX_DiscardUnknown() {
xxx_messageInfo_SyncSocialLinks.DiscardUnknown(m)
}
var xxx_messageInfo_SyncSocialLinkSetting proto.InternalMessageInfo
var xxx_messageInfo_SyncSocialLinks proto.InternalMessageInfo
func (m *SyncSocialLinkSetting) GetText() string {
func (m *SyncSocialLinks) GetSocialLinks() []*SocialLink {
if m != nil {
return m.Text
return m.SocialLinks
}
return ""
return nil
}
func (m *SyncSocialLinkSetting) GetUrl() string {
if m != nil {
return m.Url
}
return ""
}
func (m *SyncSocialLinkSetting) GetClock() uint64 {
func (m *SyncSocialLinks) GetClock() uint64 {
if m != nil {
return m.Clock
}
@ -3089,7 +3081,7 @@ func init() {
proto.RegisterType((*SyncRawMessage)(nil), "protobuf.SyncRawMessage")
proto.RegisterType((*SyncKeycard)(nil), "protobuf.SyncKeycard")
proto.RegisterType((*SyncKeycardAction)(nil), "protobuf.SyncKeycardAction")
proto.RegisterType((*SyncSocialLinkSetting)(nil), "protobuf.SyncSocialLinkSetting")
proto.RegisterType((*SyncSocialLinks)(nil), "protobuf.SyncSocialLinks")
}
func init() {
@ -3097,196 +3089,197 @@ func init() {
}
var fileDescriptor_d61ab7221f0b5518 = []byte{
// 3049 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x19, 0xcb, 0x8e, 0x1b, 0xc7,
0xd1, 0x7c, 0x2c, 0x1f, 0x45, 0xee, 0x2e, 0xd5, 0x5a, 0x4b, 0xd4, 0x4a, 0x86, 0xa4, 0xb1, 0x0d,
0x2b, 0x81, 0xb3, 0x4a, 0xe4, 0x3c, 0x1c, 0xc9, 0x86, 0x43, 0x91, 0xb4, 0xb5, 0x5a, 0x89, 0xbb,
0xe9, 0x5d, 0xca, 0x71, 0x10, 0x60, 0xd0, 0x9a, 0x69, 0x2d, 0xdb, 0x3b, 0x9c, 0x61, 0xa6, 0x9b,
0x2b, 0xd3, 0x87, 0x00, 0xc9, 0x17, 0x04, 0xb9, 0xc4, 0x47, 0x9f, 0x83, 0x9c, 0x02, 0xe4, 0x90,
0x5b, 0x8e, 0xb9, 0xe7, 0xe8, 0x7c, 0x41, 0x90, 0x0f, 0xc8, 0x31, 0xe8, 0xea, 0x9e, 0xe1, 0x0c,
0x1f, 0x8a, 0x84, 0x9c, 0x72, 0x62, 0x57, 0x75, 0x55, 0x4d, 0x75, 0x3d, 0xba, 0xaa, 0x9a, 0xb0,
0x39, 0x61, 0x22, 0x16, 0xe1, 0xe9, 0xde, 0x24, 0x8e, 0x54, 0x44, 0x6a, 0xf8, 0xf3, 0x74, 0xfa,
0x6c, 0xf7, 0xa2, 0x9c, 0x85, 0x9e, 0x2b, 0xb9, 0x52, 0x22, 0x3c, 0x95, 0x66, 0x7b, 0xd7, 0x61,
0x93, 0x49, 0x20, 0x3c, 0xa6, 0x44, 0x14, 0xba, 0x63, 0xae, 0x98, 0xcf, 0x14, 0x73, 0xc7, 0x5c,
0x4a, 0x76, 0xca, 0x0d, 0x8d, 0xc3, 0xe0, 0xea, 0xc7, 0x5c, 0x79, 0x23, 0x11, 0x9e, 0xde, 0x67,
0xde, 0x19, 0xf7, 0x87, 0x93, 0x1e, 0x53, 0xac, 0xc7, 0x15, 0x13, 0x81, 0x24, 0xd7, 0xa1, 0x81,
0x4c, 0xe1, 0x74, 0xfc, 0x94, 0xc7, 0xed, 0xc2, 0x8d, 0xc2, 0xad, 0x4d, 0x0a, 0x1a, 0x35, 0x40,
0x0c, 0xb9, 0x09, 0x4d, 0x15, 0x29, 0x16, 0x24, 0x14, 0x45, 0xa4, 0x68, 0x20, 0xce, 0x90, 0x38,
0xbf, 0xad, 0x42, 0x45, 0xcb, 0x9e, 0x4e, 0xc8, 0x0e, 0x6c, 0x78, 0x41, 0xe4, 0x9d, 0xa1, 0xa0,
0x32, 0x35, 0x00, 0xd9, 0x82, 0xa2, 0xf0, 0x91, 0xb3, 0x4e, 0x8b, 0xc2, 0x27, 0x1f, 0x41, 0xcd,
0x8b, 0x42, 0xc5, 0x3c, 0x25, 0xdb, 0xa5, 0x1b, 0xa5, 0x5b, 0x8d, 0x3b, 0x6f, 0xee, 0x25, 0x27,
0xdd, 0x3b, 0x9e, 0x85, 0xde, 0x7e, 0x28, 0x15, 0x0b, 0x02, 0x3c, 0x58, 0xd7, 0x50, 0x3e, 0xb9,
0x43, 0x53, 0x26, 0xf2, 0x63, 0x68, 0x78, 0xd1, 0x78, 0x3c, 0x0d, 0x85, 0x12, 0x5c, 0xb6, 0xcb,
0x28, 0xe3, 0x72, 0x5e, 0x46, 0xd7, 0x12, 0xcc, 0x68, 0x96, 0x96, 0x1c, 0xc2, 0x76, 0x22, 0xc6,
0xda, 0xa0, 0xbd, 0x71, 0xa3, 0x70, 0xab, 0x71, 0xe7, 0xed, 0x39, 0xfb, 0x0b, 0x0c, 0x46, 0x17,
0xb9, 0xc9, 0x10, 0x48, 0x46, 0x7e, 0x22, 0xb3, 0xf2, 0x2a, 0x32, 0x57, 0x08, 0x20, 0xef, 0x41,
0x75, 0x12, 0x47, 0xcf, 0x44, 0xc0, 0xdb, 0x55, 0x94, 0x75, 0x65, 0x2e, 0x2b, 0x91, 0x71, 0x64,
0x08, 0x68, 0x42, 0x49, 0x1e, 0xc3, 0x96, 0x5d, 0x26, 0x7a, 0xd4, 0x5e, 0x45, 0x8f, 0x05, 0x66,
0x72, 0x1b, 0xaa, 0x36, 0xe2, 0xda, 0x75, 0x94, 0xf3, 0x7a, 0xde, 0xc4, 0xc7, 0x66, 0x93, 0x26,
0x54, 0xda, 0xb8, 0x49, 0x88, 0x26, 0x0a, 0xc0, 0x2b, 0x19, 0x77, 0x81, 0x9b, 0xdc, 0x83, 0xc6,
0xb3, 0x69, 0x10, 0x1c, 0xf0, 0x99, 0x4e, 0x8c, 0x76, 0x63, 0xd1, 0x12, 0x5a, 0x0b, 0xbb, 0xf9,
0xf1, 0x34, 0x08, 0x68, 0x96, 0x5a, 0x7b, 0x26, 0x03, 0x26, 0x0a, 0x35, 0x5f, 0xc9, 0x33, 0xcb,
0x02, 0x48, 0x07, 0x5a, 0xcf, 0x99, 0xf2, 0x46, 0x87, 0x61, 0x30, 0xeb, 0x78, 0x5e, 0x34, 0x0d,
0x55, 0x7b, 0x73, 0x95, 0x79, 0xec, 0x26, 0x5d, 0x22, 0x27, 0x2e, 0x5c, 0x5e, 0xc4, 0x25, 0xea,
0x6d, 0xbd, 0x8a, 0x7a, 0xeb, 0xa4, 0x38, 0xff, 0x2a, 0x43, 0xf3, 0xf1, 0x34, 0x50, 0x22, 0xf9,
0x22, 0x81, 0x72, 0xc8, 0xc6, 0x1c, 0xf3, 0xb2, 0x4e, 0x71, 0x4d, 0xae, 0x41, 0x5d, 0x89, 0x31,
0x97, 0x8a, 0x8d, 0x27, 0x98, 0x9d, 0x25, 0x3a, 0x47, 0xe8, 0x5d, 0xe1, 0xf3, 0x50, 0x09, 0x2f,
0x0a, 0xdb, 0x25, 0x64, 0x9b, 0x23, 0xc8, 0x47, 0x00, 0x5e, 0x14, 0x44, 0xb1, 0x3b, 0x62, 0x72,
0x64, 0x13, 0xf0, 0xc6, 0x5c, 0xe9, 0xec, 0xb7, 0xf7, 0xba, 0x9a, 0xf0, 0x01, 0x93, 0x23, 0x5a,
0xf7, 0x92, 0x25, 0xb9, 0xa2, 0xef, 0x00, 0x2d, 0x40, 0xf8, 0x98, 0x80, 0x25, 0x5a, 0x45, 0x78,
0xdf, 0x27, 0xef, 0xc0, 0xf6, 0x19, 0x9f, 0x79, 0x2c, 0xf6, 0x5d, 0x7b, 0x1d, 0x62, 0x3a, 0xd5,
0xe9, 0x96, 0x45, 0x1f, 0x19, 0x2c, 0xb9, 0x0c, 0xd5, 0x33, 0x3e, 0x73, 0xa7, 0xc2, 0xc7, 0x1c,
0xa9, 0xd3, 0xca, 0x19, 0x9f, 0x0d, 0x85, 0x4f, 0x3e, 0x80, 0x8a, 0x18, 0xb3, 0x53, 0xae, 0xe3,
0x5f, 0x6b, 0xf6, 0xd6, 0x1a, 0xcd, 0xf6, 0xf1, 0x3c, 0x6a, 0xb6, 0xaf, 0x89, 0xa9, 0xe5, 0x21,
0xb7, 0xe1, 0xa2, 0x37, 0x95, 0x2a, 0x1a, 0x8b, 0x2f, 0xcd, 0xd5, 0x8a, 0x8a, 0x61, 0x0a, 0xd4,
0x29, 0xc9, 0x6d, 0xe1, 0xd1, 0x76, 0x6f, 0x42, 0x3d, 0x3d, 0xa3, 0xbe, 0x02, 0x45, 0xe8, 0xf3,
0x2f, 0xda, 0x85, 0x1b, 0xa5, 0x5b, 0x25, 0x6a, 0x80, 0xdd, 0x6f, 0x0a, 0xb0, 0x99, 0xfb, 0x5a,
0x56, 0xf9, 0x42, 0x4e, 0xf9, 0xc4, 0x55, 0xc5, 0x8c, 0xab, 0xda, 0x50, 0x9d, 0xb0, 0x59, 0x10,
0x31, 0x1f, 0x5d, 0xd1, 0xa4, 0x09, 0xa8, 0x3f, 0xf7, 0x5c, 0xf8, 0x4a, 0xfb, 0x40, 0x1b, 0xd1,
0x00, 0xe4, 0x12, 0x54, 0x46, 0x5c, 0x9c, 0x8e, 0x94, 0xb5, 0xad, 0x85, 0xc8, 0x2e, 0xd4, 0x74,
0x82, 0x4b, 0xf1, 0x25, 0x47, 0x9b, 0x96, 0x68, 0x0a, 0x93, 0x37, 0x61, 0x33, 0xc6, 0x95, 0xab,
0x58, 0x7c, 0xca, 0x15, 0xda, 0xb4, 0x44, 0x9b, 0x06, 0x79, 0x82, 0xb8, 0xf9, 0x05, 0x5f, 0xcb,
0x5c, 0xf0, 0xce, 0xdf, 0x0b, 0x70, 0xf1, 0x51, 0xe4, 0xb1, 0xc0, 0x7a, 0xe6, 0xc8, 0x2a, 0xf7,
0x03, 0x28, 0x9f, 0xf1, 0x99, 0x44, 0x53, 0x34, 0xee, 0xdc, 0x9c, 0x7b, 0x61, 0x05, 0xf1, 0xde,
0x01, 0x9f, 0x51, 0x24, 0x27, 0x77, 0xa1, 0x39, 0xd6, 0x6e, 0x62, 0x36, 0xbb, 0x8a, 0x98, 0x13,
0x97, 0x56, 0x3b, 0x91, 0xe6, 0x68, 0xf5, 0x09, 0x27, 0x4c, 0xca, 0xe7, 0x51, 0xec, 0xdb, 0xa8,
0x4d, 0xe1, 0xdd, 0xef, 0x40, 0xe9, 0x80, 0xcf, 0x56, 0xe6, 0x02, 0x81, 0xb2, 0x2e, 0x7a, 0xf8,
0xa9, 0x26, 0xc5, 0xb5, 0xf3, 0x97, 0x02, 0xbc, 0x9e, 0x53, 0x94, 0xf3, 0xf8, 0x01, 0x0f, 0x82,
0x48, 0x47, 0xa8, 0x8d, 0x4c, 0xf7, 0x9c, 0xc7, 0x52, 0x44, 0x21, 0x0a, 0xdb, 0xa0, 0x5b, 0x16,
0xfd, 0xc4, 0x60, 0xb5, 0x93, 0x27, 0x9c, 0x63, 0x90, 0x1b, 0xc9, 0x15, 0x0d, 0xee, 0xfb, 0x58,
0x77, 0xf9, 0xb9, 0xf0, 0xb8, 0x8b, 0xaa, 0x18, 0x4d, 0xc1, 0xa0, 0x06, 0x5a, 0xa1, 0x39, 0x81,
0x9a, 0x4d, 0x38, 0x7a, 0x37, 0x25, 0x38, 0x99, 0x4d, 0x30, 0x7b, 0xa5, 0x38, 0x0d, 0x99, 0x9a,
0xc6, 0x1c, 0xbd, 0xdc, 0xa4, 0x73, 0x84, 0xf3, 0x75, 0x01, 0x5a, 0x5a, 0xed, 0x6c, 0x25, 0x5d,
0x53, 0x9d, 0xdf, 0x81, 0x6d, 0x91, 0xa1, 0x72, 0xd3, 0x52, 0xbd, 0x95, 0x45, 0xe7, 0x74, 0x46,
0x95, 0x4a, 0x4b, 0x2a, 0x25, 0x86, 0x2d, 0xe7, 0x23, 0x37, 0x31, 0xd1, 0x06, 0xb6, 0x0e, 0x09,
0xe8, 0xfc, 0xb3, 0x00, 0x97, 0xd7, 0x14, 0xfb, 0x97, 0xec, 0x23, 0xde, 0x84, 0x4d, 0x5b, 0xb1,
0x5c, 0x4c, 0x5d, 0xab, 0x52, 0xd3, 0x22, 0x4d, 0x9e, 0x5d, 0x81, 0x1a, 0x0f, 0xa5, 0x9b, 0x51,
0xac, 0xca, 0x43, 0x89, 0x36, 0xbe, 0x09, 0xcd, 0x80, 0x49, 0xe5, 0x4e, 0x27, 0x3e, 0x53, 0xdc,
0xdc, 0x43, 0x65, 0xda, 0xd0, 0xb8, 0xa1, 0x41, 0xe9, 0x33, 0xcb, 0x99, 0x54, 0x7c, 0xec, 0x2a,
0x76, 0xaa, 0xcb, 0x7a, 0x49, 0x9f, 0xd9, 0xa0, 0x4e, 0xd8, 0xa9, 0x24, 0x6f, 0xc3, 0x56, 0xa0,
0x63, 0xc4, 0x0d, 0x85, 0x77, 0x86, 0x1f, 0x31, 0x57, 0xd1, 0x26, 0x62, 0x07, 0x16, 0xe9, 0xfc,
0xba, 0x02, 0x57, 0xd6, 0x76, 0x36, 0xe4, 0xbb, 0xb0, 0x93, 0x55, 0xc4, 0x45, 0xde, 0x60, 0x66,
0x4f, 0x4f, 0x32, 0x0a, 0x3d, 0x32, 0x3b, 0xff, 0xc7, 0xa6, 0xd0, 0xbe, 0x65, 0xbe, 0xcf, 0x7d,
0xbc, 0x50, 0x6b, 0xd4, 0x00, 0x3a, 0x4e, 0x9e, 0x6a, 0x27, 0x73, 0x1f, 0x5b, 0x86, 0x1a, 0x4d,
0x40, 0x4d, 0x3f, 0x9e, 0x6a, 0x9d, 0x1a, 0x86, 0x1e, 0x01, 0x4d, 0x1f, 0xf3, 0x71, 0x74, 0xce,
0x7d, 0xac, 0xe8, 0x35, 0x9a, 0x80, 0xe4, 0x06, 0x34, 0x47, 0x4c, 0xba, 0x28, 0xd6, 0x9d, 0x4a,
0xac, 0xcd, 0x35, 0x0a, 0x23, 0x26, 0x3b, 0x1a, 0x35, 0xc4, 0x0b, 0xfe, 0x9c, 0xc7, 0xe2, 0x59,
0xd2, 0x3a, 0x4b, 0xc5, 0xd4, 0xd4, 0x94, 0xde, 0x12, 0x25, 0xd9, 0xad, 0x63, 0xdc, 0xc1, 0x26,
0x38, 0x9e, 0x4a, 0x95, 0x50, 0x6e, 0x23, 0x65, 0x03, 0x71, 0x96, 0xe4, 0x43, 0xb8, 0x6a, 0x3b,
0x43, 0x37, 0xe6, 0xbf, 0x9c, 0x72, 0xa9, 0x8c, 0x17, 0x91, 0x85, 0xb7, 0x5b, 0xc8, 0xd1, 0xb6,
0x24, 0xd4, 0x50, 0xa0, 0x33, 0x35, 0x3f, 0x5f, 0xcf, 0x6e, 0xd2, 0xe0, 0xc2, 0x5a, 0xf6, 0x2e,
0x66, 0xc6, 0x47, 0x70, 0x6d, 0x91, 0x5d, 0x9b, 0x43, 0x71, 0xfb, 0x79, 0x82, 0xfc, 0x57, 0xf2,
0xfc, 0x14, 0x29, 0xcc, 0xf7, 0xd7, 0x0b, 0x30, 0x0a, 0x5c, 0x5c, 0x2f, 0xc0, 0x68, 0x70, 0x13,
0x9a, 0xbe, 0x90, 0x93, 0x80, 0xcd, 0x4c, 0x7c, 0xed, 0xa0, 0xeb, 0x1b, 0x16, 0xa7, 0x63, 0xcc,
0x79, 0xbe, 0x9c, 0xef, 0x49, 0x7b, 0xb2, 0x3a, 0xdf, 0x97, 0x82, 0xba, 0xb8, 0x22, 0xa8, 0x17,
0x23, 0xb7, 0xb4, 0x14, 0xb9, 0xce, 0x7d, 0xd8, 0x5d, 0xfc, 0xf0, 0xd1, 0xf4, 0x69, 0x20, 0xbc,
0xee, 0x88, 0xbd, 0xe4, 0x5d, 0xe3, 0xfc, 0xb9, 0x04, 0x9b, 0xb9, 0xb1, 0xe2, 0xbf, 0xf2, 0x35,
0x31, 0x31, 0xaf, 0x43, 0x63, 0x12, 0x8b, 0x73, 0xa6, 0xb8, 0x7b, 0xc6, 0x67, 0xb6, 0x7a, 0x83,
0x45, 0xe9, 0x6a, 0x74, 0x43, 0xdf, 0xaa, 0xd2, 0x8b, 0xc5, 0x44, 0xeb, 0x85, 0x79, 0xd9, 0xa4,
0x59, 0x94, 0x2e, 0xe6, 0x9f, 0x47, 0x22, 0xb4, 0x59, 0x59, 0xa3, 0x16, 0xd2, 0xa5, 0xce, 0xc4,
0x2a, 0xf7, 0xb1, 0x98, 0xd7, 0x68, 0x0a, 0xcf, 0x93, 0xa6, 0x9a, 0x4d, 0x9a, 0x43, 0x68, 0x59,
0xef, 0x4a, 0x57, 0x45, 0xae, 0x96, 0x63, 0x3b, 0xa4, 0xb7, 0xd7, 0x0d, 0x4f, 0x96, 0xfc, 0x24,
0x7a, 0x18, 0x89, 0x90, 0x6e, 0xc5, 0x39, 0x98, 0xdc, 0x83, 0x5a, 0xd2, 0xb2, 0xdb, 0x11, 0xe1,
0xfa, 0x1a, 0x41, 0x76, 0x56, 0x90, 0x34, 0x65, 0xd0, 0x15, 0x8c, 0x87, 0x5e, 0x3c, 0x9b, 0xa8,
0x34, 0xe9, 0xe7, 0x08, 0xac, 0x6f, 0x13, 0xee, 0x29, 0x36, 0x4f, 0xfd, 0x39, 0x42, 0x17, 0x2d,
0x4b, 0xaa, 0x13, 0x18, 0x9b, 0x8c, 0x26, 0x5a, 0x6e, 0x6b, 0x8e, 0x3e, 0xe0, 0x33, 0xe9, 0xfc,
0xa6, 0x04, 0x57, 0x5f, 0x70, 0x22, 0xeb, 0xaf, 0x42, 0xea, 0xaf, 0x37, 0x00, 0x26, 0x18, 0x1b,
0xe8, 0x2e, 0xe3, 0xff, 0xba, 0xc1, 0x68, 0x6f, 0xa5, 0x4e, 0x2f, 0x65, 0x9d, 0xfe, 0x82, 0x8b,
0xf5, 0x32, 0x54, 0xbd, 0x11, 0x53, 0x49, 0x9b, 0x5b, 0xa7, 0x15, 0x0d, 0xee, 0xfb, 0x3a, 0x6e,
0x93, 0xb1, 0x6f, 0xa6, 0x77, 0x2b, 0xc6, 0xf1, 0x29, 0x6e, 0x1f, 0x9d, 0x68, 0xd2, 0xb7, 0x6a,
0x3e, 0x86, 0x00, 0x39, 0x03, 0x12, 0xf3, 0x73, 0xce, 0x02, 0xee, 0xeb, 0x4b, 0x2e, 0xe6, 0x52,
0xa6, 0x8d, 0xee, 0x07, 0x2f, 0xe5, 0xc6, 0x3d, 0x6a, 0xf9, 0x3b, 0x09, 0x7b, 0x3f, 0x54, 0xf1,
0x8c, 0x5e, 0x88, 0x17, 0xf1, 0xbb, 0x3d, 0xb8, 0xb4, 0x9a, 0x98, 0xb4, 0xa0, 0xa4, 0x2d, 0x64,
0x9a, 0x28, 0xbd, 0xd4, 0xea, 0x9e, 0xb3, 0x60, 0xca, 0x6d, 0xf4, 0x1b, 0xe0, 0x6e, 0xf1, 0xfd,
0x82, 0xf3, 0xbb, 0x22, 0xb4, 0x16, 0x33, 0x90, 0x7c, 0x98, 0x79, 0x05, 0x58, 0x6a, 0x10, 0xd7,
0xd4, 0xca, 0xcc, 0x1b, 0xc0, 0x27, 0xd0, 0xb4, 0x8e, 0xd2, 0x06, 0x95, 0xed, 0xe2, 0x62, 0xa7,
0xbf, 0x3e, 0xe5, 0x69, 0x63, 0x92, 0xae, 0xf5, 0x8c, 0x59, 0x4d, 0x1a, 0xcd, 0x12, 0x86, 0xf0,
0x0b, 0xd4, 0x48, 0x7a, 0xce, 0x84, 0xe3, 0x7f, 0x78, 0x89, 0x70, 0x7e, 0x04, 0xdb, 0xb8, 0xab,
0x15, 0xb2, 0xa5, 0xeb, 0xe5, 0xae, 0xa2, 0x0f, 0x60, 0x27, 0x61, 0x7c, 0x6c, 0xde, 0x7a, 0x24,
0xe5, 0xec, 0x65, 0xb9, 0x7f, 0x02, 0x97, 0xcc, 0x70, 0xaa, 0xc4, 0xb9, 0x50, 0xb3, 0x2e, 0x0f,
0x15, 0x8f, 0x5f, 0xc0, 0xdf, 0x82, 0x92, 0xf0, 0x8d, 0x79, 0x9b, 0x54, 0x2f, 0x9d, 0x9e, 0xb9,
0x4e, 0xf3, 0x12, 0x3a, 0x9e, 0xc7, 0x31, 0x6f, 0x5f, 0x56, 0x4a, 0xdf, 0xe4, 0x65, 0x5e, 0x4a,
0x4f, 0xc8, 0xb1, 0x90, 0xf2, 0x15, 0xc4, 0x7c, 0x5d, 0x80, 0xa6, 0x96, 0x73, 0x3f, 0x8a, 0xce,
0xc6, 0x2c, 0x3e, 0x5b, 0xcf, 0x38, 0x8d, 0x03, 0x6b, 0x06, 0xbd, 0x4c, 0x9b, 0xd5, 0x52, 0xa6,
0x59, 0xbd, 0x0a, 0x75, 0x2c, 0x34, 0xae, 0xa6, 0x35, 0x89, 0x5c, 0x43, 0xc4, 0x30, 0x0e, 0xb2,
0x1d, 0xc7, 0x46, 0xbe, 0xe3, 0x78, 0x03, 0xc0, 0xe7, 0x01, 0xd7, 0x9d, 0x1b, 0x53, 0x98, 0xc8,
0x65, 0x5a, 0xb7, 0x98, 0x8e, 0x72, 0x7e, 0x05, 0xaf, 0x6b, 0x0d, 0xfb, 0xa1, 0x1c, 0x4a, 0x1e,
0xeb, 0x0f, 0x99, 0x31, 0x7d, 0x8d, 0xaa, 0xbb, 0x50, 0x9b, 0x5a, 0x3a, 0xab, 0x6f, 0x0a, 0xe3,
0xd4, 0x3c, 0x62, 0x02, 0x9b, 0x74, 0x73, 0x03, 0x55, 0x11, 0xde, 0xcf, 0x35, 0x44, 0xe5, 0x9c,
0x7a, 0xce, 0x43, 0x93, 0x7c, 0xdd, 0x80, 0xb3, 0xf8, 0x81, 0x90, 0x2a, 0x8a, 0x67, 0xd9, 0x6b,
0xa9, 0x90, 0xbb, 0x96, 0xde, 0x00, 0xf0, 0x34, 0xa1, 0x39, 0x4b, 0xd1, 0x9c, 0xc5, 0x62, 0x3a,
0xca, 0xf9, 0x5b, 0x01, 0x88, 0x16, 0x66, 0x9f, 0x9e, 0x8e, 0x84, 0xa7, 0xc7, 0x8d, 0x95, 0x23,
0x55, 0x66, 0x66, 0x2d, 0xae, 0x99, 0x59, 0x4b, 0x38, 0x11, 0x2c, 0xcd, 0xac, 0x65, 0x44, 0x27,
0x33, 0xeb, 0x55, 0xa8, 0x63, 0x0b, 0x80, 0x43, 0xab, 0x99, 0x21, 0x70, 0x68, 0x3d, 0x5e, 0x39,
0xb4, 0x56, 0x90, 0x60, 0xcd, 0xd0, 0x5a, 0xcd, 0x0e, 0xad, 0x23, 0xb8, 0xb8, 0x7c, 0x12, 0xb9,
0x7e, 0x2e, 0x7f, 0x1f, 0x6a, 0x13, 0x4b, 0x64, 0x2f, 0x9b, 0x6b, 0xf9, 0x3c, 0xcf, 0x4b, 0xa2,
0x29, 0xb5, 0xf3, 0xc7, 0x22, 0x34, 0x32, 0x0f, 0x42, 0x6b, 0xfc, 0xde, 0x86, 0xaa, 0xbd, 0xce,
0x13, 0x7b, 0x59, 0x30, 0xab, 0x52, 0x29, 0xa7, 0x52, 0xbe, 0x58, 0x99, 0xd6, 0x21, 0x53, 0xac,
0x08, 0x94, 0x27, 0x4c, 0x8d, 0x6c, 0xe1, 0xc1, 0x75, 0xea, 0xa9, 0x4a, 0xc6, 0x53, 0xd9, 0xb7,
0x18, 0xd3, 0xb2, 0xa7, 0x6f, 0x31, 0x3b, 0xb0, 0xc1, 0xc7, 0xd1, 0xe7, 0x02, 0xe7, 0xfd, 0x3a,
0x35, 0x80, 0x76, 0xd5, 0x73, 0x16, 0x04, 0x5c, 0xd9, 0x1e, 0xde, 0x42, 0x5a, 0xb8, 0x0e, 0x23,
0x5b, 0xcc, 0x71, 0x8d, 0x6e, 0x15, 0xbe, 0xcf, 0x43, 0x5b, 0xc4, 0x2d, 0xb4, 0xbe, 0x81, 0x77,
0xbe, 0xb2, 0xe6, 0x4a, 0xde, 0xf1, 0x56, 0x9b, 0x2b, 0x63, 0x94, 0xe2, 0xca, 0xf7, 0x93, 0x52,
0x7e, 0xbc, 0xcf, 0x8c, 0xd1, 0xb8, 0xc6, 0x8e, 0x95, 0xc7, 0xe2, 0x9c, 0xfb, 0xee, 0xb3, 0x38,
0x1a, 0x5b, 0x2b, 0x35, 0x2c, 0xee, 0xe3, 0x38, 0x1a, 0x93, 0x7b, 0xb0, 0x6b, 0x7a, 0x4b, 0xc9,
0x7d, 0x17, 0x37, 0xec, 0x88, 0x8c, 0x0f, 0x3c, 0x26, 0xd1, 0x2f, 0x63, 0xa7, 0x29, 0xb9, 0xdf,
0x4b, 0xf7, 0xf7, 0xf5, 0xb6, 0x99, 0x97, 0x42, 0x2f, 0x11, 0x6f, 0x0c, 0x0b, 0x06, 0x85, 0xd2,
0xbf, 0x07, 0x35, 0x5b, 0x46, 0x92, 0xf2, 0xbd, 0xe6, 0x01, 0x31, 0x25, 0x73, 0xa6, 0xa6, 0x66,
0x64, 0x9e, 0x3c, 0xc9, 0x6d, 0xb4, 0x03, 0x3e, 0x8f, 0x16, 0x56, 0xbd, 0x42, 0x5a, 0x5a, 0x9a,
0x50, 0xe9, 0xcf, 0xda, 0x77, 0xb4, 0x24, 0x8e, 0x97, 0x39, 0xf4, 0x2e, 0x4d, 0xc9, 0x9c, 0x7f,
0x17, 0xcc, 0x15, 0x72, 0xcc, 0xce, 0xd3, 0x3e, 0x20, 0x1b, 0xaf, 0x85, 0x7c, 0xbc, 0xae, 0x7a,
0xc1, 0xba, 0x06, 0xf5, 0x67, 0xec, 0x3c, 0x9a, 0xc6, 0x42, 0x19, 0xd7, 0xd4, 0xe8, 0x1c, 0xf1,
0x82, 0xbb, 0xf5, 0x26, 0x34, 0x4d, 0x67, 0xef, 0x66, 0x53, 0xb8, 0x61, 0x70, 0x66, 0xf4, 0xf8,
0x36, 0x5c, 0x30, 0x97, 0xa2, 0x1c, 0x45, 0xb1, 0xc2, 0x2e, 0x4c, 0xda, 0x78, 0xdd, 0xc6, 0x8d,
0x63, 0x8d, 0xd7, 0xdd, 0x98, 0xd4, 0x75, 0x80, 0x87, 0xd2, 0xbe, 0xe5, 0xe9, 0xa5, 0x8e, 0x23,
0x21, 0x5d, 0xc5, 0x65, 0x12, 0xb6, 0x15, 0x21, 0x4f, 0xb8, 0x54, 0x0f, 0xcb, 0xb5, 0x72, 0x6b,
0xc3, 0xf9, 0x7d, 0xc1, 0xdc, 0xde, 0x4b, 0x8d, 0xec, 0x9a, 0xb0, 0x5c, 0x6c, 0xeb, 0x8c, 0x0d,
0x72, 0x6d, 0x5d, 0x1f, 0xae, 0x8f, 0xcc, 0x35, 0xec, 0xb2, 0xd8, 0x1b, 0x89, 0x73, 0xee, 0xca,
0xe9, 0x64, 0xa2, 0x75, 0xe7, 0x21, 0x7b, 0x1a, 0xd8, 0x21, 0xa6, 0x46, 0xaf, 0x59, 0xb2, 0x8e,
0xa1, 0x3a, 0x36, 0x44, 0x7d, 0x43, 0xe3, 0xfc, 0xa9, 0x60, 0x82, 0xe1, 0x44, 0x4f, 0xa1, 0x7a,
0xae, 0xe5, 0xf1, 0x4b, 0xbe, 0x9b, 0x7c, 0x08, 0x15, 0x3b, 0xc8, 0xea, 0xef, 0x6c, 0x2d, 0x36,
0xff, 0x19, 0x81, 0x7b, 0x27, 0xf3, 0x11, 0x97, 0x5a, 0x26, 0xe7, 0x2e, 0x34, 0x32, 0x68, 0xd2,
0x80, 0xea, 0x70, 0x70, 0x30, 0x38, 0xfc, 0x74, 0xd0, 0x7a, 0x4d, 0x03, 0x27, 0x74, 0x78, 0x7c,
0xd2, 0xef, 0xb5, 0x0a, 0xe4, 0x02, 0x6c, 0x0e, 0x07, 0x08, 0x7e, 0x7a, 0x48, 0x4f, 0x1e, 0x7c,
0xd6, 0x2a, 0x3a, 0x5f, 0x97, 0xcc, 0x10, 0xf8, 0x24, 0x33, 0x64, 0xdb, 0xe6, 0x74, 0x8d, 0xf2,
0x04, 0xca, 0x98, 0x3f, 0x36, 0x98, 0xf4, 0x5a, 0x1f, 0x48, 0x45, 0x36, 0xc1, 0x8b, 0x2a, 0xd2,
0xc1, 0xe5, 0x8d, 0xf4, 0x15, 0x14, 0x9e, 0x26, 0x39, 0x3e, 0x47, 0x68, 0x97, 0xd8, 0xb1, 0xc5,
0x14, 0x35, 0xfb, 0xb6, 0x91, 0xe2, 0x3a, 0xf8, 0x6a, 0x18, 0x73, 0x39, 0x89, 0x42, 0x99, 0xdc,
0x8c, 0x29, 0xac, 0x2f, 0xd9, 0x98, 0x4f, 0x02, 0x61, 0x98, 0x4d, 0xfc, 0xd5, 0x2d, 0xa6, 0xa3,
0x08, 0x5f, 0xfd, 0x98, 0x50, 0x43, 0xcb, 0x7e, 0x3f, 0x6f, 0xd9, 0x15, 0xa7, 0xde, 0x7b, 0xb2,
0xf4, 0xdc, 0xb0, 0xf2, 0x09, 0xc2, 0xf8, 0xb0, 0x9e, 0xb6, 0x71, 0x3f, 0x03, 0xb2, 0xcc, 0xb9,
0xe4, 0x8b, 0xa3, 0xfe, 0xa0, 0xb7, 0x3f, 0xf8, 0xa4, 0x55, 0x20, 0x4d, 0xa8, 0x75, 0xba, 0xdd,
0xfe, 0x91, 0xf6, 0x4c, 0x51, 0x43, 0xbd, 0x7e, 0xf7, 0xd1, 0xfe, 0xa0, 0xdf, 0x6b, 0x95, 0x34,
0xd4, 0xed, 0x0c, 0xba, 0xfd, 0x47, 0xfd, 0x5e, 0xab, 0xec, 0xfc, 0xa3, 0x60, 0xfa, 0xbb, 0x6e,
0x6e, 0xd6, 0xef, 0x71, 0x4f, 0xc8, 0xf5, 0x8f, 0x88, 0xd7, 0xa0, 0x6e, 0xed, 0xb9, 0x9f, 0x44,
0xda, 0x1c, 0x41, 0x7e, 0x01, 0xdb, 0xbe, 0xe5, 0x77, 0x73, 0x91, 0xf7, 0xde, 0x62, 0xa7, 0xbc,
0xea, 0x93, 0x7b, 0xc9, 0xc2, 0x9a, 0x67, 0xcb, 0xcf, 0xc1, 0xce, 0xbb, 0xb0, 0x95, 0xa7, 0xc8,
0x1d, 0xf6, 0xb5, 0xdc, 0x61, 0x0b, 0xce, 0x37, 0x45, 0xd8, 0x5e, 0xf8, 0x03, 0x6d, 0x7d, 0xcd,
0x5f, 0x7c, 0xd5, 0x28, 0x2e, 0xbd, 0x6a, 0x90, 0x77, 0x81, 0x64, 0x49, 0xdc, 0xec, 0x78, 0xd8,
0xca, 0x10, 0x9a, 0xbb, 0x2a, 0xdb, 0x44, 0x94, 0x5f, 0xa5, 0x89, 0x20, 0x3f, 0x85, 0x1d, 0x19,
0x79, 0x82, 0x05, 0x6e, 0x20, 0xc2, 0xb3, 0xf4, 0xaf, 0xe0, 0xf6, 0x06, 0x4a, 0x59, 0x18, 0xbb,
0x8f, 0x91, 0xf2, 0x91, 0x08, 0xcf, 0x92, 0xff, 0xe8, 0x88, 0x5c, 0x44, 0xa1, 0x48, 0x3d, 0xb6,
0x26, 0xdd, 0xa5, 0xeb, 0xa7, 0x7f, 0x5e, 0xae, 0x10, 0xb9, 0xd4, 0xbe, 0x52, 0xc2, 0x17, 0x51,
0xd2, 0x91, 0x00, 0x94, 0x3d, 0xb7, 0x63, 0x49, 0xb6, 0x05, 0x2c, 0xe4, 0x5b, 0xc0, 0x03, 0x68,
0xd8, 0xff, 0xa9, 0x4f, 0x74, 0x5d, 0x2e, 0x62, 0x34, 0x7c, 0x6b, 0xfe, 0xc5, 0xce, 0xfc, 0x9f,
0xed, 0xc7, 0xf6, 0x8f, 0x6d, 0x2b, 0x74, 0x4f, 0x33, 0xd0, 0x2c, 0xb7, 0xf3, 0x87, 0x02, 0x6c,
0x69, 0x15, 0x33, 0x5f, 0xfe, 0x21, 0x34, 0xe2, 0x14, 0x4a, 0xe6, 0xcb, 0x9d, 0xb9, 0xfc, 0x39,
0x29, 0xcd, 0x12, 0x92, 0x3b, 0xb0, 0x23, 0xa7, 0x4f, 0x6d, 0xe1, 0x95, 0x0f, 0x65, 0x14, 0xde,
0x9f, 0x29, 0x9e, 0x74, 0x64, 0x2b, 0xf7, 0xc8, 0xbb, 0x70, 0x21, 0xf1, 0xc6, 0x9c, 0xc1, 0x3c,
0xf4, 0x2c, 0x6f, 0x38, 0x5f, 0x15, 0xd2, 0xee, 0x46, 0x17, 0x57, 0x9c, 0x4c, 0xd2, 0xb8, 0xd3,
0xcb, 0x95, 0xe5, 0xf3, 0x12, 0x54, 0xec, 0xeb, 0xa8, 0x29, 0x0d, 0x16, 0xca, 0x46, 0x6e, 0x39,
0x17, 0xb9, 0xd7, 0xa0, 0x3e, 0x7f, 0x1c, 0xd8, 0xc0, 0x79, 0x69, 0x8e, 0x98, 0x27, 0x71, 0x25,
0xdb, 0x11, 0xff, 0xb5, 0x08, 0x17, 0x32, 0xaa, 0xe9, 0xd1, 0x2c, 0x0a, 0xc9, 0x5d, 0xa8, 0x30,
0x5c, 0xa1, 0x8e, 0x5b, 0x77, 0x9c, 0x95, 0xdd, 0x82, 0x21, 0xde, 0x33, 0x3f, 0xd4, 0x72, 0x90,
0xb7, 0x60, 0x33, 0x0a, 0x7c, 0x4b, 0x32, 0x4c, 0x8b, 0x50, 0x1e, 0x69, 0x5b, 0x18, 0x0d, 0xd9,
0x09, 0x7c, 0x4d, 0x43, 0x92, 0x50, 0xe9, 0xa2, 0x5c, 0xb1, 0xda, 0x5d, 0x80, 0xcd, 0x83, 0xfe,
0x67, 0xdd, 0x0e, 0xed, 0xb9, 0x9d, 0x5e, 0x0f, 0xf3, 0x9d, 0xc0, 0x56, 0xa7, 0xdb, 0x3d, 0x1c,
0x0e, 0x4e, 0x8e, 0x2d, 0xae, 0x40, 0x2e, 0xc2, 0x76, 0x42, 0xd6, 0xeb, 0x3f, 0xea, 0x9b, 0x5b,
0x70, 0x07, 0x5a, 0x29, 0x21, 0xed, 0x3f, 0x3e, 0x7c, 0x82, 0xb7, 0x21, 0x40, 0xe5, 0xd1, 0x61,
0xf7, 0x40, 0xdf, 0x85, 0xfa, 0xea, 0x18, 0x0e, 0x2c, 0xb4, 0x41, 0xb6, 0xa1, 0x31, 0xdc, 0xef,
0xb9, 0xc3, 0xa3, 0x5e, 0x47, 0x0b, 0xa8, 0x90, 0x16, 0x34, 0x07, 0x9d, 0xc7, 0x7d, 0xb7, 0xfb,
0xa0, 0x33, 0xf8, 0xa4, 0xdf, 0x6b, 0x55, 0x9d, 0x63, 0xd3, 0x2d, 0x2c, 0xe5, 0x1f, 0x76, 0xa0,
0xfc, 0x0b, 0x95, 0x4c, 0x48, 0x7a, 0xbd, 0x62, 0x28, 0x5d, 0xf9, 0xbc, 0x74, 0x7f, 0xf3, 0xe7,
0x8d, 0xbd, 0xdb, 0xf7, 0x12, 0x93, 0x3c, 0xad, 0xe0, 0xea, 0xbd, 0xff, 0x04, 0x00, 0x00, 0xff,
0xff, 0x6c, 0x00, 0x17, 0x3d, 0x2d, 0x22, 0x00, 0x00,
// 3057 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x39, 0x4d, 0x73, 0x1b, 0xc7,
0xb1, 0xc6, 0x07, 0xf1, 0xd1, 0x00, 0x41, 0x68, 0x44, 0x4b, 0x10, 0x25, 0x97, 0xa4, 0xb5, 0x5d,
0xd6, 0x7b, 0xe5, 0x47, 0xbd, 0x27, 0xbf, 0xc4, 0x8e, 0x24, 0x97, 0x03, 0x01, 0xb0, 0x45, 0x51,
0x02, 0x99, 0x21, 0x21, 0xc7, 0xa9, 0x54, 0x6d, 0x46, 0xbb, 0x23, 0x62, 0xcd, 0xc5, 0x2e, 0xb2,
0x33, 0xa0, 0x02, 0x1f, 0x52, 0x95, 0xfc, 0x82, 0x54, 0x2e, 0xf1, 0xd1, 0xe7, 0x54, 0x4e, 0xa9,
0xca, 0x21, 0xb7, 0x9c, 0x52, 0xb9, 0xe7, 0x98, 0xfc, 0x82, 0x54, 0x7e, 0x40, 0x8e, 0xa9, 0xe9,
0x99, 0xfd, 0xc2, 0x87, 0x42, 0x56, 0x4e, 0x39, 0x61, 0xbb, 0xa7, 0xbb, 0xb7, 0xb7, 0xbf, 0x7b,
0x00, 0x9b, 0x53, 0xe6, 0x45, 0x5e, 0x70, 0xb2, 0x3b, 0x8d, 0x42, 0x19, 0x92, 0x1a, 0xfe, 0xbc,
0x98, 0xbd, 0xdc, 0xb9, 0xec, 0x8c, 0x99, 0xb4, 0x3d, 0x97, 0x07, 0xd2, 0x93, 0x73, 0x7d, 0xbc,
0x73, 0x59, 0xcc, 0x03, 0xc7, 0x16, 0x5c, 0x4a, 0x2f, 0x38, 0x11, 0x06, 0x69, 0xb1, 0xe9, 0xd4,
0xf7, 0x1c, 0x26, 0xbd, 0x30, 0xb0, 0x27, 0x5c, 0x32, 0x97, 0x49, 0x66, 0x4f, 0xb8, 0x10, 0xec,
0x84, 0x6b, 0x1a, 0x8b, 0xc1, 0xf5, 0x4f, 0xb9, 0x74, 0xc6, 0x5e, 0x70, 0xf2, 0x88, 0x39, 0xa7,
0xdc, 0x1d, 0x4d, 0xfb, 0x4c, 0xb2, 0x3e, 0x97, 0xcc, 0xf3, 0x05, 0xb9, 0x09, 0x0d, 0x64, 0x0a,
0x66, 0x93, 0x17, 0x3c, 0xea, 0x14, 0x6e, 0x15, 0xee, 0x6c, 0x52, 0x50, 0xa8, 0x21, 0x62, 0xc8,
0x6d, 0x68, 0xca, 0x50, 0x32, 0x3f, 0xa6, 0x28, 0x22, 0x45, 0x03, 0x71, 0x9a, 0xc4, 0xfa, 0x45,
0x15, 0x2a, 0x4a, 0xf6, 0x6c, 0x4a, 0xb6, 0x61, 0xc3, 0xf1, 0x43, 0xe7, 0x14, 0x05, 0x95, 0xa9,
0x06, 0x48, 0x0b, 0x8a, 0x9e, 0x8b, 0x9c, 0x75, 0x5a, 0xf4, 0x5c, 0xf2, 0x09, 0xd4, 0x9c, 0x30,
0x90, 0xcc, 0x91, 0xa2, 0x53, 0xba, 0x55, 0xba, 0xd3, 0xb8, 0xf7, 0xf6, 0x6e, 0xfc, 0xf9, 0xbb,
0x47, 0xf3, 0xc0, 0xd9, 0x0b, 0x84, 0x64, 0xbe, 0x8f, 0x1f, 0xd6, 0xd3, 0x94, 0xcf, 0xef, 0xd1,
0x84, 0x89, 0x7c, 0x07, 0x1a, 0x4e, 0x38, 0x99, 0xcc, 0x02, 0x4f, 0x7a, 0x5c, 0x74, 0xca, 0x28,
0xe3, 0x6a, 0x5e, 0x46, 0xcf, 0x10, 0xcc, 0x69, 0x96, 0x96, 0x1c, 0xc0, 0x56, 0x2c, 0xc6, 0xd8,
0xa0, 0xb3, 0x71, 0xab, 0x70, 0xa7, 0x71, 0xef, 0xdd, 0x94, 0xfd, 0x35, 0x06, 0xa3, 0x8b, 0xdc,
0x64, 0x04, 0x24, 0x23, 0x3f, 0x96, 0x59, 0xb9, 0x88, 0xcc, 0x15, 0x02, 0xc8, 0x07, 0x50, 0x9d,
0x46, 0xe1, 0x4b, 0xcf, 0xe7, 0x9d, 0x2a, 0xca, 0xba, 0x96, 0xca, 0x8a, 0x65, 0x1c, 0x6a, 0x02,
0x1a, 0x53, 0x92, 0x67, 0xd0, 0x32, 0x8f, 0xb1, 0x1e, 0xb5, 0x8b, 0xe8, 0xb1, 0xc0, 0x4c, 0xee,
0x42, 0xd5, 0x44, 0x5c, 0xa7, 0x8e, 0x72, 0xde, 0xcc, 0x9b, 0xf8, 0x48, 0x1f, 0xd2, 0x98, 0x4a,
0x19, 0x37, 0x0e, 0xd1, 0x58, 0x01, 0xb8, 0x90, 0x71, 0x17, 0xb8, 0xc9, 0x03, 0x68, 0xbc, 0x9c,
0xf9, 0xfe, 0x3e, 0x9f, 0xab, 0x6c, 0xe9, 0x34, 0x16, 0x2d, 0xa1, 0xb4, 0x30, 0x87, 0x9f, 0xce,
0x7c, 0x9f, 0x66, 0xa9, 0x95, 0x67, 0x32, 0x60, 0xac, 0x50, 0xf3, 0x42, 0x9e, 0x59, 0x16, 0x40,
0xba, 0xd0, 0x7e, 0xc5, 0xa4, 0x33, 0x3e, 0x08, 0xfc, 0x79, 0xd7, 0x71, 0xc2, 0x59, 0x20, 0x3b,
0x9b, 0xab, 0xcc, 0x63, 0x0e, 0xe9, 0x12, 0x39, 0xb1, 0xe1, 0xea, 0x22, 0x2e, 0x56, 0xaf, 0x75,
0x11, 0xf5, 0xd6, 0x49, 0xb1, 0xfe, 0x5e, 0x86, 0xe6, 0xb3, 0x99, 0x2f, 0xbd, 0xf8, 0x8d, 0x04,
0xca, 0x01, 0x9b, 0x70, 0xcc, 0xcb, 0x3a, 0xc5, 0x67, 0x72, 0x03, 0xea, 0xd2, 0x9b, 0x70, 0x21,
0xd9, 0x64, 0x8a, 0xd9, 0x59, 0xa2, 0x29, 0x42, 0x9d, 0xea, 0x1a, 0xe4, 0x84, 0x41, 0xa7, 0x84,
0x6c, 0x29, 0x82, 0x7c, 0x02, 0xe0, 0x84, 0x7e, 0x18, 0xd9, 0x63, 0x26, 0xc6, 0x26, 0x01, 0x6f,
0xa5, 0x4a, 0x67, 0xdf, 0xbd, 0xdb, 0x53, 0x84, 0x8f, 0x99, 0x18, 0xd3, 0xba, 0x13, 0x3f, 0x92,
0x6b, 0xaa, 0x06, 0x28, 0x01, 0x9e, 0x8b, 0x09, 0x58, 0xa2, 0x55, 0x84, 0xf7, 0x5c, 0xf2, 0x1e,
0x6c, 0x9d, 0xf2, 0xb9, 0xc3, 0x22, 0xd7, 0x36, 0x35, 0x12, 0xd3, 0xa9, 0x4e, 0x5b, 0x06, 0x7d,
0xa8, 0xb1, 0xe4, 0x2a, 0x54, 0x4f, 0xf9, 0xdc, 0x9e, 0x79, 0x2e, 0xe6, 0x48, 0x9d, 0x56, 0x4e,
0xf9, 0x7c, 0xe4, 0xb9, 0xe4, 0x21, 0x54, 0xbc, 0x09, 0x3b, 0xe1, 0x2a, 0xfe, 0x95, 0x66, 0xef,
0xac, 0xd1, 0x6c, 0xcf, 0x14, 0xd9, 0x3d, 0x45, 0x4c, 0x0d, 0x0f, 0xb9, 0x0b, 0x97, 0x9d, 0x99,
0x90, 0xe1, 0xc4, 0xfb, 0x4a, 0x97, 0x56, 0x54, 0x0c, 0x53, 0xa0, 0x4e, 0x49, 0xee, 0x08, 0x3f,
0x6d, 0xe7, 0x36, 0xd4, 0x93, 0x6f, 0x54, 0x25, 0xd0, 0x0b, 0x5c, 0xfe, 0x93, 0x4e, 0xe1, 0x56,
0xe9, 0x4e, 0x89, 0x6a, 0x60, 0xe7, 0x2f, 0x05, 0xd8, 0xcc, 0xbd, 0x2d, 0xab, 0x7c, 0x21, 0xa7,
0x7c, 0xec, 0xaa, 0x62, 0xc6, 0x55, 0x1d, 0xa8, 0x4e, 0xd9, 0xdc, 0x0f, 0x99, 0x8b, 0xae, 0x68,
0xd2, 0x18, 0x54, 0xaf, 0x7b, 0xe5, 0xb9, 0x52, 0xf9, 0x40, 0x19, 0x51, 0x03, 0xe4, 0x0a, 0x54,
0xc6, 0xdc, 0x3b, 0x19, 0x4b, 0x63, 0x5b, 0x03, 0x91, 0x1d, 0xa8, 0xa9, 0x04, 0x17, 0xde, 0x57,
0x1c, 0x6d, 0x5a, 0xa2, 0x09, 0x4c, 0xde, 0x86, 0xcd, 0x08, 0x9f, 0x6c, 0xc9, 0xa2, 0x13, 0x2e,
0xd1, 0xa6, 0x25, 0xda, 0xd4, 0xc8, 0x63, 0xc4, 0xa5, 0x05, 0xbe, 0x96, 0x29, 0xf0, 0xd6, 0x9f,
0x0b, 0x70, 0xf9, 0x69, 0xe8, 0x30, 0xdf, 0x78, 0xe6, 0xd0, 0x28, 0xf7, 0x2d, 0x28, 0x9f, 0xf2,
0xb9, 0x40, 0x53, 0x34, 0xee, 0xdd, 0x4e, 0xbd, 0xb0, 0x82, 0x78, 0x77, 0x9f, 0xcf, 0x29, 0x92,
0x93, 0xfb, 0xd0, 0x9c, 0x28, 0x37, 0x31, 0x93, 0x5d, 0x45, 0xcc, 0x89, 0x2b, 0xab, 0x9d, 0x48,
0x73, 0xb4, 0xea, 0x0b, 0xa7, 0x4c, 0x88, 0x57, 0x61, 0xe4, 0x9a, 0xa8, 0x4d, 0xe0, 0x9d, 0xff,
0x81, 0xd2, 0x3e, 0x9f, 0xaf, 0xcc, 0x05, 0x02, 0x65, 0xd5, 0xf4, 0xf0, 0x55, 0x4d, 0x8a, 0xcf,
0xd6, 0xef, 0x0b, 0xf0, 0x66, 0x4e, 0x51, 0xce, 0xa3, 0xc7, 0xdc, 0xf7, 0x43, 0x15, 0xa1, 0x26,
0x32, 0xed, 0x33, 0x1e, 0x09, 0x2f, 0x0c, 0x50, 0xd8, 0x06, 0x6d, 0x19, 0xf4, 0x73, 0x8d, 0x55,
0x4e, 0x9e, 0x72, 0x8e, 0x41, 0xae, 0x25, 0x57, 0x14, 0xb8, 0xe7, 0x62, 0xdf, 0xe5, 0x67, 0x9e,
0xc3, 0x6d, 0x54, 0x45, 0x6b, 0x0a, 0x1a, 0x35, 0x54, 0x0a, 0xa5, 0x04, 0x72, 0x3e, 0xe5, 0xe8,
0xdd, 0x84, 0xe0, 0x78, 0x3e, 0xc5, 0xec, 0x15, 0xde, 0x49, 0xc0, 0xe4, 0x2c, 0xe2, 0xe8, 0xe5,
0x26, 0x4d, 0x11, 0xd6, 0x37, 0x05, 0x68, 0x2b, 0xb5, 0xb3, 0x9d, 0x74, 0x4d, 0x77, 0x7e, 0x0f,
0xb6, 0xbc, 0x0c, 0x95, 0x9d, 0xb4, 0xea, 0x56, 0x16, 0x9d, 0xd3, 0x19, 0x55, 0x2a, 0x2d, 0xa9,
0x14, 0x1b, 0xb6, 0x9c, 0x8f, 0xdc, 0xd8, 0x44, 0x1b, 0x38, 0x3a, 0xc4, 0xa0, 0xf5, 0xb7, 0x02,
0x5c, 0x5d, 0xd3, 0xec, 0xcf, 0x39, 0x47, 0xbc, 0x0d, 0x9b, 0xa6, 0x63, 0xd9, 0x98, 0xba, 0x46,
0xa5, 0xa6, 0x41, 0xea, 0x3c, 0xbb, 0x06, 0x35, 0x1e, 0x08, 0x3b, 0xa3, 0x58, 0x95, 0x07, 0x02,
0x6d, 0x7c, 0x1b, 0x9a, 0x3e, 0x13, 0xd2, 0x9e, 0x4d, 0x5d, 0x26, 0xb9, 0xae, 0x43, 0x65, 0xda,
0x50, 0xb8, 0x91, 0x46, 0xa9, 0x6f, 0x16, 0x73, 0x21, 0xf9, 0xc4, 0x96, 0xec, 0x44, 0xb5, 0xf5,
0x92, 0xfa, 0x66, 0x8d, 0x3a, 0x66, 0x27, 0x82, 0xbc, 0x0b, 0x2d, 0x5f, 0xc5, 0x88, 0x1d, 0x78,
0xce, 0x29, 0xbe, 0x44, 0x97, 0xa2, 0x4d, 0xc4, 0x0e, 0x0d, 0xd2, 0xfa, 0x59, 0x05, 0xae, 0xad,
0x9d, 0x6c, 0xc8, 0xff, 0xc2, 0x76, 0x56, 0x11, 0x1b, 0x79, 0xfd, 0xb9, 0xf9, 0x7a, 0x92, 0x51,
0xe8, 0xa9, 0x3e, 0xf9, 0x0f, 0x36, 0x85, 0xf2, 0x2d, 0x73, 0x5d, 0xee, 0x62, 0x41, 0xad, 0x51,
0x0d, 0xa8, 0x38, 0x79, 0xa1, 0x9c, 0xcc, 0x5d, 0x1c, 0x19, 0x6a, 0x34, 0x06, 0x15, 0xfd, 0x64,
0xa6, 0x74, 0x6a, 0x68, 0x7a, 0x04, 0x14, 0x7d, 0xc4, 0x27, 0xe1, 0x19, 0x77, 0xb1, 0xa3, 0xd7,
0x68, 0x0c, 0x92, 0x5b, 0xd0, 0x1c, 0x33, 0x61, 0xa3, 0x58, 0x7b, 0x26, 0xb0, 0x37, 0xd7, 0x28,
0x8c, 0x99, 0xe8, 0x2a, 0xd4, 0x08, 0x0b, 0xfc, 0x19, 0x8f, 0xbc, 0x97, 0xf1, 0xe8, 0x2c, 0x24,
0x93, 0x33, 0xdd, 0x7a, 0x4b, 0x94, 0x64, 0x8f, 0x8e, 0xf0, 0x04, 0x87, 0xe0, 0x68, 0x26, 0x64,
0x4c, 0xb9, 0x85, 0x94, 0x0d, 0xc4, 0x19, 0x92, 0x8f, 0xe1, 0xba, 0x99, 0x0c, 0xed, 0x88, 0xff,
0x78, 0xc6, 0x85, 0xd4, 0x5e, 0x44, 0x16, 0xde, 0x69, 0x23, 0x47, 0xc7, 0x90, 0x50, 0x4d, 0x81,
0xce, 0x54, 0xfc, 0x7c, 0x3d, 0xbb, 0x4e, 0x83, 0x4b, 0x6b, 0xd9, 0x7b, 0x98, 0x19, 0x9f, 0xc0,
0x8d, 0x45, 0x76, 0x65, 0x0e, 0xc9, 0xcd, 0xeb, 0x09, 0xf2, 0x5f, 0xcb, 0xf3, 0x53, 0xa4, 0xd0,
0xef, 0x5f, 0x2f, 0x40, 0x2b, 0x70, 0x79, 0xbd, 0x00, 0xad, 0xc1, 0x6d, 0x68, 0xba, 0x9e, 0x98,
0xfa, 0x6c, 0xae, 0xe3, 0x6b, 0x1b, 0x5d, 0xdf, 0x30, 0x38, 0x15, 0x63, 0xd6, 0xab, 0xe5, 0x7c,
0x8f, 0xc7, 0x93, 0xd5, 0xf9, 0xbe, 0x14, 0xd4, 0xc5, 0x15, 0x41, 0xbd, 0x18, 0xb9, 0xa5, 0xa5,
0xc8, 0xb5, 0x1e, 0xc1, 0xce, 0xe2, 0x8b, 0x0f, 0x67, 0x2f, 0x7c, 0xcf, 0xe9, 0x8d, 0xd9, 0x39,
0x6b, 0x8d, 0xf5, 0xbb, 0x12, 0x6c, 0xe6, 0xd6, 0x8a, 0x7f, 0xc9, 0xd7, 0xc4, 0xc4, 0xbc, 0x09,
0x8d, 0x69, 0xe4, 0x9d, 0x31, 0xc9, 0xed, 0x53, 0x3e, 0x37, 0xdd, 0x1b, 0x0c, 0x4a, 0x75, 0xa3,
0x5b, 0xaa, 0xaa, 0x0a, 0x27, 0xf2, 0xa6, 0x4a, 0x2f, 0xcc, 0xcb, 0x26, 0xcd, 0xa2, 0x54, 0x33,
0xff, 0x32, 0xf4, 0x02, 0x93, 0x95, 0x35, 0x6a, 0x20, 0xd5, 0xea, 0x74, 0xac, 0x72, 0x17, 0x9b,
0x79, 0x8d, 0x26, 0x70, 0x9a, 0x34, 0xd5, 0x6c, 0xd2, 0x1c, 0x40, 0xdb, 0x78, 0x57, 0xd8, 0x32,
0xb4, 0x95, 0x1c, 0x33, 0x21, 0xbd, 0xbb, 0x6e, 0x79, 0x32, 0xe4, 0xc7, 0xe1, 0x93, 0xd0, 0x0b,
0x68, 0x2b, 0xca, 0xc1, 0xe4, 0x01, 0xd4, 0xe2, 0x91, 0xdd, 0xac, 0x08, 0x37, 0xd7, 0x08, 0x32,
0xbb, 0x82, 0xa0, 0x09, 0x83, 0xea, 0x60, 0x3c, 0x70, 0xa2, 0xf9, 0x54, 0x26, 0x49, 0x9f, 0x22,
0xb0, 0xbf, 0x4d, 0xb9, 0x23, 0x59, 0x9a, 0xfa, 0x29, 0x42, 0x35, 0x2d, 0x43, 0xaa, 0x12, 0x18,
0x87, 0x8c, 0x26, 0x5a, 0xae, 0x95, 0xa2, 0xf7, 0xf9, 0x5c, 0x58, 0x3f, 0x2f, 0xc1, 0xf5, 0xd7,
0x7c, 0x91, 0xf1, 0x57, 0x21, 0xf1, 0xd7, 0x5b, 0x00, 0x53, 0x8c, 0x0d, 0x74, 0x97, 0xf6, 0x7f,
0x5d, 0x63, 0x94, 0xb7, 0x12, 0xa7, 0x97, 0xb2, 0x4e, 0x7f, 0x4d, 0x61, 0xbd, 0x0a, 0x55, 0xb3,
0xcf, 0xa3, 0xf7, 0xea, 0xb4, 0xa2, 0xc0, 0x3d, 0x57, 0xc5, 0x6d, 0xbc, 0xf6, 0xcd, 0xd5, 0x69,
0x45, 0x3b, 0x3e, 0xc1, 0xed, 0xa1, 0x13, 0x75, 0xfa, 0x56, 0xf5, 0xcb, 0x10, 0x20, 0xa7, 0x40,
0x22, 0x7e, 0xc6, 0x99, 0xcf, 0x5d, 0x55, 0xe4, 0x22, 0x2e, 0x44, 0x32, 0xe8, 0x3e, 0x3c, 0x97,
0x1b, 0x77, 0xa9, 0xe1, 0xef, 0xc6, 0xec, 0x83, 0x40, 0x46, 0x73, 0x7a, 0x29, 0x5a, 0xc4, 0xef,
0xf4, 0xe1, 0xca, 0x6a, 0x62, 0xd2, 0x86, 0x92, 0xb2, 0x90, 0x1e, 0xa2, 0xd4, 0xa3, 0x52, 0xf7,
0x8c, 0xf9, 0x33, 0x6e, 0xa2, 0x5f, 0x03, 0xf7, 0x8b, 0x1f, 0x15, 0xac, 0x5f, 0x16, 0xa1, 0xbd,
0x98, 0x81, 0xe4, 0xe3, 0xcc, 0x2d, 0xc0, 0xd2, 0x80, 0xb8, 0xa6, 0x57, 0x66, 0xee, 0x00, 0x3e,
0x83, 0xa6, 0x71, 0x94, 0x32, 0xa8, 0xe8, 0x14, 0x17, 0x27, 0xfd, 0xf5, 0x29, 0x4f, 0x1b, 0xd3,
0xe4, 0x59, 0xed, 0x98, 0xd5, 0x78, 0xd0, 0x2c, 0x61, 0x08, 0xbf, 0x46, 0x8d, 0x78, 0xe6, 0x8c,
0x39, 0xfe, 0x8d, 0x9b, 0x08, 0xeb, 0x43, 0xd8, 0xc2, 0x53, 0xa5, 0x90, 0x69, 0x5d, 0xe7, 0x2b,
0x45, 0x0f, 0x61, 0x3b, 0x66, 0x7c, 0xa6, 0xef, 0x7a, 0x04, 0xe5, 0xec, 0xbc, 0xdc, 0xdf, 0x85,
0x2b, 0x7a, 0x39, 0x95, 0xde, 0x99, 0x27, 0xe7, 0x3d, 0x1e, 0x48, 0x1e, 0xbd, 0x86, 0xbf, 0x0d,
0x25, 0xcf, 0xd5, 0xe6, 0x6d, 0x52, 0xf5, 0x68, 0xf5, 0x75, 0x39, 0xcd, 0x4b, 0xe8, 0x3a, 0x0e,
0xc7, 0xbc, 0x3d, 0xaf, 0x94, 0x81, 0xce, 0xcb, 0xbc, 0x94, 0xbe, 0x27, 0x26, 0x9e, 0x10, 0x17,
0x10, 0xf3, 0x4d, 0x01, 0x9a, 0x4a, 0xce, 0xa3, 0x30, 0x3c, 0x9d, 0xb0, 0xe8, 0x74, 0x3d, 0xe3,
0x2c, 0xf2, 0x8d, 0x19, 0xd4, 0x63, 0x32, 0xac, 0x96, 0x32, 0xc3, 0xea, 0x75, 0xa8, 0x63, 0xa3,
0xb1, 0x15, 0xad, 0x4e, 0xe4, 0x1a, 0x22, 0x46, 0x91, 0x9f, 0x9d, 0x38, 0x36, 0xf2, 0x13, 0xc7,
0x5b, 0x00, 0x2e, 0xf7, 0xb9, 0x9a, 0xdc, 0x98, 0xc4, 0x44, 0x2e, 0xd3, 0xba, 0xc1, 0x74, 0xa5,
0xf5, 0x53, 0x78, 0x53, 0x69, 0x38, 0x08, 0xc4, 0x48, 0xf0, 0x48, 0xbd, 0x48, 0xaf, 0xe9, 0x6b,
0x54, 0xdd, 0x81, 0xda, 0xcc, 0xd0, 0x19, 0x7d, 0x13, 0x18, 0xb7, 0xe6, 0x31, 0xf3, 0x70, 0x48,
0xd7, 0x15, 0xa8, 0x8a, 0xf0, 0x5e, 0x6e, 0x20, 0x2a, 0xe7, 0xd4, 0xb3, 0x9e, 0xe8, 0xe4, 0xeb,
0xf9, 0x9c, 0x45, 0x8f, 0x3d, 0x21, 0xc3, 0x68, 0x9e, 0x2d, 0x4b, 0x85, 0x5c, 0x59, 0x7a, 0x0b,
0xc0, 0x51, 0x84, 0xfa, 0x5b, 0x8a, 0xfa, 0x5b, 0x0c, 0xa6, 0x2b, 0xad, 0x3f, 0x15, 0x80, 0x28,
0x61, 0xe6, 0xea, 0xe9, 0xd0, 0x73, 0xd4, 0xba, 0xb1, 0x72, 0xa5, 0xca, 0xec, 0xac, 0xc5, 0x35,
0x3b, 0x6b, 0x09, 0x37, 0x82, 0xa5, 0x9d, 0xb5, 0x8c, 0xe8, 0x78, 0x67, 0xbd, 0x0e, 0x75, 0x1c,
0x01, 0x70, 0x69, 0xd5, 0x3b, 0x04, 0x2e, 0xad, 0x47, 0x2b, 0x97, 0xd6, 0x0a, 0x12, 0xac, 0x59,
0x5a, 0xab, 0xd9, 0xa5, 0x75, 0x0c, 0x97, 0x97, 0xbf, 0x44, 0xac, 0xdf, 0xcb, 0x3f, 0x82, 0xda,
0xd4, 0x10, 0x99, 0x62, 0x73, 0x23, 0x9f, 0xe7, 0x79, 0x49, 0x34, 0xa1, 0xb6, 0x7e, 0x53, 0x84,
0x46, 0xe6, 0x42, 0x68, 0x8d, 0xdf, 0x3b, 0x50, 0x35, 0xe5, 0x3c, 0xb6, 0x97, 0x01, 0xb3, 0x2a,
0x95, 0x72, 0x2a, 0xe5, 0x9b, 0x95, 0x1e, 0x1d, 0x32, 0xcd, 0x8a, 0x40, 0x79, 0xca, 0xe4, 0xd8,
0x34, 0x1e, 0x7c, 0x4e, 0x3c, 0x55, 0xc9, 0x78, 0x2a, 0x7b, 0x17, 0xa3, 0x47, 0xf6, 0xe4, 0x2e,
0x66, 0x1b, 0x36, 0xf8, 0x24, 0xfc, 0xd2, 0xc3, 0x7d, 0xbf, 0x4e, 0x35, 0xa0, 0x5c, 0xf5, 0x8a,
0xf9, 0x3e, 0x97, 0x66, 0x86, 0x37, 0x90, 0x12, 0xae, 0xc2, 0xc8, 0x34, 0x73, 0x7c, 0x46, 0xb7,
0x7a, 0xae, 0xcb, 0x03, 0xd3, 0xc4, 0x0d, 0xb4, 0x7e, 0x80, 0xb7, 0xbe, 0x36, 0xe6, 0x8a, 0xef,
0xf1, 0x56, 0x9b, 0x2b, 0x63, 0x94, 0xe2, 0xca, 0xfb, 0x93, 0x52, 0x7e, 0xbd, 0xcf, 0xac, 0xd1,
0xf8, 0x8c, 0x13, 0x2b, 0x8f, 0xbc, 0x33, 0xee, 0xda, 0x2f, 0xa3, 0x70, 0x62, 0xac, 0xd4, 0x30,
0xb8, 0x4f, 0xa3, 0x70, 0x42, 0x1e, 0xc0, 0x8e, 0x9e, 0x2d, 0x05, 0x77, 0x6d, 0x3c, 0x30, 0x2b,
0x32, 0x5e, 0xf0, 0xe8, 0x44, 0xbf, 0x8a, 0x93, 0xa6, 0xe0, 0x6e, 0x3f, 0x39, 0xdf, 0x53, 0xc7,
0x7a, 0x5f, 0x0a, 0x9c, 0x58, 0xbc, 0x36, 0x2c, 0x68, 0x14, 0x4a, 0xff, 0x3f, 0xa8, 0x99, 0x36,
0x12, 0xb7, 0xef, 0x35, 0x17, 0x88, 0x09, 0x99, 0x35, 0xd3, 0x3d, 0x23, 0x73, 0xe5, 0x49, 0xee,
0xa2, 0x1d, 0xf0, 0x7a, 0xb4, 0xb0, 0xea, 0x16, 0xd2, 0xd0, 0xd2, 0x98, 0x4a, 0xbd, 0xd6, 0xdc,
0xa3, 0xc5, 0x71, 0xbc, 0xcc, 0xa1, 0x4e, 0x69, 0x42, 0x66, 0xfd, 0xa3, 0xa0, 0x4b, 0xc8, 0x11,
0x3b, 0x4b, 0xe6, 0x80, 0x6c, 0xbc, 0x16, 0xf2, 0xf1, 0xba, 0xea, 0x06, 0xeb, 0x06, 0xd4, 0x5f,
0xb2, 0xb3, 0x70, 0x16, 0x79, 0x52, 0xbb, 0xa6, 0x46, 0x53, 0xc4, 0x6b, 0x6a, 0xeb, 0x6d, 0x68,
0xea, 0xc9, 0xde, 0xce, 0xa6, 0x70, 0x43, 0xe3, 0xf4, 0xea, 0xf1, 0xdf, 0x70, 0x49, 0x17, 0x45,
0x31, 0x0e, 0x23, 0x89, 0x53, 0x98, 0x30, 0xf1, 0xba, 0x85, 0x07, 0x47, 0x0a, 0xaf, 0xa6, 0x31,
0xa1, 0xfa, 0x00, 0x0f, 0x84, 0xb9, 0xcb, 0x53, 0x8f, 0x2a, 0x8e, 0x3c, 0x61, 0x4b, 0x2e, 0xe2,
0xb0, 0xad, 0x78, 0xe2, 0x98, 0x0b, 0xf9, 0xa4, 0x5c, 0x2b, 0xb7, 0x37, 0xac, 0x5f, 0x15, 0x74,
0xf5, 0x5e, 0x1a, 0x64, 0xd7, 0x84, 0xe5, 0xe2, 0x58, 0xa7, 0x6d, 0x90, 0x1b, 0xeb, 0x06, 0x70,
0x73, 0xac, 0xcb, 0xb0, 0xcd, 0x22, 0x67, 0xec, 0x9d, 0x71, 0x5b, 0xcc, 0xa6, 0x53, 0xa5, 0x3b,
0x0f, 0xd8, 0x0b, 0xdf, 0x2c, 0x31, 0x35, 0x7a, 0xc3, 0x90, 0x75, 0x35, 0xd5, 0x91, 0x26, 0x1a,
0x68, 0x1a, 0xeb, 0xb7, 0x05, 0x1d, 0x0c, 0xc7, 0x6a, 0x0b, 0x55, 0x7b, 0x2d, 0x8f, 0xce, 0x79,
0x6f, 0xf2, 0x31, 0x54, 0xcc, 0x22, 0xab, 0xde, 0xd3, 0x5a, 0x1c, 0xfe, 0x33, 0x02, 0x77, 0x8f,
0xd3, 0x15, 0x97, 0x1a, 0x26, 0xeb, 0x3e, 0x34, 0x32, 0x68, 0xd2, 0x80, 0xea, 0x68, 0xb8, 0x3f,
0x3c, 0xf8, 0x7c, 0xd8, 0x7e, 0x43, 0x01, 0xc7, 0x74, 0x74, 0x74, 0x3c, 0xe8, 0xb7, 0x0b, 0xe4,
0x12, 0x6c, 0x8e, 0x86, 0x08, 0x7e, 0x7e, 0x40, 0x8f, 0x1f, 0x7f, 0xd1, 0x2e, 0x5a, 0xdf, 0x94,
0xf4, 0x12, 0xf8, 0x3c, 0xb3, 0x64, 0x9b, 0xe1, 0x74, 0x8d, 0xf2, 0x04, 0xca, 0x98, 0x3f, 0x26,
0x98, 0xd4, 0xb3, 0xfa, 0x20, 0x19, 0x9a, 0x04, 0x2f, 0xca, 0x50, 0x05, 0x97, 0x33, 0x56, 0x25,
0x28, 0x38, 0x89, 0x73, 0x3c, 0x45, 0x28, 0x97, 0x98, 0xb5, 0x45, 0x37, 0x35, 0x73, 0xb7, 0x91,
0xe0, 0xba, 0x78, 0x6b, 0x18, 0x71, 0x31, 0x0d, 0x03, 0x11, 0x57, 0xc6, 0x04, 0x56, 0x45, 0x36,
0xe2, 0x53, 0xdf, 0xd3, 0xcc, 0x3a, 0xfe, 0xea, 0x06, 0xd3, 0x95, 0x84, 0xaf, 0xbe, 0x4c, 0xa8,
0xa1, 0x65, 0xff, 0x3f, 0x6f, 0xd9, 0x15, 0x5f, 0xbd, 0xfb, 0x7c, 0xe9, 0xba, 0x61, 0xe5, 0x15,
0x84, 0xf6, 0x61, 0x3d, 0x19, 0xe3, 0xbe, 0x0f, 0x64, 0x99, 0x73, 0xc9, 0x17, 0x87, 0x83, 0x61,
0x7f, 0x6f, 0xf8, 0x59, 0xbb, 0x40, 0x9a, 0x50, 0xeb, 0xf6, 0x7a, 0x83, 0x43, 0xe5, 0x99, 0xa2,
0x82, 0xfa, 0x83, 0xde, 0xd3, 0xbd, 0xe1, 0xa0, 0xdf, 0x2e, 0x29, 0xa8, 0xd7, 0x1d, 0xf6, 0x06,
0x4f, 0x07, 0xfd, 0x76, 0xd9, 0xfa, 0x6b, 0x41, 0xcf, 0x77, 0xbd, 0xdc, 0xae, 0xdf, 0xe7, 0x8e,
0x27, 0xd6, 0x5f, 0x22, 0xde, 0x80, 0xba, 0xb1, 0xe7, 0x5e, 0x1c, 0x69, 0x29, 0x82, 0xfc, 0x10,
0xb6, 0x5c, 0xc3, 0x6f, 0xe7, 0x22, 0xef, 0x83, 0xc5, 0x49, 0x79, 0xd5, 0x2b, 0x77, 0xe3, 0x07,
0x63, 0x9e, 0x96, 0x9b, 0x83, 0xad, 0xf7, 0xa1, 0x95, 0xa7, 0xc8, 0x7d, 0xec, 0x1b, 0xb9, 0x8f,
0x2d, 0x58, 0x7f, 0x2c, 0xc2, 0xd6, 0xc2, 0x1f, 0x68, 0xeb, 0x7b, 0xfe, 0xe2, 0xad, 0x46, 0x71,
0xe9, 0x56, 0x83, 0xbc, 0x0f, 0x24, 0x4b, 0x62, 0x67, 0xd7, 0xc3, 0x76, 0x86, 0x50, 0xd7, 0xaa,
0xec, 0x10, 0x51, 0xbe, 0xc8, 0x10, 0x41, 0x1e, 0x42, 0x53, 0x84, 0x8e, 0xc7, 0x7c, 0xdb, 0xf7,
0x82, 0xd3, 0xf8, 0x5f, 0xcb, 0x85, 0xff, 0xc2, 0x8e, 0x90, 0xe2, 0xa9, 0x22, 0xa0, 0x0d, 0x91,
0x02, 0xe4, 0x7b, 0xb0, 0xad, 0x36, 0xd4, 0x78, 0x90, 0xb4, 0xdd, 0xe4, 0x7f, 0xca, 0xd2, 0xf2,
0xd2, 0xbe, 0x34, 0xa9, 0x52, 0xc2, 0x17, 0x51, 0xc2, 0x12, 0x00, 0x94, 0xbd, 0x32, 0x1b, 0x48,
0x76, 0xda, 0x2b, 0xe4, 0xa7, 0xbd, 0x7d, 0x68, 0x98, 0xbf, 0xa4, 0x8f, 0x55, 0x0b, 0x2e, 0xa2,
0xe3, 0xff, 0x2b, 0x7d, 0x63, 0x37, 0xfd, 0x13, 0xfb, 0x99, 0xf9, 0x0f, 0xdb, 0x08, 0xdd, 0x55,
0x0c, 0x34, 0xcb, 0x6d, 0xfd, 0xba, 0x00, 0x2d, 0xa5, 0x62, 0xe6, 0xcd, 0xdf, 0x86, 0x46, 0x94,
0x40, 0xf1, 0x2a, 0xb9, 0x9d, 0xca, 0x4f, 0x49, 0x69, 0x96, 0x90, 0xdc, 0x83, 0x6d, 0x31, 0x7b,
0x61, 0x7a, 0xac, 0x78, 0x22, 0xc2, 0xe0, 0xd1, 0x5c, 0xf2, 0x78, 0xf8, 0x5a, 0x79, 0x46, 0xde,
0x87, 0x4b, 0xf1, 0xf5, 0x45, 0xca, 0xa0, 0xef, 0x74, 0x96, 0x0f, 0xac, 0xaf, 0x0b, 0xc9, 0x20,
0xa3, 0xfa, 0x28, 0x2e, 0x21, 0x49, 0x88, 0xa9, 0xc7, 0x95, 0x9d, 0xf2, 0x0a, 0x54, 0xcc, 0x45,
0xa8, 0xee, 0x02, 0x06, 0xca, 0x06, 0x69, 0x39, 0x17, 0xa4, 0x37, 0xa0, 0x9e, 0xde, 0x03, 0x6c,
0xe0, 0x6a, 0x94, 0x22, 0xd2, 0x7c, 0xad, 0x64, 0x87, 0xdf, 0x3f, 0x14, 0xe1, 0x52, 0x46, 0x35,
0xb5, 0x85, 0x85, 0x01, 0xb9, 0x0f, 0x15, 0x86, 0x4f, 0xa8, 0x63, 0xeb, 0x9e, 0xb5, 0x72, 0x30,
0xd0, 0xc4, 0xbb, 0xfa, 0x87, 0x1a, 0x0e, 0xf2, 0x0e, 0x6c, 0x86, 0xbe, 0x6b, 0x48, 0x46, 0x49,
0xbf, 0xc9, 0x23, 0xcd, 0xb4, 0xa2, 0x20, 0xb3, 0x6c, 0xaf, 0x99, 0x3d, 0x62, 0x2a, 0xd5, 0x7f,
0x2b, 0x46, 0xbb, 0x4b, 0xb0, 0xb9, 0x3f, 0xf8, 0xa2, 0xd7, 0xa5, 0x7d, 0xbb, 0xdb, 0xef, 0x63,
0x6a, 0x13, 0x68, 0x75, 0x7b, 0xbd, 0x83, 0xd1, 0xf0, 0xf8, 0xc8, 0xe0, 0x0a, 0xe4, 0x32, 0x6c,
0xc5, 0x64, 0xfd, 0xc1, 0xd3, 0x81, 0x2e, 0x78, 0xdb, 0xd0, 0x4e, 0x08, 0xe9, 0xe0, 0xd9, 0xc1,
0x73, 0x2c, 0x7c, 0x00, 0x95, 0xa7, 0x07, 0xbd, 0x7d, 0x55, 0xf6, 0x54, 0x95, 0x18, 0x0d, 0x0d,
0xb4, 0x41, 0xb6, 0xa0, 0x31, 0xda, 0xeb, 0xdb, 0xa3, 0xc3, 0x7e, 0x57, 0x09, 0xa8, 0x90, 0x36,
0x34, 0x87, 0xdd, 0x67, 0x03, 0xbb, 0xf7, 0xb8, 0x3b, 0xfc, 0x6c, 0xd0, 0x6f, 0x57, 0xad, 0x1f,
0xe9, 0xf6, 0x9b, 0x49, 0x39, 0xf2, 0xe1, 0x42, 0x8e, 0x2e, 0xc5, 0x62, 0x4a, 0x9c, 0x4f, 0xcf,
0xc4, 0x49, 0xc5, 0x8c, 0x93, 0x1e, 0x6d, 0xfe, 0xa0, 0xb1, 0x7b, 0xf7, 0x41, 0xcc, 0xfc, 0xa2,
0x82, 0x4f, 0x1f, 0xfc, 0x33, 0x00, 0x00, 0xff, 0xff, 0x35, 0x39, 0xcc, 0x36, 0x3a, 0x22, 0x00,
0x00,
}

View File

@ -1,5 +1,6 @@
syntax = "proto3";
import "chat_identity.proto";
import "sync_settings.proto";
import 'application_metadata_message.proto';
@ -322,7 +323,7 @@ message BackedUpProfile {
string display_name = 2;
uint64 display_name_clock = 3;
repeated SyncProfilePicture pictures = 4;
repeated SyncSocialLinkSetting social_link_settings = 5;
SyncSocialLinks social_links = 5;
repeated SyncEnsUsernameDetail ens_username_details = 6;
}
@ -365,8 +366,7 @@ message SyncKeycardAction {
}
}
message SyncSocialLinkSetting {
string text = 1;
string url = 2;
uint64 clock = 3;
}
message SyncSocialLinks {
repeated SocialLink social_links = 1;
uint64 clock = 2;
}

View File

@ -320,8 +320,8 @@ func (m *StatusMessage) HandleApplication() error {
return m.unmarshalProtobufData(new(protobuf.SyncSavedAddress))
case protobuf.ApplicationMetadataMessage_SYNC_KEYCARD_ACTION:
return m.unmarshalProtobufData(new(protobuf.SyncKeycardAction))
case protobuf.ApplicationMetadataMessage_SYNC_SOCIAL_LINK_SETTING:
return m.unmarshalProtobufData(new(protobuf.SyncSocialLinkSetting))
case protobuf.ApplicationMetadataMessage_SYNC_SOCIAL_LINKS:
return m.unmarshalProtobufData(new(protobuf.SyncSocialLinks))
case protobuf.ApplicationMetadataMessage_SYNC_ENS_USERNAME_DETAIL:
return m.unmarshalProtobufData(new(protobuf.SyncEnsUsernameDetail))
case protobuf.ApplicationMetadataMessage_SYNC_KEYPAIR:

View File

@ -9,7 +9,7 @@ import (
type BackedUpProfile struct {
DisplayName string `json:"displayName,omitempty"`
Images []images.IdentityImage `json:"images,omitempty"`
SocialLinks identity.SocialLinks `json:"socialLinks,omitempty"`
SocialLinks []*identity.SocialLink `json:"socialLinks,omitempty"`
EnsUsernameDetails []*ens.UsernameDetail `json:"ensUsernameDetails,omitempty"`
}
@ -21,7 +21,7 @@ func (sfwr *WakuBackedUpDataResponse) SetImages(images []images.IdentityImage) {
sfwr.Profile.Images = images
}
func (sfwr *WakuBackedUpDataResponse) SetSocialLinks(socialLinks identity.SocialLinks) {
func (sfwr *WakuBackedUpDataResponse) SetSocialLinks(socialLinks []*identity.SocialLink) {
sfwr.Profile.SocialLinks = socialLinks
}

View File

@ -167,12 +167,12 @@ func (s *SyncDeviceSuite) TestPairingSyncDeviceClientAsSender() {
})
require.NoError(s.T(), err)
// generate social link
err = clientBackend.Messenger().SetSocialLinks(&identity.SocialLinks{{Text: identity.GithubID, URL: socialLinkURL, Clock: 1}})
socialLinksToAdd := identity.SocialLinks{{Text: identity.GithubID, URL: socialLinkURL}}
err = clientBackend.Messenger().AddOrReplaceSocialLinks(socialLinksToAdd)
require.NoError(s.T(), err)
// generate ens username
err = clientBackend.StatusNode().EnsService().API().Add(ctx, ensChainID, ensUsername)
require.NoError(s.T(), err)
clientActiveAccount, err := clientBackend.GetActiveAccount()
require.NoError(s.T(), err)
clientKeystorePath := filepath.Join(clientTmpDir, keystoreDir, clientActiveAccount.KeyUID)
@ -196,9 +196,10 @@ func (s *SyncDeviceSuite) TestPairingSyncDeviceClientAsSender() {
require.NoError(s.T(), err)
require.Equal(s.T(), 1, len(bookmarks))
require.Equal(s.T(), "status.im", bookmarks[0].Name)
serverSocialLink, err := serverBackend.Messenger().GetSocialLink(identity.GithubID)
serverSocialLinks, err := serverBackend.Messenger().GetSocialLinks()
require.NoError(s.T(), err)
require.Equal(s.T(), socialLinkURL, serverSocialLink.URL)
require.Equal(s.T(), 1, len(serverSocialLinks))
require.True(s.T(), socialLinksToAdd.Equal(serverSocialLinks))
uds, err := serverBackend.StatusNode().EnsService().API().GetEnsUsernames(ctx)
require.NoError(s.T(), err)
require.Equal(s.T(), 1, len(uds))
@ -282,9 +283,9 @@ func (s *SyncDeviceSuite) TestPairingSyncDeviceClientAsReceiver() {
// generate social link
serverMessenger := serverBackend.Messenger()
err = serverMessenger.SetSocialLinks(&identity.SocialLinks{{Text: identity.GithubID, URL: socialLinkURL, Clock: 1}})
socialLinksToAdd := identity.SocialLinks{{Text: identity.GithubID, URL: socialLinkURL}}
err = serverMessenger.AddOrReplaceSocialLinks(socialLinksToAdd)
require.NoError(s.T(), err)
// generate ens username
err = serverBackend.StatusNode().EnsService().API().Add(ctx, ensChainID, ensUsername)
require.NoError(s.T(), err)
@ -332,9 +333,10 @@ func (s *SyncDeviceSuite) TestPairingSyncDeviceClientAsReceiver() {
require.NoError(s.T(), err)
require.Equal(s.T(), 1, len(bookmarks))
require.Equal(s.T(), "status.im", bookmarks[0].Name)
clientSocialLink, err := clientMessenger.GetSocialLink(identity.GithubID)
clientSocialLinks, err := clientMessenger.GetSocialLinks()
require.NoError(s.T(), err)
require.Equal(s.T(), socialLinkURL, clientSocialLink.URL)
require.Equal(s.T(), 1, len(clientSocialLinks))
require.True(s.T(), socialLinksToAdd.Equal(clientSocialLinks))
uds, err := clientBackend.StatusNode().EnsService().API().GetEnsUsernames(ctx)
require.NoError(s.T(), err)
require.Equal(s.T(), 1, len(uds))

View File

@ -2,6 +2,7 @@ package accounts
import (
"context"
"errors"
"github.com/status-im/status-go/multiaccounts/accounts"
"github.com/status-im/status-go/multiaccounts/settings"
@ -168,6 +169,15 @@ func (api *SettingsAPI) GetSocialLinks() (identity.SocialLinks, error) {
return api.db.GetSocialLinks()
}
func (api *SettingsAPI) SetSocialLinks(socialLinks identity.SocialLinks) error {
return (*api.messenger).SetSocialLinks(&socialLinks)
func (api *SettingsAPI) AddOrReplaceSocialLinks(links identity.SocialLinks) error {
for _, link := range links {
if len(link.Text) == 0 {
return errors.New("`Text` field of a social link must be set")
}
if len(link.URL) == 0 {
return errors.New("`URL` field of a social link must be set")
}
}
return (*api.messenger).AddOrReplaceSocialLinks(links)
}