From 49033ff512edb50f6eb148ff1a42d837a3179453 Mon Sep 17 00:00:00 2001 From: qydysky Date: Thu, 22 Aug 2024 05:51:19 +0800 Subject: [PATCH] =?utf8?q?Improve=20cookie=E4=BF=9D=E6=8A=A4=E4=BD=BF?= =?utf8?q?=E7=94=A8=E6=96=B0=E7=9A=84=E5=8A=A0=E5=AF=86=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- CV/Var.go | 16 ++++++++++++ F/CookieCrypo.go | 27 ++++++++++++++++---- README.md | 33 ++++++++++++++----------- bili_danmu.go | 1 - demo/private.pem | 30 +++-------------------- demo/public.pem | 12 +++------ go.mod | 28 ++++++++++----------- go.sum | 64 ++++++++++++++++++++++++------------------------ 8 files changed, 109 insertions(+), 102 deletions(-) diff --git a/CV/Var.go b/CV/Var.go index 8130131..5fc160d 100644 --- a/CV/Var.go +++ b/CV/Var.go @@ -21,6 +21,7 @@ import ( "github.com/dustin/go-humanize" _ "github.com/go-sql-driver/mysql" _ "github.com/jackc/pgx/v5/stdlib" + crypto "github.com/qydysky/part/crypto" pctx "github.com/qydysky/part/ctx" file "github.com/qydysky/part/file" log "github.com/qydysky/part/log" @@ -373,9 +374,24 @@ func (t *Common) Init() *Common { var ( ckv = flag.String("ckv", "", "自定义配置KV文件,将会覆盖config_K_v配置") roomIdP = flag.Int("r", 0, "roomid") + genKey = flag.Bool("genKey", false, "生成cookie加密公私钥") ) testing.Init() flag.Parse() + + if *genKey { + if pri, pub, e := crypto.NewKey(); e != nil { + panic(e) + } else { + fmt.Println("公钥:") + fmt.Println(string(pub)) + fmt.Println("私钥:") + fmt.Println(string(pri)) + fmt.Println("请复制以上公私钥并另存为文件,可以在cookie加密公钥、cookie解密私钥中使用") + os.Exit(0) + } + } + t.Roomid = *roomIdP if e := t.loadConf(*ckv); e != nil { diff --git a/F/CookieCrypo.go b/F/CookieCrypo.go index 7a154b0..1af41db 100644 --- a/F/CookieCrypo.go +++ b/F/CookieCrypo.go @@ -2,6 +2,8 @@ package F import ( "fmt" + "io" + "os" "sync" c "github.com/qydysky/bili_danmu/CV" @@ -25,7 +27,7 @@ func CookieGet() []byte { if len(pri) == 0 { if priS, ok := c.C.K_v.LoadV(`cookie解密私钥`).(string); ok && priS != `` { - if d, e := crypto.FileLoad(priS); e != nil { + if d, e := FileLoad(priS); e != nil { clog.L(`E: `, e) return []byte{} } else { @@ -39,14 +41,14 @@ func CookieGet() []byte { clog.L(`E: `, "输入错误", err) return []byte{} } - if d, e := crypto.FileLoad(priS); e != nil { + if d, e := FileLoad(priS); e != nil { clog.L(`E: `, e) return []byte{} } else { pri = d } } else { - if d, e := crypto.FileLoad(`cookie.txt`); e != nil { + if d, e := FileLoad(`cookie.txt`); e != nil { clog.L(`E: `, e, `cookie保存格式`) return []byte{} } else if string(d[:6]) == `t=nol;` { @@ -59,7 +61,7 @@ func CookieGet() []byte { } } } - if d, e := crypto.FileLoad(`cookie.txt`); e != nil { + if d, e := FileLoad(`cookie.txt`); e != nil { clog.L(`E: `, e, `cookie保存格式`) return []byte{} } else if string(d[:6]) == `t=pem;` { @@ -90,7 +92,7 @@ func CookieSet(source []byte) { if len(pub) == 0 { if pubS, ok := c.C.K_v.LoadV(`cookie加密公钥`).(string); ok && pubS != `` { - if d, e := crypto.FileLoad(pubS); e != nil { + if d, e := FileLoad(pubS); e != nil { clog.L(`E: `, e) return } else { @@ -112,3 +114,18 @@ func CookieSet(source []byte) { _, _ = f.Write(append([]byte("t=pem;"), source...), true) } } + +func FileLoad(path string) (data []byte, err error) { + fileObject, e := os.OpenFile(path, os.O_RDONLY, 0644) + if e != nil { + err = e + return + } + defer fileObject.Close() + data, e = io.ReadAll(fileObject) + if e != nil { + err = e + return + } + return +} diff --git a/README.md b/README.md index e548623..2c4cef3 100644 --- a/README.md +++ b/README.md @@ -79,13 +79,6 @@ 保持期间,可能会频繁发送弹幕(间隔5秒/条),此时可能会影响其他使用。 -由于bilibili粉丝牌策略调整,目前当配置项`保持牌子亮着`为`true`时,将会 - -- 正在直播的直播间:点赞 -- 未直播的直播间:发送弹幕 - -从而获取每日亲密度。 - #### 直播回放显示表情 配置文件中添加配置项`弹幕表情`(>v0.14.9)。默认为true,当为true时,将会保存弹幕中的表情png到emots目录下,并在回放时显示表情。 @@ -697,7 +690,7 @@ Asaki大人 开心鸭鸭杀 直播中 还支持登录、搜索主播直播间、查看历史记录、查看关注的直播间、保存直播流等功能 #### cookie加密 -保护cookie.txt +*使用X25519和chacha20poly1305*(>v0.14.15) 保护cookie.txt 在`demo/config/config_K_v.json`中可找到配置项 ``` @@ -712,8 +705,20 @@ Asaki大人 开心鸭鸭杀 直播中 附:创建公(public.pem)私(private.pem)钥 ``` -openssl genrsa -out private.pem 2048 -openssl rsa -in private.pem -pubout -out public.pem +使用 -genKey 生成(>v0.14.15) +main(main.exe) -genKey + +公钥: +-----BEGIN ECDH PUBLIC KEY----- +tvdVdbI7DTlRcyE44va7zXhi5rewxcm44/Dmp8DMnGY= +-----END ECDH PUBLIC KEY----- + +私钥: +-----BEGIN ECDH PRIVATE KEY----- +xrWweTO5upvzDha6WrEBQKkToUYLyMCI7An2btRqop0= +-----END ECDH PRIVATE KEY----- + +请复制以上公私钥并另存为文件,可以在cookie加密公钥、cookie解密私钥中使用 ``` #### 私信 @@ -832,8 +837,8 @@ windows: set CGO_ENABLED=0;go build . clone/下载本项目。进入`demo`目录(文件夹),运行: ``` -linux: CGO_ENABLED=0 go run . [-r 房间ID] [-ckv 自定义config_K_v.json] -windows: set CGO_ENABLED=0;go run . [-r 房间ID] [-ckv 自定义config_K_v.json] +linux: CGO_ENABLED=0 go run . [-r 房间ID] [-ckv 自定义config_K_v.json] [-genKey] +windows: set CGO_ENABLED=0;go run . [-r 房间ID] [-ckv 自定义config_K_v.json] [-genKey] ``` 3. docker部署 @@ -860,8 +865,8 @@ go build . 前往[releases](https://github.com/qydysky/bili_danmu/releases)页下载对应系统版本。解压后进入`demo`目录(文件夹),运行`main`(`main.exe`)。 ``` -./main [-r 房间ID] [-ckv 自定义config_K_v.json] -./main.exe [-r 房间ID] [-ckv 自定义config_K_v.json] +./main [-r 房间ID] [-ckv 自定义config_K_v.json] [-genKey] +./main.exe [-r 房间ID] [-ckv 自定义config_K_v.json] [-genKey] ``` #### 注意事项 diff --git a/bili_danmu.go b/bili_danmu.go index 405cef0..efbbd95 100644 --- a/bili_danmu.go +++ b/bili_danmu.go @@ -275,7 +275,6 @@ func entryRoom(mainCtx context.Context, danmulog *part.Log_interface, common *c. u, _ := url.Parse(v) ws_c, err := ws.New_client(&ws.Client{ Url: v, - BufSize: 10, TO: (heartinterval + 5) * 1000, Proxy: common.Proxy, Func_abort_close: func() { danmulog.L(`I: `, `服务器连接中断`) }, diff --git a/demo/private.pem b/demo/private.pem index 860625d..679fb4c 100644 --- a/demo/private.pem +++ b/demo/private.pem @@ -1,27 +1,3 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAthnXhQH/5+JfT/imXP58C0ysFMMyxYpJrkDZVCaS9IKIe+DC -iVtTKvQHDpkLCivogMpxXyN8Dx4PD+0/ZObLICsCSMyPsq+59ly1H8CBuYauOlbJ -ihux6+qF38FX54lGulANN2bU8LzrxqY2CuWtZNeDZZ7XJOPqal9oQ6U/F57+gqgY -VJZf4Qu0pfmvQkjMa77u4a+EaMzaIPCj6Els/6y7W0BBE1FRexzgh+ypVq5NeKx2 -m5bLm405zOSWzlOGAjRMT3upV3rAi6AzpUdcDjIbFiKT/SpLzaYkbO6PX92Wu2t9 -+rhwB0ZurFrheh8RHy6j0/EZkrAfkw/gte5+vwIDAQABAoIBAQCdg1zYwBILEdQ/ -6GR+q+HAJGH006NnG2cAQze5gmQ6+23zOUcMaOJXlR1FkzvpYHGMdY/7K0Z0DRwa -Oq1LKhcpjAo9zjO97CJ+51IEVQ/g2o56B/fsbmhIGGQUV7khnayAHB5SfbBTTBbl -jX/RjTmesIwHqo2Oa1apDD2zxYv9cSQ86+62mDjseq/vwV3HPU9hp1HRv/O03ctQ -ym1ftabwsjOF3+MRHSMI99UrP8KM9VVoPDmkV30AGqVjhDypRVWfVv1REgxOwqXB -liZTkJgRETMwCZH7FFZpAd4Er/1Mix94HYB//aXc3J3Nw9i2TLy3YACP8t957GvL -T7ea/2qBAoGBANwqiJqQzRqak+SGPbIEh41yrHRPrb2da035wSRVf6sHPFK5vNpW -s+8VvgpWK5e3Q9Yxud8AvaFUntQhZMC8ibJ8ZYg2xIvmJvWoSLNfSgC/VQ0TVK3E -ayOscZsVEhxo+HHz2MXiJilUHe0faEGIvC/PtLWzOc0HA/7ETG3xpLlLAoGBANO9 -R4pTZewE2BKyMIxEfyzE8ipBADwK9XP0OD/e7m7rrk/0l2AoM6gFulH0GShl3XxG -Ery90I+LZQPqwFv4M3fhzcT/3MWTpzoR0gKT6/aBLvkNJsOXJ9kFtfxqgw98GHZ8 -TAPCKZ/QswsT1zX4lk/qHfxcvplwheEdr7WgavvdAoGAKpV/foXrZe3oFRdx73C4 -1z8K5CRVMou0KYzZMrHm06m+nTGXuZNzkhbefxlTrTChSlir3tpB02aOofEjj7Pn -3kH5UXNmaLjHaFR4W1le8u4PAUxv4HxRTMEZ6CkXK6+R/lhv4TZwsyW19BtTCvnr -jEPcbBiSYXmt6CUHs2w9tCkCgYBAVEZS8UmK7mHTNE3pn7nfmSpVyg/PLikqhG0+ -gnWAP5xi8FW5Qh2Hk83qrjWif2hOJF/29dhSdDBJg13T01GXv4OrsWyanmR1EQrz -+4r6Bn+F7Qf07oyNs915hcaxwqsP/G1/ytKomlh7Khj9bbwFJYTcsjS6G2ShY0qJ -7OX0BQKBgQDTmEJEZfUxKi866C3hPlml4uhKEvOLGDKPsEjy6t7Spz6paM6zr4By -xOmkXXhfOudhgzsOpIiKuzG+D/7q0MCoDIwrW1EiB3IiMS0aSeN3UTffDAhDnnMu -q+xXywYgDO4/tI4eckasLdEoIjYeM9lBK08EN1tSeEEAyLXDPcO6/A== ------END RSA PRIVATE KEY----- +-----BEGIN ECDH PRIVATE KEY----- +wmVxRqMp4bs+4xvOOlW0p2tyF2VGykhVqncxDo/IsKo= +-----END ECDH PRIVATE KEY----- \ No newline at end of file diff --git a/demo/public.pem b/demo/public.pem index a40171d..2780b61 100644 --- a/demo/public.pem +++ b/demo/public.pem @@ -1,9 +1,3 @@ ------BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAthnXhQH/5+JfT/imXP58 -C0ysFMMyxYpJrkDZVCaS9IKIe+DCiVtTKvQHDpkLCivogMpxXyN8Dx4PD+0/ZObL -ICsCSMyPsq+59ly1H8CBuYauOlbJihux6+qF38FX54lGulANN2bU8LzrxqY2CuWt -ZNeDZZ7XJOPqal9oQ6U/F57+gqgYVJZf4Qu0pfmvQkjMa77u4a+EaMzaIPCj6Els -/6y7W0BBE1FRexzgh+ypVq5NeKx2m5bLm405zOSWzlOGAjRMT3upV3rAi6AzpUdc -DjIbFiKT/SpLzaYkbO6PX92Wu2t9+rhwB0ZurFrheh8RHy6j0/EZkrAfkw/gte5+ -vwIDAQAB ------END PUBLIC KEY----- +-----BEGIN ECDH PUBLIC KEY----- +JAyDXPJ2jNouYCC1xp51RRvAhCYrohCN/5ZhOgDbW2c= +-----END ECDH PUBLIC KEY----- \ No newline at end of file diff --git a/go.mod b/go.mod index c64609a..e38d582 100644 --- a/go.mod +++ b/go.mod @@ -1,14 +1,14 @@ module github.com/qydysky/bili_danmu -go 1.22.2 +go 1.23 require ( github.com/gotk3/gotk3 v0.6.4 github.com/mdp/qrterminal/v3 v3.2.0 - github.com/qydysky/part v0.28.20240811150311 + github.com/qydysky/part v0.28.20240821214546 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 - golang.org/x/text v0.16.0 + golang.org/x/text v0.17.0 ) require ( @@ -26,11 +26,11 @@ require ( github.com/mattn/go-isatty v0.0.20 // indirect github.com/ncruces/go-strftime v0.1.9 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect - golang.org/x/crypto v0.25.0 // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/term v0.22.0 // indirect - modernc.org/gc/v3 v3.0.0-20240304020402-f0dba7c97c2b // indirect - modernc.org/libc v1.53.3 // indirect + golang.org/x/crypto v0.26.0 // indirect + golang.org/x/sync v0.8.0 // indirect + golang.org/x/term v0.23.0 // indirect + modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a // indirect + modernc.org/libc v1.59.9 // indirect modernc.org/mathutil v1.6.0 // indirect modernc.org/memory v1.8.0 // indirect modernc.org/strutil v1.2.0 // indirect @@ -46,16 +46,16 @@ require ( github.com/jackc/pgx/v5 v5.6.0 github.com/klauspost/compress v1.17.9 // indirect github.com/lib/pq v1.10.9 - github.com/miekg/dns v1.1.61 // indirect + github.com/miekg/dns v1.1.62 // indirect github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/tklauser/go-sysconf v0.3.14 // indirect github.com/tklauser/numcpus v0.8.0 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect - golang.org/x/mod v0.19.0 // indirect - golang.org/x/net v0.27.0 // indirect - golang.org/x/sys v0.22.0 // indirect - golang.org/x/tools v0.22.0 // indirect - modernc.org/sqlite v1.30.1 + golang.org/x/mod v0.20.0 // indirect + golang.org/x/net v0.28.0 // indirect + golang.org/x/sys v0.24.0 // indirect + golang.org/x/tools v0.24.0 // indirect + modernc.org/sqlite v1.32.0 rsc.io/qr v0.2.0 // indirect ) diff --git a/go.sum b/go.sum index 9e69165..ec666ce 100644 --- a/go.sum +++ b/go.sum @@ -38,16 +38,16 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mdp/qrterminal/v3 v3.2.0 h1:qteQMXO3oyTK4IHwj2mWsKYYRBOp1Pj2WRYFYYNTCdk= github.com/mdp/qrterminal/v3 v3.2.0/go.mod h1:XGGuua4Lefrl7TLEsSONiD+UEjQXJZ4mPzF+gWYIJkk= -github.com/miekg/dns v1.1.61 h1:nLxbwF3XxhwVSm8g9Dghm9MHPaUZuqhPiGL+675ZmEs= -github.com/miekg/dns v1.1.61/go.mod h1:mnAarhS3nWaW+NVP2wTkYVIZyHNJ098SJZUki3eykwQ= +github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ= +github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ= github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/qydysky/biliApi v0.0.0-20240725184407-15076dddb6fb h1:dtSpNF9hLQa09TUfR+xbYFkHcx2breAFsXeU7e599gE= github.com/qydysky/biliApi v0.0.0-20240725184407-15076dddb6fb/go.mod h1:om024vfxALQ5vxsbaGoMm8IS0esLYBnEOpJI8FsGoDg= -github.com/qydysky/part v0.28.20240811150311 h1:I72L/Sv9IssdOs9Tp1BYyjmXDdmXUlz78QU9c80nzMM= -github.com/qydysky/part v0.28.20240811150311/go.mod h1:dgagZnPYRFZDbt7XJf7nADOJLoYwlebD9B8Z8g5aHhI= +github.com/qydysky/part v0.28.20240821214546 h1:MtOxggPvVKa9t24QhxxDuIxuuSjJUCaAwVCJRsN+gWs= +github.com/qydysky/part v0.28.20240821214546/go.mod h1:lv0lIlm2keVMdwnOzXdRCUL8Ky8HoAAYw8coaBW6rb8= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= @@ -67,43 +67,43 @@ github.com/tklauser/numcpus v0.8.0 h1:Mx4Wwe/FjZLeQsK/6kt2EOepwwSl7SmJrK5bV/dXYg github.com/tklauser/numcpus v0.8.0/go.mod h1:ZJZlAY+dmR4eut8epnzf0u/VwodKmryxR8txiloSqBE= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= -golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= +golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= +golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= -golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= -golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= -golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= +golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= +golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= -golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= -golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= +golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= +golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU= +golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk= +golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= +golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= +golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -modernc.org/cc/v4 v4.21.3 h1:2mhBdWKtivdFlLR1ecKXTljPG1mfvbByX7QKztAIJl8= -modernc.org/cc/v4 v4.21.3/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ= -modernc.org/ccgo/v4 v4.18.1 h1:1zF5kPBFq/ZVTulBOKgQPQITdOzzyBUfC51gVYP62E4= -modernc.org/ccgo/v4 v4.18.1/go.mod h1:ao1fAxf9a2KEOL15WY8+yP3wnpaOpP/QuyFOZ9HJolM= +modernc.org/cc/v4 v4.21.4 h1:3Be/Rdo1fpr8GrQ7IVw9OHtplU4gWbb+wNgeoBMmGLQ= +modernc.org/cc/v4 v4.21.4/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ= +modernc.org/ccgo/v4 v4.20.7 h1:skrinQsjxWfvj6nbC3ztZPJy+NuwmB3hV9zX/pthNYQ= +modernc.org/ccgo/v4 v4.20.7/go.mod h1:UOkI3JSG2zT4E2ioHlncSOZsXbuDCZLvPi3uMlZT5GY= modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= -modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw= -modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU= -modernc.org/gc/v3 v3.0.0-20240304020402-f0dba7c97c2b h1:BnN1t+pb1cy61zbvSUV7SeI0PwosMhlAEi/vBY4qxp8= -modernc.org/gc/v3 v3.0.0-20240304020402-f0dba7c97c2b/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4= -modernc.org/libc v1.53.3 h1:9O0aSLZuHPgp49we24NoFFteRgXNLGBAQ3TODrW3XLg= -modernc.org/libc v1.53.3/go.mod h1:kb+Erju4FfHNE59xd2fNpv5CBeAeej6fHbx8p8xaiyI= +modernc.org/gc/v2 v2.5.0 h1:bJ9ChznK1L1mUtAQtxi0wi5AtAs5jQuw4PrPHO5pb6M= +modernc.org/gc/v2 v2.5.0/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU= +modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a h1:CfbpOLEo2IwNzJdMvE8aiRbPMxoTpgAJeyePh0SmO8M= +modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4= +modernc.org/libc v1.59.9 h1:k+nNDDakwipimgmJ1D9H466LhFeSkaPPycAs1OZiDmY= +modernc.org/libc v1.59.9/go.mod h1:EY/egGEU7Ju66eU6SBqCNYaFUDuc4npICkMWnU5EE3A= modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E= @@ -112,8 +112,8 @@ modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc= modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss= -modernc.org/sqlite v1.30.1 h1:YFhPVfu2iIgUf9kuA1CR7iiHdcEEsI2i+yjRYHscyxk= -modernc.org/sqlite v1.30.1/go.mod h1:DUmsiWQDaAvU4abhc/N+djlom/L2o8f7gZ95RCvyoLU= +modernc.org/sqlite v1.32.0 h1:6BM4uGza7bWypsw4fdLRsLxut6bHe4c58VeqjRgST8s= +modernc.org/sqlite v1.32.0/go.mod h1:UqoylwmTb9F+IqXERT8bW9zzOWN8qwAIcLdzeBZs4hA= modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= -- 2.39.2