From abe4fa449b0b7247c066bb2efca27c4e93cac1a8 Mon Sep 17 00:00:00 2001 From: glebarez Date: Thu, 16 Dec 2021 12:50:41 +0000 Subject: [PATCH] Go vs CGo benchmarks refactored (not TPCH) --- CONTRIBUTORS | 1 + benchmark/README.md | 52 ++ benchmark/bench_plot_test.go | 105 +++ benchmark/bench_test.go | 45 + benchmark/benchmarks.go | 111 +++ benchmark/common.go | 48 ++ benchmark/go.mod | 34 + benchmark/go.sum | 770 ++++++++++++++++++ .../out/benchmarkInsert_memory:false.png | Bin 0 -> 38696 bytes benchmark/out/benchmarkInsert_memory:true.png | Bin 0 -> 35815 bytes .../out/benchmarkSelect_memory:false.png | Bin 0 -> 37098 bytes benchmark/out/benchmarkSelect_memory:true.png | Bin 0 -> 37388 bytes benchmark/plot.go | 236 ++++++ benchmark/util.go | 69 ++ cgo_test.go | 191 +---- 15 files changed, 1473 insertions(+), 189 deletions(-) create mode 100644 benchmark/README.md create mode 100644 benchmark/bench_plot_test.go create mode 100644 benchmark/bench_test.go create mode 100644 benchmark/benchmarks.go create mode 100644 benchmark/common.go create mode 100644 benchmark/go.mod create mode 100644 benchmark/go.sum create mode 100644 benchmark/out/benchmarkInsert_memory:false.png create mode 100644 benchmark/out/benchmarkInsert_memory:true.png create mode 100644 benchmark/out/benchmarkSelect_memory:false.png create mode 100644 benchmark/out/benchmarkSelect_memory:true.png create mode 100644 benchmark/plot.go create mode 100644 benchmark/util.go diff --git a/CONTRIBUTORS b/CONTRIBUTORS index af689e6..cd31644 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -9,6 +9,7 @@ Alexander Menzhinsky Dan Peterson David Skinner +Gleb Sakhnov Jaap Aarts Jan Mercl <0xjnml@gmail.com> Logan Snow diff --git a/benchmark/README.md b/benchmark/README.md new file mode 100644 index 0000000..376cf7d --- /dev/null +++ b/benchmark/README.md @@ -0,0 +1,52 @@ +## Benchmarks +Generally, benchmarks are conducted against CGo implementation of SQLite (https://github.com/mattn/go-sqlite3). + +## Doing benchmarks with go test command +```console +go test -bench . -run '^$' +``` + +## Doing benchmarks with alternative runner to plot results +```console +go test -v . +``` +Dark color scheme: +```console +go test -v . -dark +``` + +### my results: + +#### Insert +| On disk | In memory | +| :---------------------------------------- | :--------------------------------------- | +| ![](out/benchmarkInsert_memory:false.png) | ![](out/benchmarkInsert_memory:true.png) | + +#### Select +| On disk | In memory | +| :---------------------------------------- | :--------------------------------------- | +| ![](out/benchmarkSelect_memory:false.png) | ![](out/benchmarkSelect_memory:true.png) | + +## Adding benchmarks +A specific type of benchmark function is currently automated: +```go +type bechmarkOfNRows func(b *testing.B, db *sql.DB, nRows int) +``` + +You can implement benchmark functions of that type, then add them into ```allBenchmarksOfNRows``` variable (see [benchmarks.go](benchmarks.go)) + +```go +var allBenchmarksOfNRows = []bechmarkOfNRows{ + benchmarkInsert, + benchmarkSelect, + } +``` + +Elements of ```allBenchmarksOfNRows``` will be automatically evaluated and plotted when alternative plotting runner is used (e.g. ```go run .```) + +To make implemented benchmark available via go-test, you may write a simple stub like following (see [bench_test.go](bench_test.go)): +```go +func BenchmarkSelect(b *testing.B) { + doBenchmarkOfNrows(b, benchmarkSelect) +} +``` diff --git a/benchmark/bench_plot_test.go b/benchmark/bench_plot_test.go new file mode 100644 index 0000000..0285894 --- /dev/null +++ b/benchmark/bench_plot_test.go @@ -0,0 +1,105 @@ +// Copyright 2021 The Sqlite Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package benchmark + +import ( + "flag" + "fmt" + "log" + "math" + "math/rand" + "os" + "path" + "testing" +) + +var ( + // in dryRun we just generate random values to quickly see how information is plotted + dryRun bool + + // whethe to use dark palette when plotting results + darkPalette bool +) + +func TestMain(m *testing.M) { + flag.BoolVar(&dryRun, "dry", false, "just generate random values to quickly see how information is plotted") + flag.BoolVar(&darkPalette, "dark", false, "use dark palette when plotting") + flag.Parse() + os.Exit(m.Run()) +} + +func TestBenchmarkAndPlot(t *testing.T) { + // choose palette for plottin + var palette = LightPalette + if darkPalette { + palette = DarkPalette + } + + for _, benchFunc := range allBenchmarksOfNRows { + for _, isMemoryDB := range inMemory { + + // create graph + graph := &GraphCompareOfNRows{ + title: fmt.Sprintf("%s | In-Memory: %v", getFuncName(benchFunc), isMemoryDB), + rowCountsE: rowCountsE, + palette: palette, + } + + // drivers + for _, driver := range drivers { + // this slice accumulates values as float64, for later plotting + var ( + seriesValues []float64 + rowsPerSec float64 + ) + + // number of rows in table + for _, e := range rowCountsE { + if dryRun { + // in dryRun mode we just generate random value to quickly see how information is plotted + rowsPerSec = rand.Float64() * 200000 + } else { + // create DB + db := createDB(t, isMemoryDB, driver) + + // run benchmark + result := testing.Benchmark(func(b *testing.B) { + benchFunc(b, db, int(math.Pow10(e))) + }) + + // close DB + db.Close() + + // calculate rows/sec + rowsPerSec = math.Pow10(e) * float64(result.N) / result.T.Seconds() + } + + // print result to console (FYI) + benchName := fmt.Sprintf("%s_%s", getFuncName(benchFunc), makeName(isMemoryDB, driver, e)) + fmt.Println(benchName, "\t", fmt.Sprintf("%10.0f", rowsPerSec), "rows/sec") + + // add corresponding value to series + seriesValues = append(seriesValues, rowsPerSec) + } + + // add series to graph + var seriesName string + if driver == "sqlite3" { + seriesName = "CGo" + } else { + seriesName = "Go" + } + graph.AddSeries(seriesName, seriesValues) + } + + // render graph into file + outputFilename := path.Join("out", fmt.Sprintf("%s_memory:%v.png", getFuncName(benchFunc), isMemoryDB)) + if err := graph.Render(outputFilename); err != nil { + log.Fatal(err) + } + log.Printf("plot written into %s\n", outputFilename) + } + } +} diff --git a/benchmark/bench_test.go b/benchmark/bench_test.go new file mode 100644 index 0000000..a3cd430 --- /dev/null +++ b/benchmark/bench_test.go @@ -0,0 +1,45 @@ +// Copyright 2021 The Sqlite Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// this file allows to run benchmarks via go test +package benchmark + +import ( + "math" + "testing" +) + +func BenchmarkSelect(b *testing.B) { + doBenchmarkOfNrows(b, benchmarkSelect) +} + +// https://gitlab.com/cznic/sqlite/-/issues/39 +func BenchmarkInsert(b *testing.B) { + doBenchmarkOfNrows(b, benchmarkInsert) +} + +func doBenchmarkOfNrows(b *testing.B, benchFunc bechmarkOfNRows) { + for _, isMemoryDB := range inMemory { // in-memory: on/off + for _, e := range rowCountsE { // number of rows in table + for _, driverName := range drivers { // drivers + + // create new DB + db := createDB(b, isMemoryDB, driverName) + + // run benchmark + b.Run( + makeName(isMemoryDB, driverName, e), + func(b *testing.B) { + benchFunc(b, db, int(math.Pow10(e))) + }, + ) + + // close DB + if err := db.Close(); err != nil { + b.Fatal(err) + } + } + } + } +} diff --git a/benchmark/benchmarks.go b/benchmark/benchmarks.go new file mode 100644 index 0000000..ddf8841 --- /dev/null +++ b/benchmark/benchmarks.go @@ -0,0 +1,111 @@ +// Copyright 2021 The Sqlite Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// this file contains pure benchmark functions +// these may be wrapped by different runners +package benchmark + +import ( + "database/sql" + "testing" +) + +// all benchmark of N functions to be run +var allBenchmarksOfNRows = []bechmarkOfNRows{ + benchmarkInsert, + benchmarkSelect, +} + +// bechmarkOfNRows is a type for a function that is benchmarking something depending on rows count. +type bechmarkOfNRows func(b *testing.B, db *sql.DB, nRows int) + +// benchmarkInsert measures insertion of nRows into empty test table +// the insertion is carried line by line, inside a transaction, using single prepared statement +// the passed db instance must be empty (fresh) and is NOT auto-closed inside the benchmark function +func benchmarkInsert(b *testing.B, db *sql.DB, nRows int) { + // create test table (empty) + createTestTable(b, db, 0) + + // prepare statement for insertion + s, err := db.Prepare("insert into t values(?)") + if err != nil { + b.Fatal(err) + } + defer s.Close() + + // measure from here + b.ResetTimer() + + // do N times + for i := 0; i < b.N; i++ { + // remove data from test table + b.StopTimer() + if _, err := db.Exec("delete from t"); err != nil { + b.Fatal(err) + } + b.StartTimer() + + // begin tx + if _, err := db.Exec("begin"); err != nil { + b.Fatal(err) + } + + // insert nRows one by one via prepared statement + for i := 0; i < nRows; i++ { + if _, err := s.Exec(int64(i)); err != nil { + b.Fatal(err) + } + } + + // commit tx + if _, err := db.Exec("commit"); err != nil { + b.Fatal(err) + } + + b.StopTimer() + } +} + +// benchmarkSelect measures select of nRows from a test table +// the passed db instance must be empty (fresh) and is NOT auto-closed inside the benchmark function +func benchmarkSelect(b *testing.B, db *sql.DB, nRows int) { + // create test table with data + createTestTable(b, db, nRows) + + // scan destination + dst := 0 + + // measure from here + b.ResetTimer() + + // do N times + for i := 0; i < b.N; i++ { + // prepare a rows to iterate on + b.StopTimer() + rows, err := db.Query("select * from t") + if err != nil { + b.Fatal(err) + } + b.StartTimer() + + // iterate in rows + for i := 0; i < nRows; i++ { + if !rows.Next() { + b.Fatal(rows.Err()) // createTestTable did not insert enough records? that's strange + } + + // scan yet another value + err = rows.Scan(&dst) + if err != nil { + b.Fatal(err) + } + } + b.StopTimer() + + if rows.Next() { + b.Fatal("expecting rows to be exhausted at this point") + } + rows.Close() + } +} diff --git a/benchmark/common.go b/benchmark/common.go new file mode 100644 index 0000000..11c92fc --- /dev/null +++ b/benchmark/common.go @@ -0,0 +1,48 @@ +// Copyright 2021 The Sqlite Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package benchmark + +import ( + "fmt" + + _ "github.com/mattn/go-sqlite3" + _ "modernc.org/sqlite" +) + +var ( + // driver names + drivers = []string{ + "sqlite3", // CGo SQLite + "sqlite", // pure-go SQLite + } + + // whether in-memory DB used + inMemory = []bool{ + true, + false, + } + + // row counts will be 1eX, where X is taken from this slice + rowCountsE = []int{1, 2, 3, 4, 5, 6} +) + +// makeName generates name for a benchmark +func makeName(inMemory bool, driver string, e int) string { + var name string + + if driver == "sqlite" { + name = "Go" + } else { + name = "CGo" + } + + if inMemory { + name += "_Memory" + } else { + name += "_OnDisk" + } + + return fmt.Sprintf("%s_1e%d", name, e) +} diff --git a/benchmark/go.mod b/benchmark/go.mod new file mode 100644 index 0000000..b4f8e0c --- /dev/null +++ b/benchmark/go.mod @@ -0,0 +1,34 @@ +module modernc.org/sqlite/benchmark + +go 1.17 + +replace modernc.org/sqlite => ../ + +require ( + github.com/mattn/go-sqlite3 v1.14.9 + github.com/wcharczuk/go-chart v2.0.1+incompatible + modernc.org/sqlite v0.0.0-00010101000000-000000000000 +) + +require ( + github.com/blend/go-sdk v1.20211204.3 // indirect + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect + github.com/mattn/go-isatty v0.0.12 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect + golang.org/x/image v0.0.0-20211028202545-6944b10bf410 // indirect + golang.org/x/mod v0.3.0 // indirect + golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac // indirect + golang.org/x/tools v0.0.0-20201204162204-73cf035baebf // indirect + golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect + lukechampine.com/uint128 v1.1.1 // indirect + modernc.org/cc/v3 v3.35.18 // indirect + modernc.org/ccgo/v3 v3.12.95 // indirect + modernc.org/libc v1.11.104 // indirect + modernc.org/mathutil v1.4.1 // indirect + modernc.org/memory v1.0.5 // indirect + modernc.org/opt v0.1.1 // indirect + modernc.org/strutil v1.1.1 // indirect + modernc.org/token v1.0.0 // indirect +) diff --git a/benchmark/go.sum b/benchmark/go.sum new file mode 100644 index 0000000..fad832f --- /dev/null +++ b/benchmark/go.sum @@ -0,0 +1,770 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DataDog/datadog-go v4.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/aws/aws-sdk-go v1.38.41/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/blend/go-sdk v1.20211204.3 h1:Bgj+Z79Q0toRE/hR2Tsdck+XSiwajTg8bGRF2enQ4yI= +github.com/blend/go-sdk v1.20211204.3/go.mod h1:nbmX7cdPm66JOqg6M3cKMtuqj6RzkE72sHZue61T5c0= +github.com/blend/sentry-go v1.0.1/go.mod h1:hgyX3WXen2YBiA0NitlfsXsvS+9ly2YlEBmmmYDgrWY= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-errors/errors v1.1.1/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3 h1:x95R7cp+rSeeqAMI2knLtQ0DKlaBhv2NrtrOvafPHRo= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= +github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= +github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= +github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= +github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= +github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= +github.com/jackc/pgconn v1.4.0/go.mod h1:Y2O3ZDF0q4mMacyWV3AstPJpeHXWGEetiFttmq5lahk= +github.com/jackc/pgconn v1.5.0/go.mod h1:QeD3lBfpTFe8WUnPZWN5KY/mB8FGMIYRdd8P8Jr0fAI= +github.com/jackc/pgconn v1.5.1-0.20200601181101-fa742c524853/go.mod h1:QeD3lBfpTFe8WUnPZWN5KY/mB8FGMIYRdd8P8Jr0fAI= +github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= +github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= +github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= +github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgservicefile v0.0.0-20200307190119-3430c5407db8/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= +github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= +github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= +github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= +github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= +github.com/jackc/pgtype v1.2.0/go.mod h1:5m2OfMh1wTK7x+Fk952IDmI4nw3nPrvtQdM0ZT4WpC0= +github.com/jackc/pgtype v1.3.1-0.20200510190516-8cd94a14c75a/go.mod h1:vaogEUkALtxZMCH411K+tKzNpwzCKU+AnPzBKZ+I+Po= +github.com/jackc/pgtype v1.3.1-0.20200606141011-f6355165a91c/go.mod h1:cvk9Bgu/VzJ9/lxTO5R5sf80p0DiucVtN7ZxvaC4GmQ= +github.com/jackc/pgtype v1.6.2/go.mod h1:JCULISAZBFGrHaOXIIFiyfzW5VY0GRitRr8NeJsrdig= +github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= +github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= +github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= +github.com/jackc/pgx/v4 v4.5.0/go.mod h1:EpAKPLdnTorwmPUUsqrPxy5fphV18j9q3wrfRXgo+kA= +github.com/jackc/pgx/v4 v4.6.1-0.20200510190926-94ba730bb1e9/go.mod h1:t3/cdRQl6fOLDxqtlyhe9UWgfIi9R8+8v8GKV5TRA/o= +github.com/jackc/pgx/v4 v4.6.1-0.20200606145419-4e5062306904/go.mod h1:ZDaNWkt9sW1JMiNn0kdYBaLelIhw7Pg4qd+Vk6tw7Hg= +github.com/jackc/pgx/v4 v4.10.0/go.mod h1:QlrWebbs3kqEZPHCTGyxecvzG6tvIsYu+A5b1raylkA= +github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.1.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-sqlite3 v1.14.9 h1:10HX2Td0ocZpYEjhilsuo6WWtUqttj2Kb0KtD86/KYA= +github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mediocregopher/radix/v4 v4.0.0-beta.1/go.mod h1:Z74pilm773ghbGV4EEoPvi6XWgkAfr0VCNkfa8gI1PU= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= +github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= +github.com/shopspring/decimal v0.0.0-20200227202807-02e2044944cc/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/tilinna/clock v1.0.2/go.mod h1:ZsP7BcY7sEEz7ktc0IVy8Us6boDrK8VradlKRUGfOao= +github.com/tinylib/msgp v1.1.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/wcharczuk/go-chart v2.0.1+incompatible h1:0pz39ZAycJFF7ju/1mepnk26RLVLBCWz1STcD3doU0A= +github.com/wcharczuk/go-chart v2.0.1+incompatible/go.mod h1:PF5tmL4EIx/7Wf+hEkpCqYi5He4u90sw+0+6FhrryuE= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20211028202545-6944b10bf410 h1:hTftEOvwiOq2+O8k2D5/Q7COC7k5Qcrgc2TFURJYnvQ= +golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20201203001011-0b49973bad19/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201126233918-771906719818/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210902050250-f475640dd07b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac h1:oN6lz7iLW/YC7un8pq+9bOLyXrprv2+DKfkJY+2LJJw= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201204162204-73cf035baebf h1:LJkCozzIEY51bepolJQN3tP938NA5mMucF2dDJ9AMNA= +golang.org/x/tools v0.0.0-20201204162204-73cf035baebf/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +gopkg.in/DataDog/dd-trace-go.v1 v1.27.1/go.mod h1:Sp1lku8WJMvNV0kjDI4Ni/T7J/U3BO5ct5kEaoVU8+I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= +gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +lukechampine.com/uint128 v1.1.1 h1:pnxCASz787iMf+02ssImqk6OLt+Z5QHMoZyUXR4z6JU= +lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.33.6/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.33.9/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.33.11/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.34.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.0/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.4/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.5/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.7/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.8/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.10/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.15/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.16/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.17/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/cc/v3 v3.35.18 h1:rMZhRcWrba0y3nVmdiQ7kxAgOOSq2m2f2VzjHLgEs6U= +modernc.org/cc/v3 v3.35.18/go.mod h1:iPJg1pkwXqAV16SNgFBVYmggfMg6xhs+2oiO0vclK3g= +modernc.org/ccgo/v3 v3.9.5/go.mod h1:umuo2EP2oDSBnD3ckjaVUXMrmeAw8C8OSICVa0iFf60= +modernc.org/ccgo/v3 v3.10.0/go.mod h1:c0yBmkRFi7uW4J7fwx/JiijwOjeAeR2NoSaRVFPmjMw= +modernc.org/ccgo/v3 v3.11.0/go.mod h1:dGNposbDp9TOZ/1KBxghxtUp/bzErD0/0QW4hhSaBMI= +modernc.org/ccgo/v3 v3.11.1/go.mod h1:lWHxfsn13L3f7hgGsGlU28D9eUOf6y3ZYHKoPaKU0ag= +modernc.org/ccgo/v3 v3.11.3/go.mod h1:0oHunRBMBiXOKdaglfMlRPBALQqsfrCKXgw9okQ3GEw= +modernc.org/ccgo/v3 v3.12.4/go.mod h1:Bk+m6m2tsooJchP/Yk5ji56cClmN6R1cqc9o/YtbgBQ= +modernc.org/ccgo/v3 v3.12.6/go.mod h1:0Ji3ruvpFPpz+yu+1m0wk68pdr/LENABhTrDkMDWH6c= +modernc.org/ccgo/v3 v3.12.8/go.mod h1:Hq9keM4ZfjCDuDXxaHptpv9N24JhgBZmUG5q60iLgUo= +modernc.org/ccgo/v3 v3.12.11/go.mod h1:0jVcmyDwDKDGWbcrzQ+xwJjbhZruHtouiBEvDfoIsdg= +modernc.org/ccgo/v3 v3.12.14/go.mod h1:GhTu1k0YCpJSuWwtRAEHAol5W7g1/RRfS4/9hc9vF5I= +modernc.org/ccgo/v3 v3.12.18/go.mod h1:jvg/xVdWWmZACSgOiAhpWpwHWylbJaSzayCqNOJKIhs= +modernc.org/ccgo/v3 v3.12.20/go.mod h1:aKEdssiu7gVgSy/jjMastnv/q6wWGRbszbheXgWRHc8= +modernc.org/ccgo/v3 v3.12.21/go.mod h1:ydgg2tEprnyMn159ZO/N4pLBqpL7NOkJ88GT5zNU2dE= +modernc.org/ccgo/v3 v3.12.22/go.mod h1:nyDVFMmMWhMsgQw+5JH6B6o4MnZ+UQNw1pp52XYFPRk= +modernc.org/ccgo/v3 v3.12.25/go.mod h1:UaLyWI26TwyIT4+ZFNjkyTbsPsY3plAEB6E7L/vZV3w= +modernc.org/ccgo/v3 v3.12.29/go.mod h1:FXVjG7YLf9FetsS2OOYcwNhcdOLGt8S9bQ48+OP75cE= +modernc.org/ccgo/v3 v3.12.36/go.mod h1:uP3/Fiezp/Ga8onfvMLpREq+KUjUmYMxXPO8tETHtA8= +modernc.org/ccgo/v3 v3.12.38/go.mod h1:93O0G7baRST1vNj4wnZ49b1kLxt0xCW5Hsa2qRaZPqc= +modernc.org/ccgo/v3 v3.12.43/go.mod h1:k+DqGXd3o7W+inNujK15S5ZYuPoWYLpF5PYougCmthU= +modernc.org/ccgo/v3 v3.12.46/go.mod h1:UZe6EvMSqOxaJ4sznY7b23/k13R8XNlyWsO5bAmSgOE= +modernc.org/ccgo/v3 v3.12.47/go.mod h1:m8d6p0zNps187fhBwzY/ii6gxfjob1VxWb919Nk1HUk= +modernc.org/ccgo/v3 v3.12.50/go.mod h1:bu9YIwtg+HXQxBhsRDE+cJjQRuINuT9PUK4orOco/JI= +modernc.org/ccgo/v3 v3.12.51/go.mod h1:gaIIlx4YpmGO2bLye04/yeblmvWEmE4BBBls4aJXFiE= +modernc.org/ccgo/v3 v3.12.53/go.mod h1:8xWGGTFkdFEWBEsUmi+DBjwu/WLy3SSOrqEmKUjMeEg= +modernc.org/ccgo/v3 v3.12.54/go.mod h1:yANKFTm9llTFVX1FqNKHE0aMcQb1fuPJx6p8AcUx+74= +modernc.org/ccgo/v3 v3.12.55/go.mod h1:rsXiIyJi9psOwiBkplOaHye5L4MOOaCjHg1Fxkj7IeU= +modernc.org/ccgo/v3 v3.12.56/go.mod h1:ljeFks3faDseCkr60JMpeDb2GSO3TKAmrzm7q9YOcMU= +modernc.org/ccgo/v3 v3.12.57/go.mod h1:hNSF4DNVgBl8wYHpMvPqQWDQx8luqxDnNGCMM4NFNMc= +modernc.org/ccgo/v3 v3.12.60/go.mod h1:k/Nn0zdO1xHVWjPYVshDeWKqbRWIfif5dtsIOCUVMqM= +modernc.org/ccgo/v3 v3.12.66/go.mod h1:jUuxlCFZTUZLMV08s7B1ekHX5+LIAurKTTaugUr/EhQ= +modernc.org/ccgo/v3 v3.12.67/go.mod h1:Bll3KwKvGROizP2Xj17GEGOTrlvB1XcVaBrC90ORO84= +modernc.org/ccgo/v3 v3.12.73/go.mod h1:hngkB+nUUqzOf3iqsM48Gf1FZhY599qzVg1iX+BT3cQ= +modernc.org/ccgo/v3 v3.12.81/go.mod h1:p2A1duHoBBg1mFtYvnhAnQyI6vL0uw5PGYLSIgF6rYY= +modernc.org/ccgo/v3 v3.12.84/go.mod h1:ApbflUfa5BKadjHynCficldU1ghjen84tuM5jRynB7w= +modernc.org/ccgo/v3 v3.12.86/go.mod h1:dN7S26DLTgVSni1PVA3KxxHTcykyDurf3OgUzNqTSrU= +modernc.org/ccgo/v3 v3.12.88/go.mod h1:0MFzUHIuSIthpVZyMWiFYMwjiFnhrN5MkvBrUwON+ZM= +modernc.org/ccgo/v3 v3.12.90/go.mod h1:obhSc3CdivCRpYZmrvO88TXlW0NvoSVvdh/ccRjJYko= +modernc.org/ccgo/v3 v3.12.92/go.mod h1:5yDdN7ti9KWPi5bRVWPl8UNhpEAtCjuEE7ayQnzzqHA= +modernc.org/ccgo/v3 v3.12.95 h1:Ym2JG2G3P4IyZqjTTojHTl7qO0RysXeGSYPSoKPSBxc= +modernc.org/ccgo/v3 v3.12.95/go.mod h1:ZcLyvtocXYi8uF+9Ebm3G8EF8HNY5hGomBqthDp4eC8= +modernc.org/ccorpus v1.11.1 h1:K0qPfpVG1MJh5BYazccnmhywH4zHuOgJXgbjzyp6dWA= +modernc.org/ccorpus v1.11.1/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= +modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= +modernc.org/libc v1.9.8/go.mod h1:U1eq8YWr/Kc1RWCMFUWEdkTg8OTcfLw2kY8EDwl039w= +modernc.org/libc v1.9.11/go.mod h1:NyF3tsA5ArIjJ83XB0JlqhjTabTCHm9aX4XMPHyQn0Q= +modernc.org/libc v1.11.0/go.mod h1:2lOfPmj7cz+g1MrPNmX65QCzVxgNq2C5o0jdLY2gAYg= +modernc.org/libc v1.11.2/go.mod h1:ioIyrl3ETkugDO3SGZ+6EOKvlP3zSOycUETe4XM4n8M= +modernc.org/libc v1.11.5/go.mod h1:k3HDCP95A6U111Q5TmG3nAyUcp3kR5YFZTeDS9v8vSU= +modernc.org/libc v1.11.6/go.mod h1:ddqmzR6p5i4jIGK1d/EiSw97LBcE3dK24QEwCFvgNgE= +modernc.org/libc v1.11.11/go.mod h1:lXEp9QOOk4qAYOtL3BmMve99S5Owz7Qyowzvg6LiZso= +modernc.org/libc v1.11.13/go.mod h1:ZYawJWlXIzXy2Pzghaf7YfM8OKacP3eZQI81PDLFdY8= +modernc.org/libc v1.11.16/go.mod h1:+DJquzYi+DMRUtWI1YNxrlQO6TcA5+dRRiq8HWBWRC8= +modernc.org/libc v1.11.19/go.mod h1:e0dgEame6mkydy19KKaVPBeEnyJB4LGNb0bBH1EtQ3I= +modernc.org/libc v1.11.24/go.mod h1:FOSzE0UwookyT1TtCJrRkvsOrX2k38HoInhw+cSCUGk= +modernc.org/libc v1.11.26/go.mod h1:SFjnYi9OSd2W7f4ct622o/PAYqk7KHv6GS8NZULIjKY= +modernc.org/libc v1.11.27/go.mod h1:zmWm6kcFXt/jpzeCgfvUNswM0qke8qVwxqZrnddlDiE= +modernc.org/libc v1.11.28/go.mod h1:Ii4V0fTFcbq3qrv3CNn+OGHAvzqMBvC7dBNyC4vHZlg= +modernc.org/libc v1.11.31/go.mod h1:FpBncUkEAtopRNJj8aRo29qUiyx5AvAlAxzlx9GNaVM= +modernc.org/libc v1.11.34/go.mod h1:+Tzc4hnb1iaX/SKAutJmfzES6awxfU1BPvrrJO0pYLg= +modernc.org/libc v1.11.37/go.mod h1:dCQebOwoO1046yTrfUE5nX1f3YpGZQKNcITUYWlrAWo= +modernc.org/libc v1.11.39/go.mod h1:mV8lJMo2S5A31uD0k1cMu7vrJbSA3J3waQJxpV4iqx8= +modernc.org/libc v1.11.42/go.mod h1:yzrLDU+sSjLE+D4bIhS7q1L5UwXDOw99PLSX0BlZvSQ= +modernc.org/libc v1.11.44/go.mod h1:KFq33jsma7F5WXiYelU8quMJasCCTnHK0mkri4yPHgA= +modernc.org/libc v1.11.45/go.mod h1:Y192orvfVQQYFzCNsn+Xt0Hxt4DiO4USpLNXBlXg/tM= +modernc.org/libc v1.11.47/go.mod h1:tPkE4PzCTW27E6AIKIR5IwHAQKCAtudEIeAV1/SiyBg= +modernc.org/libc v1.11.49/go.mod h1:9JrJuK5WTtoTWIFQ7QjX2Mb/bagYdZdscI3xrvHbXjE= +modernc.org/libc v1.11.51/go.mod h1:R9I8u9TS+meaWLdbfQhq2kFknTW0O3aw3kEMqDDxMaM= +modernc.org/libc v1.11.53/go.mod h1:5ip5vWYPAoMulkQ5XlSJTy12Sz5U6blOQiYasilVPsU= +modernc.org/libc v1.11.54/go.mod h1:S/FVnskbzVUrjfBqlGFIPA5m7UwB3n9fojHhCNfSsnw= +modernc.org/libc v1.11.55/go.mod h1:j2A5YBRm6HjNkoSs/fzZrSxCuwWqcMYTDPLNx0URn3M= +modernc.org/libc v1.11.56/go.mod h1:pakHkg5JdMLt2OgRadpPOTnyRXm/uzu+Yyg/LSLdi18= +modernc.org/libc v1.11.58/go.mod h1:ns94Rxv0OWyoQrDqMFfWwka2BcaF6/61CqJRK9LP7S8= +modernc.org/libc v1.11.71/go.mod h1:DUOmMYe+IvKi9n6Mycyx3DbjfzSKrdr/0Vgt3j7P5gw= +modernc.org/libc v1.11.75/go.mod h1:dGRVugT6edz361wmD9gk6ax1AbDSe0x5vji0dGJiPT0= +modernc.org/libc v1.11.82/go.mod h1:NF+Ek1BOl2jeC7lw3a7Jj5PWyHPwWD4aq3wVKxqV1fI= +modernc.org/libc v1.11.86/go.mod h1:ePuYgoQLmvxdNT06RpGnaDKJmDNEkV7ZPKI2jnsvZoE= +modernc.org/libc v1.11.87/go.mod h1:Qvd5iXTeLhI5PS0XSyqMY99282y+3euapQFxM7jYnpY= +modernc.org/libc v1.11.88/go.mod h1:h3oIVe8dxmTcchcFuCcJ4nAWaoiwzKCdv82MM0oiIdQ= +modernc.org/libc v1.11.90/go.mod h1:ynK5sbjsU77AP+nn61+k+wxUGRx9rOFcIqWYYMaDZ4c= +modernc.org/libc v1.11.98/go.mod h1:ynK5sbjsU77AP+nn61+k+wxUGRx9rOFcIqWYYMaDZ4c= +modernc.org/libc v1.11.99/go.mod h1:wLLYgEiY2D17NbBOEp+mIJJJBGSiy7fLL4ZrGGZ+8jI= +modernc.org/libc v1.11.101/go.mod h1:wLLYgEiY2D17NbBOEp+mIJJJBGSiy7fLL4ZrGGZ+8jI= +modernc.org/libc v1.11.104 h1:gxoa5b3HPo7OzD4tKZjgnwXk/w//u1oovvjSMP3Q96Q= +modernc.org/libc v1.11.104/go.mod h1:2MH3DaF/gCU8i/UBiVE1VFRos4o523M7zipmwH8SIgQ= +modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.1 h1:ij3fYGe8zBF4Vu+g0oT7mB06r8sqGWKuJu1yXeR4by8= +modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.0.4/go.mod h1:nV2OApxradM3/OVbs2/0OsP6nPfakXpi50C7dcoHXlc= +modernc.org/memory v1.0.5 h1:XRch8trV7GgvTec2i7jc33YlUI0RKVDBvZ5eZ5m8y14= +modernc.org/memory v1.0.5/go.mod h1:B7OYswTRnfGg+4tDH1t1OeUNnsy2viGTdME4tzd+IjM= +modernc.org/opt v0.1.1 h1:/0RX92k9vwVeDXj+Xn23DKp2VJubL7k8qNffND6qn3A= +modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs= +modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= +modernc.org/tcl v1.9.2 h1:YA87dFLOsR2KqMka371a2Xgr+YsyUwo7OmHVSv/kztw= +modernc.org/tcl v1.9.2/go.mod h1:aw7OnlIoiuJgu1gwbTZtrKnGpDqH9wyH++jZcxdqNsg= +modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk= +modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.2.20 h1:DyboxM1sJR2NB803j2StnbnL6jcQXz273OhHDGu8dGk= +modernc.org/z v1.2.20/go.mod h1:zU9FiF4PbHdOTUxw+IF8j7ArBMRPsHgq10uVPt6xTzo= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/benchmark/out/benchmarkInsert_memory:false.png b/benchmark/out/benchmarkInsert_memory:false.png new file mode 100644 index 0000000000000000000000000000000000000000..c38f1bb95f78629bf4b19251b4d2ea54abf191a6 GIT binary patch literal 38696 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 Uw1U;Yh(A<3uO^o+YwYuX0ey`u?EnA( literal 0 HcmV?d00001 diff --git a/benchmark/out/benchmarkInsert_memory:true.png b/benchmark/out/benchmarkInsert_memory:true.png new file mode 100644 index 0000000000000000000000000000000000000000..cffb04234699f14f819b591a54238a4698e0707f GIT binary patch literal 35815 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 N;X^uV$wcE@{{t>Q%Vz)p literal 0 HcmV?d00001 diff --git a/benchmark/out/benchmarkSelect_memory:false.png b/benchmark/out/benchmarkSelect_memory:false.png new file mode 100644 index 0000000000000000000000000000000000000000..54cb8bd0140cf62e141fbac038ebbdb95c7154d5 GIT binary patch literal 37098 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 literal 0 HcmV?d00001 diff --git a/benchmark/plot.go b/benchmark/plot.go new file mode 100644 index 0000000..a74ff09 --- /dev/null +++ b/benchmark/plot.go @@ -0,0 +1,236 @@ +// Copyright 2021 The Sqlite Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// helpers for plotting benchmark results +package benchmark + +import ( + "fmt" + "os" + "path" + + "github.com/wcharczuk/go-chart" + "github.com/wcharczuk/go-chart/drawing" +) + +const ( + yAxisCeilStep = 200000 +) + +var transparentColor = drawing.ColorWhite.WithAlpha(0) + +type GraphCompareOfNRows struct { + // this fields should be set externally + rowCountsE []int + title string + palette chart.ColorPalette + + // this fields are for private use + seriesNameS []string + seriesValuesS [][]float64 +} + +func (g *GraphCompareOfNRows) AddSeries(name string, values []float64) { + g.seriesNameS = append(g.seriesNameS, name) + g.seriesValuesS = append(g.seriesValuesS, values) +} + +func (g *GraphCompareOfNRows) Render(filename string) error { + // new chart object + graph := g.newGraph() + + // generate series objects for graph + for i, seriesName := range g.seriesNameS { + // get corresponding series values + seriesValues := g.seriesValuesS[i] + + // create series object + graph.Series = append(graph.Series, g.createSeries(seriesName, seriesValues)) + + // adjust max for Y axis + yMax := (int(max(seriesValues...)/yAxisCeilStep) + 1) * yAxisCeilStep // a special case of ceil() + if graph.YAxis.Range.GetMax() < float64(yMax) { + graph.YAxis.Range = &chart.ContinuousRange{ + Min: 0, + Max: float64(yMax), + } + } + + // skip annotations for first series + if i == 0 { + continue + } + + // for every series except first, we create a ratio annotation s[X]/s[0] + annotations := &chart.AnnotationSeries{} + for i, v := range seriesValues { + annotations.Annotations = append(annotations.Annotations, g.newRatioAnnotation( + float64(g.rowCountsE[i]), + v, + v/g.seriesValuesS[0][i], + )) + + } + + // append annotations to graph + graph.Series = append(graph.Series, annotations) + } + + // add legend + graph.Elements = []chart.Renderable{ + chart.Legend(graph, chart.Style{ + FontSize: 12, + StrokeColor: transparentColor, + FillColor: g.palette.CanvasColor(), + FontColor: g.palette.TextColor().WithAlpha(192), + }), + } + + // write into file + if err := os.MkdirAll(path.Dir(filename), 0775); err != nil { + return err + } + f, err := os.Create(filename) + if err != nil { + return err + } + defer f.Close() + if err := graph.Render(chart.PNG, f); err != nil { + return err + } + return nil +} + +func (g *GraphCompareOfNRows) createSeries(name string, values []float64) chart.Series { + // convert E values of rowCount onto float64 + var xValues []float64 + for _, e := range g.rowCountsE { + xValues = append(xValues, float64(e)) + } + + // create series + series := &chart.ContinuousSeries{ + Name: name, + Style: chart.Style{ + DotWidth: 2.5, + Show: true, + StrokeWidth: 1.5, + }, + XValues: xValues, + YValues: values, + } + + // save in series slice + return series +} + +func (g *GraphCompareOfNRows) newGraph() *chart.Chart { + return &chart.Chart{ + ColorPalette: g.palette, + Title: g.title, + TitleStyle: chart.Style{ + Show: true, + }, + Background: chart.Style{ + Padding: chart.Box{ + Top: 20, + Left: 20, + }, + }, + Canvas: chart.Style{}, + XAxis: chart.XAxis{ + Style: chart.StyleShow(), + NameStyle: chart.StyleShow(), + Name: "rows", + Ticks: g.genXticks(), + }, + YAxis: chart.YAxis{ + Range: &chart.ContinuousRange{}, + Style: chart.StyleShow(), + Name: "rows/sec", + NameStyle: chart.StyleShow(), + ValueFormatter: func(v interface{}) string { return fmt.Sprintf("%.0f", v) }, + }, + } +} + +func (g *GraphCompareOfNRows) newRatioAnnotation(x, y, ratio float64) chart.Value2 { + return chart.Value2{ + XValue: x, + YValue: y, + Label: fmt.Sprintf("%.2fx", ratio), + Style: chart.Style{ + FontSize: 8, + TextHorizontalAlign: chart.TextHorizontalAlignLeft, + FillColor: transparentColor, // full tranparency + StrokeColor: transparentColor, // full transparency + FontColor: g.palette.TextColor().WithAlpha(255), // no transaprency + TextRotationDegrees: 45, + }, + } +} + +func (g *GraphCompareOfNRows) genXticks() []chart.Tick { + var ticks []chart.Tick + for i, e := range g.rowCountsE { + ticks = append(ticks, chart.Tick{ + Value: float64(e), + Label: fmt.Sprintf("1e%d", i+1), + }) + } + return ticks +} + +func max(f ...float64) float64 { + if len(f) == 0 { + return 0 + } + m := f[0] + for i := 1; i < len(f); i++ { + if m < f[i] { + m = f[i] + } + } + return m +} + +type palette struct { + bgColor drawing.Color + bgStrokeColor drawing.Color + canvasColor drawing.Color + canvasStrokeColor drawing.Color + axisStrokeColor drawing.Color + textColor drawing.Color + seriesColor []drawing.Color +} + +func (p *palette) BackgroundColor() drawing.Color { return p.bgColor } +func (p *palette) BackgroundStrokeColor() drawing.Color { return p.bgStrokeColor } +func (p *palette) CanvasColor() drawing.Color { return p.canvasColor } +func (p *palette) CanvasStrokeColor() drawing.Color { return p.canvasStrokeColor } +func (p *palette) AxisStrokeColor() drawing.Color { return p.axisStrokeColor } +func (p *palette) TextColor() drawing.Color { return p.textColor } +func (p *palette) GetSeriesColor(i int) drawing.Color { return p.seriesColor[i%len(p.seriesColor)] } + +var DarkPalette = &palette{ + bgColor: drawing.ColorFromHex("252526"), + canvasColor: drawing.ColorFromHex("1e1e1e1"), + textColor: drawing.ColorFromHex("d4d4d4").WithAlpha(128), + axisStrokeColor: drawing.ColorFromHex("d4d4d4").WithAlpha(128), + seriesColor: []drawing.Color{ + drawing.ColorFromHex("d5d5a5"), + drawing.ColorFromHex("569cd5"), + }, +} + +var LightPalette = &palette{ + canvasColor: drawing.ColorFromHex("f2f2f2"), + bgColor: drawing.ColorFromHex("f5f5f5"), + textColor: drawing.ColorFromHex("393939").WithAlpha(128), + axisStrokeColor: drawing.ColorFromHex("393939").WithAlpha(128), + seriesColor: []drawing.Color{ + drawing.ColorFromHex("aa3731"), + drawing.ColorFromHex("5a77c7"), + }, +} diff --git a/benchmark/util.go b/benchmark/util.go new file mode 100644 index 0000000..3259621 --- /dev/null +++ b/benchmark/util.go @@ -0,0 +1,69 @@ +// Copyright 2021 The Sqlite Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package benchmark + +import ( + "database/sql" + "path" + "reflect" + "runtime" + "strings" + "testing" +) + +func createDB(tb testing.TB, inMemory bool, driverName string) *sql.DB { + var dsn string + if inMemory { + dsn = ":memory:" + } else { + dsn = path.Join(tb.TempDir(), "test.db") + } + + db, err := sql.Open(driverName, dsn) + if err != nil { + tb.Fatal(err) + } + return db +} + +func createTestTable(tb testing.TB, db *sql.DB, nRows int) { + if _, err := db.Exec("drop table if exists t"); err != nil { + tb.Fatal(err) + } + + if _, err := db.Exec("create table t(i int)"); err != nil { + tb.Fatal(err) + } + + if nRows > 0 { + s, err := db.Prepare("insert into t values(?)") + if err != nil { + tb.Fatal(err) + } + defer s.Close() + + if _, err := db.Exec("begin"); err != nil { + tb.Fatal(err) + } + + for i := 0; i < nRows; i++ { + if _, err := s.Exec(int64(i)); err != nil { + tb.Fatal(err) + } + } + if _, err := db.Exec("commit"); err != nil { + tb.Fatal(err) + } + } +} + +func getFuncName(i interface{}) string { + // get function name as "package.function" + fn := runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name() + + // return last component + comps := strings.Split(fn, ".") + return comps[len(comps)-1] +} diff --git a/cgo_test.go b/cgo_test.go index 1ccdeb5..fafa45a 100644 --- a/cgo_test.go +++ b/cgo_test.go @@ -2,14 +2,12 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build (cgo && cgobench) || ignore || (cgo && cgotest) -// +build cgo,cgobench ignore cgo,cgotest +//go:build ignore || (cgo && cgotest) +// +build ignore cgo,cgotest package sqlite // import "modernc.org/sqlite" - import ( "database/sql" - "fmt" "io/ioutil" "os" "path/filepath" @@ -18,191 +16,6 @@ import ( _ "github.com/mattn/go-sqlite3" ) -const gcoDriver = "sqlite3" - -var drivers = []string{ - driverName, - gcoDriver, -} - -var inMemory = []bool{ - true, - false, -} - -func makename(inMemory bool, driver string, e int) string { - name := driver - if inMemory { - name += "InMemory" - } else { - name += "OnDisk" - } - return fmt.Sprintf("%s1e%d", name, e) -} - -func benchmarkRead(b *testing.B, drivername, file string, n int) { - os.Remove(file) - db, err := sql.Open(drivername, file) - if err != nil { - b.Fatal(err) - } - - defer func() { - db.Close() - }() - - if _, err := db.Exec(` - create table t(i int); - begin; - `); err != nil { - b.Fatal(err) - } - - s, err := db.Prepare("insert into t values(?)") - if err != nil { - b.Fatal(err) - } - - defer s.Close() - - for i := 0; i < n; i++ { - if _, err := s.Exec(int64(i)); err != nil { - b.Fatal(err) - } - } - if _, err := db.Exec("commit"); err != nil { - b.Fatal(err) - } - - dst := 0 - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - b.StopTimer() - r, err := db.Query("select * from t") - if err != nil { - b.Fatal(err) - } - - b.StartTimer() - for i := 0; i < n; i++ { - if !r.Next() { - b.Fatal(r.Err()) - } - - err = r.Scan(&dst) - if err != nil { - b.Fatal(err) - } - } - b.StopTimer() - r.Close() - } - b.StopTimer() - if *oRecsPerSec { - b.SetBytes(1e6 * int64(n)) - } -} - -func BenchmarkReading1(b *testing.B) { - dir := b.TempDir() - for _, memory := range inMemory { - filename := "file::memory:" - if !memory { - filename = filepath.Join(dir, "test.db") - } - for _, driver := range drivers { - for i, n := range []int{1e1, 1e2, 1e3, 1e4, 1e5, 1e6} { - b.Run(makename(memory, driver, i+1), func(b *testing.B) { - benchmarkRead(b, driver, filename, n) - if !memory { - err := os.Remove(filename) - if err != nil { - b.Fatal(err) - } - } - }) - } - } - } -} - -func benchmarkInsertComparative(b *testing.B, drivername, file string, n int) { - os.Remove(file) - db, err := sql.Open(drivername, file) - if err != nil { - b.Fatal(err) - } - - defer func() { - db.Close() - }() - - if _, err := db.Exec(` - create table t(i int); - `); err != nil { - b.Fatal(err) - } - - s, err := db.Prepare("insert into t values(?)") - if err != nil { - b.Fatal(err) - } - - defer s.Close() - - b.ReportAllocs() - b.ResetTimer() - for i := 0; i < b.N; i++ { - b.StopTimer() - if _, err := db.Exec("begin"); err != nil { - b.Fatal(err) - } - if err, _ := db.Exec("delete * from t"); err != nil { - b.Fatal(err) - } - - b.StartTimer() - for i := 0; i < n; i++ { - if _, err := s.Exec(int64(i)); err != nil { - b.Fatal(err) - } - } - if _, err := db.Exec("commit"); err != nil { - b.Fatal(err) - } - b.StopTimer() - } - b.StopTimer() - if *oRecsPerSec { - b.SetBytes(1e6 * int64(n)) - } -} - -// https://gitlab.com/cznic/sqlite/-/issues/39 -func BenchmarkInsertComparative(b *testing.B) { - dir := b.TempDir() - for _, memory := range inMemory { - filename := "file::memory:" - if !memory { - filename = filepath.Join(dir, "test.db") - } - for _, driver := range drivers { - for i, n := range []int{1e1, 1e2, 1e3, 1e4, 1e5, 1e6} { - b.Run(makename(memory, driver, i+1), func(b *testing.B) { - benchmarkInsertComparative(b, driver, filename, n) - if !memory { - err := os.Remove(filename) - if err != nil { - b.Fatal(err) - } - } - }) - } - } - } -} - // https://gitlab.com/cznic/sqlite/-/issues/65 func TestIssue65CGo(t *testing.T) { tempDir, err := ioutil.TempDir("", "")