feedx 0.12.7 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +2 -37
  3. data/.golangci.yml +13 -4
  4. data/.rubocop.yml +8 -14
  5. data/.tool-versions +1 -0
  6. data/Gemfile +8 -0
  7. data/Gemfile.lock +54 -68
  8. data/Makefile +3 -3
  9. data/README.md +3 -1
  10. data/compression.go +29 -0
  11. data/compression_test.go +73 -61
  12. data/consumer.go +96 -152
  13. data/consumer_test.go +124 -59
  14. data/example_test.go +140 -0
  15. data/feedx.gemspec +2 -10
  16. data/feedx.go +16 -31
  17. data/feedx_ext_test.go +13 -3
  18. data/feedx_test.go +24 -26
  19. data/format.go +29 -19
  20. data/format_test.go +84 -56
  21. data/go.mod +11 -7
  22. data/go.sum +16 -138
  23. data/incremental.go +122 -0
  24. data/incremental_test.go +62 -0
  25. data/lib/feedx/cache/abstract.rb +3 -3
  26. data/lib/feedx/cache/value.rb +6 -6
  27. data/lib/feedx/compression/abstract.rb +2 -2
  28. data/lib/feedx/compression/gzip.rb +4 -4
  29. data/lib/feedx/consumer.rb +8 -8
  30. data/lib/feedx/format/abstract.rb +6 -6
  31. data/lib/feedx/format/json.rb +2 -2
  32. data/lib/feedx/format/protobuf.rb +6 -6
  33. data/lib/feedx/format.rb +1 -3
  34. data/lib/feedx/producer.rb +11 -11
  35. data/lib/feedx/stream.rb +2 -2
  36. data/lib/feedx.rb +2 -3
  37. data/manifest.go +65 -0
  38. data/producer.go +34 -137
  39. data/producer_test.go +46 -60
  40. data/reader.go +142 -41
  41. data/reader_test.go +86 -35
  42. data/scheduler.go +176 -0
  43. data/scheduler_test.go +128 -0
  44. data/writer.go +13 -13
  45. data/writer_test.go +61 -44
  46. metadata +12 -137
  47. data/.github/workflows/lint.yml +0 -18
  48. data/ext/parquet/decoder.go +0 -59
  49. data/ext/parquet/decoder_test.go +0 -88
  50. data/ext/parquet/encoder.go +0 -27
  51. data/ext/parquet/encoder_test.go +0 -70
  52. data/ext/parquet/go.mod +0 -12
  53. data/ext/parquet/go.sum +0 -193
  54. data/ext/parquet/parquet.go +0 -78
  55. data/ext/parquet/parquet_test.go +0 -28
  56. data/ext/parquet/testdata/alltypes_plain.parquet +0 -0
  57. data/lib/feedx/format/parquet.rb +0 -102
  58. data/spec/feedx/cache/memory_spec.rb +0 -23
  59. data/spec/feedx/cache/value_spec.rb +0 -19
  60. data/spec/feedx/compression/gzip_spec.rb +0 -17
  61. data/spec/feedx/compression/none_spec.rb +0 -15
  62. data/spec/feedx/compression_spec.rb +0 -19
  63. data/spec/feedx/consumer_spec.rb +0 -49
  64. data/spec/feedx/format/abstract_spec.rb +0 -21
  65. data/spec/feedx/format/json_spec.rb +0 -27
  66. data/spec/feedx/format/parquet_spec.rb +0 -30
  67. data/spec/feedx/format/protobuf_spec.rb +0 -23
  68. data/spec/feedx/format_spec.rb +0 -21
  69. data/spec/feedx/producer_spec.rb +0 -74
  70. data/spec/feedx/stream_spec.rb +0 -109
  71. data/spec/spec_helper.rb +0 -57
data/feedx.go CHANGED
@@ -4,7 +4,6 @@ import (
4
4
  "context"
5
5
  "errors"
6
6
  "strconv"
7
- "time"
8
7
 
9
8
  "github.com/bsm/bfs"
10
9
  )
@@ -12,22 +11,9 @@ import (
12
11
  // ErrNotModified is used to signal that something has not been modified.
13
12
  var ErrNotModified = errors.New("feedx: not modified")
14
13
 
15
- const (
16
- metaLastModified = "X-Feedx-Last-Modified"
17
- metaPusherLastModified = "X-Feedx-Pusher-Last-Modified"
18
- )
19
-
20
- // Timestamp with millisecond resolution
21
- type timestamp int64
14
+ const metaVersion = "X-Feedx-Version"
22
15
 
23
- func timestampFromTime(t time.Time) timestamp {
24
- if n := t.Unix()*1000 + int64(t.Nanosecond()/1e6); n > 0 {
25
- return timestamp(n)
26
- }
27
- return 0
28
- }
29
-
30
- func remoteLastModified(ctx context.Context, obj *bfs.Object) (timestamp, error) {
16
+ func fetchRemoteVersion(ctx context.Context, obj *bfs.Object) (int64, error) {
31
17
  info, err := obj.Head(ctx)
32
18
  if err == bfs.ErrNotFound {
33
19
  return 0, nil
@@ -35,23 +21,22 @@ func remoteLastModified(ctx context.Context, obj *bfs.Object) (timestamp, error)
35
21
  return 0, err
36
22
  }
37
23
 
38
- millis, _ := strconv.ParseInt(info.Metadata.Get(metaLastModified), 10, 64)
39
- if millis == 0 {
40
- millis, _ = strconv.ParseInt(info.Metadata.Get(metaPusherLastModified), 10, 64)
41
- }
42
- return timestamp(millis), nil
24
+ version, _ := strconv.ParseInt(info.Metadata.Get(metaVersion), 10, 64)
25
+ return version, nil
43
26
  }
44
27
 
45
- // Millis returns the number of milliseconds since epoch.
46
- func (t timestamp) Millis() int64 { return int64(t) }
47
-
48
- // Time returns the time at t.
49
- func (t timestamp) Time() time.Time {
50
- n := t.Millis()
51
- return time.Unix(n/1000, n%1000*1e6)
28
+ // Status is returned by sync processes.
29
+ type Status struct {
30
+ // Skipped indicates the the sync was skipped, because there were no new changes.
31
+ Skipped bool
32
+ // LocalVersion indicates the local version before sync.
33
+ LocalVersion int64
34
+ // RemoteVersion indicates the remote version before sync.
35
+ RemoteVersion int64
36
+ // NumItems returns the number of items processed, either read of written.
37
+ NumItems int64
52
38
  }
53
39
 
54
- // String returns a string of milliseconds.
55
- func (t timestamp) String() string {
56
- return strconv.FormatInt(int64(t), 10)
40
+ func skipSync(srcVersion, targetVersion int64) bool {
41
+ return (srcVersion != 0 || targetVersion != 0) && srcVersion <= targetVersion
57
42
  }
data/feedx_ext_test.go CHANGED
@@ -1,6 +1,16 @@
1
1
  package feedx
2
2
 
3
- func (c *consumer) TestSync() error {
4
- _, err := c.sync(false)
5
- return err
3
+ import (
4
+ "context"
5
+
6
+ "github.com/bsm/bfs"
7
+ )
8
+
9
+ type NoFormat = noFormat
10
+
11
+ type Manifest manifest
12
+
13
+ func LoadManifest(ctx context.Context, obj *bfs.Object) (*Manifest, error) {
14
+ m, err := loadManifest(ctx, obj)
15
+ return (*Manifest)(m), err
6
16
  }
data/feedx_test.go CHANGED
@@ -2,28 +2,13 @@ package feedx_test
2
2
 
3
3
  import (
4
4
  "context"
5
- "net/url"
6
- "testing"
7
- "time"
5
+ "io"
8
6
 
9
7
  "github.com/bsm/bfs"
10
8
  "github.com/bsm/feedx"
11
9
  "github.com/bsm/feedx/internal/testdata"
12
- . "github.com/bsm/ginkgo"
13
- . "github.com/bsm/gomega"
14
10
  )
15
11
 
16
- var memStore *bfs.InMem
17
-
18
- func init() {
19
- memStore = bfs.NewInMem()
20
- bfs.Register("mem", func(_ context.Context, u *url.URL) (bfs.Bucket, error) {
21
- return memStore, nil
22
- })
23
- }
24
-
25
- // ------------------------------------------------------------------------
26
-
27
12
  func seed() *testdata.MockMessage {
28
13
  return &testdata.MockMessage{
29
14
  Name: "Joe",
@@ -32,12 +17,16 @@ func seed() *testdata.MockMessage {
32
17
  }
33
18
  }
34
19
 
35
- var mockTime = time.Unix(1515151515, 123456789)
36
-
37
- // ------------------------------------------------------------------------
20
+ func seedN(n int) []*testdata.MockMessage {
21
+ res := make([]*testdata.MockMessage, 0, n)
22
+ for i := 0; i < n; i++ {
23
+ res = append(res, seed())
24
+ }
25
+ return res
26
+ }
38
27
 
39
- func writeMulti(obj *bfs.Object, numEntries int, lastMod time.Time) error {
40
- w := feedx.NewWriter(context.Background(), obj, &feedx.WriterOptions{LastMod: lastMod})
28
+ func writeN(obj *bfs.Object, numEntries int, version int64) error {
29
+ w := feedx.NewWriter(context.Background(), obj, &feedx.WriterOptions{Version: version})
41
30
  defer w.Discard()
42
31
 
43
32
  for i := 0; i < numEntries; i++ {
@@ -48,9 +37,18 @@ func writeMulti(obj *bfs.Object, numEntries int, lastMod time.Time) error {
48
37
  return w.Commit()
49
38
  }
50
39
 
51
- // ------------------------------------------------------------------------
52
-
53
- func TestSuite(t *testing.T) {
54
- RegisterFailHandler(Fail)
55
- RunSpecs(t, "feedx")
40
+ func readMessages(r interface{ Decode(any) error }) ([]*testdata.MockMessage, error) {
41
+ var msgs []*testdata.MockMessage
42
+ for {
43
+ var msg testdata.MockMessage
44
+ err := r.Decode(&msg)
45
+ if err == io.EOF {
46
+ break
47
+ }
48
+ if err != nil {
49
+ return nil, err
50
+ }
51
+ msgs = append(msgs, &msg)
52
+ }
53
+ return msgs, nil
56
54
  }
data/format.go CHANGED
@@ -8,10 +8,8 @@ import (
8
8
  "path"
9
9
 
10
10
  "github.com/bsm/pbio"
11
+ "github.com/fxamacker/cbor/v2"
11
12
  "google.golang.org/protobuf/proto"
12
-
13
- gio "github.com/gogo/protobuf/io"
14
- gproto "github.com/gogo/protobuf/proto"
15
13
  )
16
14
 
17
15
  var errNoFormat = errors.New("feedx: no format detected")
@@ -29,10 +27,12 @@ type Format interface {
29
27
  func DetectFormat(name string) Format {
30
28
  ext := path.Ext(path.Base(name))
31
29
  switch ext {
32
- case ".json":
30
+ case ".json", ".ndjson":
33
31
  return JSONFormat
34
32
  case ".pb", ".proto", ".protobuf":
35
33
  return ProtobufFormat
34
+ case ".cbor":
35
+ return CBORFormat
36
36
  default:
37
37
  if name != "" && ext != "" && ext[0] == '.' {
38
38
  if ext[len(ext)-1] == 'z' {
@@ -112,11 +112,9 @@ func (protobufFormat) NewEncoder(w io.Writer) (FormatEncoder, error) {
112
112
  type protobufWrapper struct {
113
113
  r io.Reader
114
114
  dec *pbio.Decoder
115
- pbr gio.Reader
116
115
 
117
116
  w io.Writer
118
117
  enc *pbio.Encoder
119
- pbw gio.Writer
120
118
  }
121
119
 
122
120
  func (w *protobufWrapper) Decode(v interface{}) error {
@@ -126,13 +124,6 @@ func (w *protobufWrapper) Decode(v interface{}) error {
126
124
  w.dec = pbio.NewDecoder(w.r)
127
125
  }
128
126
  return w.dec.Decode(msg)
129
-
130
- case gproto.Message:
131
- if w.pbr == nil {
132
- w.pbr = gio.NewDelimitedReader(w.r, 1<<28)
133
- }
134
- return w.pbr.ReadMsg(msg)
135
-
136
127
  default:
137
128
  return fmt.Errorf("value %v (%T) is not a proto.Message", v, v)
138
129
  }
@@ -146,12 +137,6 @@ func (w *protobufWrapper) Encode(v interface{}) error {
146
137
  }
147
138
  return w.enc.Encode(msg)
148
139
 
149
- case gproto.Message:
150
- if w.pbw == nil {
151
- w.pbw = gio.NewDelimitedWriter(w.w)
152
- }
153
- return w.pbw.WriteMsg(msg)
154
-
155
140
  default:
156
141
  return fmt.Errorf("value %v (%T) is not a proto.Message", v, v)
157
142
  }
@@ -160,3 +145,28 @@ func (w *protobufWrapper) Encode(v interface{}) error {
160
145
  func (*protobufWrapper) Close() error {
161
146
  return nil
162
147
  }
148
+
149
+ // --------------------------------------------------------------------
150
+
151
+ // CBORFormat provides a Format implemention for CBOR.
152
+ var CBORFormat = cborFormat{}
153
+
154
+ type cborFormat struct{}
155
+
156
+ // NewDecoder implements Format.
157
+ func (cborFormat) NewDecoder(r io.Reader) (FormatDecoder, error) {
158
+ return cborDecoderWrapper{Decoder: cbor.NewDecoder(r)}, nil
159
+ }
160
+
161
+ // NewEncoder implements Format.
162
+ func (cborFormat) NewEncoder(w io.Writer) (FormatEncoder, error) {
163
+ return cborEncoderWrapper{Encoder: cbor.NewEncoder(w)}, nil
164
+ }
165
+
166
+ type cborDecoderWrapper struct{ *cbor.Decoder }
167
+
168
+ func (cborDecoderWrapper) Close() error { return nil }
169
+
170
+ type cborEncoderWrapper struct{ *cbor.Encoder }
171
+
172
+ func (cborEncoderWrapper) Close() error { return nil }
data/format_test.go CHANGED
@@ -2,75 +2,103 @@ package feedx_test
2
2
 
3
3
  import (
4
4
  "bytes"
5
+ "errors"
5
6
  "io"
7
+ "testing"
6
8
 
7
9
  "github.com/bsm/feedx"
8
10
  "github.com/bsm/feedx/internal/testdata"
9
- . "github.com/bsm/ginkgo"
10
- . "github.com/bsm/gomega"
11
11
  )
12
12
 
13
- var _ = Describe("Format", func() {
14
- runSharedTest := func(subject feedx.Format) {
15
- buf := new(bytes.Buffer)
16
-
17
- enc, err := subject.NewEncoder(buf)
18
- Expect(err).NotTo(HaveOccurred())
19
- defer enc.Close()
20
-
21
- Expect(enc.Encode(seed())).To(Succeed())
22
- Expect(enc.Encode(seed())).To(Succeed())
23
- Expect(enc.Close()).To(Succeed())
24
-
25
- dec, err := subject.NewDecoder(buf)
26
- Expect(err).NotTo(HaveOccurred())
27
- defer dec.Close()
28
-
29
- v1 := new(testdata.MockMessage)
30
- Expect(dec.Decode(v1)).To(Succeed())
31
- Expect(v1.Name).To(Equal("Joe"))
13
+ func TestDetectFormat(t *testing.T) {
14
+ examples := []struct {
15
+ Input string
16
+ Exp feedx.Format
17
+ }{
18
+ {Input: "/path/to/file.json", Exp: feedx.JSONFormat},
19
+ {Input: "/path/to/file.json.gz", Exp: feedx.JSONFormat},
20
+ {Input: "/path/to/file.json.flate", Exp: feedx.JSONFormat},
21
+ {Input: "/path/to/file.jsonz", Exp: feedx.JSONFormat},
22
+
23
+ {Input: "/path/to/file.pb", Exp: feedx.ProtobufFormat},
24
+ {Input: "/path/to/file.pb.gz", Exp: feedx.ProtobufFormat},
25
+ {Input: "/path/to/file.pb.flate", Exp: feedx.ProtobufFormat},
26
+ {Input: "/path/to/file.pbz", Exp: feedx.ProtobufFormat},
27
+
28
+ {Input: "/path/to/file.cbor", Exp: feedx.CBORFormat},
29
+ {Input: "/path/to/file.cbor.gz", Exp: feedx.CBORFormat},
30
+ {Input: "/path/to/file.cbor.flate", Exp: feedx.CBORFormat},
31
+ {Input: "/path/to/file.cborz", Exp: feedx.CBORFormat},
32
+
33
+ {Input: "", Exp: (*feedx.NoFormat)(nil)},
34
+ {Input: "/path/to/file", Exp: (*feedx.NoFormat)(nil)},
35
+ {Input: "/path/to/file.txt", Exp: (*feedx.NoFormat)(nil)},
36
+ }
37
+ for _, x := range examples {
38
+ if got := feedx.DetectFormat(x.Input); got != x.Exp {
39
+ t.Errorf("expected %s for %q, but got %s", x.Exp, x.Input, got)
40
+ }
41
+ }
42
+ }
32
43
 
33
- v2 := new(testdata.MockMessage)
34
- Expect(dec.Decode(v2)).To(Succeed())
35
- Expect(v2.Name).To(Equal("Joe"))
44
+ func TestFormat(t *testing.T) {
45
+ t.Run("json", func(t *testing.T) {
46
+ testFormat(t, feedx.JSONFormat)
47
+ })
48
+ t.Run("protobuf", func(t *testing.T) {
49
+ testFormat(t, feedx.ProtobufFormat)
50
+ })
51
+ t.Run("cbor", func(t *testing.T) {
52
+ testFormat(t, feedx.CBORFormat)
53
+ })
54
+ }
36
55
 
37
- v3 := new(testdata.MockMessage)
38
- Expect(dec.Decode(v3)).To(MatchError(io.EOF))
56
+ func testFormat(t *testing.T, f feedx.Format) {
57
+ t.Helper()
39
58
 
40
- Expect(dec.Close()).To(Succeed())
59
+ buf := new(bytes.Buffer)
60
+ enc, err := f.NewEncoder(buf)
61
+ if err != nil {
62
+ t.Fatal("expected no error, got", err)
41
63
  }
64
+ defer func() { _ = enc.Close() }()
42
65
 
43
- It("detects the format", func() {
44
- Expect(feedx.DetectFormat("/path/to/file.json")).To(Equal(feedx.JSONFormat))
45
- Expect(feedx.DetectFormat("/path/to/file.json.gz")).To(Equal(feedx.JSONFormat))
46
- Expect(feedx.DetectFormat("/path/to/file.json.flate")).To(Equal(feedx.JSONFormat))
47
- Expect(feedx.DetectFormat("/path/to/file.jsonz")).To(Equal(feedx.JSONFormat))
48
-
49
- Expect(feedx.DetectFormat("/path/to/file.pb")).To(Equal(feedx.ProtobufFormat))
50
- Expect(feedx.DetectFormat("/path/to/file.pb.gz")).To(Equal(feedx.ProtobufFormat))
51
- Expect(feedx.DetectFormat("/path/to/file.pb.flate")).To(Equal(feedx.ProtobufFormat))
52
- Expect(feedx.DetectFormat("/path/to/file.pbz")).To(Equal(feedx.ProtobufFormat))
66
+ if err := enc.Encode(seed()); err != nil {
67
+ t.Fatal("expected no error, got", err)
68
+ }
69
+ if err := enc.Encode(seed()); err != nil {
70
+ t.Fatal("expected no error, got", err)
71
+ }
72
+ if err := enc.Close(); err != nil {
73
+ t.Fatal("expected no error, got", err)
74
+ }
53
75
 
54
- Expect(feedx.DetectFormat("")).To(BeNil())
55
- Expect(feedx.DetectFormat("/path/to/file")).To(BeNil())
56
- Expect(feedx.DetectFormat("/path/to/file.txt")).To(BeNil())
57
- })
76
+ dec, err := f.NewDecoder(buf)
77
+ if err != nil {
78
+ t.Fatal("expected no error, got", err)
79
+ }
80
+ defer func() { _ = dec.Close() }()
58
81
 
59
- Describe("JSONFormat", func() {
60
- var subject = feedx.JSONFormat
61
- var _ feedx.Format = subject
82
+ v1 := new(testdata.MockMessage)
83
+ if err := dec.Decode(v1); err != nil {
84
+ t.Fatal("expected no error, got", err)
85
+ } else if exp, got := "Joe", v1.Name; exp != got {
86
+ t.Errorf("expected %q, got %q", exp, got)
87
+ }
62
88
 
63
- It("encodes/decodes", func() {
64
- runSharedTest(subject)
65
- })
66
- })
89
+ v2 := new(testdata.MockMessage)
90
+ if err := dec.Decode(v2); err != nil {
91
+ t.Fatal("expected no error, got", err)
92
+ } else if exp, got := "Joe", v2.Name; exp != got {
93
+ t.Errorf("expected %q, got %q", exp, got)
94
+ }
67
95
 
68
- Describe("ProtobufFormat", func() {
69
- var subject = feedx.ProtobufFormat
70
- var _ feedx.Format = subject
96
+ v3 := new(testdata.MockMessage)
97
+ if err := dec.Decode(v3); !errors.Is(err, io.EOF) {
98
+ t.Error("expected EOF, got", err)
99
+ }
71
100
 
72
- It("encodes/decodes", func() {
73
- runSharedTest(subject)
74
- })
75
- })
76
- })
101
+ if err := dec.Close(); err != nil {
102
+ t.Fatal("expected no error, got", err)
103
+ }
104
+ }
data/go.mod CHANGED
@@ -1,13 +1,17 @@
1
1
  module github.com/bsm/feedx
2
2
 
3
- go 1.15
3
+ go 1.25
4
4
 
5
5
  require (
6
- github.com/bsm/bfs v0.11.5
7
- github.com/bsm/ginkgo v1.16.5
8
- github.com/bsm/gomega v1.17.0
9
- github.com/bsm/pbio v0.3.0
10
- github.com/gogo/protobuf v1.3.2
6
+ github.com/bsm/bfs v0.12.2
7
+ github.com/bsm/pbio v0.4.0
8
+ github.com/fxamacker/cbor/v2 v2.9.0
11
9
  github.com/golang/protobuf v1.5.2
12
- google.golang.org/protobuf v1.27.1
10
+ github.com/klauspost/compress v1.18.1
11
+ google.golang.org/protobuf v1.36.10
12
+ )
13
+
14
+ require (
15
+ github.com/bmatcuk/doublestar/v4 v4.9.1 // indirect
16
+ github.com/x448/float16 v0.8.4 // indirect
13
17
  )
data/go.sum CHANGED
@@ -1,145 +1,23 @@
1
- cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
2
- github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
3
- github.com/bmatcuk/doublestar/v3 v3.0.0 h1:TQtVPlDnAYwcrVNB2JiGuMc++H5qzWZd9PhkNo5WyHI=
4
- github.com/bmatcuk/doublestar/v3 v3.0.0/go.mod h1:6PcTVMw80pCY1RVuoqu3V++99uQB3vsSYKPTd8AWA0k=
5
- github.com/bsm/bfs v0.11.5 h1:NMWD0hOp/74boNd51Zas4DMh81mvp1As1SjEZrFWHi0=
6
- github.com/bsm/bfs v0.11.5/go.mod h1:D2N+ly23VsODKiRvkf4HUgKSgOaNjKTOJE53rhL6Vfk=
7
- github.com/bsm/ginkgo v1.16.4/go.mod h1:RabIZLzOCPghgHJKUqHZpqrQETA5AnF4aCSIYy5C1bk=
8
- github.com/bsm/ginkgo v1.16.5 h1:uTeeWv0Yx1PnDeCk76PFyGrOMVw3D+r9bTNKNcIjDdQ=
9
- github.com/bsm/ginkgo v1.16.5/go.mod h1:RabIZLzOCPghgHJKUqHZpqrQETA5AnF4aCSIYy5C1bk=
10
- github.com/bsm/gomega v1.16.0/go.mod h1:JifAceMQ4crZIWYUKrlGcmbN3bqHogVTADMD2ATsbwk=
11
- github.com/bsm/gomega v1.17.0 h1:Sd6EsHO5d0DU6d41dtx9cK3T7Vjsr89o6zyIVWgi0CI=
12
- github.com/bsm/gomega v1.17.0/go.mod h1:JifAceMQ4crZIWYUKrlGcmbN3bqHogVTADMD2ATsbwk=
13
- github.com/bsm/pbio v0.3.0 h1:8XzkUPoJZblPkLp2jHVMnIhGs5WaNHTCmO7gRC45izk=
14
- github.com/bsm/pbio v0.3.0/go.mod h1:3O4XQFoarlYalkGd+zMFfEUyalP8NBKkQ0Ta4IwhN4w=
15
- github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
16
- github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
17
- github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
18
- github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
19
- github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
20
- github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
21
- github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
22
- github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
23
- github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
24
- github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
25
- github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
26
- github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
27
- github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
28
- github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
29
- github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
30
- github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
31
- github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
32
- github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
33
- github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
34
- github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
1
+ github.com/bmatcuk/doublestar/v4 v4.9.1 h1:X8jg9rRZmJd4yRy7ZeNDRnM+T3ZfHv15JiBJ/avrEXE=
2
+ github.com/bmatcuk/doublestar/v4 v4.9.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
3
+ github.com/bsm/bfs v0.12.2 h1:gvewfnOJdcD3m46/bGg8DOBGPH65lX3MkpfDl7m938M=
4
+ github.com/bsm/bfs v0.12.2/go.mod h1:ris96jQ0WkWwW6HSYA0FjqLgjhILCF1qshZhQMRzI0s=
5
+ github.com/bsm/pbio v0.4.0 h1:exmKhE8gpCeubJ0rzRjq6c6ubqjyl9sqYc5ABDZ9/Xg=
6
+ github.com/bsm/pbio v0.4.0/go.mod h1:vR1REwD+VjtNR3afI5eGFxNKnX2bmMD0t6993ZgpZ/E=
7
+ github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
8
+ github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
35
9
  github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
36
10
  github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
37
11
  github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
38
- github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
39
- github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
40
- github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
41
- github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
42
- github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
43
- github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
44
12
  github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
45
- github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
46
- github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
47
- github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
48
- github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
49
- github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
50
- github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
51
- github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
52
- github.com/onsi/ginkgo v1.14.1 h1:jMU0WaQrP0a/YAEq8eJmJKjBoMs+pClEr1vDMlM/Do4=
53
- github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
54
- github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
55
- github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
56
- github.com/onsi/gomega v1.10.2 h1:aY/nuoWlKJud2J6U0E3NWsjlg+0GtwXxgEqthRdzlcs=
57
- github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
58
- github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
59
- github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
60
- github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
61
- golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
62
- golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
63
- golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
64
- golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
65
- golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
66
- golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
67
- golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
68
- golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
69
- golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
70
- golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
71
- golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
72
- golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
73
- golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
74
- golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
75
- golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
76
- golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
77
- golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
78
- golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
79
- golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI=
80
- golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
81
- golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
82
- golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
83
- golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
84
- golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
85
- golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
86
- golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
87
- golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
88
- golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
89
- golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
90
- golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
91
- golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
92
- golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
93
- golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
94
- golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
95
- golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
96
- golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
97
- golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
98
- golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
99
- golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
100
- golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
101
- golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
102
- golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
103
- golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
104
- golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
105
- golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
106
- golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
107
- golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
108
- golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
109
- golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
110
- golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
111
- golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
13
+ github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
14
+ github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
15
+ github.com/klauspost/compress v1.18.1 h1:bcSGx7UbpBqMChDtsF28Lw6v/G94LPrrbMbdC3JH2co=
16
+ github.com/klauspost/compress v1.18.1/go.mod h1:ZQFFVG+MdnR0P+l6wpXgIL4NTtwiKIdBnrBd8Nrxr+0=
17
+ github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
18
+ github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
112
19
  golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
113
- golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
114
- golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
115
- google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
116
- google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
117
- google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
118
- google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
119
- google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
120
- google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
121
- google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
122
- google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
123
- google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
124
- google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
125
- google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
126
- google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
127
- google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
128
- google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
129
- google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
130
- google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
131
- google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
132
20
  google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
133
21
  google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
134
- google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
135
- google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
136
- gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
137
- gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
138
- gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
139
- gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
140
- gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
141
- gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
142
- gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
143
- gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
144
- honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
145
- honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
22
+ google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
23
+ google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=